diff --git a/BUILD b/BUILD
index 4dfa5f71123..d9c99b46ab8 100644
--- a/BUILD
+++ b/BUILD
@@ -2918,12 +2918,12 @@ grpc_cc_library(
)
grpc_cc_library(
- name = "server_address",
+ name = "endpoint_addresses",
srcs = [
- "//src/core:lib/resolver/server_address.cc",
+ "//src/core:lib/resolver/endpoint_addresses.cc",
],
hdrs = [
- "//src/core:lib/resolver/server_address.h",
+ "//src/core:lib/resolver/endpoint_addresses.h",
],
external_deps = [
"absl/status",
@@ -2933,6 +2933,7 @@ grpc_cc_library(
language = "c++",
visibility = ["@grpc:client_channel"],
deps = [
+ "gpr",
"gpr_platform",
"sockaddr_utils",
"//src/core:channel_args",
@@ -2941,6 +2942,19 @@ grpc_cc_library(
],
)
+grpc_cc_library(
+ name = "server_address",
+ hdrs = [
+ "//src/core:lib/resolver/server_address.h",
+ ],
+ language = "c++",
+ visibility = ["@grpc:client_channel"],
+ deps = [
+ "endpoint_addresses",
+ "gpr_public_hdrs",
+ ],
+)
+
grpc_cc_library(
name = "grpc_resolver",
srcs = [
@@ -2961,11 +2975,11 @@ grpc_cc_library(
language = "c++",
visibility = ["@grpc:client_channel"],
deps = [
+ "endpoint_addresses",
"gpr",
"grpc_trace",
"orphanable",
"ref_counted_ptr",
- "server_address",
"uri_parser",
"//src/core:channel_args",
"//src/core:grpc_service_config",
@@ -3050,6 +3064,7 @@ grpc_cc_library(
"config",
"config_vars",
"debug_location",
+ "endpoint_addresses",
"exec_ctx",
"gpr",
"grpc_base",
@@ -3066,7 +3081,6 @@ grpc_cc_library(
"promise",
"protobuf_duration_upb",
"ref_counted_ptr",
- "server_address",
"sockaddr_utils",
"stats",
"uri_parser",
@@ -3164,6 +3178,7 @@ grpc_cc_library(
"config",
"config_vars",
"debug_location",
+ "endpoint_addresses",
"exec_ctx",
"gpr",
"grpc_base",
@@ -3175,7 +3190,6 @@ grpc_cc_library(
"orphanable",
"parse_address",
"ref_counted_ptr",
- "server_address",
"sockaddr_utils",
"uri_parser",
"//src/core:channel_args",
@@ -3618,9 +3632,9 @@ grpc_cc_library(
language = "c++",
visibility = ["@grpc:grpclb"],
deps = [
+ "endpoint_addresses",
"gpr_platform",
"grpc_public_hdrs",
- "server_address",
"//src/core:channel_args",
"//src/core:useful",
],
@@ -3738,12 +3752,12 @@ grpc_cc_library(
deps = [
"config",
"debug_location",
+ "endpoint_addresses",
"gpr",
"grpc_public_hdrs",
"grpc_resolver",
"orphanable",
"ref_counted_ptr",
- "server_address",
"uri_parser",
"work_serializer",
"//src/core:channel_args",
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c91418743bf..939cda6e6e8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2352,9 +2352,9 @@ add_library(grpc
src/core/lib/promise/party.cc
src/core/lib/promise/sleep.cc
src/core/lib/promise/trace.cc
+ src/core/lib/resolver/endpoint_addresses.cc
src/core/lib/resolver/resolver.cc
src/core/lib/resolver/resolver_registry.cc
- src/core/lib/resolver/server_address.cc
src/core/lib/resource_quota/api.cc
src/core/lib/resource_quota/arena.cc
src/core/lib/resource_quota/memory_quota.cc
@@ -3065,9 +3065,9 @@ add_library(grpc_unsecure
src/core/lib/promise/party.cc
src/core/lib/promise/sleep.cc
src/core/lib/promise/trace.cc
+ src/core/lib/resolver/endpoint_addresses.cc
src/core/lib/resolver/resolver.cc
src/core/lib/resolver/resolver_registry.cc
- src/core/lib/resolver/server_address.cc
src/core/lib/resource_quota/api.cc
src/core/lib/resource_quota/arena.cc
src/core/lib/resource_quota/memory_quota.cc
@@ -5005,9 +5005,9 @@ add_library(grpc_authorization_provider
src/core/lib/promise/activity.cc
src/core/lib/promise/party.cc
src/core/lib/promise/trace.cc
+ src/core/lib/resolver/endpoint_addresses.cc
src/core/lib/resolver/resolver.cc
src/core/lib/resolver/resolver_registry.cc
- src/core/lib/resolver/server_address.cc
src/core/lib/resource_quota/api.cc
src/core/lib/resource_quota/arena.cc
src/core/lib/resource_quota/memory_quota.cc
@@ -24041,9 +24041,9 @@ add_executable(test_core_transport_chaotic_good_frame_test
src/core/lib/promise/activity.cc
src/core/lib/promise/party.cc
src/core/lib/promise/trace.cc
+ src/core/lib/resolver/endpoint_addresses.cc
src/core/lib/resolver/resolver.cc
src/core/lib/resolver/resolver_registry.cc
- src/core/lib/resolver/server_address.cc
src/core/lib/resource_quota/api.cc
src/core/lib/resource_quota/arena.cc
src/core/lib/resource_quota/memory_quota.cc
diff --git a/Makefile b/Makefile
index e9e56ab1e3d..81383098a4e 100644
--- a/Makefile
+++ b/Makefile
@@ -1579,9 +1579,9 @@ LIBGRPC_SRC = \
src/core/lib/promise/party.cc \
src/core/lib/promise/sleep.cc \
src/core/lib/promise/trace.cc \
+ src/core/lib/resolver/endpoint_addresses.cc \
src/core/lib/resolver/resolver.cc \
src/core/lib/resolver/resolver_registry.cc \
- src/core/lib/resolver/server_address.cc \
src/core/lib/resource_quota/api.cc \
src/core/lib/resource_quota/arena.cc \
src/core/lib/resource_quota/memory_quota.cc \
@@ -2144,9 +2144,9 @@ LIBGRPC_UNSECURE_SRC = \
src/core/lib/promise/party.cc \
src/core/lib/promise/sleep.cc \
src/core/lib/promise/trace.cc \
+ src/core/lib/resolver/endpoint_addresses.cc \
src/core/lib/resolver/resolver.cc \
src/core/lib/resolver/resolver_registry.cc \
- src/core/lib/resolver/server_address.cc \
src/core/lib/resource_quota/api.cc \
src/core/lib/resource_quota/arena.cc \
src/core/lib/resource_quota/memory_quota.cc \
diff --git a/Package.swift b/Package.swift
index 70d7105c703..8dfd76a7fc2 100644
--- a/Package.swift
+++ b/Package.swift
@@ -1474,12 +1474,13 @@ let package = Package(
"src/core/lib/promise/trace.cc",
"src/core/lib/promise/trace.h",
"src/core/lib/promise/try_seq.h",
+ "src/core/lib/resolver/endpoint_addresses.cc",
+ "src/core/lib/resolver/endpoint_addresses.h",
"src/core/lib/resolver/resolver.cc",
"src/core/lib/resolver/resolver.h",
"src/core/lib/resolver/resolver_factory.h",
"src/core/lib/resolver/resolver_registry.cc",
"src/core/lib/resolver/resolver_registry.h",
- "src/core/lib/resolver/server_address.cc",
"src/core/lib/resolver/server_address.h",
"src/core/lib/resource_quota/api.cc",
"src/core/lib/resource_quota/api.h",
diff --git a/build_autogenerated.yaml b/build_autogenerated.yaml
index a6827621e42..f689ec76e54 100644
--- a/build_autogenerated.yaml
+++ b/build_autogenerated.yaml
@@ -879,6 +879,7 @@ libs:
- src/core/lib/promise/sleep.h
- src/core/lib/promise/trace.h
- src/core/lib/promise/try_seq.h
+ - src/core/lib/resolver/endpoint_addresses.h
- src/core/lib/resolver/resolver.h
- src/core/lib/resolver/resolver_factory.h
- src/core/lib/resolver/resolver_registry.h
@@ -1655,9 +1656,9 @@ libs:
- src/core/lib/promise/party.cc
- src/core/lib/promise/sleep.cc
- src/core/lib/promise/trace.cc
+ - src/core/lib/resolver/endpoint_addresses.cc
- src/core/lib/resolver/resolver.cc
- src/core/lib/resolver/resolver_registry.cc
- - src/core/lib/resolver/server_address.cc
- src/core/lib/resource_quota/api.cc
- src/core/lib/resource_quota/arena.cc
- src/core/lib/resource_quota/memory_quota.cc
@@ -2290,6 +2291,7 @@ libs:
- src/core/lib/promise/sleep.h
- src/core/lib/promise/trace.h
- src/core/lib/promise/try_seq.h
+ - src/core/lib/resolver/endpoint_addresses.h
- src/core/lib/resolver/resolver.h
- src/core/lib/resolver/resolver_factory.h
- src/core/lib/resolver/resolver_registry.h
@@ -2682,9 +2684,9 @@ libs:
- src/core/lib/promise/party.cc
- src/core/lib/promise/sleep.cc
- src/core/lib/promise/trace.cc
+ - src/core/lib/resolver/endpoint_addresses.cc
- src/core/lib/resolver/resolver.cc
- src/core/lib/resolver/resolver_registry.cc
- - src/core/lib/resolver/server_address.cc
- src/core/lib/resource_quota/api.cc
- src/core/lib/resource_quota/arena.cc
- src/core/lib/resource_quota/memory_quota.cc
@@ -4297,10 +4299,10 @@ libs:
- src/core/lib/promise/seq.h
- src/core/lib/promise/trace.h
- src/core/lib/promise/try_seq.h
+ - src/core/lib/resolver/endpoint_addresses.h
- src/core/lib/resolver/resolver.h
- src/core/lib/resolver/resolver_factory.h
- src/core/lib/resolver/resolver_registry.h
- - src/core/lib/resolver/server_address.h
- src/core/lib/resource_quota/api.h
- src/core/lib/resource_quota/arena.h
- src/core/lib/resource_quota/memory_quota.h
@@ -4572,9 +4574,9 @@ libs:
- src/core/lib/promise/activity.cc
- src/core/lib/promise/party.cc
- src/core/lib/promise/trace.cc
+ - src/core/lib/resolver/endpoint_addresses.cc
- src/core/lib/resolver/resolver.cc
- src/core/lib/resolver/resolver_registry.cc
- - src/core/lib/resolver/server_address.cc
- src/core/lib/resource_quota/api.cc
- src/core/lib/resource_quota/arena.cc
- src/core/lib/resource_quota/memory_quota.cc
@@ -15855,10 +15857,10 @@ targets:
- src/core/lib/promise/seq.h
- src/core/lib/promise/trace.h
- src/core/lib/promise/try_seq.h
+ - src/core/lib/resolver/endpoint_addresses.h
- src/core/lib/resolver/resolver.h
- src/core/lib/resolver/resolver_factory.h
- src/core/lib/resolver/resolver_registry.h
- - src/core/lib/resolver/server_address.h
- src/core/lib/resource_quota/api.h
- src/core/lib/resource_quota/arena.h
- src/core/lib/resource_quota/memory_quota.h
@@ -16112,9 +16114,9 @@ targets:
- src/core/lib/promise/activity.cc
- src/core/lib/promise/party.cc
- src/core/lib/promise/trace.cc
+ - src/core/lib/resolver/endpoint_addresses.cc
- src/core/lib/resolver/resolver.cc
- src/core/lib/resolver/resolver_registry.cc
- - src/core/lib/resolver/server_address.cc
- src/core/lib/resource_quota/api.cc
- src/core/lib/resource_quota/arena.cc
- src/core/lib/resource_quota/memory_quota.cc
diff --git a/config.m4 b/config.m4
index c2f03d2b4db..f206edf5c0c 100644
--- a/config.m4
+++ b/config.m4
@@ -712,9 +712,9 @@ if test "$PHP_GRPC" != "no"; then
src/core/lib/promise/party.cc \
src/core/lib/promise/sleep.cc \
src/core/lib/promise/trace.cc \
+ src/core/lib/resolver/endpoint_addresses.cc \
src/core/lib/resolver/resolver.cc \
src/core/lib/resolver/resolver_registry.cc \
- src/core/lib/resolver/server_address.cc \
src/core/lib/resource_quota/api.cc \
src/core/lib/resource_quota/arena.cc \
src/core/lib/resource_quota/memory_quota.cc \
diff --git a/config.w32 b/config.w32
index 25e49a76910..34136004e7f 100644
--- a/config.w32
+++ b/config.w32
@@ -677,9 +677,9 @@ if (PHP_GRPC != "no") {
"src\\core\\lib\\promise\\party.cc " +
"src\\core\\lib\\promise\\sleep.cc " +
"src\\core\\lib\\promise\\trace.cc " +
+ "src\\core\\lib\\resolver\\endpoint_addresses.cc " +
"src\\core\\lib\\resolver\\resolver.cc " +
"src\\core\\lib\\resolver\\resolver_registry.cc " +
- "src\\core\\lib\\resolver\\server_address.cc " +
"src\\core\\lib\\resource_quota\\api.cc " +
"src\\core\\lib\\resource_quota\\arena.cc " +
"src\\core\\lib\\resource_quota\\memory_quota.cc " +
diff --git a/gRPC-C++.podspec b/gRPC-C++.podspec
index 5dbd9d50e05..667c4809427 100644
--- a/gRPC-C++.podspec
+++ b/gRPC-C++.podspec
@@ -976,6 +976,7 @@ Pod::Spec.new do |s|
'src/core/lib/promise/sleep.h',
'src/core/lib/promise/trace.h',
'src/core/lib/promise/try_seq.h',
+ 'src/core/lib/resolver/endpoint_addresses.h',
'src/core/lib/resolver/resolver.h',
'src/core/lib/resolver/resolver_factory.h',
'src/core/lib/resolver/resolver_registry.h',
@@ -2045,6 +2046,7 @@ Pod::Spec.new do |s|
'src/core/lib/promise/sleep.h',
'src/core/lib/promise/trace.h',
'src/core/lib/promise/try_seq.h',
+ 'src/core/lib/resolver/endpoint_addresses.h',
'src/core/lib/resolver/resolver.h',
'src/core/lib/resolver/resolver_factory.h',
'src/core/lib/resolver/resolver_registry.h',
diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec
index 8042f085bfe..ba481d8efe6 100644
--- a/gRPC-Core.podspec
+++ b/gRPC-Core.podspec
@@ -1577,12 +1577,13 @@ Pod::Spec.new do |s|
'src/core/lib/promise/trace.cc',
'src/core/lib/promise/trace.h',
'src/core/lib/promise/try_seq.h',
+ 'src/core/lib/resolver/endpoint_addresses.cc',
+ 'src/core/lib/resolver/endpoint_addresses.h',
'src/core/lib/resolver/resolver.cc',
'src/core/lib/resolver/resolver.h',
'src/core/lib/resolver/resolver_factory.h',
'src/core/lib/resolver/resolver_registry.cc',
'src/core/lib/resolver/resolver_registry.h',
- 'src/core/lib/resolver/server_address.cc',
'src/core/lib/resolver/server_address.h',
'src/core/lib/resource_quota/api.cc',
'src/core/lib/resource_quota/api.h',
@@ -2796,6 +2797,7 @@ Pod::Spec.new do |s|
'src/core/lib/promise/sleep.h',
'src/core/lib/promise/trace.h',
'src/core/lib/promise/try_seq.h',
+ 'src/core/lib/resolver/endpoint_addresses.h',
'src/core/lib/resolver/resolver.h',
'src/core/lib/resolver/resolver_factory.h',
'src/core/lib/resolver/resolver_registry.h',
diff --git a/grpc.gemspec b/grpc.gemspec
index 185591a3cd9..ae7c2799e79 100644
--- a/grpc.gemspec
+++ b/grpc.gemspec
@@ -1480,12 +1480,13 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/promise/trace.cc )
s.files += %w( src/core/lib/promise/trace.h )
s.files += %w( src/core/lib/promise/try_seq.h )
+ s.files += %w( src/core/lib/resolver/endpoint_addresses.cc )
+ s.files += %w( src/core/lib/resolver/endpoint_addresses.h )
s.files += %w( src/core/lib/resolver/resolver.cc )
s.files += %w( src/core/lib/resolver/resolver.h )
s.files += %w( src/core/lib/resolver/resolver_factory.h )
s.files += %w( src/core/lib/resolver/resolver_registry.cc )
s.files += %w( src/core/lib/resolver/resolver_registry.h )
- s.files += %w( src/core/lib/resolver/server_address.cc )
s.files += %w( src/core/lib/resolver/server_address.h )
s.files += %w( src/core/lib/resource_quota/api.cc )
s.files += %w( src/core/lib/resource_quota/api.h )
diff --git a/grpc.gyp b/grpc.gyp
index 1a51da59d51..724c15b39d8 100644
--- a/grpc.gyp
+++ b/grpc.gyp
@@ -897,9 +897,9 @@
'src/core/lib/promise/party.cc',
'src/core/lib/promise/sleep.cc',
'src/core/lib/promise/trace.cc',
+ 'src/core/lib/resolver/endpoint_addresses.cc',
'src/core/lib/resolver/resolver.cc',
'src/core/lib/resolver/resolver_registry.cc',
- 'src/core/lib/resolver/server_address.cc',
'src/core/lib/resource_quota/api.cc',
'src/core/lib/resource_quota/arena.cc',
'src/core/lib/resource_quota/memory_quota.cc',
@@ -1404,9 +1404,9 @@
'src/core/lib/promise/party.cc',
'src/core/lib/promise/sleep.cc',
'src/core/lib/promise/trace.cc',
+ 'src/core/lib/resolver/endpoint_addresses.cc',
'src/core/lib/resolver/resolver.cc',
'src/core/lib/resolver/resolver_registry.cc',
- 'src/core/lib/resolver/server_address.cc',
'src/core/lib/resource_quota/api.cc',
'src/core/lib/resource_quota/arena.cc',
'src/core/lib/resource_quota/memory_quota.cc',
@@ -2139,9 +2139,9 @@
'src/core/lib/promise/activity.cc',
'src/core/lib/promise/party.cc',
'src/core/lib/promise/trace.cc',
+ 'src/core/lib/resolver/endpoint_addresses.cc',
'src/core/lib/resolver/resolver.cc',
'src/core/lib/resolver/resolver_registry.cc',
- 'src/core/lib/resolver/server_address.cc',
'src/core/lib/resource_quota/api.cc',
'src/core/lib/resource_quota/arena.cc',
'src/core/lib/resource_quota/memory_quota.cc',
diff --git a/package.xml b/package.xml
index 6042f2af22f..14109884828 100644
--- a/package.xml
+++ b/package.xml
@@ -1462,12 +1462,13 @@
+
+
-
diff --git a/src/core/BUILD b/src/core/BUILD
index ac454185d5e..21b7111aaf6 100644
--- a/src/core/BUILD
+++ b/src/core/BUILD
@@ -2763,8 +2763,10 @@ grpc_cc_library(
"iomgr_fwd",
"pollset_set",
"ref_counted",
+ "resolved_address",
"subchannel_interface",
"//:debug_location",
+ "//:endpoint_addresses",
"//:event_engine_base_hdrs",
"//:exec_ctx",
"//:gpr",
@@ -2772,7 +2774,6 @@ grpc_cc_library(
"//:grpc_trace",
"//:orphanable",
"//:ref_counted_ptr",
- "//:server_address",
"//:work_serializer",
],
)
@@ -2836,13 +2837,13 @@ grpc_cc_library(
deps = [
"channel_args",
"lb_policy",
+ "resolved_address",
"subchannel_interface",
"//:debug_location",
"//:event_engine_base_hdrs",
"//:gpr_platform",
"//:grpc_security_base",
"//:ref_counted_ptr",
- "//:server_address",
],
)
@@ -4062,6 +4063,7 @@ grpc_cc_library(
"//:channel_stack_builder",
"//:config",
"//:debug_location",
+ "//:endpoint_addresses",
"//:exec_ctx",
"//:gpr",
"//:grpc_base",
@@ -4077,7 +4079,6 @@ grpc_cc_library(
"//:protobuf_duration_upb",
"//:protobuf_timestamp_upb",
"//:ref_counted_ptr",
- "//:server_address",
"//:sockaddr_utils",
"//:work_serializer",
],
@@ -4156,6 +4157,7 @@ grpc_cc_library(
"//:channel_arg_names",
"//:config",
"//:debug_location",
+ "//:endpoint_addresses",
"//:exec_ctx",
"//:gpr",
"//:grpc_base",
@@ -4168,7 +4170,6 @@ grpc_cc_library(
"//:orphanable",
"//:ref_counted_ptr",
"//:rls_upb",
- "//:server_address",
"//:work_serializer",
],
)
@@ -4362,6 +4363,7 @@ grpc_cc_library(
"//:channel_arg_names",
"//:config",
"//:debug_location",
+ "//:endpoint_addresses",
"//:exec_ctx",
"//:gpr",
"//:grpc_base",
@@ -4374,7 +4376,6 @@ grpc_cc_library(
"//:orphanable",
"//:parse_address",
"//:ref_counted_ptr",
- "//:server_address",
"//:sockaddr_utils",
"//:tsi_ssl_credentials",
"//:uri_parser",
@@ -4528,8 +4529,8 @@ grpc_cc_library(
],
language = "c++",
deps = [
+ "//:endpoint_addresses",
"//:gpr_platform",
- "//:server_address",
],
)
@@ -4565,6 +4566,7 @@ grpc_cc_library(
"//:channel_arg_names",
"//:config",
"//:debug_location",
+ "//:endpoint_addresses",
"//:gpr",
"//:grpc_base",
"//:grpc_client_channel",
@@ -4573,7 +4575,6 @@ grpc_cc_library(
"//:grpc_trace",
"//:orphanable",
"//:ref_counted_ptr",
- "//:server_address",
"//:work_serializer",
"//:xds_client",
],
@@ -4607,17 +4608,18 @@ grpc_cc_library(
"lb_policy_registry",
"pollset_set",
"ref_counted",
+ "resolved_address",
"subchannel_interface",
"validation_errors",
"//:config",
"//:debug_location",
+ "//:endpoint_addresses",
"//:gpr",
"//:grpc_base",
"//:grpc_client_channel",
"//:grpc_trace",
"//:orphanable",
"//:ref_counted_ptr",
- "//:server_address",
"//:xds_client",
],
)
@@ -4649,6 +4651,7 @@ grpc_cc_library(
"validation_errors",
"//:config",
"//:debug_location",
+ "//:endpoint_addresses",
"//:exec_ctx",
"//:gpr",
"//:gpr_platform",
@@ -4657,7 +4660,6 @@ grpc_cc_library(
"//:grpc_trace",
"//:orphanable",
"//:ref_counted_ptr",
- "//:server_address",
"//:work_serializer",
],
)
@@ -4689,12 +4691,12 @@ grpc_cc_library(
"validation_errors",
"//:config",
"//:debug_location",
+ "//:endpoint_addresses",
"//:gpr",
"//:grpc_base",
"//:grpc_trace",
"//:orphanable",
"//:ref_counted_ptr",
- "//:server_address",
"//:xds_client",
],
)
@@ -4716,9 +4718,9 @@ grpc_cc_library(
"channel_args",
"ref_counted",
"ref_counted_string",
+ "//:endpoint_addresses",
"//:gpr_platform",
"//:ref_counted_ptr",
- "//:server_address",
],
)
@@ -4815,14 +4817,15 @@ grpc_cc_library(
"lb_policy",
"lb_policy_registry",
"pollset_set",
+ "resolved_address",
"subchannel_interface",
"//:config",
"//:debug_location",
+ "//:endpoint_addresses",
"//:gpr",
"//:grpc_base",
"//:orphanable",
"//:ref_counted_ptr",
- "//:server_address",
"//:work_serializer",
],
)
@@ -4860,13 +4863,13 @@ grpc_cc_library(
"//:channel_arg_names",
"//:config",
"//:debug_location",
+ "//:endpoint_addresses",
"//:exec_ctx",
"//:gpr",
"//:grpc_base",
"//:grpc_trace",
"//:orphanable",
"//:ref_counted_ptr",
- "//:server_address",
"//:work_serializer",
],
)
@@ -4909,6 +4912,7 @@ grpc_cc_library(
"//:channel_arg_names",
"//:config",
"//:debug_location",
+ "//:endpoint_addresses",
"//:exec_ctx",
"//:gpr",
"//:grpc_base",
@@ -4916,7 +4920,6 @@ grpc_cc_library(
"//:grpc_trace",
"//:orphanable",
"//:ref_counted_ptr",
- "//:server_address",
"//:sockaddr_utils",
"//:work_serializer",
],
@@ -4946,6 +4949,7 @@ grpc_cc_library(
"subchannel_interface",
"//:config",
"//:debug_location",
+ "//:endpoint_addresses",
"//:gpr",
"//:grpc_base",
"//:grpc_trace",
@@ -5008,6 +5012,7 @@ grpc_cc_library(
"validation_errors",
"//:config",
"//:debug_location",
+ "//:endpoint_addresses",
"//:exec_ctx",
"//:gpr",
"//:grpc_base",
@@ -5065,11 +5070,13 @@ grpc_cc_library(
"lb_policy_registry",
"pollset_set",
"ref_counted",
+ "resolved_address",
"subchannel_interface",
"unique_type_name",
"validation_errors",
"//:config",
"//:debug_location",
+ "//:endpoint_addresses",
"//:exec_ctx",
"//:gpr",
"//:grpc_base",
@@ -5077,7 +5084,6 @@ grpc_cc_library(
"//:grpc_trace",
"//:orphanable",
"//:ref_counted_ptr",
- "//:server_address",
"//:sockaddr_utils",
"//:work_serializer",
],
@@ -5111,6 +5117,7 @@ grpc_cc_library(
"//:channel_arg_names",
"//:config",
"//:debug_location",
+ "//:endpoint_addresses",
"//:exec_ctx",
"//:gpr",
"//:grpc_base",
@@ -5118,7 +5125,6 @@ grpc_cc_library(
"//:grpc_trace",
"//:orphanable",
"//:ref_counted_ptr",
- "//:server_address",
"//:work_serializer",
],
)
@@ -5152,6 +5158,7 @@ grpc_cc_library(
"validation_errors",
"//:config",
"//:debug_location",
+ "//:endpoint_addresses",
"//:exec_ctx",
"//:gpr",
"//:grpc_base",
@@ -5159,7 +5166,6 @@ grpc_cc_library(
"//:grpc_trace",
"//:orphanable",
"//:ref_counted_ptr",
- "//:server_address",
"//:work_serializer",
],
)
@@ -5198,10 +5204,12 @@ grpc_cc_library(
"lb_policy_registry",
"match",
"pollset_set",
+ "resolved_address",
"subchannel_interface",
"validation_errors",
"//:config",
"//:debug_location",
+ "//:endpoint_addresses",
"//:exec_ctx",
"//:gpr",
"//:grpc_base",
@@ -5209,7 +5217,6 @@ grpc_cc_library(
"//:grpc_trace",
"//:orphanable",
"//:ref_counted_ptr",
- "//:server_address",
"//:sockaddr_utils",
"//:work_serializer",
],
@@ -5377,6 +5384,7 @@ grpc_cc_library(
"//:backoff",
"//:channel_arg_names",
"//:debug_location",
+ "//:endpoint_addresses",
"//:exec_ctx",
"//:gpr",
"//:gpr_platform",
@@ -5387,7 +5395,6 @@ grpc_cc_library(
"//:grpc_trace",
"//:orphanable",
"//:ref_counted_ptr",
- "//:server_address",
"//:uri_parser",
],
)
@@ -5439,13 +5446,13 @@ grpc_cc_library(
"//:channel_arg_names",
"//:config",
"//:debug_location",
+ "//:endpoint_addresses",
"//:gpr",
"//:grpc_base",
"//:grpc_resolver",
"//:grpc_trace",
"//:orphanable",
"//:ref_counted_ptr",
- "//:server_address",
"//:uri_parser",
],
)
@@ -5465,11 +5472,11 @@ grpc_cc_library(
"iomgr_port",
"resolved_address",
"//:config",
+ "//:endpoint_addresses",
"//:gpr",
"//:grpc_resolver",
"//:orphanable",
"//:parse_address",
- "//:server_address",
"//:uri_parser",
],
)
@@ -5492,10 +5499,10 @@ grpc_cc_library(
"resolved_address",
"status_helper",
"//:config",
+ "//:endpoint_addresses",
"//:gpr",
"//:grpc_resolver",
"//:orphanable",
- "//:server_address",
"//:uri_parser",
],
)
@@ -5553,6 +5560,7 @@ grpc_cc_library(
"//:channel_arg_names",
"//:config",
"//:debug_location",
+ "//:endpoint_addresses",
"//:gpr",
"//:grpc_base",
"//:grpc_client_channel",
@@ -5563,7 +5571,6 @@ grpc_cc_library(
"//:legacy_context",
"//:orphanable",
"//:ref_counted_ptr",
- "//:server_address",
"//:uri_parser",
"//:work_serializer",
"//:xds_client",
diff --git a/src/core/ext/filters/client_channel/client_channel.cc b/src/core/ext/filters/client_channel/client_channel.cc
index 5a3810fd9a2..81d9c6ea4bb 100644
--- a/src/core/ext/filters/client_channel/client_channel.cc
+++ b/src/core/ext/filters/client_channel/client_channel.cc
@@ -82,6 +82,7 @@
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/polling_entity.h"
#include "src/core/lib/iomgr/pollset_set.h"
+#include "src/core/lib/iomgr/resolved_address.h"
#include "src/core/lib/json/json.h"
#include "src/core/lib/load_balancing/lb_policy_registry.h"
#include "src/core/lib/load_balancing/subchannel_interface.h"
@@ -93,8 +94,8 @@
#include "src/core/lib/promise/poll.h"
#include "src/core/lib/promise/promise.h"
#include "src/core/lib/promise/try_seq.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/resolver/resolver_registry.h"
-#include "src/core/lib/resolver/server_address.h"
#include "src/core/lib/security/credentials/credentials.h"
#include "src/core/lib/service_config/service_config_call_data.h"
#include "src/core/lib/service_config/service_config_impl.h"
@@ -1082,15 +1083,16 @@ class ClientChannel::ClientChannelControlHelper
}
RefCountedPtr CreateSubchannel(
- ServerAddress address, const ChannelArgs& args) override
+ const grpc_resolved_address& address, const ChannelArgs& per_address_args,
+ const ChannelArgs& args) override
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
if (chand_->resolver_ == nullptr) return nullptr; // Shutting down.
ChannelArgs subchannel_args = ClientChannel::MakeSubchannelArgs(
- args, address.args(), chand_->subchannel_pool_,
+ args, per_address_args, chand_->subchannel_pool_,
chand_->default_authority_);
// Create subchannel.
RefCountedPtr subchannel =
- chand_->client_channel_factory_->CreateSubchannel(address.address(),
+ chand_->client_channel_factory_->CreateSubchannel(address,
subchannel_args);
if (subchannel == nullptr) return nullptr;
// Make sure the subchannel has updated keepalive time.
diff --git a/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc b/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc
index 8dcc5f8d5c4..b6e8396b95e 100644
--- a/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc
@@ -44,18 +44,19 @@ int HierarchicalPathArg::ChannelArgsCompare(const HierarchicalPathArg* a,
}
absl::StatusOr MakeHierarchicalAddressMap(
- const absl::StatusOr& addresses) {
+ const absl::StatusOr& addresses) {
if (!addresses.ok()) return addresses.status();
HierarchicalAddressMap result;
RefCountedPtr remaining_path_attr;
- for (const ServerAddress& address : *addresses) {
- const auto* path_arg = address.args().GetObject();
+ for (const EndpointAddresses& endpoint_addresses : *addresses) {
+ const auto* path_arg =
+ endpoint_addresses.args().GetObject();
if (path_arg == nullptr) continue;
const std::vector& path = path_arg->path();
auto it = path.begin();
if (it == path.end()) continue;
- ServerAddressList& target_list = result[*it];
- ChannelArgs args = address.args();
+ EndpointAddressesList& target_list = result[*it];
+ ChannelArgs args = endpoint_addresses.args();
++it;
if (it != path.end()) {
std::vector remaining_path(it, path.end());
@@ -66,7 +67,7 @@ absl::StatusOr MakeHierarchicalAddressMap(
}
args = args.SetObject(remaining_path_attr);
}
- target_list.emplace_back(address.address(), args);
+ target_list.emplace_back(endpoint_addresses.addresses(), args);
}
return result;
}
diff --git a/src/core/ext/filters/client_channel/lb_policy/address_filtering.h b/src/core/ext/filters/client_channel/lb_policy/address_filtering.h
index b17c13bbb8c..d0e2faae294 100644
--- a/src/core/ext/filters/client_channel/lb_policy/address_filtering.h
+++ b/src/core/ext/filters/client_channel/lb_policy/address_filtering.h
@@ -28,7 +28,7 @@
#include "src/core/lib/gprpp/ref_counted.h"
#include "src/core/lib/gprpp/ref_counted_string.h"
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
// The resolver returns a flat list of addresses. When a hierarchy of
// LB policies is in use, each leaf of the hierarchy will need a
@@ -102,15 +102,15 @@ class HierarchicalPathArg : public RefCounted {
std::vector path_;
};
-// A map from the next path element to the addresses that fall under
-// that path element.
+// A map from the next path element to the endpoint addresses that fall
+// under that path element.
using HierarchicalAddressMap =
- std::map;
// Splits up the addresses into a separate list for each child.
absl::StatusOr MakeHierarchicalAddressMap(
- const absl::StatusOr& addresses);
+ const absl::StatusOr& addresses);
} // namespace grpc_core
diff --git a/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc b/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc
index 9478f7c2fa9..f82ac6f53d1 100644
--- a/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc
@@ -32,10 +32,10 @@
#include "src/core/lib/config/core_configuration.h"
#include "src/core/lib/gprpp/debug_location.h"
#include "src/core/lib/iomgr/pollset_set.h"
+#include "src/core/lib/iomgr/resolved_address.h"
#include "src/core/lib/load_balancing/delegating_helper.h"
#include "src/core/lib/load_balancing/lb_policy_registry.h"
#include "src/core/lib/load_balancing/subchannel_interface.h"
-#include "src/core/lib/resolver/server_address.h"
#include "src/core/lib/transport/connectivity_state.h"
namespace grpc_core {
@@ -52,11 +52,12 @@ class ChildPolicyHandler::Helper
: ParentOwningDelegatingChannelControlHelper(std::move(parent)) {}
RefCountedPtr CreateSubchannel(
- ServerAddress address, const ChannelArgs& args) override {
+ const grpc_resolved_address& address, const ChannelArgs& per_address_args,
+ const ChannelArgs& args) override {
if (parent()->shutting_down_) return nullptr;
if (!CalledByCurrentChild() && !CalledByPendingChild()) return nullptr;
return parent()->channel_control_helper()->CreateSubchannel(
- std::move(address), args);
+ address, per_address_args, args);
}
void UpdateState(grpc_connectivity_state state, const absl::Status& status,
diff --git a/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc b/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc
index 9269359d748..bc0e0bb6ca2 100644
--- a/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc
@@ -44,7 +44,7 @@
#include "src/core/lib/load_balancing/delegating_helper.h"
#include "src/core/lib/load_balancing/lb_policy.h"
#include "src/core/lib/load_balancing/lb_policy_registry.h"
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
namespace grpc_core {
@@ -61,8 +61,9 @@ class EndpointList::Endpoint::Helper
~Helper() override { endpoint_.reset(DEBUG_LOCATION, "Helper"); }
RefCountedPtr CreateSubchannel(
- ServerAddress address, const ChannelArgs& args) override {
- return endpoint_->CreateSubchannel(std::move(address), args);
+ const grpc_resolved_address& address, const ChannelArgs& per_address_args,
+ const ChannelArgs& args) override {
+ return endpoint_->CreateSubchannel(address, per_address_args, args);
}
void UpdateState(
@@ -86,7 +87,7 @@ class EndpointList::Endpoint::Helper
//
void EndpointList::Endpoint::Init(
- const ServerAddress& address, const ChannelArgs& args,
+ const EndpointAddresses& addresses, const ChannelArgs& args,
std::shared_ptr work_serializer) {
ChannelArgs child_args =
args.Set(GRPC_ARG_INTERNAL_PICK_FIRST_ENABLE_HEALTH_CHECKING, true)
@@ -118,7 +119,7 @@ void EndpointList::Endpoint::Init(
GPR_ASSERT(config.ok());
// Update child policy.
LoadBalancingPolicy::UpdateArgs update_args;
- update_args.addresses.emplace().emplace_back(address);
+ update_args.addresses.emplace().emplace_back(addresses);
update_args.args = child_args;
update_args.config = std::move(*config);
// TODO(roth): If the child reports a non-OK status with the update,
@@ -152,9 +153,10 @@ size_t EndpointList::Endpoint::Index() const {
}
RefCountedPtr EndpointList::Endpoint::CreateSubchannel(
- ServerAddress address, const ChannelArgs& args) {
+ const grpc_resolved_address& address, const ChannelArgs& per_address_args,
+ const ChannelArgs& args) {
return endpoint_list_->channel_control_helper()->CreateSubchannel(
- std::move(address), args);
+ address, per_address_args, args);
}
//
@@ -162,13 +164,14 @@ RefCountedPtr EndpointList::Endpoint::CreateSubchannel(
//
void EndpointList::Init(
- const ServerAddressList& addresses, const ChannelArgs& args,
- absl::AnyInvocable(
- RefCountedPtr, const ServerAddress&, const ChannelArgs&)>
+ const EndpointAddressesList& endpoints, const ChannelArgs& args,
+ absl::AnyInvocable(RefCountedPtr,
+ const EndpointAddresses&,
+ const ChannelArgs&)>
create_endpoint) {
- for (const ServerAddress& address : addresses) {
+ for (const EndpointAddresses& addresses : endpoints) {
endpoints_.push_back(
- create_endpoint(Ref(DEBUG_LOCATION, "Endpoint"), address, args));
+ create_endpoint(Ref(DEBUG_LOCATION, "Endpoint"), addresses, args));
}
}
diff --git a/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h b/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h
index 66fce2871e4..df31bc39c0e 100644
--- a/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h
+++ b/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h
@@ -36,9 +36,10 @@
#include "src/core/lib/gprpp/orphanable.h"
#include "src/core/lib/gprpp/ref_counted_ptr.h"
#include "src/core/lib/gprpp/work_serializer.h"
+#include "src/core/lib/iomgr/resolved_address.h"
#include "src/core/lib/load_balancing/lb_policy.h"
#include "src/core/lib/load_balancing/subchannel_interface.h"
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
namespace grpc_core {
@@ -52,16 +53,17 @@ namespace grpc_core {
class MyEndpointList : public EndpointList {
public:
MyEndpointList(RefCountedPtr lb_policy,
- const ServerAddressList& addresses, const ChannelArgs& args)
+ const EndpointAddressesList& endpoints,
+ const ChannelArgs& args)
: EndpointList(std::move(lb_policy),
GRPC_TRACE_FLAG_ENABLED(grpc_my_tracer)
? "MyEndpointList"
: nullptr) {
- Init(addresses, args,
+ Init(endpoints, args,
[&](RefCountedPtr endpoint_list,
- const ServerAddress& address, const ChannelArgs& args) {
+ const EndpointAddresses& addresses, const ChannelArgs& args) {
return MakeOrphanable(
- std::move(endpoint_list), address, args,
+ std::move(endpoint_list), addresses, args,
policy()->work_serializer());
});
}
@@ -70,10 +72,10 @@ class MyEndpointList : public EndpointList {
class MyEndpoint : public Endpoint {
public:
MyEndpoint(RefCountedPtr endpoint_list,
- const ServerAddress& address, const ChannelArgs& args,
+ const EndpointAddresses& address, const ChannelArgs& args,
std::shared_ptr work_serializer)
: Endpoint(std::move(endpoint_list)) {
- Init(address, args, std::move(work_serializer));
+ Init(addresses, args, std::move(work_serializer));
}
private:
@@ -119,7 +121,7 @@ class EndpointList : public InternallyRefCounted {
explicit Endpoint(RefCountedPtr endpoint_list)
: endpoint_list_(std::move(endpoint_list)) {}
- void Init(const ServerAddress& address, const ChannelArgs& args,
+ void Init(const EndpointAddresses& addresses, const ChannelArgs& args,
std::shared_ptr work_serializer);
// Templated for convenience, to provide a short-hand for
@@ -150,7 +152,8 @@ class EndpointList : public InternallyRefCounted {
// Called to create a subchannel. Subclasses may override.
virtual RefCountedPtr CreateSubchannel(
- ServerAddress address, const ChannelArgs& args);
+ const grpc_resolved_address& address,
+ const ChannelArgs& per_address_args, const ChannelArgs& args);
RefCountedPtr endpoint_list_;
@@ -181,9 +184,9 @@ class EndpointList : public InternallyRefCounted {
EndpointList(RefCountedPtr policy, const char* tracer)
: policy_(std::move(policy)), tracer_(tracer) {}
- void Init(const ServerAddressList& addresses, const ChannelArgs& args,
+ void Init(const EndpointAddressesList& endpoints, const ChannelArgs& args,
absl::AnyInvocable(
- RefCountedPtr, const ServerAddress&,
+ RefCountedPtr, const EndpointAddresses&,
const ChannelArgs&)>
create_endpoint);
diff --git a/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc b/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc
index 22352903b6e..0d85f997228 100644
--- a/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc
@@ -134,8 +134,8 @@
#include "src/core/lib/load_balancing/lb_policy_factory.h"
#include "src/core/lib/load_balancing/lb_policy_registry.h"
#include "src/core/lib/load_balancing/subchannel_interface.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/resolver/resolver.h"
-#include "src/core/lib/resolver/server_address.h"
#include "src/core/lib/security/credentials/credentials.h"
#include "src/core/lib/slice/slice.h"
#include "src/core/lib/slice/slice_string_helpers.h"
@@ -387,8 +387,8 @@ class GrpcLb : public LoadBalancingPolicy {
// Returns a text representation suitable for logging.
std::string AsText() const;
- // Extracts all non-drop entries into a ServerAddressList.
- ServerAddressList GetServerAddressList(
+ // Extracts all non-drop entries into an EndpointAddressesList.
+ EndpointAddressesList GetServerAddressList(
GrpcLbClientStats* client_stats) const;
// Returns true if the serverlist contains at least one drop entry and
@@ -467,7 +467,8 @@ class GrpcLb : public LoadBalancingPolicy {
: ParentOwningDelegatingChannelControlHelper(std::move(parent)) {}
RefCountedPtr CreateSubchannel(
- ServerAddress address, const ChannelArgs& args) override;
+ const grpc_resolved_address& address,
+ const ChannelArgs& per_address_args, const ChannelArgs& args) override;
void UpdateState(grpc_connectivity_state state, const absl::Status& status,
RefCountedPtr picker) override;
void RequestReresolution() override;
@@ -571,7 +572,7 @@ class GrpcLb : public LoadBalancingPolicy {
// Whether we're in fallback mode.
bool fallback_mode_ = false;
// The backend addresses from the resolver.
- absl::StatusOr fallback_backend_addresses_;
+ absl::StatusOr fallback_backend_addresses_;
// The last resolution note from our parent.
// To be passed to child policy when fallback_backend_addresses_ is empty.
std::string resolution_note_;
@@ -668,11 +669,11 @@ bool IsServerValid(const GrpcLbServer& server, size_t idx, bool log) {
}
// Returns addresses extracted from the serverlist.
-ServerAddressList GrpcLb::Serverlist::GetServerAddressList(
+EndpointAddressesList GrpcLb::Serverlist::GetServerAddressList(
GrpcLbClientStats* client_stats) const {
RefCountedPtr stats;
if (client_stats != nullptr) stats = client_stats->Ref();
- ServerAddressList addresses;
+ EndpointAddressesList endpoints;
for (size_t i = 0; i < serverlist_.size(); ++i) {
const GrpcLbServer& server = serverlist_[i];
if (!IsServerValid(server, i, false)) continue;
@@ -692,11 +693,11 @@ ServerAddressList GrpcLb::Serverlist::GetServerAddressList(
: addr_uri.status().ToString().c_str());
}
// Add address with a channel arg containing LB token and stats object.
- addresses.emplace_back(
+ endpoints.emplace_back(
addr, ChannelArgs().SetObject(MakeRefCounted(
std::move(lb_token), stats)));
}
- return addresses;
+ return endpoints;
}
bool GrpcLb::Serverlist::ContainsAllDropEntries() const {
@@ -779,19 +780,21 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
//
RefCountedPtr GrpcLb::Helper::CreateSubchannel(
- ServerAddress address, const ChannelArgs& args) {
+ const grpc_resolved_address& address, const ChannelArgs& per_address_args,
+ const ChannelArgs& args) {
if (parent()->shutting_down_) return nullptr;
- const auto* arg = address.args().GetObject();
+ const auto* arg = per_address_args.GetObject();
if (arg == nullptr) {
+ auto addr_str = grpc_sockaddr_to_string(&address, false);
Crash(
- absl::StrFormat("[grpclb %p] no TokenAndClientStatsArg for address %p",
- parent(), address.ToString().c_str()));
+ absl::StrFormat("[grpclb %p] no TokenAndClientStatsArg for address %s",
+ parent(), addr_str.value_or("N/A").c_str()));
}
std::string lb_token = arg->lb_token();
RefCountedPtr client_stats = arg->client_stats();
return MakeRefCounted(
- parent()->channel_control_helper()->CreateSubchannel(std::move(address),
- args),
+ parent()->channel_control_helper()->CreateSubchannel(
+ address, per_address_args, args),
parent()->Ref(DEBUG_LOCATION, "SubchannelWrapper"), std::move(lb_token),
std::move(client_stats));
}
@@ -1347,11 +1350,11 @@ void GrpcLb::BalancerCallState::OnBalancerStatusReceivedLocked(
// helper code for creating balancer channel
//
-ServerAddressList ExtractBalancerAddresses(const ChannelArgs& args) {
- const ServerAddressList* addresses =
+EndpointAddressesList ExtractBalancerAddresses(const ChannelArgs& args) {
+ const EndpointAddressesList* endpoints =
FindGrpclbBalancerAddressesInChannelArgs(args);
- if (addresses != nullptr) return *addresses;
- return ServerAddressList();
+ if (endpoints != nullptr) return *endpoints;
+ return EndpointAddressesList();
}
// Returns the channel args for the LB channel, used to create a bidirectional
@@ -1514,10 +1517,10 @@ absl::Status GrpcLb::UpdateLocked(UpdateArgs args) {
fallback_backend_addresses_ = std::move(args.addresses);
if (fallback_backend_addresses_.ok()) {
// Add null LB token attributes.
- for (ServerAddress& address : *fallback_backend_addresses_) {
- address = ServerAddress(
- address.address(),
- address.args().SetObject(
+ for (EndpointAddresses& addresses : *fallback_backend_addresses_) {
+ addresses = EndpointAddresses(
+ addresses.addresses(),
+ addresses.args().SetObject(
MakeRefCounted("", nullptr)));
}
}
@@ -1566,7 +1569,7 @@ absl::Status GrpcLb::UpdateLocked(UpdateArgs args) {
absl::Status GrpcLb::UpdateBalancerChannelLocked() {
// Get balancer addresses.
- ServerAddressList balancer_addresses = ExtractBalancerAddresses(args_);
+ EndpointAddressesList balancer_addresses = ExtractBalancerAddresses(args_);
absl::Status status;
if (balancer_addresses.empty()) {
status = absl::UnavailableError("balancer address list must be non-empty");
diff --git a/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc b/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc
index c45be05a6a3..2624c3a5c19 100644
--- a/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc
@@ -34,25 +34,25 @@ namespace grpc_core {
namespace {
void* BalancerAddressesArgCopy(void* p) {
- ServerAddressList* address_list = static_cast(p);
- return new ServerAddressList(*address_list);
+ EndpointAddressesList* endpoint_list = static_cast(p);
+ return new EndpointAddressesList(*endpoint_list);
}
void BalancerAddressesArgDestroy(void* p) {
- ServerAddressList* address_list = static_cast(p);
- delete address_list;
+ EndpointAddressesList* endpoint_list = static_cast(p);
+ delete endpoint_list;
}
int BalancerAddressesArgCmp(void* p, void* q) {
- ServerAddressList* address_list1 = static_cast(p);
- ServerAddressList* address_list2 = static_cast(q);
- if (address_list1 == nullptr || address_list2 == nullptr) {
- return QsortCompare(address_list1, address_list2);
+ auto* endpoint_list1 = static_cast(p);
+ auto* endpoint_list2 = static_cast(q);
+ if (endpoint_list1 == nullptr || endpoint_list2 == nullptr) {
+ return QsortCompare(endpoint_list1, endpoint_list2);
}
- if (address_list1->size() > address_list2->size()) return 1;
- if (address_list1->size() < address_list2->size()) return -1;
- for (size_t i = 0; i < address_list1->size(); ++i) {
- int retval = (*address_list1)[i].Cmp((*address_list2)[i]);
+ if (endpoint_list1->size() > endpoint_list2->size()) return 1;
+ if (endpoint_list1->size() < endpoint_list2->size()) return -1;
+ for (size_t i = 0; i < endpoint_list1->size(); ++i) {
+ int retval = (*endpoint_list1)[i].Cmp((*endpoint_list2)[i]);
if (retval != 0) return retval;
}
return 0;
@@ -65,24 +65,24 @@ const grpc_arg_pointer_vtable kBalancerAddressesArgVtable = {
} // namespace
grpc_arg CreateGrpclbBalancerAddressesArg(
- const ServerAddressList* address_list) {
+ const EndpointAddressesList* endpoint_list) {
return grpc_channel_arg_pointer_create(
const_cast(GRPC_ARG_GRPCLB_BALANCER_ADDRESSES),
- const_cast(address_list),
+ const_cast(endpoint_list),
&kBalancerAddressesArgVtable);
}
-const ServerAddressList* FindGrpclbBalancerAddressesInChannelArgs(
+const EndpointAddressesList* FindGrpclbBalancerAddressesInChannelArgs(
const ChannelArgs& args) {
- return args.GetPointer(
+ return args.GetPointer(
GRPC_ARG_GRPCLB_BALANCER_ADDRESSES);
}
ChannelArgs SetGrpcLbBalancerAddresses(const ChannelArgs& args,
- ServerAddressList address_list) {
+ EndpointAddressesList endpoint_list) {
return args.Set(
GRPC_ARG_GRPCLB_BALANCER_ADDRESSES,
- ChannelArgs::Pointer(new ServerAddressList(std::move(address_list)),
+ ChannelArgs::Pointer(new EndpointAddressesList(std::move(endpoint_list)),
&kBalancerAddressesArgVtable));
}
diff --git a/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h b/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h
index 7f80aca80e1..adc689c6c01 100644
--- a/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h
+++ b/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h
@@ -22,16 +22,16 @@
#include
#include "src/core/lib/channel/channel_args.h"
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
namespace grpc_core {
grpc_arg CreateGrpclbBalancerAddressesArg(
- const ServerAddressList* address_list);
+ const EndpointAddressesList* endpoint_list);
GRPC_MUST_USE_RESULT
ChannelArgs SetGrpcLbBalancerAddresses(const ChannelArgs& args,
- ServerAddressList address_list);
-const ServerAddressList* FindGrpclbBalancerAddressesInChannelArgs(
+ EndpointAddressesList endpoint_list);
+const EndpointAddressesList* FindGrpclbBalancerAddressesInChannelArgs(
const ChannelArgs& args);
} // namespace grpc_core
diff --git a/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc b/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc
index 1e95a0945f5..be857c29c5a 100644
--- a/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc
@@ -60,13 +60,14 @@
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/iomgr_fwd.h"
#include "src/core/lib/iomgr/pollset_set.h"
+#include "src/core/lib/iomgr/resolved_address.h"
#include "src/core/lib/json/json.h"
#include "src/core/lib/load_balancing/delegating_helper.h"
#include "src/core/lib/load_balancing/lb_policy.h"
#include "src/core/lib/load_balancing/lb_policy_factory.h"
#include "src/core/lib/load_balancing/lb_policy_registry.h"
#include "src/core/lib/load_balancing/subchannel_interface.h"
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/transport/connectivity_state.h"
namespace grpc_core {
@@ -346,7 +347,8 @@ class OutlierDetectionLb : public LoadBalancingPolicy {
std::move(outlier_detection_policy)) {}
RefCountedPtr CreateSubchannel(
- ServerAddress address, const ChannelArgs& args) override;
+ const grpc_resolved_address& address,
+ const ChannelArgs& per_address_args, const ChannelArgs& args) override;
void UpdateState(grpc_connectivity_state state, const absl::Status& status,
RefCountedPtr picker) override;
};
@@ -373,7 +375,7 @@ class OutlierDetectionLb : public LoadBalancingPolicy {
// Returns the address map key for an address, or the empty string if
// the address should be ignored.
- static std::string MakeKeyForAddress(const ServerAddress& address);
+ static std::string MakeKeyForAddress(const grpc_resolved_address& address);
void ShutdownLocked() override;
@@ -537,9 +539,9 @@ OutlierDetectionLb::~OutlierDetectionLb() {
}
std::string OutlierDetectionLb::MakeKeyForAddress(
- const ServerAddress& address) {
+ const grpc_resolved_address& address) {
// Use only the address, not the attributes.
- auto addr_str = grpc_sockaddr_to_string(&address.address(), false);
+ auto addr_str = grpc_sockaddr_to_string(&address, false);
// If address couldn't be stringified, ignore it.
if (!addr_str.ok()) return "";
return std::move(*addr_str);
@@ -613,8 +615,8 @@ absl::Status OutlierDetectionLb::UpdateLocked(UpdateArgs args) {
// Update subchannel state map.
if (args.addresses.ok()) {
std::set current_addresses;
- for (const ServerAddress& address : *args.addresses) {
- std::string address_key = MakeKeyForAddress(address);
+ for (const EndpointAddresses& endpoint : *args.addresses) {
+ std::string address_key = MakeKeyForAddress(endpoint.address());
if (address_key.empty()) continue;
auto& subchannel_state = subchannel_state_map_[address_key];
if (subchannel_state == nullptr) {
@@ -715,14 +717,14 @@ OrphanablePtr OutlierDetectionLb::CreateChildPolicyLocked(
//
RefCountedPtr OutlierDetectionLb::Helper::CreateSubchannel(
- ServerAddress address, const ChannelArgs& args) {
+ const grpc_resolved_address& address, const ChannelArgs& per_address_args,
+ const ChannelArgs& args) {
if (parent()->shutting_down_) return nullptr;
RefCountedPtr subchannel_state;
std::string key = MakeKeyForAddress(address);
if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
- gpr_log(GPR_INFO,
- "[outlier_detection_lb %p] using key %s for subchannel address %s",
- parent(), key.c_str(), address.ToString().c_str());
+ gpr_log(GPR_INFO, "[outlier_detection_lb %p] creating subchannel, key %s",
+ parent(), key.c_str());
}
if (!key.empty()) {
auto it = parent()->subchannel_state_map_.find(key);
@@ -732,8 +734,8 @@ RefCountedPtr OutlierDetectionLb::Helper::CreateSubchannel(
}
auto subchannel = MakeRefCounted(
parent()->work_serializer(), subchannel_state,
- parent()->channel_control_helper()->CreateSubchannel(std::move(address),
- args));
+ parent()->channel_control_helper()->CreateSubchannel(
+ address, per_address_args, args));
if (subchannel_state != nullptr) {
subchannel_state->AddSubchannel(subchannel.get());
}
diff --git a/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc b/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc
index 1d0dcf7b4da..2b3ed28eec0 100644
--- a/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc
@@ -61,7 +61,7 @@
#include "src/core/lib/load_balancing/lb_policy.h"
#include "src/core/lib/load_balancing/lb_policy_factory.h"
#include "src/core/lib/load_balancing/subchannel_interface.h"
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/transport/connectivity_state.h"
namespace grpc_core {
@@ -198,8 +198,8 @@ class PickFirst : public LoadBalancingPolicy {
absl::Status connectivity_status_;
};
- SubchannelList(RefCountedPtr policy, ServerAddressList addresses,
- const ChannelArgs& args);
+ SubchannelList(RefCountedPtr policy,
+ EndpointAddressesList addresses, const ChannelArgs& args);
~SubchannelList() override;
@@ -383,7 +383,7 @@ void PickFirst::ResetBackoffLocked() {
void PickFirst::AttemptToConnectUsingLatestUpdateArgsLocked() {
// Create a subchannel list from latest_update_args_.
- ServerAddressList addresses;
+ EndpointAddressesList addresses;
if (latest_update_args_.addresses.ok()) {
addresses = *latest_update_args_.addresses;
}
@@ -439,10 +439,19 @@ absl::Status PickFirst::UpdateLocked(UpdateArgs args) {
} else if (args.addresses->empty()) {
status = absl::UnavailableError("address list must not be empty");
} else {
+ // Shuffle the list if needed.
auto config = static_cast(args.config.get());
if (config->shuffle_addresses()) {
absl::c_shuffle(*args.addresses, bit_gen_);
}
+ // Flatten the list so that we have one address per endpoint.
+ EndpointAddressesList endpoints;
+ for (const auto& endpoint : *args.addresses) {
+ for (const auto& address : endpoint.addresses()) {
+ endpoints.emplace_back(address, endpoint.args());
+ }
+ }
+ args.addresses = std::move(endpoints);
}
// If the update contains a resolver error and we have a previous update
// that was not a resolver error, keep using the previous addresses.
@@ -942,7 +951,7 @@ void PickFirst::SubchannelList::SubchannelData::ProcessUnselectedReadyLocked() {
//
PickFirst::SubchannelList::SubchannelList(RefCountedPtr policy,
- ServerAddressList addresses,
+ EndpointAddressesList addresses,
const ChannelArgs& args)
: InternallyRefCounted(
GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace) ? "SubchannelList"
@@ -959,9 +968,11 @@ PickFirst::SubchannelList::SubchannelList(RefCountedPtr policy,
}
subchannels_.reserve(addresses.size());
// Create a subchannel for each address.
- for (const ServerAddress& address : addresses) {
+ for (const EndpointAddresses& address : addresses) {
+ GPR_ASSERT(address.addresses().size() == 1);
RefCountedPtr subchannel =
- policy_->channel_control_helper()->CreateSubchannel(address, args_);
+ policy_->channel_control_helper()->CreateSubchannel(
+ address.address(), address.args(), args_);
if (subchannel == nullptr) {
// Subchannel could not be created.
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
diff --git a/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.h b/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.h
index ff5e0e6f2a4..4796742526d 100644
--- a/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.h
+++ b/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.h
@@ -19,7 +19,7 @@
#include
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
// Internal channel arg to enable health checking in pick_first.
// Intended to be used by petiole policies (e.g., round_robin) that
diff --git a/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc b/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc
index 716b5f41e88..09bb347f537 100644
--- a/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc
@@ -59,7 +59,7 @@
#include "src/core/lib/load_balancing/lb_policy.h"
#include "src/core/lib/load_balancing/lb_policy_factory.h"
#include "src/core/lib/load_balancing/lb_policy_registry.h"
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/transport/connectivity_state.h"
namespace grpc_core {
diff --git a/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc b/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc
index 288f46d8045..9d440ca75d6 100644
--- a/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc
@@ -68,7 +68,7 @@
#include "src/core/lib/load_balancing/lb_policy.h"
#include "src/core/lib/load_balancing/lb_policy_factory.h"
#include "src/core/lib/load_balancing/lb_policy_registry.h"
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/transport/connectivity_state.h"
namespace grpc_core {
@@ -150,7 +150,7 @@ class RingHash : public LoadBalancingPolicy {
public:
struct RingEntry {
uint64_t hash;
- size_t endpoint_index; // Index into RingHash::addresses_.
+ size_t endpoint_index; // Index into RingHash::endpoints_.
};
Ring(RingHash* ring_hash, RingHashLbConfig* config);
@@ -164,7 +164,7 @@ class RingHash : public LoadBalancingPolicy {
// State for a particular endpoint. Delegates to a pick_first child policy.
class RingHashEndpoint : public InternallyRefCounted {
public:
- // index is the index into RingHash::addresses_ of this endpoint.
+ // index is the index into RingHash::endpoints_ of this endpoint.
RingHashEndpoint(RefCountedPtr ring_hash, size_t index)
: ring_hash_(std::move(ring_hash)), index_(index) {}
@@ -208,7 +208,7 @@ class RingHash : public LoadBalancingPolicy {
// Ref to our parent.
RefCountedPtr ring_hash_;
- size_t index_; // Index into RingHash::addresses_ of this endpoint.
+ size_t index_; // Index into RingHash::endpoints_ of this endpoint.
// The pick_first child policy.
OrphanablePtr child_policy_;
@@ -223,7 +223,7 @@ class RingHash : public LoadBalancingPolicy {
explicit Picker(RefCountedPtr ring_hash)
: ring_hash_(std::move(ring_hash)),
ring_(ring_hash_->ring_),
- endpoints_(ring_hash_->addresses_.size()) {
+ endpoints_(ring_hash_->endpoints_.size()) {
for (const auto& p : ring_hash_->endpoint_map_) {
endpoints_[p.second->index()] = p.second->GetInfoForPicker();
}
@@ -281,12 +281,12 @@ class RingHash : public LoadBalancingPolicy {
void UpdateAggregatedConnectivityStateLocked(bool entered_transient_failure,
absl::Status status);
- // Current address list, channel args, and ring.
- ServerAddressList addresses_;
+ // Current endpoint list, channel args, and ring.
+ EndpointAddressesList endpoints_;
ChannelArgs args_;
RefCountedPtr ring_;
- std::map> endpoint_map_;
+ std::map> endpoint_map_;
// TODO(roth): If we ever change the helper UpdateState() API to not
// need the status reported for TRANSIENT_FAILURE state (because
@@ -373,39 +373,40 @@ RingHash::PickResult RingHash::Picker::Pick(PickArgs args) {
RingHash::Ring::Ring(RingHash* ring_hash, RingHashLbConfig* config) {
// Store the weights while finding the sum.
- struct AddressWeight {
- std::string address;
+ struct EndpointWeight {
+ std::string address; // Key by endpoint's first address.
// Default weight is 1 for the cases where a weight is not provided,
// each occurrence of the address will be counted a weight value of 1.
uint32_t weight = 1;
double normalized_weight;
};
- std::vector address_weights;
+ std::vector endpoint_weights;
size_t sum = 0;
- const ServerAddressList& addresses = ring_hash->addresses_;
- address_weights.reserve(addresses.size());
- for (const auto& address : addresses) {
- AddressWeight address_weight;
- address_weight.address =
- grpc_sockaddr_to_string(&address.address(), false).value();
+ const EndpointAddressesList& endpoints = ring_hash->endpoints_;
+ endpoint_weights.reserve(endpoints.size());
+ for (const auto& endpoint : endpoints) {
+ EndpointWeight endpoint_weight;
+ endpoint_weight.address =
+ grpc_sockaddr_to_string(&endpoint.addresses().front(), false).value();
// Weight should never be zero, but ignore it just in case, since
// that value would screw up the ring-building algorithm.
- auto weight_arg = address.args().GetInt(GRPC_ARG_ADDRESS_WEIGHT);
+ auto weight_arg = endpoint.args().GetInt(GRPC_ARG_ADDRESS_WEIGHT);
if (weight_arg.value_or(0) > 0) {
- address_weight.weight = *weight_arg;
+ endpoint_weight.weight = *weight_arg;
}
- sum += address_weight.weight;
- address_weights.push_back(std::move(address_weight));
+ sum += endpoint_weight.weight;
+ endpoint_weights.push_back(std::move(endpoint_weight));
}
// Calculating normalized weights and find min and max.
double min_normalized_weight = 1.0;
double max_normalized_weight = 0.0;
- for (auto& address : address_weights) {
- address.normalized_weight = static_cast(address.weight) / sum;
+ for (auto& endpoint_weight : endpoint_weights) {
+ endpoint_weight.normalized_weight =
+ static_cast(endpoint_weight.weight) / sum;
min_normalized_weight =
- std::min(address.normalized_weight, min_normalized_weight);
+ std::min(endpoint_weight.normalized_weight, min_normalized_weight);
max_normalized_weight =
- std::max(address.normalized_weight, max_normalized_weight);
+ std::max(endpoint_weight.normalized_weight, max_normalized_weight);
}
// Scale up the number of hashes per host such that the least-weighted host
// gets a whole number of hashes on the ring. Other hosts might not end up
@@ -435,12 +436,12 @@ RingHash::Ring::Ring(RingHash* ring_hash, RingHashLbConfig* config) {
double target_hashes = 0.0;
uint64_t min_hashes_per_host = ring_size;
uint64_t max_hashes_per_host = 0;
- for (size_t i = 0; i < addresses.size(); ++i) {
- const std::string& address_string = address_weights[i].address;
+ for (size_t i = 0; i < endpoints.size(); ++i) {
+ const std::string& address_string = endpoint_weights[i].address;
hash_key_buffer.assign(address_string.begin(), address_string.end());
hash_key_buffer.emplace_back('_');
auto offset_start = hash_key_buffer.end();
- target_hashes += scale * address_weights[i].normalized_weight;
+ target_hashes += scale * endpoint_weights[i].normalized_weight;
size_t count = 0;
while (current_hashes < target_hashes) {
const std::string count_str = absl::StrCat(count);
@@ -536,12 +537,12 @@ void RingHash::RingHashEndpoint::CreateChildPolicy() {
CoreConfiguration::Get().lb_policy_registry().CreateLoadBalancingPolicy(
"pick_first", std::move(lb_policy_args));
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)) {
- const ServerAddress& address = ring_hash_->addresses_[index_];
+ const EndpointAddresses& endpoint = ring_hash_->endpoints_[index_];
gpr_log(GPR_INFO,
"[RH %p] endpoint %p (index %" PRIuPTR " of %" PRIuPTR
", %s): created child policy %p",
- ring_hash_.get(), this, index_, ring_hash_->addresses_.size(),
- address.ToString().c_str(), child_policy_.get());
+ ring_hash_.get(), this, index_, ring_hash_->endpoints_.size(),
+ endpoint.ToString().c_str(), child_policy_.get());
}
// Add our interested_parties pollset_set to that of the newly created
// child policy. This will make the child policy progress upon activity on
@@ -560,7 +561,7 @@ void RingHash::RingHashEndpoint::UpdateChildPolicyLocked() {
GPR_ASSERT(config.ok());
// Update child policy.
LoadBalancingPolicy::UpdateArgs update_args;
- update_args.addresses.emplace().emplace_back(ring_hash_->addresses_[index_]);
+ update_args.addresses.emplace().emplace_back(ring_hash_->endpoints_[index_]);
update_args.args = ring_hash_->args_;
update_args.config = std::move(*config);
// TODO(roth): If the child reports a non-OK status with the update,
@@ -577,7 +578,7 @@ void RingHash::RingHashEndpoint::OnStateUpdate(
"[RH %p] connectivity changed for endpoint %p (%s, child_policy=%p): "
"prev_state=%s new_state=%s (%s)",
ring_hash_.get(), this,
- ring_hash_->addresses_[index_].ToString().c_str(), child_policy_.get(),
+ ring_hash_->endpoints_[index_].ToString().c_str(), child_policy_.get(),
ConnectivityStateName(connectivity_state_),
ConnectivityStateName(new_state), status.ToString().c_str());
}
@@ -631,7 +632,7 @@ absl::Status RingHash::UpdateLocked(UpdateArgs args) {
gpr_log(GPR_INFO, "[RH %p] received update with %" PRIuPTR " addresses",
this, args.addresses->size());
}
- addresses_ = *std::move(args.addresses);
+ endpoints_ = *std::move(args.addresses);
} else {
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)) {
gpr_log(GPR_INFO, "[RH %p] received update with addresses error: %s",
@@ -639,7 +640,7 @@ absl::Status RingHash::UpdateLocked(UpdateArgs args) {
}
// If we already have an endpoint list, then keep using the existing
// list, but still report back that the update was not accepted.
- if (!addresses_.empty()) return args.addresses.status();
+ if (!endpoints_.empty()) return args.addresses.status();
}
// Save channel args.
args_ = std::move(args.args);
@@ -647,24 +648,23 @@ absl::Status RingHash::UpdateLocked(UpdateArgs args) {
ring_ = MakeRefCounted(
this, static_cast(args.config.get()));
// Update endpoint map.
- std::map> endpoint_map;
- for (size_t i = 0; i < addresses_.size(); ++i) {
- const ServerAddress& address = addresses_[i];
+ std::map> endpoint_map;
+ for (size_t i = 0; i < endpoints_.size(); ++i) {
+ const EndpointAddresses& addresses = endpoints_[i];
+ const EndpointAddressSet address_set(addresses.addresses());
// If present in old map, retain it; otherwise, create a new one.
- auto it = endpoint_map_.find(address);
+ auto it = endpoint_map_.find(address_set);
if (it != endpoint_map_.end()) {
it->second->UpdateLocked(i);
- endpoint_map.emplace(address, std::move(it->second));
+ endpoint_map.emplace(address_set, std::move(it->second));
} else {
- endpoint_map.emplace(address, MakeOrphanable(Ref(), i));
+ endpoint_map.emplace(address_set,
+ MakeOrphanable(Ref(), i));
}
}
endpoint_map_ = std::move(endpoint_map);
// If the address list is empty, report TRANSIENT_FAILURE.
- // TODO(roth): As part of adding dualstack backend support, we need to
- // also handle the case where the list of addresses for a given
- // endpoint is empty.
- if (addresses_.empty()) {
+ if (endpoints_.empty()) {
absl::Status status =
args.addresses.ok() ? absl::UnavailableError(absl::StrCat(
"empty address list: ", args.resolution_note))
@@ -726,7 +726,7 @@ void RingHash::UpdateAggregatedConnectivityStateLocked(
start_connection_attempt = true;
} else if (num_connecting > 0) {
state = GRPC_CHANNEL_CONNECTING;
- } else if (num_transient_failure == 1 && addresses_.size() > 1) {
+ } else if (num_transient_failure == 1 && endpoints_.size() > 1) {
state = GRPC_CHANNEL_CONNECTING;
start_connection_attempt = true;
} else if (num_idle > 0) {
@@ -742,7 +742,7 @@ void RingHash::UpdateAggregatedConnectivityStateLocked(
", num_transient_failure=%" PRIuPTR ", size=%" PRIuPTR
") -- start_connection_attempt=%d",
this, ConnectivityStateName(state), num_idle, num_connecting,
- num_ready, num_transient_failure, addresses_.size(),
+ num_ready, num_transient_failure, endpoints_.size(),
start_connection_attempt);
}
// In TRANSIENT_FAILURE, report the last reported failure.
@@ -794,29 +794,31 @@ void RingHash::UpdateAggregatedConnectivityStateLocked(
// CONNECTING, just to ensure that we don't remain in CONNECTING state
// indefinitely if there are no new picks coming in.
if (start_connection_attempt && entered_transient_failure) {
- size_t first_idle_index = addresses_.size();
- for (size_t i = 0; i < addresses_.size(); ++i) {
- auto it = endpoint_map_.find(addresses_[i]);
+ size_t first_idle_index = endpoints_.size();
+ for (size_t i = 0; i < endpoints_.size(); ++i) {
+ auto it =
+ endpoint_map_.find(EndpointAddressSet(endpoints_[i].addresses()));
GPR_ASSERT(it != endpoint_map_.end());
if (it->second->connectivity_state() == GRPC_CHANNEL_CONNECTING) {
- first_idle_index = addresses_.size();
+ first_idle_index = endpoints_.size();
break;
}
- if (first_idle_index == addresses_.size() &&
+ if (first_idle_index == endpoints_.size() &&
it->second->connectivity_state() == GRPC_CHANNEL_IDLE) {
first_idle_index = i;
}
}
- if (first_idle_index != addresses_.size()) {
- auto it = endpoint_map_.find(addresses_[first_idle_index]);
+ if (first_idle_index != endpoints_.size()) {
+ auto it = endpoint_map_.find(
+ EndpointAddressSet(endpoints_[first_idle_index].addresses()));
GPR_ASSERT(it != endpoint_map_.end());
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)) {
gpr_log(GPR_INFO,
"[RH %p] triggering internal connection attempt for endpoint "
"%p (%s) (index %" PRIuPTR " of %" PRIuPTR ")",
this, it->second.get(),
- addresses_[first_idle_index].ToString().c_str(),
- first_idle_index, addresses_.size());
+ endpoints_[first_idle_index].ToString().c_str(),
+ first_idle_index, endpoints_.size());
}
it->second->RequestConnectionLocked();
}
diff --git a/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc b/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc
index 7a23aa83084..dc71d4e4409 100644
--- a/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc
@@ -92,8 +92,8 @@
#include "src/core/lib/load_balancing/lb_policy.h"
#include "src/core/lib/load_balancing/lb_policy_factory.h"
#include "src/core/lib/load_balancing/lb_policy_registry.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/resolver/resolver_registry.h"
-#include "src/core/lib/resolver/server_address.h"
#include "src/core/lib/security/credentials/credentials.h"
#include "src/core/lib/security/credentials/fake/fake_credentials.h"
#include "src/core/lib/service_config/service_config_impl.h"
@@ -709,7 +709,7 @@ class RlsLb : public LoadBalancingPolicy {
OrphanablePtr rls_channel_ ABSL_GUARDED_BY(mu_);
// Accessed only from within WorkSerializer.
- absl::StatusOr addresses_;
+ absl::StatusOr addresses_;
ChannelArgs channel_args_;
RefCountedPtr config_;
RefCountedPtr default_child_policy_;
@@ -1877,7 +1877,7 @@ absl::Status RlsLb::UpdateLocked(UpdateArgs args) {
// Swap out addresses.
// If the new address list is an error and we have an existing address list,
// stick with the existing addresses.
- absl::StatusOr old_addresses;
+ absl::StatusOr old_addresses;
if (args.addresses.ok()) {
old_addresses = std::move(addresses_);
addresses_ = std::move(args.addresses);
diff --git a/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc b/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc
index 2a556d64489..87d291ca858 100644
--- a/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc
@@ -51,6 +51,7 @@
#include "src/core/lib/load_balancing/lb_policy.h"
#include "src/core/lib/load_balancing/lb_policy_factory.h"
#include "src/core/lib/load_balancing/subchannel_interface.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/resolver/server_address.h"
#include "src/core/lib/transport/connectivity_state.h"
@@ -523,17 +524,17 @@ class RoundRobin : public LoadBalancingPolicy {
class RoundRobinEndpointList : public EndpointList {
public:
RoundRobinEndpointList(RefCountedPtr round_robin,
- const ServerAddressList& addresses,
+ const EndpointAddressesList& endpoints,
const ChannelArgs& args)
: EndpointList(std::move(round_robin),
GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)
? "RoundRobinEndpointList"
: nullptr) {
- Init(addresses, args,
+ Init(endpoints, args,
[&](RefCountedPtr endpoint_list,
- const ServerAddress& address, const ChannelArgs& args) {
+ const EndpointAddresses& addresses, const ChannelArgs& args) {
return MakeOrphanable(
- std::move(endpoint_list), address, args,
+ std::move(endpoint_list), addresses, args,
policy()->work_serializer());
});
}
@@ -542,10 +543,11 @@ class RoundRobin : public LoadBalancingPolicy {
class RoundRobinEndpoint : public Endpoint {
public:
RoundRobinEndpoint(RefCountedPtr endpoint_list,
- const ServerAddress& address, const ChannelArgs& args,
+ const EndpointAddresses& addresses,
+ const ChannelArgs& args,
std::shared_ptr work_serializer)
: Endpoint(std::move(endpoint_list)) {
- Init(address, args, std::move(work_serializer));
+ Init(addresses, args, std::move(work_serializer));
}
private:
@@ -685,10 +687,10 @@ void RoundRobin::ResetBackoffLocked() {
}
absl::Status RoundRobin::UpdateLocked(UpdateArgs args) {
- ServerAddressList addresses;
+ EndpointAddressesList addresses;
if (args.addresses.ok()) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
- gpr_log(GPR_INFO, "[RR %p] received update with %" PRIuPTR " addresses",
+ gpr_log(GPR_INFO, "[RR %p] received update with %" PRIuPTR " endpoints",
this, args.addresses->size());
}
addresses = std::move(*args.addresses);
@@ -712,9 +714,6 @@ absl::Status RoundRobin::UpdateLocked(UpdateArgs args) {
args.args);
// If the new list is empty, immediately promote it to
// endpoint_list_ and report TRANSIENT_FAILURE.
- // TODO(roth): As part of adding dualstack backend support, we need to
- // also handle the case where the list of addresses for a given
- // endpoint is empty.
if (latest_pending_endpoint_list_->size() == 0) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace) &&
endpoint_list_ != nullptr) {
@@ -838,7 +837,6 @@ void RoundRobin::RoundRobinEndpointList::
}
// Only set connectivity state if this is the current child list.
if (round_robin->endpoint_list_.get() != this) return;
- // FIXME: scan children each time instead of keeping counters?
// First matching rule wins:
// 1) ANY child is READY => policy is READY.
// 2) ANY child is CONNECTING => policy is CONNECTING.
diff --git a/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h b/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h
index 7e9b4df8648..47384794869 100644
--- a/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h
+++ b/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h
@@ -380,7 +380,7 @@ SubchannelList::SubchannelList(
// Create a subchannel for each address.
for (ServerAddress address : addresses) {
RefCountedPtr subchannel =
- helper->CreateSubchannel(address, args);
+ helper->CreateSubchannel(address.address(), address.args(), args);
if (subchannel == nullptr) {
// Subchannel could not be created.
if (GPR_UNLIKELY(tracer_ != nullptr)) {
diff --git a/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc b/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc
index 0b877298ad5..5c426d467a0 100644
--- a/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc
@@ -73,6 +73,7 @@
#include "src/core/lib/load_balancing/lb_policy.h"
#include "src/core/lib/load_balancing/lb_policy_factory.h"
#include "src/core/lib/load_balancing/subchannel_interface.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/resolver/server_address.h"
#include "src/core/lib/transport/connectivity_state.h"
@@ -1009,7 +1010,8 @@ class WeightedRoundRobin : public LoadBalancingPolicy {
// Represents the weight for a given address.
class EndpointWeight : public RefCounted {
public:
- EndpointWeight(RefCountedPtr wrr, std::string key)
+ EndpointWeight(RefCountedPtr wrr,
+ EndpointAddressSet key)
: wrr_(std::move(wrr)), key_(std::move(key)) {}
~EndpointWeight() override;
@@ -1023,7 +1025,7 @@ class WeightedRoundRobin : public LoadBalancingPolicy {
private:
RefCountedPtr wrr_;
- const std::string key_;
+ const EndpointAddressSet key_;
Mutex mu_;
float weight_ ABSL_GUARDED_BY(&mu_) = 0;
@@ -1036,12 +1038,12 @@ class WeightedRoundRobin : public LoadBalancingPolicy {
class WrrEndpoint : public Endpoint {
public:
WrrEndpoint(RefCountedPtr endpoint_list,
- const ServerAddress& address, const ChannelArgs& args,
+ const EndpointAddresses& addresses, const ChannelArgs& args,
std::shared_ptr work_serializer)
: Endpoint(std::move(endpoint_list)),
weight_(policy()->GetOrCreateWeight(
- address.address())) {
- Init(address, args, std::move(work_serializer));
+ addresses.addresses())) {
+ Init(addresses, args, std::move(work_serializer));
}
RefCountedPtr weight() const { return weight_; }
@@ -1063,7 +1065,9 @@ class WeightedRoundRobin : public LoadBalancingPolicy {
};
RefCountedPtr CreateSubchannel(
- ServerAddress address, const ChannelArgs& args) override;
+ const grpc_resolved_address& address,
+ const ChannelArgs& per_address_args,
+ const ChannelArgs& args) override;
// Called when the child policy reports a connectivity state update.
void OnStateUpdate(absl::optional old_state,
@@ -1074,16 +1078,17 @@ class WeightedRoundRobin : public LoadBalancingPolicy {
};
WrrEndpointList(RefCountedPtr wrr,
- const ServerAddressList& addresses, const ChannelArgs& args)
+ const EndpointAddressesList& endpoints,
+ const ChannelArgs& args)
: EndpointList(std::move(wrr),
GRPC_TRACE_FLAG_ENABLED(grpc_lb_wrr_trace)
? "WrrEndpointList"
: nullptr) {
- Init(addresses, args,
+ Init(endpoints, args,
[&](RefCountedPtr endpoint_list,
- const ServerAddress& address, const ChannelArgs& args) {
+ const EndpointAddresses& addresses, const ChannelArgs& args) {
return MakeOrphanable(
- std::move(endpoint_list), address, args,
+ std::move(endpoint_list), addresses, args,
policy()->work_serializer());
});
}
@@ -1192,7 +1197,7 @@ class WeightedRoundRobin : public LoadBalancingPolicy {
void ShutdownLocked() override;
RefCountedPtr GetOrCreateWeight(
- const grpc_resolved_address& address);
+ const std::vector& addresses);
RefCountedPtr config_;
@@ -1205,7 +1210,7 @@ class WeightedRoundRobin : public LoadBalancingPolicy {
OrphanablePtr latest_pending_endpoint_list_;
Mutex endpoint_weight_map_mu_;
- std::map> endpoint_weight_map_
+ std::map endpoint_weight_map_
ABSL_GUARDED_BY(&endpoint_weight_map_mu_);
bool shutdown_ = false;
@@ -1245,7 +1250,7 @@ void WeightedRoundRobin::EndpointWeight::MaybeUpdateWeight(
gpr_log(GPR_INFO,
"[WRR %p] subchannel %s: qps=%f, eps=%f, utilization=%f: "
"error_util_penalty=%f, weight=%f (not updating)",
- wrr_.get(), key_.c_str(), qps, eps, utilization,
+ wrr_.get(), key_.ToString().c_str(), qps, eps, utilization,
error_utilization_penalty, weight);
}
return;
@@ -1258,7 +1263,7 @@ void WeightedRoundRobin::EndpointWeight::MaybeUpdateWeight(
"[WRR %p] subchannel %s: qps=%f, eps=%f, utilization=%f "
"error_util_penalty=%f : setting weight=%f weight_=%f now=%s "
"last_update_time_=%s non_empty_since_=%s",
- wrr_.get(), key_.c_str(), qps, eps, utilization,
+ wrr_.get(), key_.ToString().c_str(), qps, eps, utilization,
error_utilization_penalty, weight, weight_, now.ToString().c_str(),
last_update_time_.ToString().c_str(),
non_empty_since_.ToString().c_str());
@@ -1277,7 +1282,7 @@ float WeightedRoundRobin::EndpointWeight::GetWeight(
"[WRR %p] subchannel %s: getting weight: now=%s "
"weight_expiration_period=%s blackout_period=%s "
"last_update_time_=%s non_empty_since_=%s weight_=%f",
- wrr_.get(), key_.c_str(), now.ToString().c_str(),
+ wrr_.get(), key_.ToString().c_str(), now.ToString().c_str(),
weight_expiration_period.ToString().c_str(),
blackout_period.ToString().c_str(),
last_update_time_.ToString().c_str(),
@@ -1510,59 +1515,56 @@ void WeightedRoundRobin::ResetBackoffLocked() {
absl::Status WeightedRoundRobin::UpdateLocked(UpdateArgs args) {
global_stats().IncrementWrrUpdates();
config_ = std::move(args.config);
- ServerAddressList addresses;
+ EndpointAddressesList addresses;
if (args.addresses.ok()) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_wrr_trace)) {
gpr_log(GPR_INFO, "[WRR %p] received update with %" PRIuPTR " addresses",
this, args.addresses->size());
}
- // Weed out duplicate addresses. Also sort the addresses so that if
- // the set of the addresses don't change, their indexes in the
- // subchannel list don't change, since this avoids unnecessary churn
- // in the picker. Note that this does not ensure that if a given
- // address remains present that it will have the same index; if,
- // for example, an address at the end of the list is replaced with one
- // that sorts much earlier in the list, then all of the addresses in
- // between those two positions will have changed indexes.
- struct AddressLessThan {
- bool operator()(const ServerAddress& address1,
- const ServerAddress& address2) const {
- const grpc_resolved_address& addr1 = address1.address();
- const grpc_resolved_address& addr2 = address2.address();
- if (addr1.len != addr2.len) return addr1.len < addr2.len;
- return memcmp(addr1.addr, addr2.addr, addr1.len) < 0;
+ // Weed out duplicate endpoints. Also sort the endpoints so that if
+ // the set of endpoints doesn't change, their indexes in the endpoint
+ // list don't change, since this avoids unnecessary churn in the
+ // picker. Note that this does not ensure that if a given endpoint
+ // remains present that it will have the same index; if, for example,
+ // an endpoint at the end of the list is replaced with one that sorts
+ // much earlier in the list, then all of the endpoints in between those
+ // two positions will have changed indexes.
+ struct EndpointAddressesLessThan {
+ bool operator()(const EndpointAddresses& endpoint1,
+ const EndpointAddresses& endpoint2) const {
+ // Compare unordered addresses only, not channel args.
+ EndpointAddressSet e1(endpoint1.addresses());
+ EndpointAddressSet e2(endpoint2.addresses());
+ return e1 < e2;
}
};
- std::set ordered_addresses(
+ std::set ordered_addresses(
args.addresses->begin(), args.addresses->end());
- addresses =
- ServerAddressList(ordered_addresses.begin(), ordered_addresses.end());
+ addresses = EndpointAddressesList(ordered_addresses.begin(),
+ ordered_addresses.end());
} else {
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_wrr_trace)) {
gpr_log(GPR_INFO, "[WRR %p] received update with address error: %s", this,
args.addresses.status().ToString().c_str());
}
- // If we already have a subchannel list, then keep using the existing
+ // If we already have an endpoint list, then keep using the existing
// list, but still report back that the update was not accepted.
if (endpoint_list_ != nullptr) return args.addresses.status();
}
- // Create new subchannel list, replacing the previous pending list, if any.
+ // Create new endpoint list, replacing the previous pending list, if any.
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_wrr_trace) &&
latest_pending_endpoint_list_ != nullptr) {
- gpr_log(GPR_INFO, "[WRR %p] replacing previous pending subchannel list %p",
+ gpr_log(GPR_INFO, "[WRR %p] replacing previous pending endpoint list %p",
this, latest_pending_endpoint_list_.get());
}
latest_pending_endpoint_list_ =
MakeOrphanable(Ref(), std::move(addresses), args.args);
// If the new list is empty, immediately promote it to
// endpoint_list_ and report TRANSIENT_FAILURE.
- // TODO(roth): As part of adding dualstack backend support, we need to
- // also handle the case where the list of addresses for a given
- // endpoint is empty.
if (latest_pending_endpoint_list_->size() == 0) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_wrr_trace) &&
endpoint_list_ != nullptr) {
- gpr_log(GPR_INFO, "[WRR %p] replacing previous subchannel list %p", this,
+ gpr_log(GPR_INFO, "[WRR %p] replacing previous endpoint list %p", this,
endpoint_list_.get());
}
endpoint_list_ = std::move(latest_pending_endpoint_list_);
@@ -1584,18 +1586,18 @@ absl::Status WeightedRoundRobin::UpdateLocked(UpdateArgs args) {
}
RefCountedPtr
-WeightedRoundRobin::GetOrCreateWeight(const grpc_resolved_address& address) {
- auto key = grpc_sockaddr_to_uri(&address);
- if (!key.ok()) return nullptr;
+WeightedRoundRobin::GetOrCreateWeight(
+ const std::vector& addresses) {
+ EndpointAddressSet key(addresses);
MutexLock lock(&endpoint_weight_map_mu_);
- auto it = endpoint_weight_map_.find(*key);
+ auto it = endpoint_weight_map_.find(key);
if (it != endpoint_weight_map_.end()) {
auto weight = it->second->RefIfNonZero();
if (weight != nullptr) return weight;
}
auto weight = MakeRefCounted(
- Ref(DEBUG_LOCATION, "EndpointWeight"), *key);
- endpoint_weight_map_.emplace(*key, weight.get());
+ Ref(DEBUG_LOCATION, "EndpointWeight"), key);
+ endpoint_weight_map_.emplace(key, weight.get());
return weight;
}
@@ -1619,10 +1621,11 @@ void WeightedRoundRobin::WrrEndpointList::WrrEndpoint::OobWatcher::
RefCountedPtr
WeightedRoundRobin::WrrEndpointList::WrrEndpoint::CreateSubchannel(
- ServerAddress address, const ChannelArgs& args) {
+ const grpc_resolved_address& address, const ChannelArgs& per_address_args,
+ const ChannelArgs& args) {
auto* wrr = policy();
- auto subchannel =
- wrr->channel_control_helper()->CreateSubchannel(std::move(address), args);
+ auto subchannel = wrr->channel_control_helper()->CreateSubchannel(
+ address, per_address_args, args);
// Start OOB watch if configured.
if (wrr->config_->enable_oob_load_report()) {
subchannel->AddDataWatcher(MakeOobBackendMetricWatcher(
@@ -1657,7 +1660,7 @@ void WeightedRoundRobin::WrrEndpointList::WrrEndpoint::OnStateUpdate(
} else if (new_state == GRPC_CHANNEL_READY) {
// If we transition back to READY state, restart the blackout period.
// Skip this if this is the initial notification for this
- // subchannel (which happens whenever we get updated addresses and
+ // endpoint (which happens whenever we get updated addresses and
// create a new endpoint list). Also skip it if the previous state
// was READY (which should never happen in practice, but we've seen
// at least one bug that caused this in the outlier_detection
diff --git a/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc b/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc
index b3ccbbf9e8f..fad7aa96857 100644
--- a/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc
@@ -60,7 +60,7 @@
#include "src/core/lib/load_balancing/lb_policy.h"
#include "src/core/lib/load_balancing/lb_policy_factory.h"
#include "src/core/lib/load_balancing/lb_policy_registry.h"
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/transport/connectivity_state.h"
// IWYU pragma: no_include
@@ -157,7 +157,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
void Orphan() override;
absl::Status UpdateLocked(const WeightedTargetLbConfig::ChildConfig& config,
- absl::StatusOr addresses,
+ absl::StatusOr addresses,
const std::string& resolution_note,
const ChannelArgs& args);
void ResetBackoffLocked();
@@ -337,7 +337,7 @@ absl::Status WeightedTargetLb::UpdateLocked(UpdateArgs args) {
target = MakeOrphanable(
Ref(DEBUG_LOCATION, "WeightedChild"), name);
}
- absl::StatusOr addresses;
+ absl::StatusOr addresses;
if (address_map.ok()) {
auto it = address_map->find(name);
if (it == address_map->end()) {
@@ -588,7 +588,7 @@ WeightedTargetLb::WeightedChild::CreateChildPolicyLocked(
absl::Status WeightedTargetLb::WeightedChild::UpdateLocked(
const WeightedTargetLbConfig::ChildConfig& config,
- absl::StatusOr addresses,
+ absl::StatusOr addresses,
const std::string& resolution_note, const ChannelArgs& args) {
if (weighted_target_policy_->shutting_down_) return absl::OkStatus();
// Update child weight.
diff --git a/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h b/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h
index c7bbf197da0..1df82d2fa18 100644
--- a/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h
+++ b/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h
@@ -19,7 +19,7 @@
#include
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
// Channel arg indicating the xDS cluster name.
// Set by xds_cluster_impl LB policy and used by GoogleDefaultCredentials.
diff --git a/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc b/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc
index 158428996f7..50740151c9d 100644
--- a/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc
@@ -56,6 +56,7 @@
#include "src/core/lib/gprpp/sync.h"
#include "src/core/lib/gprpp/validation_errors.h"
#include "src/core/lib/iomgr/pollset_set.h"
+#include "src/core/lib/iomgr/resolved_address.h"
#include "src/core/lib/json/json.h"
#include "src/core/lib/json/json_args.h"
#include "src/core/lib/json/json_object_loader.h"
@@ -64,7 +65,7 @@
#include "src/core/lib/load_balancing/lb_policy_factory.h"
#include "src/core/lib/load_balancing/lb_policy_registry.h"
#include "src/core/lib/load_balancing/subchannel_interface.h"
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/transport/connectivity_state.h"
namespace grpc_core {
@@ -236,7 +237,8 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
std::move(xds_cluster_impl_policy)) {}
RefCountedPtr CreateSubchannel(
- ServerAddress address, const ChannelArgs& args) override;
+ const grpc_resolved_address& address,
+ const ChannelArgs& per_address_args, const ChannelArgs& args) override;
void UpdateState(grpc_connectivity_state state, const absl::Status& status,
RefCountedPtr picker) override;
};
@@ -248,8 +250,8 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
OrphanablePtr CreateChildPolicyLocked(
const ChannelArgs& args);
absl::Status UpdateChildPolicyLocked(
- absl::StatusOr addresses, std::string resolution_note,
- const ChannelArgs& args);
+ absl::StatusOr addresses,
+ std::string resolution_note, const ChannelArgs& args);
void MaybeUpdatePickerLocked();
@@ -567,8 +569,8 @@ OrphanablePtr XdsClusterImplLb::CreateChildPolicyLocked(
}
absl::Status XdsClusterImplLb::UpdateChildPolicyLocked(
- absl::StatusOr addresses, std::string resolution_note,
- const ChannelArgs& args) {
+ absl::StatusOr addresses,
+ std::string resolution_note, const ChannelArgs& args) {
// Create policy if needed.
if (child_policy_ == nullptr) {
child_policy_ = CreateChildPolicyLocked(args);
@@ -594,12 +596,13 @@ absl::Status XdsClusterImplLb::UpdateChildPolicyLocked(
//
RefCountedPtr XdsClusterImplLb::Helper::CreateSubchannel(
- ServerAddress address, const ChannelArgs& args) {
+ const grpc_resolved_address& address, const ChannelArgs& per_address_args,
+ const ChannelArgs& args) {
if (parent()->shutting_down_) return nullptr;
// If load reporting is enabled, wrap the subchannel such that it
// includes the locality stats object, which will be used by the Picker.
if (parent()->config_->lrs_load_reporting_server().has_value()) {
- auto locality_name = address.args().GetObjectRef();
+ auto locality_name = per_address_args.GetObjectRef();
RefCountedPtr locality_stats =
parent()->xds_client_->AddClusterLocalityStats(
parent()->config_->lrs_load_reporting_server().value(),
@@ -608,7 +611,7 @@ RefCountedPtr XdsClusterImplLb::Helper::CreateSubchannel(
if (locality_stats != nullptr) {
return MakeRefCounted(
parent()->channel_control_helper()->CreateSubchannel(
- std::move(address), args),
+ address, per_address_args, args),
std::move(locality_stats));
}
gpr_log(
@@ -623,7 +626,7 @@ RefCountedPtr XdsClusterImplLb::Helper::CreateSubchannel(
}
// Load reporting not enabled, so don't wrap the subchannel.
return parent()->channel_control_helper()->CreateSubchannel(
- std::move(address), args);
+ address, per_address_args, args);
}
void XdsClusterImplLb::Helper::UpdateState(
diff --git a/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc b/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc
index c95f9a35f8e..4f6e8611b5a 100644
--- a/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc
@@ -59,7 +59,7 @@
#include "src/core/lib/load_balancing/lb_policy.h"
#include "src/core/lib/load_balancing/lb_policy_factory.h"
#include "src/core/lib/load_balancing/lb_policy_registry.h"
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/transport/connectivity_state.h"
namespace grpc_core {
@@ -149,7 +149,7 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
absl::Status UpdateLocked(
RefCountedPtr config,
- const absl::StatusOr& addresses,
+ const absl::StatusOr& addresses,
const ChannelArgs& args);
void ExitIdleLocked();
void ResetBackoffLocked();
@@ -482,7 +482,7 @@ XdsClusterManagerLb::ClusterChild::CreateChildPolicyLocked(
absl::Status XdsClusterManagerLb::ClusterChild::UpdateLocked(
RefCountedPtr config,
- const absl::StatusOr& addresses,
+ const absl::StatusOr& addresses,
const ChannelArgs& args) {
if (xds_cluster_manager_policy_->shutting_down_) return absl::OkStatus();
// Update child weight.
diff --git a/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc b/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc
index 5732cc02b30..42f8673e724 100644
--- a/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc
@@ -69,9 +69,9 @@
#include "src/core/lib/load_balancing/lb_policy.h"
#include "src/core/lib/load_balancing/lb_policy_factory.h"
#include "src/core/lib/load_balancing/lb_policy_registry.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/resolver/resolver.h"
#include "src/core/lib/resolver/resolver_registry.h"
-#include "src/core/lib/resolver/server_address.h"
#define GRPC_EDS_DEFAULT_FALLBACK_TIMEOUT 10000
@@ -390,7 +390,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
absl::Status UpdateChildPolicyLocked();
OrphanablePtr CreateChildPolicyLocked(
const ChannelArgs& args);
- ServerAddressList CreateChildPolicyAddressesLocked();
+ EndpointAddressesList CreateChildPolicyAddressesLocked();
std::string CreateChildPolicyResolutionNoteLocked();
RefCountedPtr CreateChildPolicyConfigLocked();
ChannelArgs CreateChildPolicyArgsLocked(const ChannelArgs& args_in);
@@ -768,8 +768,8 @@ void XdsClusterResolverLb::OnResourceDoesNotExist(size_t index,
// child policy-related methods
//
-ServerAddressList XdsClusterResolverLb::CreateChildPolicyAddressesLocked() {
- ServerAddressList addresses;
+EndpointAddressesList XdsClusterResolverLb::CreateChildPolicyAddressesLocked() {
+ EndpointAddressesList addresses;
for (const auto& discovery_entry : discovery_mechanisms_) {
const auto& priority_list =
GetUpdatePriorityList(*discovery_entry.latest_update);
@@ -790,7 +790,7 @@ ServerAddressList XdsClusterResolverLb::CreateChildPolicyAddressesLocked() {
locality.lb_weight *
endpoint.args().GetInt(GRPC_ARG_ADDRESS_WEIGHT).value_or(1);
addresses.emplace_back(
- endpoint.address(),
+ endpoint.addresses(),
endpoint.args()
.SetObject(hierarchical_path_attr)
.Set(GRPC_ARG_ADDRESS_WEIGHT, endpoint_weight)
diff --git a/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc b/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc
index 8f1cab11dcb..a3916c781e3 100644
--- a/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc
@@ -65,6 +65,7 @@
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/iomgr_fwd.h"
#include "src/core/lib/iomgr/pollset_set.h"
+#include "src/core/lib/iomgr/resolved_address.h"
#include "src/core/lib/json/json.h"
#include "src/core/lib/json/json_args.h"
#include "src/core/lib/json/json_object_loader.h"
@@ -73,7 +74,7 @@
#include "src/core/lib/load_balancing/lb_policy_factory.h"
#include "src/core/lib/load_balancing/lb_policy_registry.h"
#include "src/core/lib/load_balancing/subchannel_interface.h"
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/transport/connectivity_state.h"
namespace grpc_core {
@@ -97,9 +98,9 @@ struct PtrLessThan {
}
};
-XdsHealthStatus GetAddressHealthStatus(const ServerAddress& address) {
+XdsHealthStatus GetEndpointHealthStatus(const EndpointAddresses& endpoint) {
return XdsHealthStatus(static_cast(
- address.args()
+ endpoint.args()
.GetInt(GRPC_ARG_XDS_HEALTH_STATUS)
.value_or(XdsHealthStatus::HealthStatus::kUnknown)));
}
@@ -224,7 +225,8 @@ class XdsOverrideHostLb : public LoadBalancingPolicy {
std::move(xds_override_host_policy)) {}
RefCountedPtr CreateSubchannel(
- ServerAddress address, const ChannelArgs& args) override;
+ const grpc_resolved_address& address,
+ const ChannelArgs& per_address_args, const ChannelArgs& args) override;
void UpdateState(grpc_connectivity_state state, const absl::Status& status,
RefCountedPtr picker) override;
};
@@ -285,11 +287,12 @@ class XdsOverrideHostLb : public LoadBalancingPolicy {
void MaybeUpdatePickerLocked();
- absl::StatusOr UpdateAddressMap(
- absl::StatusOr addresses);
+ absl::StatusOr UpdateAddressMap(
+ absl::StatusOr endpoints);
RefCountedPtr AdoptSubchannel(
- ServerAddress address, RefCountedPtr subchannel);
+ const grpc_resolved_address& address,
+ RefCountedPtr subchannel);
void UnsetSubchannel(absl::string_view key, SubchannelWrapper* subchannel);
@@ -501,43 +504,45 @@ OrphanablePtr XdsOverrideHostLb::CreateChildPolicyLocked(
return lb_policy;
}
-absl::StatusOr XdsOverrideHostLb::UpdateAddressMap(
- absl::StatusOr addresses) {
- if (!addresses.ok()) {
+absl::StatusOr XdsOverrideHostLb::UpdateAddressMap(
+ absl::StatusOr endpoints) {
+ if (!endpoints.ok()) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_override_host_trace)) {
gpr_log(GPR_INFO, "[xds_override_host_lb %p] address error: %s", this,
- addresses.status().ToString().c_str());
+ endpoints.status().ToString().c_str());
}
- return addresses;
+ return endpoints;
}
- ServerAddressList return_value;
+ // TODO(roth): As we clarify this part of the dualstack design, add
+ // support for multiple addresses per endpoint.
+ EndpointAddressesList return_value;
std::map addresses_for_map;
- for (const auto& address : *addresses) {
- XdsHealthStatus status = GetAddressHealthStatus(address);
+ for (const auto& endpoint : *endpoints) {
+ XdsHealthStatus status = GetEndpointHealthStatus(endpoint);
if (status.status() != XdsHealthStatus::kDraining) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_override_host_trace)) {
gpr_log(GPR_INFO,
- "[xds_override_host_lb %p] address %s: not draining, "
+ "[xds_override_host_lb %p] endpoint %s: not draining, "
"passing to child",
- this, address.ToString().c_str());
+ this, endpoint.ToString().c_str());
}
- return_value.push_back(address);
+ return_value.push_back(endpoint);
} else if (!config_->override_host_status_set().Contains(status)) {
// Skip draining hosts if not in the override status set.
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_override_host_trace)) {
gpr_log(GPR_INFO,
- "[xds_override_host_lb %p] address %s: draining but not in "
+ "[xds_override_host_lb %p] endpoint %s: draining but not in "
"override_host_status set -- ignoring",
- this, address.ToString().c_str());
+ this, endpoint.ToString().c_str());
}
continue;
}
- auto key = grpc_sockaddr_to_uri(&address.address());
+ auto key = grpc_sockaddr_to_uri(&endpoint.address());
if (key.ok()) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_override_host_trace)) {
gpr_log(GPR_INFO,
- "[xds_override_host_lb %p] address %s: adding map key %s", this,
- address.ToString().c_str(), key->c_str());
+ "[xds_override_host_lb %p] endpoint %s: adding map key %s",
+ this, endpoint.ToString().c_str(), key->c_str());
}
addresses_for_map.emplace(std::move(*key), status);
}
@@ -581,8 +586,9 @@ absl::StatusOr XdsOverrideHostLb::UpdateAddressMap(
RefCountedPtr
XdsOverrideHostLb::AdoptSubchannel(
- ServerAddress address, RefCountedPtr subchannel) {
- auto key = grpc_sockaddr_to_uri(&address.address());
+ const grpc_resolved_address& address,
+ RefCountedPtr subchannel) {
+ auto key = grpc_sockaddr_to_uri(&address);
if (!key.ok()) {
return subchannel;
}
@@ -646,9 +652,10 @@ void XdsOverrideHostLb::OnSubchannelConnectivityStateChange(
//
RefCountedPtr XdsOverrideHostLb::Helper::CreateSubchannel(
- ServerAddress address, const ChannelArgs& args) {
- auto subchannel =
- parent()->channel_control_helper()->CreateSubchannel(address, args);
+ const grpc_resolved_address& address, const ChannelArgs& per_address_args,
+ const ChannelArgs& args) {
+ auto subchannel = parent()->channel_control_helper()->CreateSubchannel(
+ address, per_address_args, args);
return parent()->AdoptSubchannel(address, subchannel);
}
diff --git a/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc b/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc
index fa4918633c9..26f0ec9084a 100644
--- a/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc
@@ -51,7 +51,7 @@
#include "src/core/lib/load_balancing/lb_policy.h"
#include "src/core/lib/load_balancing/lb_policy_factory.h"
#include "src/core/lib/load_balancing/lb_policy_registry.h"
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
namespace grpc_core {
diff --git a/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc b/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc
index 1f782b5e254..f0fac923155 100644
--- a/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc
+++ b/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc
@@ -43,9 +43,9 @@
#include "src/core/lib/gprpp/orphanable.h"
#include "src/core/lib/iomgr/error.h"
#include "src/core/lib/iomgr/resolved_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/resolver/resolver.h"
#include "src/core/lib/resolver/resolver_factory.h"
-#include "src/core/lib/resolver/server_address.h"
#include "src/core/lib/uri/uri_parser.h"
namespace grpc_core {
@@ -53,7 +53,7 @@ namespace {
class BinderResolver : public Resolver {
public:
- BinderResolver(ServerAddressList addresses, ResolverArgs args)
+ BinderResolver(EndpointAddressesList addresses, ResolverArgs args)
: result_handler_(std::move(args.result_handler)),
addresses_(std::move(addresses)),
channel_args_(std::move(args.args)) {}
@@ -70,7 +70,7 @@ class BinderResolver : public Resolver {
private:
std::unique_ptr result_handler_;
- ServerAddressList addresses_;
+ EndpointAddressesList addresses_;
ChannelArgs channel_args_;
};
@@ -83,7 +83,7 @@ class BinderResolverFactory : public ResolverFactory {
}
OrphanablePtr CreateResolver(ResolverArgs args) const override {
- ServerAddressList addresses;
+ EndpointAddressesList addresses;
if (!ParseUri(args.uri, &addresses)) return nullptr;
return MakeOrphanable(std::move(addresses),
std::move(args));
@@ -116,7 +116,7 @@ class BinderResolverFactory : public ResolverFactory {
return absl::OkStatus();
}
- static bool ParseUri(const URI& uri, ServerAddressList* addresses) {
+ static bool ParseUri(const URI& uri, EndpointAddressesList* addresses) {
grpc_resolved_address addr;
{
if (!uri.authority().empty()) {
diff --git a/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc b/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc
index 47706e2cbb8..c85c850a87d 100644
--- a/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc
+++ b/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc
@@ -70,7 +70,7 @@
#include "src/core/lib/channel/channel_args.h"
#include "src/core/lib/config/config_vars.h"
#include "src/core/lib/iomgr/resolve_address.h"
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/service_config/service_config_impl.h"
#include "src/core/lib/transport/error_utils.h"
@@ -178,9 +178,9 @@ class AresClientChannelDNSResolver : public PollingResolver {
std::unique_ptr txt_request_
ABSL_GUARDED_BY(on_resolved_mu_);
// Output fields from ares request.
- std::unique_ptr addresses_
+ std::unique_ptr addresses_
ABSL_GUARDED_BY(on_resolved_mu_);
- std::unique_ptr balancer_addresses_
+ std::unique_ptr balancer_addresses_
ABSL_GUARDED_BY(on_resolved_mu_);
char* service_config_json_ ABSL_GUARDED_BY(on_resolved_mu_) = nullptr;
};
@@ -299,7 +299,7 @@ AresClientChannelDNSResolver::AresRequestWrapper::OnResolvedLocked(
if (addresses_ != nullptr) {
result.addresses = std::move(*addresses_);
} else {
- result.addresses = ServerAddressList();
+ result.addresses.emplace();
}
if (service_config_json_ != nullptr) {
auto service_config_string = ChooseServiceConfig(service_config_json_);
@@ -320,8 +320,8 @@ AresClientChannelDNSResolver::AresRequestWrapper::OnResolvedLocked(
}
}
if (balancer_addresses_ != nullptr) {
- result.args = SetGrpcLbBalancerAddresses(
- result.args, ServerAddressList(*balancer_addresses_));
+ result.args =
+ SetGrpcLbBalancerAddresses(result.args, *balancer_addresses_);
}
} else {
GRPC_CARES_TRACE_LOG("resolver:%p dns resolution failed: %s", this,
@@ -535,7 +535,7 @@ class AresDNSResolver : public DNSResolver {
absl::StatusOr>)>
on_resolve_address_done_;
// currently resolving addresses
- std::unique_ptr addresses_;
+ std::unique_ptr addresses_;
};
class AresSRVRequest : public AresRequest {
@@ -583,7 +583,7 @@ class AresDNSResolver : public DNSResolver {
absl::StatusOr>)>
on_resolve_address_done_;
// currently resolving addresses
- std::unique_ptr balancer_addresses_;
+ std::unique_ptr balancer_addresses_;
};
class AresTXTRequest : public AresRequest {
diff --git a/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc b/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc
index de913f360d2..c4ffb3975a1 100644
--- a/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc
+++ b/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc
@@ -73,8 +73,8 @@
#include "src/core/lib/iomgr/resolved_address.h"
#include "src/core/lib/iomgr/timer.h"
-using grpc_core::ServerAddress;
-using grpc_core::ServerAddressList;
+using grpc_core::EndpointAddresses;
+using grpc_core::EndpointAddressesList;
grpc_core::TraceFlag grpc_trace_cares_address_sorting(false,
"cares_address_sorting");
@@ -557,7 +557,7 @@ grpc_error_handle grpc_ares_ev_driver_create_locked(
}
static void log_address_sorting_list(const grpc_ares_request* r,
- const ServerAddressList& addresses,
+ const EndpointAddressesList& addresses,
const char* input_output_str) {
for (size_t i = 0; i < addresses.size(); i++) {
auto addr_str = grpc_sockaddr_to_string(&addresses[i].address(), true);
@@ -571,7 +571,7 @@ static void log_address_sorting_list(const grpc_ares_request* r,
}
void grpc_cares_wrapper_address_sorting_sort(const grpc_ares_request* r,
- ServerAddressList* addresses) {
+ EndpointAddressesList* addresses) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_cares_address_sorting)) {
log_address_sorting_list(r, *addresses, "input");
}
@@ -584,10 +584,11 @@ void grpc_cares_wrapper_address_sorting_sort(const grpc_ares_request* r,
sortables[i].dest_addr.len = (*addresses)[i].address().len;
}
address_sorting_rfc_6724_sort(sortables, addresses->size());
- ServerAddressList sorted;
+ EndpointAddressesList sorted;
sorted.reserve(addresses->size());
for (size_t i = 0; i < addresses->size(); ++i) {
- sorted.emplace_back(*static_cast(sortables[i].user_data));
+ sorted.emplace_back(
+ *static_cast(sortables[i].user_data));
}
gpr_free(sortables);
*addresses = std::move(sorted);
@@ -620,7 +621,8 @@ void grpc_ares_complete_request_locked(grpc_ares_request* r)
// with no addresses along side it
}
if (r->balancer_addresses_out != nullptr) {
- ServerAddressList* balancer_addresses = r->balancer_addresses_out->get();
+ EndpointAddressesList* balancer_addresses =
+ r->balancer_addresses_out->get();
if (balancer_addresses != nullptr) {
grpc_cares_wrapper_address_sorting_sort(r, balancer_addresses);
}
@@ -667,12 +669,12 @@ static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
GRPC_CARES_TRACE_LOG(
"request:%p on_hostbyname_done_locked qtype=%s host=%s ARES_SUCCESS", r,
hr->qtype, hr->host);
- std::unique_ptr* address_list_ptr =
+ std::unique_ptr* address_list_ptr =
hr->is_balancer ? r->balancer_addresses_out : r->addresses_out;
if (*address_list_ptr == nullptr) {
- *address_list_ptr = std::make_unique();
+ *address_list_ptr = std::make_unique();
}
- ServerAddressList& addresses = **address_list_ptr;
+ EndpointAddressesList& addresses = **address_list_ptr;
for (size_t i = 0; hostent->h_addr_list[i] != nullptr; ++i) {
grpc_core::ChannelArgs args;
if (hr->is_balancer) {
@@ -904,7 +906,7 @@ grpc_error_handle grpc_dns_lookup_ares_continued(
static bool inner_resolve_as_ip_literal_locked(
const char* name, const char* default_port,
- std::unique_ptr* addrs, std::string* host,
+ std::unique_ptr* addrs, std::string* host,
std::string* port, std::string* hostport) {
if (!grpc_core::SplitHostPort(name, host, port)) {
gpr_log(GPR_ERROR,
@@ -930,7 +932,7 @@ static bool inner_resolve_as_ip_literal_locked(
grpc_parse_ipv6_hostport(hostport->c_str(), &addr,
false /* log errors */)) {
GPR_ASSERT(*addrs == nullptr);
- *addrs = std::make_unique();
+ *addrs = std::make_unique();
(*addrs)->emplace_back(addr, grpc_core::ChannelArgs());
return true;
}
@@ -939,7 +941,7 @@ static bool inner_resolve_as_ip_literal_locked(
static bool resolve_as_ip_literal_locked(
const char* name, const char* default_port,
- std::unique_ptr* addrs) {
+ std::unique_ptr* addrs) {
std::string host;
std::string port;
std::string hostport;
@@ -966,7 +968,7 @@ static bool target_matches_localhost(const char* name) {
#ifdef GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY
static bool inner_maybe_resolve_localhost_manually_locked(
const grpc_ares_request* r, const char* name, const char* default_port,
- std::unique_ptr* addrs, std::string* host,
+ std::unique_ptr* addrs, std::string* host,
std::string* port) {
grpc_core::SplitHostPort(name, host, port);
if (host->empty()) {
@@ -988,7 +990,7 @@ static bool inner_maybe_resolve_localhost_manually_locked(
}
if (gpr_stricmp(host->c_str(), "localhost") == 0) {
GPR_ASSERT(*addrs == nullptr);
- *addrs = std::make_unique();
+ *addrs = std::make_unique();
uint16_t numeric_port = grpc_strhtons(port->c_str());
grpc_resolved_address address;
// Append the ipv6 loopback address.
@@ -1019,7 +1021,7 @@ static bool inner_maybe_resolve_localhost_manually_locked(
static bool grpc_ares_maybe_resolve_localhost_manually_locked(
const grpc_ares_request* r, const char* name, const char* default_port,
- std::unique_ptr* addrs) {
+ std::unique_ptr* addrs) {
std::string host;
std::string port;
return inner_maybe_resolve_localhost_manually_locked(r, name, default_port,
@@ -1029,7 +1031,7 @@ static bool grpc_ares_maybe_resolve_localhost_manually_locked(
static bool grpc_ares_maybe_resolve_localhost_manually_locked(
const grpc_ares_request* /*r*/, const char* /*name*/,
const char* /*default_port*/,
- std::unique_ptr* /*addrs*/) {
+ std::unique_ptr* /*addrs*/) {
return false;
}
#endif // GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY
@@ -1037,7 +1039,7 @@ static bool grpc_ares_maybe_resolve_localhost_manually_locked(
static grpc_ares_request* grpc_dns_lookup_hostname_ares_impl(
const char* dns_server, const char* name, const char* default_port,
grpc_pollset_set* interested_parties, grpc_closure* on_done,
- std::unique_ptr* addrs,
+ std::unique_ptr* addrs,
int query_timeout_ms) {
grpc_ares_request* r = new grpc_ares_request();
grpc_core::MutexLock lock(&r->mu);
@@ -1091,7 +1093,7 @@ static grpc_ares_request* grpc_dns_lookup_hostname_ares_impl(
grpc_ares_request* grpc_dns_lookup_srv_ares_impl(
const char* dns_server, const char* name,
grpc_pollset_set* interested_parties, grpc_closure* on_done,
- std::unique_ptr* balancer_addresses,
+ std::unique_ptr* balancer_addresses,
int query_timeout_ms) {
grpc_ares_request* r = new grpc_ares_request();
grpc_core::MutexLock lock(&r->mu);
@@ -1168,13 +1170,13 @@ grpc_ares_request* grpc_dns_lookup_txt_ares_impl(
grpc_ares_request* (*grpc_dns_lookup_hostname_ares)(
const char* dns_server, const char* name, const char* default_port,
grpc_pollset_set* interested_parties, grpc_closure* on_done,
- std::unique_ptr* addrs,
+ std::unique_ptr* addrs,
int query_timeout_ms) = grpc_dns_lookup_hostname_ares_impl;
grpc_ares_request* (*grpc_dns_lookup_srv_ares)(
const char* dns_server, const char* name,
grpc_pollset_set* interested_parties, grpc_closure* on_done,
- std::unique_ptr* balancer_addresses,
+ std::unique_ptr* balancer_addresses,
int query_timeout_ms) = grpc_dns_lookup_srv_ares_impl;
grpc_ares_request* (*grpc_dns_lookup_txt_ares)(
diff --git a/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h b/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h
index 5970e131ccc..3849579cebb 100644
--- a/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h
+++ b/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h
@@ -36,7 +36,7 @@
#include "src/core/lib/iomgr/closure.h"
#include "src/core/lib/iomgr/error.h"
#include "src/core/lib/iomgr/iomgr_fwd.h"
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#define GRPC_DNS_ARES_DEFAULT_QUERY_TIMEOUT_MS 120000
@@ -63,10 +63,10 @@ struct grpc_ares_request {
/// closure to call when the request completes
grpc_closure* on_done ABSL_GUARDED_BY(mu) = nullptr;
/// the pointer to receive the resolved addresses
- std::unique_ptr* addresses_out
+ std::unique_ptr* addresses_out
ABSL_GUARDED_BY(mu);
/// the pointer to receive the resolved balancer addresses
- std::unique_ptr* balancer_addresses_out
+ std::unique_ptr* balancer_addresses_out
ABSL_GUARDED_BY(mu);
/// the pointer to receive the service config in JSON
char** service_config_json_out ABSL_GUARDED_BY(mu) = nullptr;
@@ -92,7 +92,7 @@ struct grpc_ares_request {
extern grpc_ares_request* (*grpc_dns_lookup_hostname_ares)(
const char* dns_server, const char* name, const char* default_port,
grpc_pollset_set* interested_parties, grpc_closure* on_done,
- std::unique_ptr* addresses,
+ std::unique_ptr* addresses,
int query_timeout_ms);
// Asynchronously resolve a SRV record.
@@ -100,7 +100,7 @@ extern grpc_ares_request* (*grpc_dns_lookup_hostname_ares)(
extern grpc_ares_request* (*grpc_dns_lookup_srv_ares)(
const char* dns_server, const char* name,
grpc_pollset_set* interested_parties, grpc_closure* on_done,
- std::unique_ptr* balancer_addresses,
+ std::unique_ptr* balancer_addresses,
int query_timeout_ms);
// Asynchronously resolve a TXT record.
@@ -128,7 +128,8 @@ bool grpc_ares_query_ipv6();
// Sorts destinations in lb_addrs according to RFC 6724.
void grpc_cares_wrapper_address_sorting_sort(
- const grpc_ares_request* request, grpc_core::ServerAddressList* addresses);
+ const grpc_ares_request* request,
+ grpc_core::EndpointAddressesList* addresses);
// Exposed in this header for C-core tests only
extern void (*grpc_ares_test_only_inject_config)(ares_channel* channel);
diff --git a/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc b/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc
index 5232479e930..6c8a0ea65ac 100644
--- a/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc
+++ b/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc
@@ -28,7 +28,7 @@
#include "src/core/lib/address_utils/parse_address.h"
#include "src/core/lib/gpr/string.h"
#include "src/core/lib/iomgr/socket_windows.h"
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
bool grpc_ares_query_ipv6() { return grpc_ipv6_loopback_available(); }
diff --git a/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc b/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc
index 8d5566677ae..356535c6e69 100644
--- a/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc
+++ b/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc
@@ -52,9 +52,9 @@
#include "src/core/lib/gprpp/validation_errors.h"
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/resolve_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/resolver/resolver.h"
#include "src/core/lib/resolver/resolver_factory.h"
-#include "src/core/lib/resolver/server_address.h"
#include "src/core/lib/service_config/service_config.h"
#include "src/core/lib/service_config/service_config_impl.h"
@@ -149,8 +149,8 @@ class EventEngineClientChannelDNSResolver : public PollingResolver {
bool is_srv_inflight_ ABSL_GUARDED_BY(on_resolved_mu_) = false;
bool is_txt_inflight_ ABSL_GUARDED_BY(on_resolved_mu_) = false;
// Output fields from requests.
- ServerAddressList addresses_ ABSL_GUARDED_BY(on_resolved_mu_);
- ServerAddressList balancer_addresses_ ABSL_GUARDED_BY(on_resolved_mu_);
+ EndpointAddressesList addresses_ ABSL_GUARDED_BY(on_resolved_mu_);
+ EndpointAddressesList balancer_addresses_ ABSL_GUARDED_BY(on_resolved_mu_);
ValidationErrors errors_ ABSL_GUARDED_BY(on_resolved_mu_);
absl::StatusOr service_config_json_
ABSL_GUARDED_BY(on_resolved_mu_);
diff --git a/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc b/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc
index 4de874fccc1..bcc6df9510e 100644
--- a/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc
+++ b/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc
@@ -44,9 +44,9 @@
#include "src/core/lib/gprpp/time.h"
#include "src/core/lib/iomgr/resolve_address.h"
#include "src/core/lib/iomgr/resolved_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/resolver/resolver.h"
#include "src/core/lib/resolver/resolver_factory.h"
-#include "src/core/lib/resolver/server_address.h"
#include "src/core/lib/uri/uri_parser.h"
#define GRPC_DNS_INITIAL_CONNECT_BACKOFF_SECONDS 1
@@ -127,7 +127,7 @@ void NativeClientChannelDNSResolver::OnResolved(
// Convert result from iomgr DNS API into Resolver::Result.
Result result;
if (addresses_or.ok()) {
- ServerAddressList addresses;
+ EndpointAddressesList addresses;
for (auto& addr : *addresses_or) {
addresses.emplace_back(addr, ChannelArgs());
}
diff --git a/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc b/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc
index 5e97f25f57a..193e3c2b422 100644
--- a/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc
+++ b/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc
@@ -36,8 +36,8 @@
#include "src/core/lib/gprpp/debug_location.h"
#include "src/core/lib/gprpp/orphanable.h"
#include "src/core/lib/gprpp/work_serializer.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/resolver/resolver_factory.h"
-#include "src/core/lib/resolver/server_address.h"
#include "src/core/lib/service_config/service_config.h"
#include "src/core/lib/uri/uri_parser.h"
diff --git a/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc b/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc
index 659144fd6e2..8bfd6b233fc 100644
--- a/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc
+++ b/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc
@@ -33,9 +33,9 @@
#include "src/core/lib/gprpp/orphanable.h"
#include "src/core/lib/iomgr/port.h"
#include "src/core/lib/iomgr/resolved_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/resolver/resolver.h"
#include "src/core/lib/resolver/resolver_factory.h"
-#include "src/core/lib/resolver/server_address.h"
#include "src/core/lib/uri/uri_parser.h"
namespace grpc_core {
@@ -44,7 +44,7 @@ namespace {
class SockaddrResolver : public Resolver {
public:
- SockaddrResolver(ServerAddressList addresses, ResolverArgs args);
+ SockaddrResolver(EndpointAddressesList addresses, ResolverArgs args);
void StartLocked() override;
@@ -52,11 +52,11 @@ class SockaddrResolver : public Resolver {
private:
std::unique_ptr result_handler_;
- ServerAddressList addresses_;
+ EndpointAddressesList addresses_;
ChannelArgs channel_args_;
};
-SockaddrResolver::SockaddrResolver(ServerAddressList addresses,
+SockaddrResolver::SockaddrResolver(EndpointAddressesList addresses,
ResolverArgs args)
: result_handler_(std::move(args.result_handler)),
addresses_(std::move(addresses)),
@@ -75,7 +75,7 @@ void SockaddrResolver::StartLocked() {
bool ParseUri(const URI& uri,
bool parse(const URI& uri, grpc_resolved_address* dst),
- ServerAddressList* addresses) {
+ EndpointAddressesList* addresses) {
if (!uri.authority().empty()) {
gpr_log(GPR_ERROR, "authority-based URIs not supported by the %s scheme",
uri.scheme().c_str());
@@ -103,7 +103,7 @@ bool ParseUri(const URI& uri,
OrphanablePtr CreateSockaddrResolver(
ResolverArgs args, bool parse(const URI& uri, grpc_resolved_address* dst)) {
- ServerAddressList addresses;
+ EndpointAddressesList addresses;
if (!ParseUri(args.uri, parse, &addresses)) return nullptr;
// Instantiate resolver.
return MakeOrphanable(std::move(addresses),
diff --git a/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc b/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc
index fa4e1fd9558..6f326cde8d6 100644
--- a/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc
+++ b/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc
@@ -87,9 +87,9 @@
#include "src/core/lib/iomgr/pollset_set.h"
#include "src/core/lib/promise/arena_promise.h"
#include "src/core/lib/promise/context.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/core/lib/resolver/resolver.h"
#include "src/core/lib/resolver/resolver_factory.h"
-#include "src/core/lib/resolver/server_address.h"
#include "src/core/lib/resource_quota/arena.h"
#include "src/core/lib/service_config/service_config.h"
#include "src/core/lib/service_config/service_config_impl.h"
diff --git a/src/core/ext/xds/xds_client_grpc.h b/src/core/ext/xds/xds_client_grpc.h
index 7ecb96cb52a..02fe32404f8 100644
--- a/src/core/ext/xds/xds_client_grpc.h
+++ b/src/core/ext/xds/xds_client_grpc.h
@@ -35,7 +35,7 @@
#include "src/core/lib/gprpp/orphanable.h"
#include "src/core/lib/gprpp/ref_counted_ptr.h"
#include "src/core/lib/iomgr/iomgr_fwd.h"
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
namespace grpc_core {
diff --git a/src/core/ext/xds/xds_client_stats.h b/src/core/ext/xds/xds_client_stats.h
index 0a5a293ba68..2b9aba9b134 100644
--- a/src/core/ext/xds/xds_client_stats.h
+++ b/src/core/ext/xds/xds_client_stats.h
@@ -38,7 +38,7 @@
#include "src/core/lib/gprpp/ref_counted.h"
#include "src/core/lib/gprpp/ref_counted_ptr.h"
#include "src/core/lib/gprpp/sync.h"
-#include "src/core/lib/resolver/server_address.h"
+#include "src/core/lib/resolver/endpoint_addresses.h"
namespace grpc_core {
diff --git a/src/core/ext/xds/xds_endpoint.cc b/src/core/ext/xds/xds_endpoint.cc
index 26aa7e789f5..9274cabb107 100644
--- a/src/core/ext/xds/xds_endpoint.cc
+++ b/src/core/ext/xds/xds_endpoint.cc
@@ -61,7 +61,7 @@ namespace grpc_core {
std::string XdsEndpointResource::Priority::Locality::ToString() const {
std::vector endpoint_strings;
- for (const ServerAddress& endpoint : endpoints) {
+ for (const EndpointAddresses& endpoint : endpoints) {
endpoint_strings.emplace_back(endpoint.ToString());
}
return absl::StrCat("{name=", name->AsHumanReadableString(),
@@ -150,7 +150,7 @@ void MaybeLogClusterLoadAssignment(
}
}
-absl::optional