grpc 1.82.0 → 1.83.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +8 -5
- data/etc/roots.pem +10400 -3855
- data/include/grpc/grpc_audit_logging.h +2 -2
- data/include/grpc/grpc_security_constants.h +2 -0
- data/include/grpc/impl/channel_arg_names.h +23 -0
- data/src/core/call/call_filters.h +19 -3
- data/src/core/call/call_spine.h +4 -4
- data/src/core/call/client_call.cc +1 -1
- data/src/core/call/metadata.cc +7 -2
- data/src/core/call/server_call.cc +13 -3
- data/src/core/call/server_call.h +5 -3
- data/src/core/client_channel/backup_poller.cc +2 -17
- data/src/core/client_channel/client_channel.cc +17 -14
- data/src/core/client_channel/client_channel.h +3 -1
- data/src/core/client_channel/client_channel_filter.cc +11 -13
- data/src/core/client_channel/client_channel_service_config.cc +5 -13
- data/src/core/client_channel/direct_channel.cc +5 -1
- data/src/core/client_channel/direct_channel.h +3 -1
- data/src/core/config/experiment_env_var.cc +30 -0
- data/src/core/config/experiment_env_var.h +26 -0
- data/src/core/credentials/call/regional_access_boundary_fetcher.cc +6 -6
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +14 -2
- data/src/core/credentials/transport/tls/grpc_tls_certificate_selector.cc +172 -0
- data/src/core/credentials/transport/tls/grpc_tls_certificate_selector.h +103 -0
- data/src/core/credentials/transport/tls/load_system_roots_fallback.cc +3 -2
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +10 -3
- data/src/core/credentials/transport/tls/tls_security_connector.cc +14 -2
- data/src/core/credentials/transport/xds/xds_credentials.cc +4 -12
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +19 -13
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +11 -9
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +3 -2
- data/src/core/ext/transport/chttp2/transport/frame.cc +58 -1
- data/src/core/ext/transport/chttp2/transport/frame.h +13 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -4
- data/src/core/ext/transport/chttp2/transport/frame_security.cc +10 -1
- data/src/core/ext/transport/chttp2/transport/frame_security.h +2 -1
- data/src/core/ext/transport/chttp2/transport/goaway.cc +11 -1
- data/src/core/ext/transport/chttp2/transport/goaway.h +17 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +9 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +117 -276
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +44 -17
- data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +382 -496
- data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +75 -77
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +30 -11
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +24 -9
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +26 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +2 -0
- data/src/core/ext/transport/chttp2/transport/internal.h +4 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +4 -10
- data/src/core/ext/transport/chttp2/transport/read_context.h +62 -20
- data/src/core/ext/transport/chttp2/transport/security_frame.h +1 -0
- data/src/core/ext/transport/chttp2/transport/stream.h +271 -120
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +77 -61
- data/src/core/handshaker/security/secure_endpoint.cc +0 -13
- data/src/core/lib/channel/promise_based_filter.cc +77 -3
- data/src/core/lib/channel/promise_based_filter.h +238 -184
- data/src/core/lib/event_engine/extensions/receive_coalescing_extension.h +0 -4
- data/src/core/lib/event_engine/extensions/tcp_trace.h +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +2 -12
- data/src/core/lib/event_engine/shim.cc +2 -16
- data/src/core/lib/event_engine/shim.h +0 -4
- data/src/core/lib/experiments/experiments.cc +51 -102
- data/src/core/lib/experiments/experiments.h +37 -59
- data/src/core/lib/iomgr/error.cc +3 -73
- data/src/core/lib/iomgr/error.h +8 -6
- data/src/core/lib/iomgr/error_cfstream.cc +1 -2
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +2 -6
- data/src/core/lib/iomgr/ev_poll_posix.cc +2 -6
- data/src/core/lib/iomgr/tcp_posix.cc +2 -6
- data/src/core/lib/security/authorization/audit_logging.cc +2 -2
- data/src/core/lib/security/authorization/audit_logging.h +3 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +11 -13
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -1
- data/src/core/lib/security/authorization/matchers.cc +20 -20
- data/src/core/lib/security/authorization/matchers.h +15 -16
- data/src/core/lib/security/authorization/rbac_policy.h +1 -1
- data/src/core/lib/security/authorization/stdout_logger.cc +3 -3
- data/src/core/lib/security/authorization/stdout_logger.h +6 -5
- data/src/core/lib/surface/call.cc +0 -8
- data/src/core/lib/surface/call.h +2 -0
- data/src/core/lib/surface/channel.cc +21 -2
- data/src/core/lib/surface/channel.h +14 -6
- data/src/core/lib/surface/filter_stack_call.cc +10 -29
- data/src/core/lib/surface/legacy_channel.cc +7 -7
- data/src/core/lib/surface/legacy_channel.h +3 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +13 -13
- data/src/core/lib/transport/bdp_estimator.h +9 -5
- data/src/core/lib/transport/error_utils.cc +26 -138
- data/src/core/lib/transport/promise_endpoint.h +2 -4
- data/src/core/load_balancing/grpclb/grpclb.cc +2 -1
- data/src/core/load_balancing/pick_first/pick_first.cc +33 -2
- data/src/core/load_balancing/pick_first/pick_first.h +6 -0
- data/src/core/load_balancing/ring_hash/ring_hash.cc +3 -10
- data/src/core/load_balancing/rls/rls.cc +2 -1
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +2 -7
- data/src/core/load_balancing/xds/cds.cc +80 -56
- data/src/core/load_balancing/xds/cds.h +21 -0
- data/src/core/mitigation_engine/mitigation.h +53 -0
- data/src/core/mitigation_engine/mitigation_provider.h +62 -0
- data/src/core/resolver/dns/dns_resolver_plugin.cc +1 -6
- data/src/core/resolver/xds/xds_resolver.cc +14 -11
- data/src/core/server/server.h +1 -4
- data/src/core/server/server_config_selector.h +5 -4
- data/src/core/server/server_config_selector_filter.cc +67 -80
- data/src/core/server/xds_server_config_fetcher.cc +681 -692
- data/src/core/server/xds_server_config_fetcher_legacy.cc +15 -12
- data/src/core/telemetry/call_tracer.cc +49 -2
- data/src/core/telemetry/call_tracer.h +1 -0
- data/src/core/telemetry/tcp_tracer.h +38 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/ssl_telemetry_utils.cc +343 -0
- data/src/core/tsi/ssl_telemetry_utils.h +74 -0
- data/src/core/tsi/ssl_transport_security.cc +577 -301
- data/src/core/tsi/ssl_transport_security.h +22 -6
- data/src/core/tsi/ssl_transport_security_utils.cc +2 -0
- data/src/core/tsi/transport_security.h +7 -0
- data/src/core/util/http_client/httpcli.cc +1 -4
- data/src/core/util/http_client/httpcli_security_connector.cc +2 -1
- data/src/core/util/status_helper.cc +71 -192
- data/src/core/util/status_helper.h +16 -21
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +2 -11
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -7
- data/src/core/xds/grpc/xds_cluster_parser.cc +5 -16
- data/src/core/xds/grpc/xds_common_types.cc +94 -38
- data/src/core/xds/grpc/xds_common_types.h +33 -18
- data/src/core/xds/grpc/xds_common_types_parser.cc +168 -100
- data/src/core/xds/grpc/xds_common_types_parser.h +18 -1
- data/src/core/xds/grpc/xds_endpoint_parser.cc +6 -17
- data/src/core/xds/grpc/xds_http_filter_registry.cc +2 -10
- data/src/core/xds/grpc/xds_http_rbac_filter.cc +3 -12
- data/src/core/xds/grpc/xds_metadata_parser.cc +0 -2
- data/src/core/xds/grpc/xds_route_config_parser.cc +7 -11
- data/src/core/xds/grpc/xds_routing.cc +113 -82
- data/src/core/xds/grpc/xds_routing.h +70 -20
- data/src/core/xds/grpc/xds_server_grpc.cc +22 -13
- data/src/core/xds/grpc/xds_server_grpc.h +16 -2
- data/src/core/xds/grpc/xds_server_grpc_interface.h +10 -0
- data/src/core/xds/grpc/xds_transport_grpc.cc +123 -18
- data/src/core/xds/grpc/xds_transport_grpc.h +28 -4
- data/src/core/xds/xds_client/lrs_client.cc +3 -7
- data/src/core/xds/xds_client/xds_bootstrap.cc +4 -16
- data/src/core/xds/xds_client/xds_client.cc +2 -15
- data/src/core/xds/xds_client/xds_transport.h +3 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +1 -1
- metadata +9 -1
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
#include "envoy/config/endpoint/v3/endpoint_components.upb.h"
|
|
35
35
|
#include "envoy/type/v3/percent.upb.h"
|
|
36
36
|
#include "google/protobuf/wrappers.upb.h"
|
|
37
|
+
#include "src/core/config/experiment_env_var.h"
|
|
37
38
|
#include "src/core/lib/address_utils/parse_address.h"
|
|
38
39
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
|
39
40
|
#include "src/core/lib/channel/channel_args.h"
|
|
@@ -41,11 +42,9 @@
|
|
|
41
42
|
#include "src/core/lib/iomgr/resolved_address.h"
|
|
42
43
|
#include "src/core/load_balancing/ring_hash/ring_hash.h"
|
|
43
44
|
#include "src/core/util/down_cast.h"
|
|
44
|
-
#include "src/core/util/env.h"
|
|
45
45
|
#include "src/core/util/grpc_check.h"
|
|
46
46
|
#include "src/core/util/json/json_args.h"
|
|
47
47
|
#include "src/core/util/json/json_object_loader.h"
|
|
48
|
-
#include "src/core/util/string.h"
|
|
49
48
|
#include "src/core/util/upb_utils.h"
|
|
50
49
|
#include "src/core/util/validation_errors.h"
|
|
51
50
|
#include "src/core/xds/grpc/xds_cluster_parser.h"
|
|
@@ -66,23 +65,11 @@ namespace grpc_core {
|
|
|
66
65
|
|
|
67
66
|
namespace {
|
|
68
67
|
|
|
69
|
-
// TODO(roth): Remove this after 1.67 is released.
|
|
70
|
-
bool XdsDualstackEndpointsEnabled() {
|
|
71
|
-
auto value = GetEnv("GRPC_EXPERIMENTAL_XDS_DUALSTACK_ENDPOINTS");
|
|
72
|
-
if (!value.has_value()) return true;
|
|
73
|
-
bool parsed_value;
|
|
74
|
-
bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value);
|
|
75
|
-
return parse_succeeded && parsed_value;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
68
|
// TODO(roth): Flip the default to false once this proves stable, then
|
|
79
69
|
// remove it entirely at some point in the future.
|
|
80
70
|
bool XdsEndpointHashKeyBackwardCompatEnabled() {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
bool parsed_value;
|
|
84
|
-
bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value);
|
|
85
|
-
return parse_succeeded && parsed_value;
|
|
71
|
+
return IsExperimentEnvVarEnabled("GRPC_XDS_ENDPOINT_HASH_KEY_BACKWARD_COMPAT",
|
|
72
|
+
/*default_value=*/true);
|
|
86
73
|
}
|
|
87
74
|
|
|
88
75
|
void MaybeLogClusterLoadAssignment(
|
|
@@ -170,7 +157,9 @@ std::optional<EndpointAddresses> EndpointAddressesParse(
|
|
|
170
157
|
envoy_config_endpoint_v3_Endpoint_address(endpoint), errors);
|
|
171
158
|
if (address.has_value()) addresses.push_back(*address);
|
|
172
159
|
}
|
|
173
|
-
|
|
160
|
+
// TODO(roth): Remove this after 1.67 is released.
|
|
161
|
+
if (IsExperimentEnvVarEnabled("GRPC_EXPERIMENTAL_XDS_DUALSTACK_ENDPOINTS",
|
|
162
|
+
/*default_value=*/true)) {
|
|
174
163
|
size_t size;
|
|
175
164
|
auto* additional_addresses =
|
|
176
165
|
envoy_config_endpoint_v3_Endpoint_additional_addresses(endpoint,
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
#include "envoy/extensions/filters/http/router/v3/router.upb.h"
|
|
25
25
|
#include "envoy/extensions/filters/http/router/v3/router.upbdefs.h"
|
|
26
|
-
#include "src/core/
|
|
26
|
+
#include "src/core/config/experiment_env_var.h"
|
|
27
27
|
#include "src/core/util/grpc_check.h"
|
|
28
28
|
#include "src/core/util/json/json.h"
|
|
29
29
|
#include "src/core/util/sync.h"
|
|
@@ -112,14 +112,6 @@ RefCountedPtr<const FilterConfig> XdsHttpRouterFilter::ParseOverrideConfig(
|
|
|
112
112
|
|
|
113
113
|
namespace {
|
|
114
114
|
|
|
115
|
-
bool XdsCompositeFilterEnabled() {
|
|
116
|
-
auto value = GetEnv("GRPC_EXPERIMENTAL_XDS_COMPOSITE_FILTER");
|
|
117
|
-
if (!value.has_value()) return false;
|
|
118
|
-
bool parsed_value;
|
|
119
|
-
bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value);
|
|
120
|
-
return parse_succeeded && parsed_value;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
115
|
Mutex* g_mu = new Mutex;
|
|
124
116
|
NoDestruct<absl::AnyInvocable<std::unique_ptr<XdsHttpFilterImpl>()>>
|
|
125
117
|
g_http_filter_factory_factory ABSL_GUARDED_BY(*g_mu);
|
|
@@ -139,7 +131,7 @@ XdsHttpFilterRegistry::XdsHttpFilterRegistry(bool register_builtins) {
|
|
|
139
131
|
RegisterFilter(std::make_unique<XdsHttpRbacFilter>());
|
|
140
132
|
RegisterFilter(std::make_unique<XdsHttpStatefulSessionFilter>());
|
|
141
133
|
RegisterFilter(std::make_unique<XdsHttpGcpAuthnFilter>());
|
|
142
|
-
if (
|
|
134
|
+
if (IsExperimentEnvVarEnabled("GRPC_EXPERIMENTAL_XDS_COMPOSITE_FILTER")) {
|
|
143
135
|
RegisterFilter(std::make_unique<XdsHttpCompositeFilter>());
|
|
144
136
|
}
|
|
145
137
|
MutexLock lock(g_mu);
|
|
@@ -36,14 +36,13 @@
|
|
|
36
36
|
#include "envoy/type/matcher/v3/string.upb.h"
|
|
37
37
|
#include "envoy/type/v3/range.upb.h"
|
|
38
38
|
#include "google/protobuf/wrappers.upb.h"
|
|
39
|
+
#include "src/core/config/experiment_env_var.h"
|
|
39
40
|
#include "src/core/ext/filters/rbac/rbac_filter.h"
|
|
40
41
|
#include "src/core/ext/filters/rbac/rbac_service_config_parser.h"
|
|
41
42
|
#include "src/core/lib/channel/channel_args.h"
|
|
42
43
|
#include "src/core/util/down_cast.h"
|
|
43
|
-
#include "src/core/util/env.h"
|
|
44
44
|
#include "src/core/util/json/json.h"
|
|
45
45
|
#include "src/core/util/json/json_writer.h"
|
|
46
|
-
#include "src/core/util/string.h"
|
|
47
46
|
#include "src/core/util/upb_utils.h"
|
|
48
47
|
#include "src/core/xds/grpc/xds_audit_logger_registry.h"
|
|
49
48
|
#include "src/core/xds/grpc/xds_bootstrap_grpc.h"
|
|
@@ -60,15 +59,6 @@ namespace grpc_core {
|
|
|
60
59
|
|
|
61
60
|
namespace {
|
|
62
61
|
|
|
63
|
-
// TODO(lwge): Remove once the feature is stable.
|
|
64
|
-
bool XdsRbacAuditLoggingEnabled() {
|
|
65
|
-
auto value = GetEnv("GRPC_EXPERIMENTAL_XDS_RBAC_AUDIT_LOGGING");
|
|
66
|
-
if (!value.has_value()) return false;
|
|
67
|
-
bool parsed_value;
|
|
68
|
-
bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value);
|
|
69
|
-
return parse_succeeded && parsed_value;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
62
|
Json ParseRegexMatcherToJson(
|
|
73
63
|
const envoy_type_matcher_v3_RegexMatcher* regex_matcher) {
|
|
74
64
|
return Json::FromObject(
|
|
@@ -479,7 +469,8 @@ Json ParseHttpRbacToJson(const XdsResourceType::DecodeContext& context,
|
|
|
479
469
|
Json::FromObject(std::move(policies_object)));
|
|
480
470
|
}
|
|
481
471
|
// Flatten the nested messages defined in rbac.proto
|
|
482
|
-
|
|
472
|
+
// TODO(lwge): Remove env var guard once the feature is stable.
|
|
473
|
+
if (IsExperimentEnvVarEnabled("GRPC_EXPERIMENTAL_XDS_RBAC_AUDIT_LOGGING") &&
|
|
483
474
|
envoy_config_rbac_v3_RBAC_has_audit_logging_options(rules)) {
|
|
484
475
|
ValidationErrors::ScopedField field(errors, ".audit_logging_options");
|
|
485
476
|
const auto* audit_logging_options =
|
|
@@ -24,8 +24,6 @@
|
|
|
24
24
|
#include "envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb.h"
|
|
25
25
|
#include "envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upbdefs.h"
|
|
26
26
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
|
27
|
-
#include "src/core/util/env.h"
|
|
28
|
-
#include "src/core/util/string.h"
|
|
29
27
|
#include "src/core/util/upb_utils.h"
|
|
30
28
|
#include "src/core/util/validation_errors.h"
|
|
31
29
|
#include "src/core/xds/grpc/xds_cluster_parser.h"
|
|
@@ -45,17 +45,16 @@
|
|
|
45
45
|
#include "re2/re2.h"
|
|
46
46
|
#include "src/core/call/status_util.h"
|
|
47
47
|
#include "src/core/config/core_configuration.h"
|
|
48
|
+
#include "src/core/config/experiment_env_var.h"
|
|
48
49
|
#include "src/core/lib/debug/trace.h"
|
|
49
50
|
#include "src/core/load_balancing/lb_policy_registry.h"
|
|
50
51
|
#include "src/core/util/down_cast.h"
|
|
51
|
-
#include "src/core/util/env.h"
|
|
52
52
|
#include "src/core/util/grpc_check.h"
|
|
53
53
|
#include "src/core/util/json/json.h"
|
|
54
54
|
#include "src/core/util/json/json_writer.h"
|
|
55
55
|
#include "src/core/util/match.h"
|
|
56
56
|
#include "src/core/util/matchers.h"
|
|
57
57
|
#include "src/core/util/ref_counted_ptr.h"
|
|
58
|
-
#include "src/core/util/string.h"
|
|
59
58
|
#include "src/core/util/time.h"
|
|
60
59
|
#include "src/core/util/upb_utils.h"
|
|
61
60
|
#include "src/core/xds/grpc/xds_cluster_specifier_plugin.h"
|
|
@@ -79,21 +78,18 @@
|
|
|
79
78
|
|
|
80
79
|
namespace grpc_core {
|
|
81
80
|
|
|
82
|
-
// TODO(apolcyn): remove this flag by the 1.58 release
|
|
83
|
-
bool XdsRlsEnabled() {
|
|
84
|
-
auto value = GetEnv("GRPC_EXPERIMENTAL_XDS_RLS_LB");
|
|
85
|
-
if (!value.has_value()) return true;
|
|
86
|
-
bool parsed_value;
|
|
87
|
-
bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value);
|
|
88
|
-
return parse_succeeded && parsed_value;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
81
|
//
|
|
92
82
|
// XdsRouteConfigResourceParse()
|
|
93
83
|
//
|
|
94
84
|
|
|
95
85
|
namespace {
|
|
96
86
|
|
|
87
|
+
// TODO(apolcyn): remove this flag by the 1.58 release
|
|
88
|
+
bool XdsRlsEnabled() {
|
|
89
|
+
return IsExperimentEnvVarEnabled("GRPC_EXPERIMENTAL_XDS_RLS_LB",
|
|
90
|
+
/*default_value=*/true);
|
|
91
|
+
}
|
|
92
|
+
|
|
97
93
|
XdsRouteConfigResource::ClusterSpecifierPluginMap ClusterSpecifierPluginParse(
|
|
98
94
|
const XdsResourceType::DecodeContext& context,
|
|
99
95
|
const envoy_config_route_v3_RouteConfiguration* route_config,
|
|
@@ -190,16 +190,14 @@ std::optional<absl::string_view> XdsRouting::GetHeaderValue(
|
|
|
190
190
|
return initial_metadata->GetStringValue(header_name, concatenated_value);
|
|
191
191
|
}
|
|
192
192
|
|
|
193
|
-
XdsRouting::
|
|
193
|
+
XdsRouting::RouteConfigFilterChainBuilder::RouteConfigFilterChainBuilder(
|
|
194
194
|
const std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>&
|
|
195
195
|
hcm_filter_configs,
|
|
196
196
|
const XdsHttpFilterRegistry& http_filter_registry,
|
|
197
|
-
const XdsRouteConfigResource::VirtualHost& vhost,
|
|
198
197
|
FilterChainBuilder& builder,
|
|
199
198
|
absl::AnyInvocable<void(FilterChainBuilder&)> add_last_filter,
|
|
200
199
|
Blackboard& blackboard)
|
|
201
200
|
: hcm_filter_configs_(hcm_filter_configs),
|
|
202
|
-
vhost_(vhost),
|
|
203
201
|
builder_(builder),
|
|
204
202
|
add_last_filter_(std::move(add_last_filter)),
|
|
205
203
|
blackboard_(blackboard) {
|
|
@@ -216,6 +214,31 @@ XdsRouting::PerRouteFilterChainBuilder::PerRouteFilterChainBuilder(
|
|
|
216
214
|
}
|
|
217
215
|
}
|
|
218
216
|
|
|
217
|
+
absl::StatusOr<RefCountedPtr<const FilterChain>>
|
|
218
|
+
XdsRouting::RouteConfigFilterChainBuilder::GetDefaultFilterChain() {
|
|
219
|
+
if (default_filter_chain_.ok() && *default_filter_chain_ == nullptr) {
|
|
220
|
+
GRPC_TRACE_LOG(xds_resolver, INFO) << "Building default filter chain:";
|
|
221
|
+
for (size_t i = 0; i < filter_impls_.size(); ++i) {
|
|
222
|
+
auto* filter_impl = filter_impls_[i];
|
|
223
|
+
const auto& filter_config = hcm_filter_configs_[i];
|
|
224
|
+
RefCountedPtr<const FilterConfig> config;
|
|
225
|
+
if (filter_config.filter_config != nullptr) {
|
|
226
|
+
config = filter_impl->MergeConfigs(filter_config.filter_config, nullptr,
|
|
227
|
+
nullptr, nullptr, blackboard_);
|
|
228
|
+
}
|
|
229
|
+
GRPC_TRACE_LOG(xds_resolver, INFO)
|
|
230
|
+
<< " Adding filter=" << filter_config.name
|
|
231
|
+
<< " config=" << (config == nullptr ? "<null>" : config->ToString());
|
|
232
|
+
filter_impl->AddFilter(builder_, std::move(config));
|
|
233
|
+
}
|
|
234
|
+
if (add_last_filter_ != nullptr) add_last_filter_(builder_);
|
|
235
|
+
default_filter_chain_ = builder_.Build();
|
|
236
|
+
GRPC_TRACE_LOG(xds_resolver, INFO)
|
|
237
|
+
<< "Filter chain creation status: " << default_filter_chain_.status();
|
|
238
|
+
}
|
|
239
|
+
return default_filter_chain_;
|
|
240
|
+
}
|
|
241
|
+
|
|
219
242
|
namespace {
|
|
220
243
|
|
|
221
244
|
RefCountedPtr<const FilterConfig> GetOverrideConfig(
|
|
@@ -233,44 +256,51 @@ RefCountedPtr<const FilterConfig> GetOverrideConfig(
|
|
|
233
256
|
} // namespace
|
|
234
257
|
|
|
235
258
|
absl::StatusOr<RefCountedPtr<const FilterChain>>
|
|
236
|
-
XdsRouting::
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
259
|
+
XdsRouting::RouteConfigFilterChainBuilder::VirtualHostFilterChainBuilder::
|
|
260
|
+
GetVirtualHostFilterChain() {
|
|
261
|
+
if (vhost_filter_chain_.ok() && *vhost_filter_chain_ == nullptr) {
|
|
262
|
+
// If there are no per-vhost overrides, use the default filter chain.
|
|
263
|
+
if (vhost_.typed_per_filter_config.empty()) {
|
|
264
|
+
return route_config_builder_.GetDefaultFilterChain();
|
|
265
|
+
}
|
|
266
|
+
GRPC_TRACE_LOG(xds_resolver, INFO) << "Building virtual host filter chain:";
|
|
267
|
+
for (size_t i = 0; i < route_config_builder_.filter_impls_.size(); ++i) {
|
|
268
|
+
auto* filter_impl = route_config_builder_.filter_impls_[i];
|
|
269
|
+
const auto& filter_config = route_config_builder_.hcm_filter_configs_[i];
|
|
242
270
|
RefCountedPtr<const FilterConfig> config;
|
|
243
271
|
if (filter_config.filter_config != nullptr) {
|
|
244
272
|
auto vhost_override_config = GetOverrideConfig(
|
|
245
273
|
filter_impl, vhost_.typed_per_filter_config, filter_config.name);
|
|
246
|
-
config = filter_impl->MergeConfigs(
|
|
247
|
-
|
|
248
|
-
|
|
274
|
+
config = filter_impl->MergeConfigs(
|
|
275
|
+
filter_config.filter_config, std::move(vhost_override_config),
|
|
276
|
+
nullptr, nullptr, route_config_builder_.blackboard_);
|
|
249
277
|
}
|
|
250
278
|
GRPC_TRACE_LOG(xds_resolver, INFO)
|
|
251
279
|
<< " Adding filter=" << filter_config.name
|
|
252
280
|
<< " config=" << (config == nullptr ? "<null>" : config->ToString());
|
|
253
|
-
filter_impl->AddFilter(builder_, std::move(config));
|
|
281
|
+
filter_impl->AddFilter(route_config_builder_.builder_, std::move(config));
|
|
254
282
|
}
|
|
255
|
-
if (add_last_filter_ != nullptr)
|
|
256
|
-
|
|
283
|
+
if (route_config_builder_.add_last_filter_ != nullptr) {
|
|
284
|
+
route_config_builder_.add_last_filter_(route_config_builder_.builder_);
|
|
285
|
+
}
|
|
286
|
+
vhost_filter_chain_ = route_config_builder_.builder_.Build();
|
|
257
287
|
GRPC_TRACE_LOG(xds_resolver, INFO)
|
|
258
|
-
<< "Filter chain creation status: " <<
|
|
288
|
+
<< "Filter chain creation status: " << vhost_filter_chain_.status();
|
|
259
289
|
}
|
|
260
|
-
return
|
|
290
|
+
return vhost_filter_chain_;
|
|
261
291
|
}
|
|
262
292
|
|
|
263
293
|
absl::StatusOr<RefCountedPtr<const FilterChain>>
|
|
264
|
-
XdsRouting::
|
|
265
|
-
const XdsRouteConfigResource::Route& route) {
|
|
294
|
+
XdsRouting::RouteConfigFilterChainBuilder::VirtualHostFilterChainBuilder::
|
|
295
|
+
BuildFilterChainForRoute(const XdsRouteConfigResource::Route& route) {
|
|
266
296
|
GRPC_TRACE_LOG(xds_resolver, INFO)
|
|
267
297
|
<< "Building filter chain for route:" << route.ToString();
|
|
268
|
-
// If there are no per-route overrides, use the
|
|
269
|
-
if (route.typed_per_filter_config.empty()) return
|
|
298
|
+
// If there are no per-route overrides, use the vhost filter chain.
|
|
299
|
+
if (route.typed_per_filter_config.empty()) return GetVirtualHostFilterChain();
|
|
270
300
|
// Otherwise, build a new filter chain for the route.
|
|
271
|
-
for (size_t i = 0; i < filter_impls_.size(); ++i) {
|
|
272
|
-
auto* filter_impl = filter_impls_[i];
|
|
273
|
-
const auto& filter_config = hcm_filter_configs_[i];
|
|
301
|
+
for (size_t i = 0; i < route_config_builder_.filter_impls_.size(); ++i) {
|
|
302
|
+
auto* filter_impl = route_config_builder_.filter_impls_[i];
|
|
303
|
+
const auto& filter_config = route_config_builder_.hcm_filter_configs_[i];
|
|
274
304
|
RefCountedPtr<const FilterConfig> config;
|
|
275
305
|
if (filter_config.filter_config != nullptr) {
|
|
276
306
|
auto vhost_override_config = GetOverrideConfig(
|
|
@@ -279,77 +309,78 @@ XdsRouting::PerRouteFilterChainBuilder::BuildFilterChainForRoute(
|
|
|
279
309
|
filter_impl, route.typed_per_filter_config, filter_config.name);
|
|
280
310
|
config = filter_impl->MergeConfigs(
|
|
281
311
|
filter_config.filter_config, std::move(vhost_override_config),
|
|
282
|
-
std::move(route_override_config), nullptr,
|
|
312
|
+
std::move(route_override_config), nullptr,
|
|
313
|
+
route_config_builder_.blackboard_);
|
|
283
314
|
}
|
|
284
315
|
GRPC_TRACE_LOG(xds_resolver, INFO)
|
|
285
316
|
<< " Adding filter=" << filter_config.name
|
|
286
317
|
<< " config=" << (config == nullptr ? "<null>" : config->ToString());
|
|
287
|
-
filter_impl->AddFilter(builder_, std::move(config));
|
|
318
|
+
filter_impl->AddFilter(route_config_builder_.builder_, std::move(config));
|
|
319
|
+
}
|
|
320
|
+
if (route_config_builder_.add_last_filter_ != nullptr) {
|
|
321
|
+
route_config_builder_.add_last_filter_(route_config_builder_.builder_);
|
|
288
322
|
}
|
|
289
|
-
if (add_last_filter_ != nullptr) add_last_filter_(builder_);
|
|
290
323
|
absl::StatusOr<RefCountedPtr<const FilterChain>> route_filter_chain =
|
|
291
|
-
builder_.Build();
|
|
324
|
+
route_config_builder_.builder_.Build();
|
|
292
325
|
GRPC_TRACE_LOG(xds_resolver, INFO)
|
|
293
326
|
<< "Filter chain creation status: " << route_filter_chain.status();
|
|
294
327
|
return route_filter_chain;
|
|
295
328
|
}
|
|
296
329
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
std::move(route_override_config),
|
|
339
|
-
std::move(cluster_weight_override_config), blackboard_);
|
|
340
|
-
}
|
|
341
|
-
GRPC_TRACE_LOG(xds_resolver, INFO)
|
|
342
|
-
<< " Adding filter=" << filter_config.name << " config="
|
|
343
|
-
<< (config == nullptr ? "<null>" : config->ToString());
|
|
344
|
-
filter_impl->AddFilter(builder_, std::move(config));
|
|
345
|
-
}
|
|
346
|
-
if (add_last_filter_ != nullptr) add_last_filter_(builder_);
|
|
347
|
-
auto filter_chain = builder_.Build();
|
|
348
|
-
GRPC_TRACE_LOG(xds_resolver, INFO)
|
|
349
|
-
<< "Filter chain creation status: " << filter_chain.status();
|
|
350
|
-
set_filter_chain_for_cluster_weight(j, std::move(filter_chain));
|
|
330
|
+
absl::StatusOr<RefCountedPtr<const FilterChain>>
|
|
331
|
+
XdsRouting::RouteConfigFilterChainBuilder::VirtualHostFilterChainBuilder::
|
|
332
|
+
WeightedClusterRouteFilterChainBuilder::GetRouteFilterChain() {
|
|
333
|
+
if (route_filter_chain_.ok() && *route_filter_chain_ == nullptr) {
|
|
334
|
+
route_filter_chain_ = vhost_builder_.BuildFilterChainForRoute(route_);
|
|
335
|
+
}
|
|
336
|
+
return route_filter_chain_;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
absl::StatusOr<RefCountedPtr<const FilterChain>>
|
|
340
|
+
XdsRouting::RouteConfigFilterChainBuilder::VirtualHostFilterChainBuilder::
|
|
341
|
+
WeightedClusterRouteFilterChainBuilder::BuildFilterChainForClusterWeight(
|
|
342
|
+
const XdsRouteConfigResource::Route::RouteAction::ClusterWeight&
|
|
343
|
+
cluster_weight) {
|
|
344
|
+
GRPC_TRACE_LOG(xds_resolver, INFO)
|
|
345
|
+
<< "Building filter chain for route:" << route_.ToString()
|
|
346
|
+
<< " ClusterWeight:" << cluster_weight.ToString();
|
|
347
|
+
// If there are no per-ClusterWeight overrides, use the route filter chain.
|
|
348
|
+
if (cluster_weight.typed_per_filter_config.empty()) {
|
|
349
|
+
return GetRouteFilterChain();
|
|
350
|
+
}
|
|
351
|
+
// Otherwise, build a new filter chain for the ClusterWeight.
|
|
352
|
+
auto& route_config_builder = vhost_builder_.route_config_builder_;
|
|
353
|
+
for (size_t i = 0; i < route_config_builder.filter_impls_.size(); ++i) {
|
|
354
|
+
auto* filter_impl = route_config_builder.filter_impls_[i];
|
|
355
|
+
const auto& filter_config = route_config_builder.hcm_filter_configs_[i];
|
|
356
|
+
RefCountedPtr<const FilterConfig> config;
|
|
357
|
+
if (filter_config.filter_config != nullptr) {
|
|
358
|
+
auto vhost_override_config = GetOverrideConfig(
|
|
359
|
+
filter_impl, vhost_builder_.vhost_.typed_per_filter_config,
|
|
360
|
+
filter_config.name);
|
|
361
|
+
auto route_override_config = GetOverrideConfig(
|
|
362
|
+
filter_impl, route_.typed_per_filter_config, filter_config.name);
|
|
363
|
+
auto cluster_weight_override_config =
|
|
364
|
+
GetOverrideConfig(filter_impl, cluster_weight.typed_per_filter_config,
|
|
365
|
+
filter_config.name);
|
|
366
|
+
config = filter_impl->MergeConfigs(
|
|
367
|
+
filter_config.filter_config, std::move(vhost_override_config),
|
|
368
|
+
std::move(route_override_config),
|
|
369
|
+
std::move(cluster_weight_override_config),
|
|
370
|
+
route_config_builder.blackboard_);
|
|
351
371
|
}
|
|
372
|
+
GRPC_TRACE_LOG(xds_resolver, INFO)
|
|
373
|
+
<< " Adding filter=" << filter_config.name
|
|
374
|
+
<< " config=" << (config == nullptr ? "<null>" : config->ToString());
|
|
375
|
+
filter_impl->AddFilter(route_config_builder.builder_, std::move(config));
|
|
376
|
+
}
|
|
377
|
+
if (route_config_builder.add_last_filter_ != nullptr) {
|
|
378
|
+
route_config_builder.add_last_filter_(route_config_builder.builder_);
|
|
352
379
|
}
|
|
380
|
+
auto filter_chain = route_config_builder.builder_.Build();
|
|
381
|
+
GRPC_TRACE_LOG(xds_resolver, INFO)
|
|
382
|
+
<< "Filter chain creation status: " << filter_chain.status();
|
|
383
|
+
return filter_chain;
|
|
353
384
|
}
|
|
354
385
|
|
|
355
386
|
namespace {
|
|
@@ -80,49 +80,99 @@ class XdsRouting final {
|
|
|
80
80
|
grpc_metadata_batch* initial_metadata, absl::string_view header_name,
|
|
81
81
|
std::string* concatenated_value);
|
|
82
82
|
|
|
83
|
-
// Logic for building
|
|
84
|
-
// done to avoid unnecessary work while
|
|
85
|
-
//
|
|
83
|
+
// Logic for building filter chains for each route within a
|
|
84
|
+
// RouteConfiguration. Caching is done to avoid unnecessary work while
|
|
85
|
+
// iterating over the list of routes.
|
|
86
86
|
//
|
|
87
87
|
// TODO(roth): Currently, this class uses the xds_resolver tracer for
|
|
88
88
|
// logging. When we change the server side to use the new filter
|
|
89
89
|
// config structure, add a new tracer and use that instead, so that it
|
|
90
90
|
// can be used on both the client and server side.
|
|
91
|
-
class
|
|
91
|
+
class RouteConfigFilterChainBuilder {
|
|
92
92
|
public:
|
|
93
|
+
// Builds filter chains for each route within a VirtualHost.
|
|
94
|
+
class VirtualHostFilterChainBuilder {
|
|
95
|
+
public:
|
|
96
|
+
// Builds filter chains for each ClusterWeight within a route.
|
|
97
|
+
class WeightedClusterRouteFilterChainBuilder {
|
|
98
|
+
public:
|
|
99
|
+
WeightedClusterRouteFilterChainBuilder(
|
|
100
|
+
VirtualHostFilterChainBuilder& vhost_builder,
|
|
101
|
+
const XdsRouteConfigResource::Route& route)
|
|
102
|
+
: vhost_builder_(vhost_builder), route_(route) {}
|
|
103
|
+
|
|
104
|
+
// Builds a filter chain for a ClusterWeight.
|
|
105
|
+
absl::StatusOr<RefCountedPtr<const FilterChain>>
|
|
106
|
+
BuildFilterChainForClusterWeight(
|
|
107
|
+
const XdsRouteConfigResource::Route::RouteAction::ClusterWeight&
|
|
108
|
+
cluster_weight);
|
|
109
|
+
|
|
110
|
+
private:
|
|
111
|
+
absl::StatusOr<RefCountedPtr<const FilterChain>> GetRouteFilterChain();
|
|
112
|
+
|
|
113
|
+
VirtualHostFilterChainBuilder& vhost_builder_;
|
|
114
|
+
const XdsRouteConfigResource::Route& route_;
|
|
115
|
+
|
|
116
|
+
// Cached filter chain for the route, to be used for any ClusterWeight
|
|
117
|
+
// that does not have any filter config overrides.
|
|
118
|
+
absl::StatusOr<RefCountedPtr<const FilterChain>> route_filter_chain_ =
|
|
119
|
+
nullptr;
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
VirtualHostFilterChainBuilder(
|
|
123
|
+
RouteConfigFilterChainBuilder& route_config_builder,
|
|
124
|
+
const XdsRouteConfigResource::VirtualHost& vhost)
|
|
125
|
+
: route_config_builder_(route_config_builder), vhost_(vhost) {}
|
|
126
|
+
|
|
127
|
+
// Builds a filter chain for a route that has an individual cluster
|
|
128
|
+
// or a ClusterSpecifierPlugin.
|
|
129
|
+
absl::StatusOr<RefCountedPtr<const FilterChain>> BuildFilterChainForRoute(
|
|
130
|
+
const XdsRouteConfigResource::Route& route);
|
|
131
|
+
|
|
132
|
+
// Returns a filter chain builder for a given route that uses
|
|
133
|
+
// WeightedClusters.
|
|
134
|
+
WeightedClusterRouteFilterChainBuilder
|
|
135
|
+
MakeWeightedClusterRouteFilterChainBuilder(
|
|
136
|
+
const XdsRouteConfigResource::Route& route) {
|
|
137
|
+
return WeightedClusterRouteFilterChainBuilder(*this, route);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
private:
|
|
141
|
+
absl::StatusOr<RefCountedPtr<const FilterChain>>
|
|
142
|
+
GetVirtualHostFilterChain();
|
|
143
|
+
|
|
144
|
+
RouteConfigFilterChainBuilder& route_config_builder_;
|
|
145
|
+
const XdsRouteConfigResource::VirtualHost& vhost_;
|
|
146
|
+
|
|
147
|
+
// Cached filter chain for the virtual host, to be used for any route
|
|
148
|
+
// that does not have any filter config overrides.
|
|
149
|
+
absl::StatusOr<RefCountedPtr<const FilterChain>> vhost_filter_chain_ =
|
|
150
|
+
nullptr;
|
|
151
|
+
};
|
|
152
|
+
|
|
93
153
|
// The add_last_filter() callback is called on the builder after
|
|
94
154
|
// adding all of the xDS HTTP filters and right before building the
|
|
95
155
|
// filter chain. May be null if not needed.
|
|
96
|
-
|
|
156
|
+
RouteConfigFilterChainBuilder(
|
|
97
157
|
const std::vector<
|
|
98
158
|
XdsListenerResource::HttpConnectionManager::HttpFilter>&
|
|
99
159
|
hcm_filter_configs,
|
|
100
160
|
const XdsHttpFilterRegistry& http_filter_registry,
|
|
101
|
-
const XdsRouteConfigResource::VirtualHost& vhost,
|
|
102
161
|
FilterChainBuilder& builder,
|
|
103
162
|
absl::AnyInvocable<void(FilterChainBuilder&)> add_last_filter,
|
|
104
163
|
Blackboard& blackboard);
|
|
105
164
|
|
|
106
|
-
//
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
// Builds a filter chain for a route that uses WeightedClusters.
|
|
112
|
-
// The set_filter_chain_for_cluster_weight() function will be called
|
|
113
|
-
// once for each index in the WeightedClusters list.
|
|
114
|
-
void BuildFilterChainForRouteWithWeightedClusters(
|
|
115
|
-
const XdsRouteConfigResource::Route& route,
|
|
116
|
-
absl::FunctionRef<
|
|
117
|
-
void(size_t, absl::StatusOr<RefCountedPtr<const FilterChain>>)>
|
|
118
|
-
set_filter_chain_for_cluster_weight);
|
|
165
|
+
// Returns a filter chain builder for a given virtual host.
|
|
166
|
+
VirtualHostFilterChainBuilder MakeVirtualHostFilterChainBuilder(
|
|
167
|
+
const XdsRouteConfigResource::VirtualHost& vhost) {
|
|
168
|
+
return VirtualHostFilterChainBuilder(*this, vhost);
|
|
169
|
+
}
|
|
119
170
|
|
|
120
171
|
private:
|
|
121
172
|
absl::StatusOr<RefCountedPtr<const FilterChain>> GetDefaultFilterChain();
|
|
122
173
|
|
|
123
174
|
const std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>&
|
|
124
175
|
hcm_filter_configs_;
|
|
125
|
-
const XdsRouteConfigResource::VirtualHost& vhost_;
|
|
126
176
|
FilterChainBuilder& builder_;
|
|
127
177
|
absl::AnyInvocable<void(FilterChainBuilder&)> add_last_filter_;
|
|
128
178
|
Blackboard& blackboard_;
|
|
@@ -24,11 +24,10 @@
|
|
|
24
24
|
#include <vector>
|
|
25
25
|
|
|
26
26
|
#include "src/core/config/core_configuration.h"
|
|
27
|
+
#include "src/core/config/experiment_env_var.h"
|
|
27
28
|
#include "src/core/util/down_cast.h"
|
|
28
|
-
#include "src/core/util/env.h"
|
|
29
29
|
#include "src/core/util/json/json_reader.h"
|
|
30
30
|
#include "src/core/util/json/json_writer.h"
|
|
31
|
-
#include "src/core/util/string.h"
|
|
32
31
|
#include "absl/strings/str_cat.h"
|
|
33
32
|
#include "absl/strings/string_view.h"
|
|
34
33
|
|
|
@@ -98,16 +97,6 @@ struct ChannelOrCallCreds {
|
|
|
98
97
|
}
|
|
99
98
|
};
|
|
100
99
|
|
|
101
|
-
// TODO(roth): Remove this guard once we have reports from OSS Istio
|
|
102
|
-
// users that this works properly.
|
|
103
|
-
bool XdsBootstrapCallCredsEnabled() {
|
|
104
|
-
auto value = GetEnv("GRPC_EXPERIMENTAL_XDS_BOOTSTRAP_CALL_CREDS");
|
|
105
|
-
if (!value.has_value()) return false;
|
|
106
|
-
bool parsed_value;
|
|
107
|
-
bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value);
|
|
108
|
-
return parse_succeeded && parsed_value;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
100
|
} // namespace
|
|
112
101
|
|
|
113
102
|
RefCountedPtr<const ChannelCredsConfig> ParseXdsBootstrapChannelCreds(
|
|
@@ -170,7 +159,9 @@ void GrpcXdsServer::JsonPostLoad(const Json& json, const JsonArgs& args,
|
|
|
170
159
|
ParseXdsBootstrapChannelCreds(json, args, errors);
|
|
171
160
|
// Parse "call_creds".
|
|
172
161
|
std::vector<RefCountedPtr<const CallCredsConfig>> call_creds_configs;
|
|
173
|
-
|
|
162
|
+
// TODO(roth): Remove this guard once we have reports from OSS Istio
|
|
163
|
+
// users that this works properly.
|
|
164
|
+
if (IsExperimentEnvVarEnabled("GRPC_EXPERIMENTAL_XDS_BOOTSTRAP_CALL_CREDS")) {
|
|
174
165
|
call_creds_configs = ParseXdsBootstrapCallCreds(json, args, errors);
|
|
175
166
|
}
|
|
176
167
|
// Parse "server_features".
|
|
@@ -238,6 +229,22 @@ std::string GrpcXdsServerTarget::Key() const {
|
|
|
238
229
|
StrAppend(result, call_creds_config->ToString());
|
|
239
230
|
StrAppend(result, "}");
|
|
240
231
|
}
|
|
232
|
+
if (!initial_metadata_.empty()) {
|
|
233
|
+
StrAppend(result, ", initial_metadata=[");
|
|
234
|
+
bool is_first = true;
|
|
235
|
+
for (const auto& metadata : initial_metadata_) {
|
|
236
|
+
if (!is_first) StrAppend(result, ", ");
|
|
237
|
+
StrAppend(result, metadata.first);
|
|
238
|
+
StrAppend(result, "=");
|
|
239
|
+
StrAppend(result, metadata.second);
|
|
240
|
+
is_first = false;
|
|
241
|
+
}
|
|
242
|
+
StrAppend(result, "]");
|
|
243
|
+
}
|
|
244
|
+
if (timeout_ != Duration::Zero()) {
|
|
245
|
+
StrAppend(result, ", timeout=");
|
|
246
|
+
StrAppend(result, timeout_.ToString());
|
|
247
|
+
}
|
|
241
248
|
StrAppend(result, "}");
|
|
242
249
|
return result;
|
|
243
250
|
}
|
|
@@ -258,6 +265,8 @@ bool GrpcXdsServerTarget::Equals(const XdsServerTarget& other) const {
|
|
|
258
265
|
return false;
|
|
259
266
|
}
|
|
260
267
|
}
|
|
268
|
+
if (initial_metadata_ != o.initial_metadata_) return false;
|
|
269
|
+
if (timeout_ != o.timeout_) return false;
|
|
261
270
|
return true;
|
|
262
271
|
}
|
|
263
272
|
|