grpc 1.60.2 → 1.61.0.pre2
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 +208 -165
- data/include/grpc/event_engine/event_engine.h +59 -12
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +6 -0
- data/include/grpc/event_engine/internal/slice_cast.h +12 -0
- data/include/grpc/event_engine/memory_allocator.h +3 -1
- data/include/grpc/event_engine/slice.h +5 -0
- data/include/grpc/grpc_security.h +22 -1
- data/include/grpc/impl/call.h +29 -0
- data/include/grpc/impl/channel_arg_names.h +12 -1
- data/include/grpc/impl/slice_type.h +1 -1
- data/include/grpc/module.modulemap +1 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +54 -7
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +20 -6
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +10 -13
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -10
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +326 -0
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +143 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +32 -6
- data/src/core/ext/filters/client_channel/client_channel_internal.h +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +54 -21
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc +12 -15
- data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h +8 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +139 -92
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +9 -4
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +9 -4
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +10 -11
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +94 -93
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +5 -3
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +12 -15
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +38 -16
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +25 -28
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +10 -10
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +37 -35
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +504 -461
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +232 -122
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +642 -251
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +2 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +6 -8
- data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.cc +1031 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.h +277 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +128 -270
- data/src/core/ext/filters/client_channel/resolver/xds/{xds_resolver.h → xds_resolver_attributes.h} +5 -4
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.cc +25 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.h +30 -0
- data/src/core/ext/filters/client_channel/retry_filter.cc +1 -0
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +35 -17
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +17 -13
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +13 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +23 -32
- data/src/core/ext/filters/http/client/http_client_filter.h +10 -5
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
- data/src/core/ext/filters/http/client_authority_filter.h +12 -4
- data/src/core/ext/filters/http/http_filters_plugin.cc +42 -20
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +55 -80
- data/src/core/ext/filters/http/message_compress/compression_filter.h +54 -12
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.cc +325 -0
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.h +139 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +41 -41
- data/src/core/ext/filters/http/server/http_server_filter.h +11 -4
- data/src/core/ext/filters/message_size/message_size_filter.cc +56 -76
- data/src/core/ext/filters/message_size/message_size_filter.h +35 -23
- data/src/core/ext/filters/rbac/rbac_filter.cc +15 -11
- data/src/core/ext/filters/rbac/rbac_filter.h +11 -4
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +25 -13
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +47 -50
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +21 -4
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +11 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +68 -145
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +21 -82
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -8
- data/src/core/ext/transport/chttp2/transport/frame.cc +506 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +214 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +33 -79
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -36
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -2
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +122 -32
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +142 -37
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -22
- data/src/core/ext/transport/chttp2/transport/parsing.cc +23 -37
- data/src/core/ext/transport/chttp2/transport/writing.cc +26 -58
- data/src/core/ext/transport/inproc/inproc_transport.cc +172 -13
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +712 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +151 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +33 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +133 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +50 -0
- data/src/core/ext/xds/certificate_provider_store.cc +2 -1
- data/src/core/ext/xds/certificate_provider_store.h +0 -5
- data/src/core/ext/xds/xds_api.cc +31 -18
- data/src/core/ext/xds/xds_api.h +2 -2
- data/src/core/ext/xds/xds_bootstrap.h +3 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +88 -287
- data/src/core/ext/xds/xds_certificate_provider.h +44 -111
- data/src/core/ext/xds/xds_client.cc +420 -414
- data/src/core/ext/xds/xds_client.h +31 -22
- data/src/core/ext/xds/xds_client_grpc.cc +3 -1
- data/src/core/ext/xds/xds_cluster.cc +104 -11
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +9 -5
- data/src/core/ext/xds/xds_common_types.cc +14 -10
- data/src/core/ext/xds/xds_endpoint.cc +9 -4
- data/src/core/ext/xds/xds_endpoint.h +5 -1
- data/src/core/ext/xds/xds_health_status.cc +12 -2
- data/src/core/ext/xds/xds_health_status.h +4 -2
- data/src/core/ext/xds/xds_http_rbac_filter.cc +5 -3
- data/src/core/ext/xds/xds_listener.cc +14 -8
- data/src/core/ext/xds/xds_resource_type_impl.h +6 -4
- data/src/core/ext/xds/xds_route_config.cc +34 -22
- data/src/core/ext/xds/xds_route_config.h +1 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +61 -57
- data/src/core/ext/xds/xds_transport.h +3 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +47 -50
- data/src/core/ext/xds/xds_transport_grpc.h +4 -0
- data/src/core/lib/channel/call_tracer.cc +12 -0
- data/src/core/lib/channel/call_tracer.h +17 -3
- data/src/core/lib/channel/channel_args.cc +24 -14
- data/src/core/lib/channel/channel_args.h +74 -13
- data/src/core/lib/channel/channel_stack.cc +27 -0
- data/src/core/lib/channel/channel_stack.h +10 -10
- data/src/core/lib/channel/connected_channel.cc +64 -18
- data/src/core/lib/channel/promise_based_filter.h +1041 -1
- data/src/core/lib/channel/server_call_tracer_filter.cc +43 -35
- data/src/core/lib/compression/compression_internal.cc +0 -3
- data/src/core/lib/event_engine/ares_resolver.cc +35 -14
- data/src/core/lib/event_engine/ares_resolver.h +9 -10
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +8 -1
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +132 -0
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +61 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +52 -36
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +4 -9
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +11 -3
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +9 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +7 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +17 -27
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +0 -3
- data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +55 -0
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +114 -0
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.h +51 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +7 -7
- data/src/core/lib/experiments/config.cc +13 -0
- data/src/core/lib/experiments/config.h +3 -0
- data/src/core/lib/experiments/experiments.cc +245 -366
- data/src/core/lib/experiments/experiments.h +50 -156
- data/src/core/lib/gprpp/debug_location.h +13 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +36 -7
- data/src/core/lib/gprpp/orphanable.h +27 -0
- data/src/core/lib/gprpp/ref_counted.h +63 -22
- data/src/core/lib/gprpp/ref_counted_ptr.h +70 -27
- data/src/core/lib/gprpp/ref_counted_string.h +13 -0
- data/src/core/lib/gprpp/status_helper.cc +1 -2
- data/src/core/lib/iomgr/combiner.cc +15 -51
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +31 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +16 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -3
- data/src/core/lib/load_balancing/lb_policy.h +1 -1
- data/src/core/lib/promise/activity.cc +17 -2
- data/src/core/lib/promise/activity.h +5 -4
- data/src/core/lib/promise/all_ok.h +80 -0
- data/src/core/lib/promise/detail/join_state.h +2077 -0
- data/src/core/lib/promise/detail/promise_factory.h +1 -0
- data/src/core/lib/promise/detail/promise_like.h +8 -1
- data/src/core/lib/promise/detail/seq_state.h +3458 -150
- data/src/core/lib/promise/detail/status.h +42 -5
- data/src/core/lib/promise/for_each.h +13 -1
- data/src/core/lib/promise/if.h +4 -0
- data/src/core/lib/promise/latch.h +6 -3
- data/src/core/lib/promise/party.cc +33 -31
- data/src/core/lib/promise/party.h +142 -6
- data/src/core/lib/promise/poll.h +39 -13
- data/src/core/lib/promise/promise.h +4 -0
- data/src/core/lib/promise/seq.h +107 -7
- data/src/core/lib/promise/status_flag.h +196 -0
- data/src/core/lib/promise/try_join.h +132 -0
- data/src/core/lib/promise/try_seq.h +132 -10
- data/src/core/lib/resolver/endpoint_addresses.cc +0 -1
- data/src/core/lib/resolver/endpoint_addresses.h +48 -0
- data/src/core/lib/resource_quota/arena.h +2 -2
- data/src/core/lib/resource_quota/memory_quota.cc +57 -8
- data/src/core/lib/resource_quota/memory_quota.h +6 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +14 -11
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +14 -5
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +28 -20
- data/src/core/lib/security/credentials/external/external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +0 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +12 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +22 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +1 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -28
- data/src/core/lib/security/credentials/xds/xds_credentials.h +2 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -3
- data/src/core/lib/security/transport/auth_filters.h +71 -4
- data/src/core/lib/security/transport/client_auth_filter.cc +2 -4
- data/src/core/lib/security/transport/legacy_server_auth_filter.cc +244 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +70 -90
- data/src/core/lib/slice/slice_buffer.h +3 -0
- data/src/core/lib/surface/builtins.cc +1 -1
- data/src/core/lib/surface/call.cc +683 -196
- data/src/core/lib/surface/call.h +26 -13
- data/src/core/lib/surface/call_trace.cc +42 -1
- data/src/core/lib/surface/channel.cc +0 -1
- data/src/core/lib/surface/channel.h +0 -6
- data/src/core/lib/surface/channel_init.h +26 -0
- data/src/core/lib/surface/init.cc +14 -8
- data/src/core/lib/surface/server.cc +256 -237
- data/src/core/lib/surface/server.h +26 -54
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/surface/wait_for_cq_end_op.h +94 -0
- data/src/core/lib/transport/call_final_info.cc +38 -0
- data/src/core/lib/transport/call_final_info.h +54 -0
- data/src/core/lib/transport/connectivity_state.cc +3 -2
- data/src/core/lib/transport/connectivity_state.h +4 -0
- data/src/core/lib/transport/metadata_batch.h +4 -4
- data/src/core/lib/transport/transport.cc +70 -19
- data/src/core/lib/transport/transport.h +395 -25
- data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -0
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +65 -43
- data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
- data/src/ruby/ext/grpc/rb_grpc.c +0 -1
- data/src/ruby/ext/grpc/rb_grpc.h +0 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/upb/upb/reflection/def_pool.h +2 -2
- data/third_party/zlib/adler32.c +5 -27
- data/third_party/zlib/compress.c +5 -16
- data/third_party/zlib/crc32.c +86 -162
- data/third_party/zlib/deflate.c +233 -336
- data/third_party/zlib/deflate.h +8 -8
- data/third_party/zlib/gzguts.h +11 -12
- data/third_party/zlib/infback.c +7 -23
- data/third_party/zlib/inffast.c +1 -4
- data/third_party/zlib/inffast.h +1 -1
- data/third_party/zlib/inflate.c +30 -99
- data/third_party/zlib/inftrees.c +6 -11
- data/third_party/zlib/inftrees.h +3 -3
- data/third_party/zlib/trees.c +224 -302
- data/third_party/zlib/uncompr.c +4 -12
- data/third_party/zlib/zconf.h +6 -2
- data/third_party/zlib/zlib.h +191 -188
- data/third_party/zlib/zutil.c +16 -44
- data/third_party/zlib/zutil.h +10 -10
- metadata +35 -13
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +0 -1173
- data/src/core/lib/event_engine/memory_allocator.cc +0 -74
- data/src/core/lib/transport/pid_controller.cc +0 -51
- data/src/core/lib/transport/pid_controller.h +0 -116
- data/third_party/upb/upb/collections/array.h +0 -17
- data/third_party/upb/upb/collections/map.h +0 -17
- data/third_party/upb/upb/upb.hpp +0 -18
@@ -56,6 +56,11 @@ extern TraceFlag grpc_xds_client_refcount_trace;
|
|
56
56
|
|
57
57
|
class XdsClient : public DualRefCounted<XdsClient> {
|
58
58
|
public:
|
59
|
+
class ReadDelayHandle : public RefCounted<ReadDelayHandle> {
|
60
|
+
public:
|
61
|
+
static RefCountedPtr<ReadDelayHandle> NoWait() { return nullptr; }
|
62
|
+
};
|
63
|
+
|
59
64
|
// Resource watcher interface. Implemented by callers.
|
60
65
|
// Note: Most callers will not use this API directly but rather via a
|
61
66
|
// resource-type-specific wrapper API provided by the relevant
|
@@ -63,11 +68,14 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
63
68
|
class ResourceWatcherInterface : public RefCounted<ResourceWatcherInterface> {
|
64
69
|
public:
|
65
70
|
virtual void OnGenericResourceChanged(
|
66
|
-
std::shared_ptr<const XdsResourceType::ResourceData> resource
|
71
|
+
std::shared_ptr<const XdsResourceType::ResourceData> resource,
|
72
|
+
RefCountedPtr<ReadDelayHandle> read_delay_handle)
|
67
73
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) = 0;
|
68
|
-
virtual void OnError(absl::Status status
|
74
|
+
virtual void OnError(absl::Status status,
|
75
|
+
RefCountedPtr<ReadDelayHandle> read_delay_handle)
|
69
76
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) = 0;
|
70
|
-
virtual void OnResourceDoesNotExist(
|
77
|
+
virtual void OnResourceDoesNotExist(
|
78
|
+
RefCountedPtr<ReadDelayHandle> read_delay_handle)
|
71
79
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) = 0;
|
72
80
|
};
|
73
81
|
|
@@ -171,23 +179,23 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
171
179
|
|
172
180
|
// Contains a channel to the xds server and all the data related to the
|
173
181
|
// channel. Holds a ref to the xds client object.
|
174
|
-
class
|
182
|
+
class XdsChannel : public DualRefCounted<XdsChannel> {
|
175
183
|
public:
|
176
184
|
template <typename T>
|
177
185
|
class RetryableCall;
|
178
186
|
|
179
|
-
class
|
180
|
-
class
|
187
|
+
class AdsCall;
|
188
|
+
class LrsCall;
|
181
189
|
|
182
|
-
|
183
|
-
|
184
|
-
~
|
190
|
+
XdsChannel(WeakRefCountedPtr<XdsClient> xds_client,
|
191
|
+
const XdsBootstrap::XdsServer& server);
|
192
|
+
~XdsChannel() override;
|
185
193
|
|
186
194
|
void Orphan() override;
|
187
195
|
|
188
196
|
XdsClient* xds_client() const { return xds_client_.get(); }
|
189
|
-
|
190
|
-
|
197
|
+
AdsCall* ads_call() const;
|
198
|
+
LrsCall* lrs_call() const;
|
191
199
|
|
192
200
|
void ResetBackoff();
|
193
201
|
|
@@ -223,9 +231,9 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
223
231
|
|
224
232
|
bool shutting_down_ = false;
|
225
233
|
|
226
|
-
// The retryable
|
227
|
-
OrphanablePtr<RetryableCall<
|
228
|
-
OrphanablePtr<RetryableCall<
|
234
|
+
// The retryable ADS and LRS calls.
|
235
|
+
OrphanablePtr<RetryableCall<AdsCall>> ads_call_;
|
236
|
+
OrphanablePtr<RetryableCall<LrsCall>> lrs_call_;
|
229
237
|
|
230
238
|
// Stores the most recent accepted resource version for each resource type.
|
231
239
|
std::map<const XdsResourceType*, std::string /*version*/>
|
@@ -244,7 +252,7 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
244
252
|
};
|
245
253
|
|
246
254
|
struct AuthorityState {
|
247
|
-
RefCountedPtr<
|
255
|
+
RefCountedPtr<XdsChannel> xds_channel;
|
248
256
|
std::map<const XdsResourceType*, std::map<XdsResourceKey, ResourceState>>
|
249
257
|
resource_map;
|
250
258
|
};
|
@@ -269,7 +277,7 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
269
277
|
LoadReportState>;
|
270
278
|
|
271
279
|
struct LoadReportServer {
|
272
|
-
RefCountedPtr<
|
280
|
+
RefCountedPtr<XdsChannel> xds_channel;
|
273
281
|
LoadReportMap load_report_map;
|
274
282
|
};
|
275
283
|
|
@@ -277,11 +285,12 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
277
285
|
void NotifyWatchersOnErrorLocked(
|
278
286
|
const std::map<ResourceWatcherInterface*,
|
279
287
|
RefCountedPtr<ResourceWatcherInterface>>& watchers,
|
280
|
-
absl::Status status);
|
288
|
+
absl::Status status, RefCountedPtr<ReadDelayHandle> read_delay_handle);
|
281
289
|
// Sends a resource-does-not-exist notification to a specific set of watchers.
|
282
290
|
void NotifyWatchersOnResourceDoesNotExist(
|
283
291
|
const std::map<ResourceWatcherInterface*,
|
284
|
-
RefCountedPtr<ResourceWatcherInterface>>& watchers
|
292
|
+
RefCountedPtr<ResourceWatcherInterface>>& watchers,
|
293
|
+
RefCountedPtr<ReadDelayHandle> read_delay_handle);
|
285
294
|
|
286
295
|
void MaybeRegisterResourceTypeLocked(const XdsResourceType* resource_type)
|
287
296
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
@@ -300,7 +309,7 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
300
309
|
const XdsBootstrap::XdsServer& xds_server, bool send_all_clusters,
|
301
310
|
const std::set<std::string>& clusters) ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
302
311
|
|
303
|
-
RefCountedPtr<
|
312
|
+
RefCountedPtr<XdsChannel> GetOrCreateXdsChannelLocked(
|
304
313
|
const XdsBootstrap::XdsServer& server, const char* reason)
|
305
314
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
306
315
|
|
@@ -317,12 +326,12 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
317
326
|
// Stores resource type objects seen by type URL.
|
318
327
|
std::map<absl::string_view /*resource_type*/, const XdsResourceType*>
|
319
328
|
resource_types_ ABSL_GUARDED_BY(mu_);
|
320
|
-
upb::
|
329
|
+
upb::DefPool def_pool_ ABSL_GUARDED_BY(mu_);
|
321
330
|
|
322
331
|
// Map of existing xDS server channels.
|
323
332
|
// Key is owned by the bootstrap config.
|
324
|
-
std::map<const XdsBootstrap::XdsServer*,
|
325
|
-
|
333
|
+
std::map<const XdsBootstrap::XdsServer*, XdsChannel*> xds_server_channel_map_
|
334
|
+
ABSL_GUARDED_BY(mu_);
|
326
335
|
|
327
336
|
std::map<std::string /*authority*/, AuthorityState> authority_state_map_
|
328
337
|
ABSL_GUARDED_BY(mu_);
|
@@ -155,7 +155,9 @@ absl::StatusOr<RefCountedPtr<GrpcXdsClient>> GrpcXdsClient::GetOrCreate(
|
|
155
155
|
MutexLock lock(g_mu);
|
156
156
|
if (g_xds_client != nullptr) {
|
157
157
|
auto xds_client = g_xds_client->RefIfNonZero(DEBUG_LOCATION, reason);
|
158
|
-
if (xds_client != nullptr)
|
158
|
+
if (xds_client != nullptr) {
|
159
|
+
return xds_client.TakeAsSubclass<GrpcXdsClient>();
|
160
|
+
}
|
159
161
|
}
|
160
162
|
// Find bootstrap contents.
|
161
163
|
auto bootstrap_contents = GetBootstrapContents(g_fallback_bootstrap_config);
|
@@ -38,13 +38,17 @@
|
|
38
38
|
#include "envoy/config/core/v3/address.upb.h"
|
39
39
|
#include "envoy/config/core/v3/base.upb.h"
|
40
40
|
#include "envoy/config/core/v3/config_source.upb.h"
|
41
|
+
#include "envoy/config/core/v3/extension.upb.h"
|
41
42
|
#include "envoy/config/core/v3/health_check.upb.h"
|
43
|
+
#include "envoy/config/core/v3/protocol.upb.h"
|
42
44
|
#include "envoy/config/endpoint/v3/endpoint.upb.h"
|
43
45
|
#include "envoy/config/endpoint/v3/endpoint_components.upb.h"
|
44
46
|
#include "envoy/extensions/clusters/aggregate/v3/cluster.upb.h"
|
45
47
|
#include "envoy/extensions/transport_sockets/tls/v3/tls.upb.h"
|
48
|
+
#include "envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h"
|
46
49
|
#include "google/protobuf/any.upb.h"
|
47
50
|
#include "google/protobuf/duration.upb.h"
|
51
|
+
#include "google/protobuf/struct.upb.h"
|
48
52
|
#include "google/protobuf/wrappers.upb.h"
|
49
53
|
#include "upb/base/string_view.h"
|
50
54
|
#include "upb/text/encode.h"
|
@@ -105,17 +109,14 @@ std::string XdsClusterResource::ToString() const {
|
|
105
109
|
contents.push_back(
|
106
110
|
absl::StrCat("common_tls_context=", common_tls_context.ToString()));
|
107
111
|
}
|
112
|
+
if (connection_idle_timeout != Duration::Zero()) {
|
113
|
+
contents.push_back(absl::StrCat("connection_idle_timeout=",
|
114
|
+
connection_idle_timeout.ToString()));
|
115
|
+
}
|
108
116
|
contents.push_back(
|
109
117
|
absl::StrCat("max_concurrent_requests=", max_concurrent_requests));
|
110
|
-
|
111
|
-
|
112
|
-
statuses.reserve(override_host_statuses.size());
|
113
|
-
for (const auto& status : override_host_statuses) {
|
114
|
-
statuses.push_back(status.ToString());
|
115
|
-
}
|
116
|
-
contents.push_back(absl::StrCat("override_host_statuses={",
|
117
|
-
absl::StrJoin(statuses, ", "), "}"));
|
118
|
-
}
|
118
|
+
contents.push_back(absl::StrCat("override_host_statuses=",
|
119
|
+
override_host_statuses.ToString()));
|
119
120
|
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
120
121
|
}
|
121
122
|
|
@@ -407,6 +408,50 @@ void ParseLbPolicyConfig(const XdsResourceType::DecodeContext& context,
|
|
407
408
|
}
|
408
409
|
}
|
409
410
|
|
411
|
+
void ParseUpstreamConfig(
|
412
|
+
const XdsResourceType::DecodeContext& context,
|
413
|
+
const envoy_config_core_v3_TypedExtensionConfig* upstream_config,
|
414
|
+
XdsClusterResource* cds_update, ValidationErrors* errors) {
|
415
|
+
ValidationErrors::ScopedField field(errors, ".typed_config");
|
416
|
+
const auto* typed_config =
|
417
|
+
envoy_config_core_v3_TypedExtensionConfig_typed_config(upstream_config);
|
418
|
+
auto extension = ExtractXdsExtension(context, typed_config, errors);
|
419
|
+
if (!extension.has_value()) return;
|
420
|
+
if (extension->type !=
|
421
|
+
"envoy.extensions.upstreams.http.v3.HttpProtocolOptions") {
|
422
|
+
ValidationErrors::ScopedField field(errors, ".type_url");
|
423
|
+
errors->AddError("unsupported upstream config type");
|
424
|
+
return;
|
425
|
+
}
|
426
|
+
absl::string_view* serialized_http_protocol_options =
|
427
|
+
absl::get_if<absl::string_view>(&extension->value);
|
428
|
+
if (serialized_http_protocol_options == nullptr) {
|
429
|
+
errors->AddError("can't decode HttpProtocolOptions");
|
430
|
+
return;
|
431
|
+
}
|
432
|
+
const auto* http_protocol_options =
|
433
|
+
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_parse(
|
434
|
+
serialized_http_protocol_options->data(),
|
435
|
+
serialized_http_protocol_options->size(), context.arena);
|
436
|
+
if (http_protocol_options == nullptr) {
|
437
|
+
errors->AddError("can't decode HttpProtocolOptions");
|
438
|
+
return;
|
439
|
+
}
|
440
|
+
ValidationErrors::ScopedField field2(errors, ".common_http_protocol_options");
|
441
|
+
const auto* common_http_protocol_options =
|
442
|
+
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_common_http_protocol_options(
|
443
|
+
http_protocol_options);
|
444
|
+
if (common_http_protocol_options != nullptr) {
|
445
|
+
const auto* idle_timeout =
|
446
|
+
envoy_config_core_v3_HttpProtocolOptions_idle_timeout(
|
447
|
+
common_http_protocol_options);
|
448
|
+
if (idle_timeout != nullptr) {
|
449
|
+
ValidationErrors::ScopedField field(errors, ".idle_timeout");
|
450
|
+
cds_update->connection_idle_timeout = ParseDuration(idle_timeout, errors);
|
451
|
+
}
|
452
|
+
}
|
453
|
+
}
|
454
|
+
|
410
455
|
absl::StatusOr<std::shared_ptr<const XdsClusterResource>> CdsResourceParse(
|
411
456
|
const XdsResourceType::DecodeContext& context,
|
412
457
|
const envoy_config_cluster_v3_Cluster* cluster) {
|
@@ -474,6 +519,13 @@ absl::StatusOr<std::shared_ptr<const XdsClusterResource>> CdsResourceParse(
|
|
474
519
|
cds_update->lrs_load_reporting_server.emplace(
|
475
520
|
static_cast<const GrpcXdsBootstrap::GrpcXdsServer&>(context.server));
|
476
521
|
}
|
522
|
+
// Protocol options.
|
523
|
+
auto* upstream_config =
|
524
|
+
envoy_config_cluster_v3_Cluster_upstream_config(cluster);
|
525
|
+
if (upstream_config != nullptr) {
|
526
|
+
ValidationErrors::ScopedField field(&errors, ".upstream_config");
|
527
|
+
ParseUpstreamConfig(context, upstream_config, cds_update.get(), &errors);
|
528
|
+
}
|
477
529
|
// The Cluster resource encodes the circuit breaking parameters in a list of
|
478
530
|
// Thresholds messages, where each message specifies the parameters for a
|
479
531
|
// particular RoutingPriority. we will look only at the first entry in the
|
@@ -625,6 +677,7 @@ absl::StatusOr<std::shared_ptr<const XdsClusterResource>> CdsResourceParse(
|
|
625
677
|
// Validate override host status.
|
626
678
|
const auto* common_lb_config =
|
627
679
|
envoy_config_cluster_v3_Cluster_common_lb_config(cluster);
|
680
|
+
bool override_host_status_found = false;
|
628
681
|
if (common_lb_config != nullptr) {
|
629
682
|
ValidationErrors::ScopedField field(&errors, ".common_lb_config");
|
630
683
|
const auto* override_host_status =
|
@@ -638,9 +691,48 @@ absl::StatusOr<std::shared_ptr<const XdsClusterResource>> CdsResourceParse(
|
|
638
691
|
for (size_t i = 0; i < size; ++i) {
|
639
692
|
auto status = XdsHealthStatus::FromUpb(statuses[i]);
|
640
693
|
if (status.has_value()) {
|
641
|
-
cds_update->override_host_statuses.
|
694
|
+
cds_update->override_host_statuses.Add(*status);
|
695
|
+
}
|
696
|
+
}
|
697
|
+
override_host_status_found = true;
|
698
|
+
}
|
699
|
+
}
|
700
|
+
// If the field is not set, we default to [UNKNOWN, HEALTHY].
|
701
|
+
if (!override_host_status_found) {
|
702
|
+
cds_update->override_host_statuses.Add(
|
703
|
+
XdsHealthStatus(XdsHealthStatus::kUnknown));
|
704
|
+
cds_update->override_host_statuses.Add(
|
705
|
+
XdsHealthStatus(XdsHealthStatus::kHealthy));
|
706
|
+
}
|
707
|
+
// Record telemetry labels (if any).
|
708
|
+
const envoy_config_core_v3_Metadata* metadata =
|
709
|
+
envoy_config_cluster_v3_Cluster_metadata(cluster);
|
710
|
+
if (metadata != nullptr) {
|
711
|
+
google_protobuf_Struct* telemetry_labels_struct;
|
712
|
+
if (envoy_config_core_v3_Metadata_filter_metadata_get(
|
713
|
+
metadata,
|
714
|
+
StdStringToUpbString(
|
715
|
+
absl::string_view("com.google.csm.telemetry_labels")),
|
716
|
+
&telemetry_labels_struct)) {
|
717
|
+
auto telemetry_labels =
|
718
|
+
std::make_shared<std::map<std::string, std::string>>();
|
719
|
+
size_t iter = kUpb_Map_Begin;
|
720
|
+
const google_protobuf_Struct_FieldsEntry* fields_entry;
|
721
|
+
while ((fields_entry = google_protobuf_Struct_fields_next(
|
722
|
+
telemetry_labels_struct, &iter)) != nullptr) {
|
723
|
+
// Adds any entry whose value is a string to telemetry_labels.
|
724
|
+
const google_protobuf_Value* value =
|
725
|
+
google_protobuf_Struct_FieldsEntry_value(fields_entry);
|
726
|
+
if (google_protobuf_Value_has_string_value(value)) {
|
727
|
+
telemetry_labels->emplace(
|
728
|
+
UpbStringToStdString(
|
729
|
+
google_protobuf_Struct_FieldsEntry_key(fields_entry)),
|
730
|
+
UpbStringToStdString(google_protobuf_Value_string_value(value)));
|
642
731
|
}
|
643
732
|
}
|
733
|
+
if (!telemetry_labels->empty()) {
|
734
|
+
cds_update->telemetry_labels = std::move(telemetry_labels);
|
735
|
+
}
|
644
736
|
}
|
645
737
|
}
|
646
738
|
// Return result.
|
@@ -658,7 +750,8 @@ void MaybeLogCluster(const XdsResourceType::DecodeContext& context,
|
|
658
750
|
const upb_MessageDef* msg_type =
|
659
751
|
envoy_config_cluster_v3_Cluster_getmsgdef(context.symtab);
|
660
752
|
char buf[10240];
|
661
|
-
upb_TextEncode(cluster, msg_type,
|
753
|
+
upb_TextEncode(reinterpret_cast<const upb_Message*>(cluster), msg_type,
|
754
|
+
nullptr, 0, buf, sizeof(buf));
|
662
755
|
gpr_log(GPR_DEBUG, "[xds_client %p] Cluster: %s", context.client, buf);
|
663
756
|
}
|
664
757
|
}
|
@@ -31,6 +31,7 @@
|
|
31
31
|
#include "envoy/config/cluster/v3/cluster.upbdefs.h"
|
32
32
|
#include "envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h"
|
33
33
|
#include "envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h"
|
34
|
+
#include "envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h"
|
34
35
|
#include "upb/reflection/def.h"
|
35
36
|
|
36
37
|
#include <grpc/support/json.h>
|
@@ -89,18 +90,24 @@ struct XdsClusterResource : public XdsResourceType::ResourceData {
|
|
89
90
|
// Tls Context used by clients
|
90
91
|
CommonTlsContext common_tls_context;
|
91
92
|
|
93
|
+
// Connection idle timeout. Currently used only for SSA.
|
94
|
+
Duration connection_idle_timeout = Duration::Hours(1);
|
95
|
+
|
92
96
|
// Maximum number of outstanding requests can be made to the upstream
|
93
97
|
// cluster.
|
94
98
|
uint32_t max_concurrent_requests = 1024;
|
95
99
|
|
96
100
|
absl::optional<OutlierDetectionConfig> outlier_detection;
|
97
101
|
|
98
|
-
|
102
|
+
XdsHealthStatusSet override_host_statuses;
|
103
|
+
|
104
|
+
std::shared_ptr<std::map<std::string, std::string>> telemetry_labels;
|
99
105
|
|
100
106
|
bool operator==(const XdsClusterResource& other) const {
|
101
107
|
return type == other.type && lb_policy_config == other.lb_policy_config &&
|
102
108
|
lrs_load_reporting_server == other.lrs_load_reporting_server &&
|
103
109
|
common_tls_context == other.common_tls_context &&
|
110
|
+
connection_idle_timeout == other.connection_idle_timeout &&
|
104
111
|
max_concurrent_requests == other.max_concurrent_requests &&
|
105
112
|
outlier_detection == other.outlier_detection &&
|
106
113
|
override_host_statuses == other.override_host_statuses;
|
@@ -126,6 +133,7 @@ class XdsClusterResourceType
|
|
126
133
|
envoy_extensions_clusters_aggregate_v3_ClusterConfig_getmsgdef(symtab);
|
127
134
|
envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_getmsgdef(
|
128
135
|
symtab);
|
136
|
+
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_getmsgdef(symtab);
|
129
137
|
}
|
130
138
|
};
|
131
139
|
|
@@ -26,9 +26,9 @@
|
|
26
26
|
#include "absl/status/statusor.h"
|
27
27
|
#include "absl/strings/str_cat.h"
|
28
28
|
#include "absl/types/variant.h"
|
29
|
-
#include "upb/base/status.
|
29
|
+
#include "upb/base/status.hpp"
|
30
30
|
#include "upb/json/encode.h"
|
31
|
-
#include "upb/
|
31
|
+
#include "upb/mem/arena.hpp"
|
32
32
|
|
33
33
|
#include <grpc/support/json.h>
|
34
34
|
#include <grpc/support/log.h>
|
@@ -70,8 +70,9 @@ Json XdsRouteLookupClusterSpecifierPlugin::GenerateLoadBalancingPolicyConfig(
|
|
70
70
|
errors->AddError("could not parse plugin config");
|
71
71
|
return {};
|
72
72
|
}
|
73
|
-
const auto* plugin_config =
|
74
|
-
grpc_lookup_v1_RouteLookupClusterSpecifier_route_lookup_config(
|
73
|
+
const auto* plugin_config = reinterpret_cast<const upb_Message*>(
|
74
|
+
grpc_lookup_v1_RouteLookupClusterSpecifier_route_lookup_config(
|
75
|
+
specifier));
|
75
76
|
if (plugin_config == nullptr) {
|
76
77
|
ValidationErrors::ScopedField field(errors, ".route_lookup_config");
|
77
78
|
errors->AddError("field not present");
|
@@ -98,7 +99,10 @@ Json XdsRouteLookupClusterSpecifierPlugin::GenerateLoadBalancingPolicyConfig(
|
|
98
99
|
{"routeLookupConfig", std::move(*json)},
|
99
100
|
{"childPolicy",
|
100
101
|
Json::FromArray({
|
101
|
-
Json::FromObject({{"cds_experimental",
|
102
|
+
Json::FromObject({{"cds_experimental",
|
103
|
+
Json::FromObject({
|
104
|
+
{"isDynamic", Json::FromBool(true)},
|
105
|
+
})}}),
|
102
106
|
})},
|
103
107
|
{"childPolicyConfigTargetFieldName", Json::FromString("cluster")},
|
104
108
|
})}})});
|
@@ -38,10 +38,9 @@
|
|
38
38
|
#include "google/protobuf/struct.upb.h"
|
39
39
|
#include "google/protobuf/struct.upbdefs.h"
|
40
40
|
#include "google/protobuf/wrappers.upb.h"
|
41
|
-
#include "upb/base/status.
|
41
|
+
#include "upb/base/status.hpp"
|
42
42
|
#include "upb/json/encode.h"
|
43
43
|
#include "upb/mem/arena.h"
|
44
|
-
#include "upb/upb.hpp"
|
45
44
|
#include "xds/type/v3/typed_struct.upb.h"
|
46
45
|
|
47
46
|
#include <grpc/support/json.h>
|
@@ -385,13 +384,16 @@ CommonTlsContext CommonTlsContext::Parse(
|
|
385
384
|
CertificateProviderInstanceParse(
|
386
385
|
context, tls_certificate_certificate_provider_instance, errors);
|
387
386
|
} else {
|
388
|
-
|
389
|
-
|
387
|
+
size_t size;
|
388
|
+
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_tls_certificates(
|
389
|
+
common_tls_context_proto, &size);
|
390
|
+
if (size != 0) {
|
390
391
|
ValidationErrors::ScopedField field(errors, ".tls_certificates");
|
391
392
|
errors->AddError("feature unsupported");
|
392
393
|
}
|
393
|
-
|
394
|
-
|
394
|
+
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_tls_certificate_sds_secret_configs(
|
395
|
+
common_tls_context_proto, &size);
|
396
|
+
if (size != 0) {
|
395
397
|
ValidationErrors::ScopedField field(
|
396
398
|
errors, ".tls_certificate_sds_secret_configs");
|
397
399
|
errors->AddError("feature unsupported");
|
@@ -422,16 +424,18 @@ absl::StatusOr<Json> ParseProtobufStructToJson(
|
|
422
424
|
const google_protobuf_Struct* resource) {
|
423
425
|
upb::Status status;
|
424
426
|
const auto* msg_def = google_protobuf_Struct_getmsgdef(context.symtab);
|
425
|
-
size_t json_size =
|
426
|
-
|
427
|
+
size_t json_size =
|
428
|
+
upb_JsonEncode(reinterpret_cast<const upb_Message*>(resource), msg_def,
|
429
|
+
context.symtab, 0, nullptr, 0, status.ptr());
|
427
430
|
if (json_size == static_cast<size_t>(-1)) {
|
428
431
|
return absl::InvalidArgumentError(
|
429
432
|
absl::StrCat("error encoding google::Protobuf::Struct as JSON: ",
|
430
433
|
upb_Status_ErrorMessage(status.ptr())));
|
431
434
|
}
|
432
435
|
void* buf = upb_Arena_Malloc(context.arena, json_size + 1);
|
433
|
-
upb_JsonEncode(resource, msg_def,
|
434
|
-
reinterpret_cast<char*>(buf), json_size + 1,
|
436
|
+
upb_JsonEncode(reinterpret_cast<const upb_Message*>(resource), msg_def,
|
437
|
+
context.symtab, 0, reinterpret_cast<char*>(buf), json_size + 1,
|
438
|
+
status.ptr());
|
435
439
|
auto json = JsonParse(reinterpret_cast<char*>(buf));
|
436
440
|
if (!json.ok()) {
|
437
441
|
// This should never happen.
|
@@ -142,8 +142,9 @@ std::string XdsEndpointResource::ToString() const {
|
|
142
142
|
priority_strings.emplace_back(
|
143
143
|
absl::StrCat("priority ", i, ": ", priority.ToString()));
|
144
144
|
}
|
145
|
-
return absl::StrCat(
|
146
|
-
|
145
|
+
return absl::StrCat(
|
146
|
+
"priorities=[", absl::StrJoin(priority_strings, ", "), "], drop_config=",
|
147
|
+
drop_config == nullptr ? "<null>" : drop_config->ToString());
|
147
148
|
}
|
148
149
|
|
149
150
|
//
|
@@ -161,7 +162,8 @@ void MaybeLogClusterLoadAssignment(
|
|
161
162
|
envoy_config_endpoint_v3_ClusterLoadAssignment_getmsgdef(
|
162
163
|
context.symtab);
|
163
164
|
char buf[10240];
|
164
|
-
upb_TextEncode(cla, msg_type, nullptr,
|
165
|
+
upb_TextEncode(reinterpret_cast<const upb_Message*>(cla), msg_type, nullptr,
|
166
|
+
0, buf, sizeof(buf));
|
165
167
|
gpr_log(GPR_DEBUG, "[xds_client %p] ClusterLoadAssignment: %s",
|
166
168
|
context.client, buf);
|
167
169
|
}
|
@@ -447,7 +449,6 @@ absl::StatusOr<std::shared_ptr<const XdsEndpointResource>> EdsResourceParse(
|
|
447
449
|
}
|
448
450
|
}
|
449
451
|
// policy
|
450
|
-
eds_resource->drop_config = MakeRefCounted<XdsEndpointResource::DropConfig>();
|
451
452
|
const auto* policy = envoy_config_endpoint_v3_ClusterLoadAssignment_policy(
|
452
453
|
cluster_load_assignment);
|
453
454
|
if (policy != nullptr) {
|
@@ -456,6 +457,10 @@ absl::StatusOr<std::shared_ptr<const XdsEndpointResource>> EdsResourceParse(
|
|
456
457
|
const auto* const* drop_overload =
|
457
458
|
envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_drop_overloads(
|
458
459
|
policy, &drop_size);
|
460
|
+
if (drop_size > 0) {
|
461
|
+
eds_resource->drop_config =
|
462
|
+
MakeRefCounted<XdsEndpointResource::DropConfig>();
|
463
|
+
}
|
459
464
|
for (size_t i = 0; i < drop_size; ++i) {
|
460
465
|
ValidationErrors::ScopedField field(
|
461
466
|
&errors, absl::StrCat(".drop_overloads[", i, "]"));
|
@@ -62,6 +62,7 @@ struct XdsEndpointResource : public XdsResourceType::ResourceData {
|
|
62
62
|
std::map<XdsLocalityName*, Locality, XdsLocalityName::Less> localities;
|
63
63
|
|
64
64
|
bool operator==(const Priority& other) const;
|
65
|
+
bool operator!=(const Priority& other) const { return !(*this == other); }
|
65
66
|
std::string ToString() const;
|
66
67
|
};
|
67
68
|
using PriorityList = std::vector<Priority>;
|
@@ -121,7 +122,10 @@ struct XdsEndpointResource : public XdsResourceType::ResourceData {
|
|
121
122
|
RefCountedPtr<DropConfig> drop_config;
|
122
123
|
|
123
124
|
bool operator==(const XdsEndpointResource& other) const {
|
124
|
-
|
125
|
+
if (priorities != other.priorities) return false;
|
126
|
+
if (drop_config == nullptr) return other.drop_config == nullptr;
|
127
|
+
if (other.drop_config == nullptr) return false;
|
128
|
+
return *drop_config == *other.drop_config;
|
125
129
|
}
|
126
130
|
std::string ToString() const;
|
127
131
|
};
|
@@ -20,6 +20,8 @@
|
|
20
20
|
|
21
21
|
#include <string>
|
22
22
|
|
23
|
+
#include "absl/strings/str_cat.h"
|
24
|
+
#include "absl/strings/str_join.h"
|
23
25
|
#include "envoy/config/core/v3/health_check.upb.h"
|
24
26
|
|
25
27
|
namespace grpc_core {
|
@@ -58,8 +60,16 @@ const char* XdsHealthStatus::ToString() const {
|
|
58
60
|
}
|
59
61
|
}
|
60
62
|
|
61
|
-
|
62
|
-
|
63
|
+
std::string XdsHealthStatusSet::ToString() const {
|
64
|
+
std::vector<const char*> set;
|
65
|
+
set.reserve(3);
|
66
|
+
for (const auto& status :
|
67
|
+
{XdsHealthStatus::kUnknown, XdsHealthStatus::kHealthy,
|
68
|
+
XdsHealthStatus::kDraining}) {
|
69
|
+
const XdsHealthStatus health_status(status);
|
70
|
+
if (Contains(health_status)) set.push_back(health_status.ToString());
|
71
|
+
}
|
72
|
+
return absl::StrCat("{", absl::StrJoin(set, ", "), "}");
|
63
73
|
}
|
64
74
|
|
65
75
|
} // namespace grpc_core
|
@@ -70,6 +70,8 @@ class XdsHealthStatusSet {
|
|
70
70
|
return status_mask_ == other.status_mask_;
|
71
71
|
}
|
72
72
|
|
73
|
+
bool Empty() const { return status_mask_ == 0; }
|
74
|
+
|
73
75
|
void Clear() { status_mask_ = 0; }
|
74
76
|
|
75
77
|
void Add(XdsHealthStatus status) { status_mask_ |= (0x1 << status.status()); }
|
@@ -78,12 +80,12 @@ class XdsHealthStatusSet {
|
|
78
80
|
return status_mask_ & (0x1 << status.status());
|
79
81
|
}
|
80
82
|
|
83
|
+
std::string ToString() const;
|
84
|
+
|
81
85
|
private:
|
82
86
|
int status_mask_ = 0;
|
83
87
|
};
|
84
88
|
|
85
|
-
bool operator<(const XdsHealthStatus& hs1, const XdsHealthStatus& hs2);
|
86
|
-
|
87
89
|
} // namespace grpc_core
|
88
90
|
|
89
91
|
#endif // GRPC_SRC_CORE_EXT_XDS_XDS_HEALTH_STATUS_H
|
@@ -40,7 +40,7 @@
|
|
40
40
|
#include "envoy/type/matcher/v3/string.upb.h"
|
41
41
|
#include "envoy/type/v3/range.upb.h"
|
42
42
|
#include "google/protobuf/wrappers.upb.h"
|
43
|
-
#include "upb/
|
43
|
+
#include "upb/message/map.h"
|
44
44
|
|
45
45
|
#include <grpc/support/json.h>
|
46
46
|
|
@@ -486,8 +486,10 @@ Json ParseHttpRbacToJson(const XdsResourceType::DecodeContext& context,
|
|
486
486
|
ValidationErrors::ScopedField field(errors, ".audit_condition");
|
487
487
|
errors->AddError("invalid audit condition");
|
488
488
|
}
|
489
|
-
|
490
|
-
|
489
|
+
size_t size;
|
490
|
+
envoy_config_rbac_v3_RBAC_AuditLoggingOptions_logger_configs(
|
491
|
+
audit_logging_options, &size);
|
492
|
+
if (size != 0) {
|
491
493
|
inner_rbac_json.emplace("audit_loggers",
|
492
494
|
ParseAuditLoggerConfigsToJson(
|
493
495
|
context, audit_logging_options, errors));
|
@@ -291,8 +291,9 @@ void MaybeLogHttpConnectionManager(
|
|
291
291
|
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_getmsgdef(
|
292
292
|
context.symtab);
|
293
293
|
char buf[10240];
|
294
|
-
upb_TextEncode(
|
295
|
-
|
294
|
+
upb_TextEncode(
|
295
|
+
reinterpret_cast<const upb_Message*>(http_connection_manager_config),
|
296
|
+
msg_type, nullptr, 0, buf, sizeof(buf));
|
296
297
|
gpr_log(GPR_DEBUG, "[xds_client %p] HttpConnectionManager: %s",
|
297
298
|
context.client, buf);
|
298
299
|
}
|
@@ -332,11 +333,15 @@ XdsListenerResource::HttpConnectionManager HttpConnectionManagerParse(
|
|
332
333
|
}
|
333
334
|
// original_ip_detection_extensions -- must be empty as per
|
334
335
|
// https://github.com/grpc/proposal/blob/master/A41-xds-rbac.md
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
336
|
+
{
|
337
|
+
size_t size;
|
338
|
+
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_original_ip_detection_extensions(
|
339
|
+
http_connection_manager_proto, &size);
|
340
|
+
if (size != 0) {
|
341
|
+
ValidationErrors::ScopedField field(errors,
|
342
|
+
".original_ip_detection_extensions");
|
343
|
+
errors->AddError("must be empty");
|
344
|
+
}
|
340
345
|
}
|
341
346
|
// common_http_protocol_options
|
342
347
|
const envoy_config_core_v3_HttpProtocolOptions* options =
|
@@ -1091,7 +1096,8 @@ void MaybeLogListener(const XdsResourceType::DecodeContext& context,
|
|
1091
1096
|
const upb_MessageDef* msg_type =
|
1092
1097
|
envoy_config_listener_v3_Listener_getmsgdef(context.symtab);
|
1093
1098
|
char buf[10240];
|
1094
|
-
upb_TextEncode(listener, msg_type,
|
1099
|
+
upb_TextEncode(reinterpret_cast<const upb_Message*>(listener), msg_type,
|
1100
|
+
nullptr, 0, buf, sizeof(buf));
|
1095
1101
|
gpr_log(GPR_DEBUG, "[xds_client %p] Listener: %s", context.client, buf);
|
1096
1102
|
}
|
1097
1103
|
}
|
@@ -42,16 +42,18 @@ class XdsResourceTypeImpl : public XdsResourceType {
|
|
42
42
|
class WatcherInterface : public XdsClient::ResourceWatcherInterface {
|
43
43
|
public:
|
44
44
|
virtual void OnResourceChanged(
|
45
|
-
std::shared_ptr<const ResourceType> resource
|
45
|
+
std::shared_ptr<const ResourceType> resource,
|
46
|
+
RefCountedPtr<XdsClient::ReadDelayHandle> read_delay_handle) = 0;
|
46
47
|
|
47
48
|
private:
|
48
49
|
// Get result from XdsClient generic watcher interface, perform
|
49
50
|
// down-casting, and invoke the caller's OnResourceChanged() method.
|
50
51
|
void OnGenericResourceChanged(
|
51
|
-
std::shared_ptr<const XdsResourceType::ResourceData> resource
|
52
|
-
override {
|
52
|
+
std::shared_ptr<const XdsResourceType::ResourceData> resource,
|
53
|
+
RefCountedPtr<XdsClient::ReadDelayHandle> read_delay_handle) override {
|
53
54
|
OnResourceChanged(
|
54
|
-
std::static_pointer_cast<const ResourceType>(std::move(resource))
|
55
|
+
std::static_pointer_cast<const ResourceType>(std::move(resource)),
|
56
|
+
std::move(read_delay_handle));
|
55
57
|
}
|
56
58
|
};
|
57
59
|
|