grpc 1.26.0 → 1.27.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +1654 -1519
- data/etc/roots.pem +44 -0
- data/include/grpc/grpc_security.h +37 -15
- data/include/grpc/grpc_security_constants.h +27 -0
- data/include/grpc/impl/codegen/grpc_types.h +14 -0
- data/include/grpc/impl/codegen/port_platform.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel.cc +0 -20
- data/src/core/ext/filters/client_channel/http_proxy.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy.cc +4 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +191 -201
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +88 -121
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +28 -57
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +8 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +53 -34
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +18 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +24 -19
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +4 -2
- data/src/core/ext/filters/client_channel/server_address.cc +6 -9
- data/src/core/ext/filters/client_channel/server_address.h +3 -10
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +394 -150
- data/src/core/ext/filters/client_channel/xds/xds_api.h +75 -35
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +59 -22
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +13 -9
- data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +8 -6
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +456 -175
- data/src/core/ext/filters/client_channel/xds/xds_client.h +33 -21
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +5 -8
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +18 -24
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +2 -2
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +13 -5
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +34 -0
- data/src/core/lib/channel/channelz.h +11 -1
- data/src/core/lib/gpr/time_precise.cc +1 -1
- data/src/core/lib/gprpp/optional.h +26 -0
- data/src/core/lib/gprpp/string_view.h +14 -10
- data/src/core/lib/iomgr/executor.cc +1 -1
- data/src/core/lib/iomgr/fork_posix.cc +4 -0
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +87 -0
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +88 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +14 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +12 -0
- data/src/core/lib/iomgr/tcp_custom.h +3 -0
- data/src/core/lib/iomgr/tcp_posix.cc +607 -56
- data/src/core/lib/iomgr/tcp_server_custom.cc +15 -2
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +8 -0
- data/src/core/lib/json/json.h +11 -1
- data/src/core/lib/json/json_reader.cc +206 -28
- data/src/core/lib/json/json_writer.cc +111 -24
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -1
- data/src/core/lib/security/credentials/credentials.h +10 -1
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +20 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +8 -0
- data/src/core/lib/security/credentials/tls/{spiffe_credentials.cc → tls_credentials.cc} +23 -24
- data/src/core/lib/security/credentials/tls/{spiffe_credentials.h → tls_credentials.h} +9 -9
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -0
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +22 -2
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +2 -2
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -2
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +30 -3
- data/src/core/lib/security/security_connector/ssl_utils.cc +45 -3
- data/src/core/lib/security/security_connector/ssl_utils.h +12 -0
- data/src/core/lib/security/security_connector/tls/{spiffe_security_connector.cc → tls_security_connector.cc} +82 -69
- data/src/core/lib/security/security_connector/tls/{spiffe_security_connector.h → tls_security_connector.h} +17 -18
- data/src/core/lib/security/transport/client_auth_filter.cc +33 -0
- data/src/core/lib/surface/completion_queue.cc +22 -1
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +11 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +3 -3
- data/src/core/tsi/fake_transport_security.cc +7 -3
- data/src/core/tsi/fake_transport_security.h +2 -0
- data/src/core/tsi/ssl_transport_security.cc +144 -8
- data/src/core/tsi/ssl_transport_security.h +15 -1
- data/src/core/tsi/transport_security.cc +13 -0
- data/src/core/tsi/transport_security_grpc.cc +2 -2
- data/src/core/tsi/transport_security_grpc.h +2 -2
- data/src/core/tsi/transport_security_interface.h +12 -0
- data/src/ruby/bin/math_pb.rb +5 -5
- data/src/ruby/ext/grpc/rb_call_credentials.c +4 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +3 -3
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +23 -13
- data/third_party/abseil-cpp/absl/algorithm/algorithm.h +159 -0
- data/third_party/abseil-cpp/absl/base/attributes.h +609 -0
- data/third_party/abseil-cpp/absl/base/call_once.h +226 -0
- data/third_party/abseil-cpp/absl/base/casts.h +184 -0
- data/third_party/abseil-cpp/absl/base/config.h +622 -0
- data/third_party/abseil-cpp/absl/base/const_init.h +76 -0
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +129 -0
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +389 -0
- data/third_party/abseil-cpp/absl/base/internal/atomic_hook.h +179 -0
- data/third_party/abseil-cpp/absl/base/internal/bits.h +218 -0
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +107 -0
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +94 -0
- data/third_party/abseil-cpp/absl/base/internal/endian.h +266 -0
- data/third_party/abseil-cpp/absl/base/internal/hide_ptr.h +51 -0
- data/third_party/abseil-cpp/absl/base/internal/identity.h +37 -0
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +107 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +187 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +107 -0
- data/third_party/abseil-cpp/absl/base/internal/per_thread_tls.h +52 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +237 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +179 -0
- data/third_party/abseil-cpp/absl/base/internal/scheduling_mode.h +58 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +233 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +243 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +35 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +67 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +46 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc +81 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +93 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +37 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +414 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +66 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +271 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +140 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +250 -0
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +108 -0
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.h +75 -0
- data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +66 -0
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +158 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +103 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +124 -0
- data/third_party/abseil-cpp/absl/base/log_severity.cc +27 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +121 -0
- data/third_party/abseil-cpp/absl/base/macros.h +220 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +181 -0
- data/third_party/abseil-cpp/absl/base/options.h +214 -0
- data/third_party/abseil-cpp/absl/base/policy_checks.h +111 -0
- data/third_party/abseil-cpp/absl/base/port.h +26 -0
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +280 -0
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +848 -0
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +265 -0
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +892 -0
- data/third_party/abseil-cpp/absl/memory/memory.h +695 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +759 -0
- data/third_party/abseil-cpp/absl/numeric/int128.cc +404 -0
- data/third_party/abseil-cpp/absl/numeric/int128.h +1091 -0
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +302 -0
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +308 -0
- data/third_party/abseil-cpp/absl/strings/ascii.cc +200 -0
- data/third_party/abseil-cpp/absl/strings/ascii.h +241 -0
- data/third_party/abseil-cpp/absl/strings/charconv.cc +985 -0
- data/third_party/abseil-cpp/absl/strings/charconv.h +119 -0
- data/third_party/abseil-cpp/absl/strings/escaping.cc +949 -0
- data/third_party/abseil-cpp/absl/strings/escaping.h +164 -0
- data/third_party/abseil-cpp/absl/strings/internal/char_map.h +156 -0
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +359 -0
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +421 -0
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +504 -0
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.h +99 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +180 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.h +58 -0
- data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +112 -0
- data/third_party/abseil-cpp/absl/strings/internal/memutil.h +148 -0
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +36 -0
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +89 -0
- data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +73 -0
- data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +248 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +314 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +455 -0
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +53 -0
- data/third_party/abseil-cpp/absl/strings/internal/utf8.h +50 -0
- data/third_party/abseil-cpp/absl/strings/match.cc +40 -0
- data/third_party/abseil-cpp/absl/strings/match.h +90 -0
- data/third_party/abseil-cpp/absl/strings/numbers.cc +916 -0
- data/third_party/abseil-cpp/absl/strings/numbers.h +263 -0
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +246 -0
- data/third_party/abseil-cpp/absl/strings/str_cat.h +408 -0
- data/third_party/abseil-cpp/absl/strings/str_join.h +293 -0
- data/third_party/abseil-cpp/absl/strings/str_replace.cc +82 -0
- data/third_party/abseil-cpp/absl/strings/str_replace.h +219 -0
- data/third_party/abseil-cpp/absl/strings/str_split.cc +139 -0
- data/third_party/abseil-cpp/absl/strings/str_split.h +513 -0
- data/third_party/abseil-cpp/absl/strings/string_view.cc +235 -0
- data/third_party/abseil-cpp/absl/strings/string_view.h +615 -0
- data/third_party/abseil-cpp/absl/strings/strip.h +91 -0
- data/third_party/abseil-cpp/absl/strings/substitute.cc +171 -0
- data/third_party/abseil-cpp/absl/strings/substitute.h +693 -0
- data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +48 -0
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +78 -0
- data/third_party/abseil-cpp/absl/types/internal/optional.h +396 -0
- data/third_party/abseil-cpp/absl/types/internal/span.h +128 -0
- data/third_party/abseil-cpp/absl/types/optional.h +776 -0
- data/third_party/abseil-cpp/absl/types/span.h +713 -0
- data/third_party/abseil-cpp/absl/utility/utility.h +350 -0
- data/third_party/upb/upb/decode.c +4 -0
- data/third_party/upb/upb/port.c +0 -1
- data/third_party/upb/upb/port_def.inc +1 -3
- data/third_party/upb/upb/table.c +2 -1
- metadata +147 -43
- data/src/core/lib/json/json_common.h +0 -34
- data/src/core/lib/json/json_reader.h +0 -146
- data/src/core/lib/json/json_string.cc +0 -367
- data/src/core/lib/json/json_writer.h +0 -84
@@ -370,13 +370,6 @@ SubchannelList<SubchannelListType, SubchannelDataType>::SubchannelList(
|
|
370
370
|
GRPC_ARG_SERVICE_CONFIG};
|
371
371
|
// Create a subchannel for each address.
|
372
372
|
for (size_t i = 0; i < addresses.size(); i++) {
|
373
|
-
// TODO(roth): we should ideally hide this from the LB policy code. In
|
374
|
-
// principle, if we're dealing with this special case in the client_channel
|
375
|
-
// code for selecting grpclb, then we should also strip out these addresses
|
376
|
-
// there if we're not using grpclb.
|
377
|
-
if (addresses[i].IsBalancer()) {
|
378
|
-
continue;
|
379
|
-
}
|
380
373
|
InlinedVector<grpc_arg, 3> args_to_add;
|
381
374
|
const size_t subchannel_address_arg_index = args_to_add.size();
|
382
375
|
args_to_add.emplace_back(
|
@@ -39,13 +39,13 @@ constexpr char kCds[] = "cds_experimental";
|
|
39
39
|
// Parsed config for this LB policy.
|
40
40
|
class ParsedCdsConfig : public LoadBalancingPolicy::Config {
|
41
41
|
public:
|
42
|
-
explicit ParsedCdsConfig(
|
42
|
+
explicit ParsedCdsConfig(std::string cluster)
|
43
43
|
: cluster_(std::move(cluster)) {}
|
44
|
-
const char* cluster() const { return cluster_.
|
44
|
+
const char* cluster() const { return cluster_.c_str(); }
|
45
45
|
const char* name() const override { return kCds; }
|
46
46
|
|
47
47
|
private:
|
48
|
-
|
48
|
+
std::string cluster_;
|
49
49
|
};
|
50
50
|
|
51
51
|
// CDS LB policy.
|
@@ -119,9 +119,9 @@ void CdsLb::ClusterWatcher::OnClusterChanged(CdsUpdate cluster_data) {
|
|
119
119
|
}
|
120
120
|
// Construct config for child policy.
|
121
121
|
char* lrs_str = nullptr;
|
122
|
-
if (cluster_data.lrs_load_reporting_server_name
|
122
|
+
if (cluster_data.lrs_load_reporting_server_name.has_value()) {
|
123
123
|
gpr_asprintf(&lrs_str, " \"lrsLoadReportingServerName\": \"%s\",\n",
|
124
|
-
cluster_data.lrs_load_reporting_server_name.
|
124
|
+
cluster_data.lrs_load_reporting_server_name.value().c_str());
|
125
125
|
}
|
126
126
|
char* json_str;
|
127
127
|
gpr_asprintf(&json_str,
|
@@ -132,9 +132,9 @@ void CdsLb::ClusterWatcher::OnClusterChanged(CdsUpdate cluster_data) {
|
|
132
132
|
" }\n"
|
133
133
|
"}]",
|
134
134
|
(lrs_str == nullptr ? "" : lrs_str),
|
135
|
-
(cluster_data.eds_service_name
|
135
|
+
(cluster_data.eds_service_name.empty()
|
136
136
|
? parent_->config_->cluster()
|
137
|
-
: cluster_data.eds_service_name.
|
137
|
+
: cluster_data.eds_service_name.c_str()));
|
138
138
|
gpr_free(lrs_str);
|
139
139
|
grpc_core::UniquePtr<char> json_str_deleter(json_str);
|
140
140
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
|
@@ -342,8 +342,7 @@ class CdsFactory : public LoadBalancingPolicyFactory {
|
|
342
342
|
"required field 'cluster' not present"));
|
343
343
|
}
|
344
344
|
if (error_list.empty()) {
|
345
|
-
return MakeRefCounted<ParsedCdsConfig>(
|
346
|
-
grpc_core::UniquePtr<char>(gpr_strdup(cluster)));
|
345
|
+
return MakeRefCounted<ParsedCdsConfig>(cluster);
|
347
346
|
} else {
|
348
347
|
*error = GRPC_ERROR_CREATE_FROM_VECTOR("Cds Parser", &error_list);
|
349
348
|
return nullptr;
|
@@ -78,8 +78,8 @@ class ParsedXdsConfig : public LoadBalancingPolicy::Config {
|
|
78
78
|
public:
|
79
79
|
ParsedXdsConfig(RefCountedPtr<LoadBalancingPolicy::Config> child_policy,
|
80
80
|
RefCountedPtr<LoadBalancingPolicy::Config> fallback_policy,
|
81
|
-
|
82
|
-
|
81
|
+
std::string eds_service_name,
|
82
|
+
Optional<std::string> lrs_load_reporting_server_name)
|
83
83
|
: child_policy_(std::move(child_policy)),
|
84
84
|
fallback_policy_(std::move(fallback_policy)),
|
85
85
|
eds_service_name_(std::move(eds_service_name)),
|
@@ -96,17 +96,19 @@ class ParsedXdsConfig : public LoadBalancingPolicy::Config {
|
|
96
96
|
return fallback_policy_;
|
97
97
|
}
|
98
98
|
|
99
|
-
const char* eds_service_name() const {
|
99
|
+
const char* eds_service_name() const {
|
100
|
+
return eds_service_name_.empty() ? nullptr : eds_service_name_.c_str();
|
101
|
+
};
|
100
102
|
|
101
|
-
const
|
102
|
-
return lrs_load_reporting_server_name_
|
103
|
+
const Optional<std::string>& lrs_load_reporting_server_name() const {
|
104
|
+
return lrs_load_reporting_server_name_;
|
103
105
|
};
|
104
106
|
|
105
107
|
private:
|
106
108
|
RefCountedPtr<LoadBalancingPolicy::Config> child_policy_;
|
107
109
|
RefCountedPtr<LoadBalancingPolicy::Config> fallback_policy_;
|
108
|
-
|
109
|
-
|
110
|
+
std::string eds_service_name_;
|
111
|
+
Optional<std::string> lrs_load_reporting_server_name_;
|
110
112
|
};
|
111
113
|
|
112
114
|
class XdsLb : public LoadBalancingPolicy {
|
@@ -160,6 +162,8 @@ class XdsLb : public LoadBalancingPolicy {
|
|
160
162
|
pickers_(std::move(pickers)),
|
161
163
|
drop_config_(xds_policy_->drop_config_) {}
|
162
164
|
|
165
|
+
~LocalityPicker() { xds_policy_.reset(DEBUG_LOCATION, "LocalityPicker"); }
|
166
|
+
|
163
167
|
PickResult Pick(PickArgs args) override;
|
164
168
|
|
165
169
|
private:
|
@@ -285,6 +289,8 @@ class XdsLb : public LoadBalancingPolicy {
|
|
285
289
|
|
286
290
|
LocalityMap(RefCountedPtr<XdsLb> xds_policy, uint32_t priority);
|
287
291
|
|
292
|
+
~LocalityMap() { xds_policy_.reset(DEBUG_LOCATION, "LocalityMap"); }
|
293
|
+
|
288
294
|
void UpdateLocked(
|
289
295
|
const XdsPriorityListUpdate::LocalityMap& locality_map_update);
|
290
296
|
void ResetBackoffLocked();
|
@@ -397,7 +403,7 @@ class XdsLb : public LoadBalancingPolicy {
|
|
397
403
|
if (config_ != nullptr && config_->eds_service_name() != nullptr) {
|
398
404
|
return config_->eds_service_name();
|
399
405
|
}
|
400
|
-
return server_name_.
|
406
|
+
return server_name_.c_str();
|
401
407
|
}
|
402
408
|
|
403
409
|
XdsClient* xds_client() const {
|
@@ -406,7 +412,7 @@ class XdsLb : public LoadBalancingPolicy {
|
|
406
412
|
}
|
407
413
|
|
408
414
|
// Server name from target URI.
|
409
|
-
|
415
|
+
std::string server_name_;
|
410
416
|
|
411
417
|
// Current channel args and config from the resolver.
|
412
418
|
const grpc_channel_args* args_ = nullptr;
|
@@ -495,7 +501,7 @@ LoadBalancingPolicy::PickResult XdsLb::EndpointPickerWrapper::Pick(
|
|
495
501
|
|
496
502
|
XdsLb::PickResult XdsLb::LocalityPicker::Pick(PickArgs args) {
|
497
503
|
// Handle drop.
|
498
|
-
const
|
504
|
+
const std::string* drop_category;
|
499
505
|
if (drop_config_->ShouldDrop(&drop_category)) {
|
500
506
|
xds_policy_->client_stats_.AddCallDropped(*drop_category);
|
501
507
|
PickResult result;
|
@@ -612,6 +618,8 @@ class XdsLb::EndpointWatcher : public XdsClient::EndpointWatcherInterface {
|
|
612
618
|
explicit EndpointWatcher(RefCountedPtr<XdsLb> xds_policy)
|
613
619
|
: xds_policy_(std::move(xds_policy)) {}
|
614
620
|
|
621
|
+
~EndpointWatcher() { xds_policy_.reset(DEBUG_LOCATION, "EndpointWatcher"); }
|
622
|
+
|
615
623
|
void OnEndpointChanged(EdsUpdate update) override {
|
616
624
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
|
617
625
|
gpr_log(GPR_INFO, "[xdslb %p] Received EDS update from xds client",
|
@@ -706,11 +714,10 @@ XdsLb::XdsLb(Args args)
|
|
706
714
|
GPR_ASSERT(server_uri != nullptr);
|
707
715
|
grpc_uri* uri = grpc_uri_parse(server_uri, true);
|
708
716
|
GPR_ASSERT(uri->path[0] != '\0');
|
709
|
-
server_name_
|
710
|
-
gpr_strdup(uri->path[0] == '/' ? uri->path + 1 : uri->path));
|
717
|
+
server_name_ = uri->path[0] == '/' ? uri->path + 1 : uri->path;
|
711
718
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_trace)) {
|
712
719
|
gpr_log(GPR_INFO, "[xdslb %p] server name from channel: %s", this,
|
713
|
-
server_name_.
|
720
|
+
server_name_.c_str());
|
714
721
|
}
|
715
722
|
grpc_uri_destroy(uri);
|
716
723
|
}
|
@@ -743,9 +750,12 @@ void XdsLb::ShutdownLocked() {
|
|
743
750
|
// watcher holds a ref to us.
|
744
751
|
xds_client()->CancelEndpointDataWatch(StringView(eds_service_name()),
|
745
752
|
endpoint_watcher_);
|
746
|
-
if (config_->lrs_load_reporting_server_name()
|
753
|
+
if (config_->lrs_load_reporting_server_name().has_value()) {
|
754
|
+
// TODO(roth): We should pass the cluster name (in addition to the
|
755
|
+
// eds_service_name) when adding the client stats. To do so, we need to
|
756
|
+
// first find a way to plumb the cluster name down into this LB policy.
|
747
757
|
xds_client()->RemoveClientStats(
|
748
|
-
StringView(config_->lrs_load_reporting_server_name()),
|
758
|
+
StringView(config_->lrs_load_reporting_server_name().value().c_str()),
|
749
759
|
StringView(eds_service_name()), &client_stats_);
|
750
760
|
}
|
751
761
|
xds_client_from_channel_.reset();
|
@@ -820,7 +830,8 @@ void XdsLb::UpdateLocked(UpdateArgs args) {
|
|
820
830
|
xds_client()->CancelEndpointDataWatch(StringView(old_eds_service_name),
|
821
831
|
endpoint_watcher_);
|
822
832
|
}
|
823
|
-
auto watcher =
|
833
|
+
auto watcher =
|
834
|
+
MakeUnique<EndpointWatcher>(Ref(DEBUG_LOCATION, "EndpointWatcher"));
|
824
835
|
endpoint_watcher_ = watcher.get();
|
825
836
|
xds_client()->WatchEndpointData(StringView(eds_service_name()),
|
826
837
|
std::move(watcher));
|
@@ -831,21 +842,25 @@ void XdsLb::UpdateLocked(UpdateArgs args) {
|
|
831
842
|
// all of the pickers whenever load reporting is enabled or disabled
|
832
843
|
// here.
|
833
844
|
if (is_initial_update ||
|
834
|
-
(config_->lrs_load_reporting_server_name()
|
835
|
-
(old_config->lrs_load_reporting_server_name()
|
836
|
-
(config_->lrs_load_reporting_server_name()
|
837
|
-
old_config->lrs_load_reporting_server_name()
|
838
|
-
|
839
|
-
|
845
|
+
(config_->lrs_load_reporting_server_name().has_value()) !=
|
846
|
+
(old_config->lrs_load_reporting_server_name().has_value()) ||
|
847
|
+
(config_->lrs_load_reporting_server_name().has_value() &&
|
848
|
+
old_config->lrs_load_reporting_server_name().has_value() &&
|
849
|
+
config_->lrs_load_reporting_server_name().value() !=
|
850
|
+
old_config->lrs_load_reporting_server_name().value())) {
|
840
851
|
if (old_config != nullptr &&
|
841
|
-
old_config->lrs_load_reporting_server_name()
|
852
|
+
old_config->lrs_load_reporting_server_name().has_value()) {
|
842
853
|
xds_client()->RemoveClientStats(
|
843
|
-
StringView(
|
854
|
+
StringView(
|
855
|
+
old_config->lrs_load_reporting_server_name().value().c_str()),
|
844
856
|
StringView(old_eds_service_name), &client_stats_);
|
845
857
|
}
|
846
|
-
if (config_->lrs_load_reporting_server_name()
|
858
|
+
if (config_->lrs_load_reporting_server_name().has_value()) {
|
859
|
+
// TODO(roth): We should pass the cluster name (in addition to the
|
860
|
+
// eds_service_name) when adding the client stats. To do so, we need to
|
861
|
+
// first find a way to plumb the cluster name down into this LB policy.
|
847
862
|
xds_client()->AddClientStats(
|
848
|
-
StringView(config_->lrs_load_reporting_server_name()),
|
863
|
+
StringView(config_->lrs_load_reporting_server_name().value().c_str()),
|
849
864
|
StringView(eds_service_name()), &client_stats_);
|
850
865
|
}
|
851
866
|
}
|
@@ -1083,7 +1098,7 @@ void XdsLb::PriorityList::MaybeCreateLocalityMapLocked(uint32_t priority) {
|
|
1083
1098
|
// Exhausted priorities in the update.
|
1084
1099
|
if (!priority_list_update().Contains(priority)) return;
|
1085
1100
|
auto new_locality_map = new LocalityMap(
|
1086
|
-
xds_policy_->Ref(DEBUG_LOCATION, "
|
1101
|
+
xds_policy_->Ref(DEBUG_LOCATION, "LocalityMap"), priority);
|
1087
1102
|
priorities_.emplace_back(OrphanablePtr<LocalityMap>(new_locality_map));
|
1088
1103
|
new_locality_map->UpdateLocked(*priority_list_update().Find(priority));
|
1089
1104
|
}
|
@@ -1152,7 +1167,6 @@ XdsLb::PriorityList::LocalityMap::LocalityMap(RefCountedPtr<XdsLb> xds_policy,
|
|
1152
1167
|
gpr_log(GPR_INFO, "[xdslb %p] Creating priority %" PRIu32,
|
1153
1168
|
xds_policy_.get(), priority_);
|
1154
1169
|
}
|
1155
|
-
|
1156
1170
|
GRPC_CLOSURE_INIT(&on_failover_timer_, OnFailoverTimer, this,
|
1157
1171
|
grpc_schedule_on_exec_ctx);
|
1158
1172
|
// Start the failover timer.
|
@@ -1239,9 +1253,10 @@ void XdsLb::PriorityList::LocalityMap::UpdateXdsPickerLocked() {
|
|
1239
1253
|
picker_list.push_back(std::make_pair(end, locality->picker_wrapper()));
|
1240
1254
|
}
|
1241
1255
|
xds_policy()->channel_control_helper()->UpdateState(
|
1242
|
-
GRPC_CHANNEL_READY,
|
1243
|
-
|
1244
|
-
|
1256
|
+
GRPC_CHANNEL_READY,
|
1257
|
+
grpc_core::MakeUnique<LocalityPicker>(
|
1258
|
+
xds_policy_->Ref(DEBUG_LOCATION, "LocalityPicker"),
|
1259
|
+
std::move(picker_list)));
|
1245
1260
|
}
|
1246
1261
|
|
1247
1262
|
OrphanablePtr<XdsLb::PriorityList::LocalityMap::Locality>
|
@@ -1869,11 +1884,15 @@ class XdsFactory : public LoadBalancingPolicyFactory {
|
|
1869
1884
|
}
|
1870
1885
|
}
|
1871
1886
|
if (error_list.empty()) {
|
1887
|
+
Optional<std::string> optional_lrs_load_reporting_server_name;
|
1888
|
+
if (lrs_load_reporting_server_name != nullptr) {
|
1889
|
+
optional_lrs_load_reporting_server_name.set(
|
1890
|
+
std::string(lrs_load_reporting_server_name));
|
1891
|
+
}
|
1872
1892
|
return MakeRefCounted<ParsedXdsConfig>(
|
1873
1893
|
std::move(child_policy), std::move(fallback_policy),
|
1874
|
-
|
1875
|
-
|
1876
|
-
gpr_strdup(lrs_load_reporting_server_name)));
|
1894
|
+
eds_service_name == nullptr ? "" : eds_service_name,
|
1895
|
+
std::move(optional_lrs_load_reporting_server_name));
|
1877
1896
|
} else {
|
1878
1897
|
*error = GRPC_ERROR_CREATE_FROM_VECTOR("Xds Parser", &error_list);
|
1879
1898
|
return nullptr;
|
@@ -30,6 +30,7 @@
|
|
30
30
|
#include <address_sorting/address_sorting.h>
|
31
31
|
|
32
32
|
#include "src/core/ext/filters/client_channel/http_connect_handshaker.h"
|
33
|
+
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h"
|
33
34
|
#include "src/core/ext/filters/client_channel/lb_policy_registry.h"
|
34
35
|
#include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
|
35
36
|
#include "src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h"
|
@@ -107,8 +108,10 @@ class AresDnsResolver : public Resolver {
|
|
107
108
|
grpc_millis last_resolution_timestamp_ = -1;
|
108
109
|
/// retry backoff state
|
109
110
|
BackOff backoff_;
|
110
|
-
/// currently resolving addresses
|
111
|
+
/// currently resolving backend addresses
|
111
112
|
std::unique_ptr<ServerAddressList> addresses_;
|
113
|
+
/// currently resolving balancer addresses
|
114
|
+
std::unique_ptr<ServerAddressList> balancer_addresses_;
|
112
115
|
/// currently resolving service config
|
113
116
|
char* service_config_json_ = nullptr;
|
114
117
|
// has shutdown been initiated
|
@@ -340,9 +343,11 @@ void AresDnsResolver::OnResolvedLocked(void* arg, grpc_error* error) {
|
|
340
343
|
r->Unref(DEBUG_LOCATION, "OnResolvedLocked() shutdown");
|
341
344
|
return;
|
342
345
|
}
|
343
|
-
if (r->addresses_ != nullptr) {
|
346
|
+
if (r->addresses_ != nullptr || r->balancer_addresses_ != nullptr) {
|
344
347
|
Result result;
|
345
|
-
|
348
|
+
if (r->addresses_ != nullptr) {
|
349
|
+
result.addresses = std::move(*r->addresses_);
|
350
|
+
}
|
346
351
|
if (r->service_config_json_ != nullptr) {
|
347
352
|
char* service_config_string = ChooseServiceConfig(
|
348
353
|
r->service_config_json_, &result.service_config_error);
|
@@ -356,9 +361,16 @@ void AresDnsResolver::OnResolvedLocked(void* arg, grpc_error* error) {
|
|
356
361
|
}
|
357
362
|
gpr_free(service_config_string);
|
358
363
|
}
|
359
|
-
|
364
|
+
InlinedVector<grpc_arg, 1> new_args;
|
365
|
+
if (r->balancer_addresses_ != nullptr) {
|
366
|
+
new_args.push_back(
|
367
|
+
CreateGrpclbBalancerAddressesArg(r->balancer_addresses_.get()));
|
368
|
+
}
|
369
|
+
result.args = grpc_channel_args_copy_and_add(
|
370
|
+
r->channel_args_, new_args.data(), new_args.size());
|
360
371
|
r->result_handler()->ReturnResult(std::move(result));
|
361
372
|
r->addresses_.reset();
|
373
|
+
r->balancer_addresses_.reset();
|
362
374
|
// Reset backoff state so that we start from the beginning when the
|
363
375
|
// next request gets triggered.
|
364
376
|
r->backoff_.Reset();
|
@@ -437,7 +449,8 @@ void AresDnsResolver::StartResolvingLocked() {
|
|
437
449
|
GRPC_CLOSURE_INIT(&on_resolved_, OnResolved, this, grpc_schedule_on_exec_ctx);
|
438
450
|
pending_request_ = grpc_dns_lookup_ares_locked(
|
439
451
|
dns_server_, name_to_resolve_, kDefaultPort, interested_parties_,
|
440
|
-
&on_resolved_, &addresses_,
|
452
|
+
&on_resolved_, &addresses_,
|
453
|
+
enable_srv_queries_ ? &balancer_addresses_ : nullptr,
|
441
454
|
request_service_config_ ? &service_config_json_ : nullptr,
|
442
455
|
query_timeout_ms_, combiner());
|
443
456
|
last_resolution_timestamp_ = grpc_core::ExecCtx::Get()->Now();
|
@@ -33,6 +33,7 @@
|
|
33
33
|
#include <grpc/support/time.h>
|
34
34
|
|
35
35
|
#include <address_sorting/address_sorting.h>
|
36
|
+
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h"
|
36
37
|
#include "src/core/ext/filters/client_channel/parse_address.h"
|
37
38
|
#include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h"
|
38
39
|
#include "src/core/lib/gpr/string.h"
|
@@ -60,6 +61,8 @@ struct grpc_ares_request {
|
|
60
61
|
grpc_closure* on_done;
|
61
62
|
/** the pointer to receive the resolved addresses */
|
62
63
|
std::unique_ptr<grpc_core::ServerAddressList>* addresses_out;
|
64
|
+
/** the pointer to receive the resolved balancer addresses */
|
65
|
+
std::unique_ptr<grpc_core::ServerAddressList>* balancer_addresses_out;
|
63
66
|
/** the pointer to receive the service config in JSON */
|
64
67
|
char** service_config_json_out;
|
65
68
|
/** the evernt driver used by this request */
|
@@ -184,17 +187,17 @@ static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
|
|
184
187
|
GRPC_CARES_TRACE_LOG(
|
185
188
|
"request:%p on_hostbyname_done_locked host=%s ARES_SUCCESS", r,
|
186
189
|
hr->host);
|
187
|
-
|
188
|
-
|
190
|
+
std::unique_ptr<ServerAddressList>* address_list_ptr =
|
191
|
+
hr->is_balancer ? r->balancer_addresses_out : r->addresses_out;
|
192
|
+
if (*address_list_ptr == nullptr) {
|
193
|
+
*address_list_ptr = grpc_core::MakeUnique<ServerAddressList>();
|
189
194
|
}
|
190
|
-
ServerAddressList& addresses = **
|
195
|
+
ServerAddressList& addresses = **address_list_ptr;
|
191
196
|
for (size_t i = 0; hostent->h_addr_list[i] != nullptr; ++i) {
|
192
|
-
grpc_core::InlinedVector<grpc_arg,
|
197
|
+
grpc_core::InlinedVector<grpc_arg, 1> args_to_add;
|
193
198
|
if (hr->is_balancer) {
|
194
|
-
args_to_add.emplace_back(
|
195
|
-
|
196
|
-
args_to_add.emplace_back(grpc_channel_arg_string_create(
|
197
|
-
const_cast<char*>(GRPC_ARG_ADDRESS_BALANCER_NAME), hr->host));
|
199
|
+
args_to_add.emplace_back(
|
200
|
+
grpc_core::CreateGrpclbBalancerNameArg(hr->host));
|
198
201
|
}
|
199
202
|
grpc_channel_args* args = grpc_channel_args_copy_and_add(
|
200
203
|
nullptr, args_to_add.data(), args_to_add.size());
|
@@ -350,7 +353,7 @@ done:
|
|
350
353
|
void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
|
351
354
|
grpc_ares_request* r, const char* dns_server, const char* name,
|
352
355
|
const char* default_port, grpc_pollset_set* interested_parties,
|
353
|
-
|
356
|
+
int query_timeout_ms, grpc_core::Combiner* combiner) {
|
354
357
|
grpc_error* error = GRPC_ERROR_NONE;
|
355
358
|
grpc_ares_hostbyname_request* hr = nullptr;
|
356
359
|
ares_channel* channel = nullptr;
|
@@ -425,7 +428,7 @@ void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
|
|
425
428
|
/*is_balancer=*/false);
|
426
429
|
ares_gethostbyname(*channel, hr->host, AF_INET, on_hostbyname_done_locked,
|
427
430
|
hr);
|
428
|
-
if (
|
431
|
+
if (r->balancer_addresses_out != nullptr) {
|
429
432
|
/* Query the SRV record */
|
430
433
|
grpc_ares_request_ref_locked(r);
|
431
434
|
char* service_name;
|
@@ -588,7 +591,8 @@ static bool grpc_ares_maybe_resolve_localhost_manually_locked(
|
|
588
591
|
static grpc_ares_request* grpc_dns_lookup_ares_locked_impl(
|
589
592
|
const char* dns_server, const char* name, const char* default_port,
|
590
593
|
grpc_pollset_set* interested_parties, grpc_closure* on_done,
|
591
|
-
std::unique_ptr<grpc_core::ServerAddressList>* addrs,
|
594
|
+
std::unique_ptr<grpc_core::ServerAddressList>* addrs,
|
595
|
+
std::unique_ptr<grpc_core::ServerAddressList>* balancer_addrs,
|
592
596
|
char** service_config_json, int query_timeout_ms,
|
593
597
|
grpc_core::Combiner* combiner) {
|
594
598
|
grpc_ares_request* r =
|
@@ -596,6 +600,7 @@ static grpc_ares_request* grpc_dns_lookup_ares_locked_impl(
|
|
596
600
|
r->ev_driver = nullptr;
|
597
601
|
r->on_done = on_done;
|
598
602
|
r->addresses_out = addrs;
|
603
|
+
r->balancer_addresses_out = balancer_addrs;
|
599
604
|
r->service_config_json_out = service_config_json;
|
600
605
|
r->error = GRPC_ERROR_NONE;
|
601
606
|
r->pending_queries = 0;
|
@@ -618,20 +623,21 @@ static grpc_ares_request* grpc_dns_lookup_ares_locked_impl(
|
|
618
623
|
// as to cut down on lookups over the network, especially in tests:
|
619
624
|
// https://github.com/grpc/proposal/pull/79
|
620
625
|
if (target_matches_localhost(name)) {
|
621
|
-
|
626
|
+
r->balancer_addresses_out = nullptr;
|
622
627
|
r->service_config_json_out = nullptr;
|
623
628
|
}
|
624
629
|
// Look up name using c-ares lib.
|
625
630
|
grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
|
626
|
-
r, dns_server, name, default_port, interested_parties,
|
627
|
-
|
631
|
+
r, dns_server, name, default_port, interested_parties, query_timeout_ms,
|
632
|
+
combiner);
|
628
633
|
return r;
|
629
634
|
}
|
630
635
|
|
631
636
|
grpc_ares_request* (*grpc_dns_lookup_ares_locked)(
|
632
637
|
const char* dns_server, const char* name, const char* default_port,
|
633
638
|
grpc_pollset_set* interested_parties, grpc_closure* on_done,
|
634
|
-
std::unique_ptr<grpc_core::ServerAddressList>* addrs,
|
639
|
+
std::unique_ptr<grpc_core::ServerAddressList>* addrs,
|
640
|
+
std::unique_ptr<grpc_core::ServerAddressList>* balancer_addrs,
|
635
641
|
char** service_config_json, int query_timeout_ms,
|
636
642
|
grpc_core::Combiner* combiner) = grpc_dns_lookup_ares_locked_impl;
|
637
643
|
|
@@ -709,7 +715,6 @@ static void on_dns_lookup_done_locked(void* arg, grpc_error* error) {
|
|
709
715
|
static_cast<grpc_resolved_address*>(gpr_zalloc(
|
710
716
|
sizeof(grpc_resolved_address) * (*resolved_addresses)->naddrs));
|
711
717
|
for (size_t i = 0; i < (*resolved_addresses)->naddrs; ++i) {
|
712
|
-
GPR_ASSERT(!(*r->addresses)[i].IsBalancer());
|
713
718
|
memcpy(&(*resolved_addresses)->addrs[i], &(*r->addresses)[i].address(),
|
714
719
|
sizeof(grpc_resolved_address));
|
715
720
|
}
|
@@ -736,9 +741,9 @@ static void grpc_resolve_address_invoke_dns_lookup_ares_locked(
|
|
736
741
|
grpc_schedule_on_exec_ctx);
|
737
742
|
r->ares_request = grpc_dns_lookup_ares_locked(
|
738
743
|
nullptr /* dns_server */, r->name, r->default_port, r->interested_parties,
|
739
|
-
&r->on_dns_lookup_done_locked, &r->addresses,
|
740
|
-
nullptr /* service_config_json */,
|
741
|
-
r->combiner);
|
744
|
+
&r->on_dns_lookup_done_locked, &r->addresses,
|
745
|
+
nullptr /* balancer_addresses */, nullptr /* service_config_json */,
|
746
|
+
GRPC_DNS_ARES_DEFAULT_QUERY_TIMEOUT_MS, r->combiner);
|
742
747
|
}
|
743
748
|
|
744
749
|
static void grpc_resolve_address_ares_impl(const char* name,
|