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
@@ -37,9 +37,11 @@
|
|
37
37
|
#include <grpc/impl/connectivity_state.h>
|
38
38
|
#include <grpc/support/log.h>
|
39
39
|
|
40
|
+
#include "src/core/ext/filters/client_channel/client_channel_internal.h"
|
40
41
|
#include "src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h"
|
41
42
|
#include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
|
42
43
|
#include "src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h"
|
44
|
+
#include "src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.h"
|
43
45
|
#include "src/core/ext/xds/xds_bootstrap.h"
|
44
46
|
#include "src/core/ext/xds/xds_bootstrap_grpc.h"
|
45
47
|
#include "src/core/ext/xds/xds_client.h"
|
@@ -66,6 +68,7 @@
|
|
66
68
|
#include "src/core/lib/load_balancing/lb_policy_registry.h"
|
67
69
|
#include "src/core/lib/load_balancing/subchannel_interface.h"
|
68
70
|
#include "src/core/lib/resolver/endpoint_addresses.h"
|
71
|
+
#include "src/core/lib/security/credentials/xds/xds_credentials.h"
|
69
72
|
#include "src/core/lib/transport/connectivity_state.h"
|
70
73
|
|
71
74
|
namespace grpc_core {
|
@@ -74,6 +77,10 @@ TraceFlag grpc_xds_cluster_impl_lb_trace(false, "xds_cluster_impl_lb");
|
|
74
77
|
|
75
78
|
namespace {
|
76
79
|
|
80
|
+
using OptionalLabelComponent =
|
81
|
+
ClientCallTracer::CallAttemptTracer::OptionalLabelComponent;
|
82
|
+
using XdsConfig = XdsDependencyManager::XdsConfig;
|
83
|
+
|
77
84
|
//
|
78
85
|
// global circuit breaker atomic map
|
79
86
|
//
|
@@ -156,37 +163,24 @@ class XdsClusterImplLbConfig : public LoadBalancingPolicy::Config {
|
|
156
163
|
|
157
164
|
absl::string_view name() const override { return kXdsClusterImpl; }
|
158
165
|
|
166
|
+
const std::string& cluster_name() const { return cluster_name_; }
|
159
167
|
RefCountedPtr<LoadBalancingPolicy::Config> child_policy() const {
|
160
168
|
return child_policy_;
|
161
169
|
}
|
162
|
-
const std::string& cluster_name() const { return cluster_name_; }
|
163
|
-
const std::string& eds_service_name() const { return eds_service_name_; }
|
164
|
-
const absl::optional<GrpcXdsBootstrap::GrpcXdsServer>&
|
165
|
-
lrs_load_reporting_server() const {
|
166
|
-
return lrs_load_reporting_server_;
|
167
|
-
};
|
168
|
-
uint32_t max_concurrent_requests() const { return max_concurrent_requests_; }
|
169
|
-
RefCountedPtr<XdsEndpointResource::DropConfig> drop_config() const {
|
170
|
-
return drop_config_;
|
171
|
-
}
|
172
170
|
|
173
171
|
static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
|
174
172
|
void JsonPostLoad(const Json& json, const JsonArgs& args,
|
175
173
|
ValidationErrors* errors);
|
176
174
|
|
177
175
|
private:
|
178
|
-
RefCountedPtr<LoadBalancingPolicy::Config> child_policy_;
|
179
176
|
std::string cluster_name_;
|
180
|
-
|
181
|
-
absl::optional<GrpcXdsBootstrap::GrpcXdsServer> lrs_load_reporting_server_;
|
182
|
-
uint32_t max_concurrent_requests_;
|
183
|
-
RefCountedPtr<XdsEndpointResource::DropConfig> drop_config_;
|
177
|
+
RefCountedPtr<LoadBalancingPolicy::Config> child_policy_;
|
184
178
|
};
|
185
179
|
|
186
180
|
// xDS Cluster Impl LB policy.
|
187
181
|
class XdsClusterImplLb : public LoadBalancingPolicy {
|
188
182
|
public:
|
189
|
-
XdsClusterImplLb(RefCountedPtr<
|
183
|
+
XdsClusterImplLb(RefCountedPtr<GrpcXdsClient> xds_client, Args args);
|
190
184
|
|
191
185
|
absl::string_view name() const override { return kXdsClusterImpl; }
|
192
186
|
|
@@ -224,6 +218,7 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
|
|
224
218
|
|
225
219
|
RefCountedPtr<CircuitBreakerCallCounterMap::CallCounter> call_counter_;
|
226
220
|
uint32_t max_concurrent_requests_;
|
221
|
+
std::shared_ptr<std::map<std::string, std::string>> service_labels_;
|
227
222
|
RefCountedPtr<XdsEndpointResource::DropConfig> drop_config_;
|
228
223
|
RefCountedPtr<XdsClusterDropStats> drop_stats_;
|
229
224
|
RefCountedPtr<SubchannelPicker> picker_;
|
@@ -247,16 +242,25 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
|
|
247
242
|
|
248
243
|
void ShutdownLocked() override;
|
249
244
|
|
245
|
+
void ResetState();
|
246
|
+
void ReportTransientFailure(absl::Status status);
|
247
|
+
|
250
248
|
OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
|
251
249
|
const ChannelArgs& args);
|
252
250
|
absl::Status UpdateChildPolicyLocked(
|
253
|
-
absl::StatusOr<
|
251
|
+
absl::StatusOr<std::shared_ptr<EndpointAddressesIterator>> addresses,
|
254
252
|
std::string resolution_note, const ChannelArgs& args);
|
255
253
|
|
254
|
+
absl::StatusOr<RefCountedPtr<XdsCertificateProvider>>
|
255
|
+
MaybeCreateCertificateProviderLocked(
|
256
|
+
const XdsClusterResource& cluster_resource) const;
|
257
|
+
|
256
258
|
void MaybeUpdatePickerLocked();
|
257
259
|
|
258
260
|
// Current config from the resolver.
|
259
261
|
RefCountedPtr<XdsClusterImplLbConfig> config_;
|
262
|
+
std::shared_ptr<const XdsClusterResource> cluster_resource_;
|
263
|
+
RefCountedPtr<XdsEndpointResource::DropConfig> drop_config_;
|
260
264
|
|
261
265
|
// Current concurrent number of requests.
|
262
266
|
RefCountedPtr<CircuitBreakerCallCounterMap::CallCounter> call_counter_;
|
@@ -265,7 +269,7 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
|
|
265
269
|
bool shutting_down_ = false;
|
266
270
|
|
267
271
|
// The xds client.
|
268
|
-
RefCountedPtr<
|
272
|
+
RefCountedPtr<GrpcXdsClient> xds_client_;
|
269
273
|
|
270
274
|
// The stats for client-side load reporting.
|
271
275
|
RefCountedPtr<XdsClusterDropStats> drop_stats_;
|
@@ -357,8 +361,9 @@ XdsClusterImplLb::Picker::Picker(XdsClusterImplLb* xds_cluster_impl_lb,
|
|
357
361
|
RefCountedPtr<SubchannelPicker> picker)
|
358
362
|
: call_counter_(xds_cluster_impl_lb->call_counter_),
|
359
363
|
max_concurrent_requests_(
|
360
|
-
xds_cluster_impl_lb->
|
361
|
-
|
364
|
+
xds_cluster_impl_lb->cluster_resource_->max_concurrent_requests),
|
365
|
+
service_labels_(xds_cluster_impl_lb->cluster_resource_->telemetry_labels),
|
366
|
+
drop_config_(xds_cluster_impl_lb->drop_config_),
|
362
367
|
drop_stats_(xds_cluster_impl_lb->drop_stats_),
|
363
368
|
picker_(std::move(picker)) {
|
364
369
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_impl_lb_trace)) {
|
@@ -369,9 +374,14 @@ XdsClusterImplLb::Picker::Picker(XdsClusterImplLb* xds_cluster_impl_lb,
|
|
369
374
|
|
370
375
|
LoadBalancingPolicy::PickResult XdsClusterImplLb::Picker::Pick(
|
371
376
|
LoadBalancingPolicy::PickArgs args) {
|
377
|
+
auto* call_state = static_cast<ClientChannelLbCallState*>(args.call_state);
|
378
|
+
if (call_state->GetCallAttemptTracer() != nullptr) {
|
379
|
+
call_state->GetCallAttemptTracer()->AddOptionalLabels(
|
380
|
+
OptionalLabelComponent::kXdsServiceLabels, service_labels_);
|
381
|
+
}
|
372
382
|
// Handle EDS drops.
|
373
383
|
const std::string* drop_category;
|
374
|
-
if (drop_config_->ShouldDrop(&drop_category)) {
|
384
|
+
if (drop_config_ != nullptr && drop_config_->ShouldDrop(&drop_category)) {
|
375
385
|
if (drop_stats_ != nullptr) drop_stats_->AddCallDropped(*drop_category);
|
376
386
|
return PickResult::Drop(absl::UnavailableError(
|
377
387
|
absl::StrCat("EDS-configured drop: ", *drop_category)));
|
@@ -423,7 +433,7 @@ LoadBalancingPolicy::PickResult XdsClusterImplLb::Picker::Pick(
|
|
423
433
|
// XdsClusterImplLb
|
424
434
|
//
|
425
435
|
|
426
|
-
XdsClusterImplLb::XdsClusterImplLb(RefCountedPtr<
|
436
|
+
XdsClusterImplLb::XdsClusterImplLb(RefCountedPtr<GrpcXdsClient> xds_client,
|
427
437
|
Args args)
|
428
438
|
: LoadBalancingPolicy(std::move(args)), xds_client_(std::move(xds_client)) {
|
429
439
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_impl_lb_trace)) {
|
@@ -445,6 +455,11 @@ void XdsClusterImplLb::ShutdownLocked() {
|
|
445
455
|
gpr_log(GPR_INFO, "[xds_cluster_impl_lb %p] shutting down", this);
|
446
456
|
}
|
447
457
|
shutting_down_ = true;
|
458
|
+
ResetState();
|
459
|
+
xds_client_.reset(DEBUG_LOCATION, "XdsClusterImpl");
|
460
|
+
}
|
461
|
+
|
462
|
+
void XdsClusterImplLb::ResetState() {
|
448
463
|
// Remove the child policy's interested_parties pollset_set from the
|
449
464
|
// xDS policy.
|
450
465
|
if (child_policy_ != nullptr) {
|
@@ -456,7 +471,18 @@ void XdsClusterImplLb::ShutdownLocked() {
|
|
456
471
|
// the child.
|
457
472
|
picker_.reset();
|
458
473
|
drop_stats_.reset();
|
459
|
-
|
474
|
+
}
|
475
|
+
|
476
|
+
void XdsClusterImplLb::ReportTransientFailure(absl::Status status) {
|
477
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_impl_lb_trace)) {
|
478
|
+
gpr_log(GPR_INFO,
|
479
|
+
"[xds_cluster_impl_lb %p] reporting TRANSIENT_FAILURE: %s", this,
|
480
|
+
status.ToString().c_str());
|
481
|
+
}
|
482
|
+
ResetState();
|
483
|
+
channel_control_helper()->UpdateState(
|
484
|
+
GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
485
|
+
MakeRefCounted<TransientFailurePicker>(status));
|
460
486
|
}
|
461
487
|
|
462
488
|
void XdsClusterImplLb::ExitIdleLocked() {
|
@@ -469,56 +495,174 @@ void XdsClusterImplLb::ResetBackoffLocked() {
|
|
469
495
|
if (child_policy_ != nullptr) child_policy_->ResetBackoffLocked();
|
470
496
|
}
|
471
497
|
|
498
|
+
std::string GetEdsResourceName(const XdsClusterResource& cluster_resource) {
|
499
|
+
auto* eds = absl::get_if<XdsClusterResource::Eds>(&cluster_resource.type);
|
500
|
+
if (eds == nullptr) return "";
|
501
|
+
return eds->eds_service_name;
|
502
|
+
}
|
503
|
+
|
472
504
|
absl::Status XdsClusterImplLb::UpdateLocked(UpdateArgs args) {
|
473
505
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_impl_lb_trace)) {
|
474
506
|
gpr_log(GPR_INFO, "[xds_cluster_impl_lb %p] Received update", this);
|
475
507
|
}
|
476
|
-
//
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
//
|
481
|
-
if (
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
508
|
+
// Grab new LB policy config.
|
509
|
+
auto new_config = args.config.TakeAsSubclass<XdsClusterImplLbConfig>();
|
510
|
+
// Cluster name should never change, because the cds policy will assign a
|
511
|
+
// different priority child name if that happens, which means that this
|
512
|
+
// policy instance will get replaced instead of being updated.
|
513
|
+
if (config_ != nullptr) {
|
514
|
+
GPR_ASSERT(config_->cluster_name() == new_config->cluster_name());
|
515
|
+
}
|
516
|
+
// Get xDS config.
|
517
|
+
auto new_xds_config = args.args.GetObjectRef<XdsConfig>();
|
518
|
+
if (new_xds_config == nullptr) {
|
519
|
+
// Should never happen.
|
520
|
+
absl::Status status = absl::InternalError(
|
521
|
+
"xDS config not passed to xds_cluster_impl LB policy");
|
522
|
+
ReportTransientFailure(status);
|
523
|
+
return status;
|
524
|
+
}
|
525
|
+
auto it = new_xds_config->clusters.find(new_config->cluster_name());
|
526
|
+
if (it == new_xds_config->clusters.end() || !it->second.ok() ||
|
527
|
+
it->second->cluster == nullptr) {
|
528
|
+
// Should never happen.
|
529
|
+
absl::Status status = absl::InternalError(absl::StrCat(
|
530
|
+
"xDS config has no entry for cluster ", new_config->cluster_name()));
|
531
|
+
ReportTransientFailure(status);
|
532
|
+
return status;
|
533
|
+
}
|
534
|
+
auto& new_cluster_config = *it->second;
|
535
|
+
auto* endpoint_config =
|
536
|
+
absl::get_if<XdsConfig::ClusterConfig::EndpointConfig>(
|
537
|
+
&new_cluster_config.children);
|
538
|
+
if (endpoint_config == nullptr) {
|
539
|
+
// Should never happen.
|
540
|
+
absl::Status status = absl::InternalError(
|
541
|
+
absl::StrCat("cluster config for ", new_config->cluster_name(),
|
542
|
+
" has no endpoint config"));
|
543
|
+
ReportTransientFailure(status);
|
544
|
+
return status;
|
545
|
+
}
|
546
|
+
auto xds_cert_provider =
|
547
|
+
MaybeCreateCertificateProviderLocked(*new_cluster_config.cluster);
|
548
|
+
if (!xds_cert_provider.ok()) {
|
549
|
+
// Should never happen.
|
550
|
+
ReportTransientFailure(xds_cert_provider.status());
|
551
|
+
return xds_cert_provider.status();
|
552
|
+
}
|
553
|
+
if (*xds_cert_provider != nullptr) {
|
554
|
+
args.args = args.args.SetObject(std::move(*xds_cert_provider));
|
555
|
+
}
|
556
|
+
// Now we've verified the new config is good.
|
557
|
+
// Get new and old (if any) EDS service name.
|
558
|
+
std::string new_eds_service_name =
|
559
|
+
GetEdsResourceName(*new_cluster_config.cluster);
|
560
|
+
std::string old_eds_service_name =
|
561
|
+
cluster_resource_ == nullptr ? ""
|
562
|
+
: GetEdsResourceName(*cluster_resource_);
|
563
|
+
// Update drop stats if needed.
|
564
|
+
// Note: We need a drop stats object whenever load reporting is enabled,
|
565
|
+
// even if we have no EDS drop config, because we also use it when
|
566
|
+
// reporting circuit breaker drops.
|
567
|
+
if (!new_cluster_config.cluster->lrs_load_reporting_server.has_value()) {
|
568
|
+
drop_stats_.reset();
|
569
|
+
} else if (cluster_resource_ == nullptr ||
|
570
|
+
old_eds_service_name != new_eds_service_name ||
|
571
|
+
cluster_resource_->lrs_load_reporting_server !=
|
572
|
+
new_cluster_config.cluster->lrs_load_reporting_server) {
|
573
|
+
drop_stats_ = xds_client_->AddClusterDropStats(
|
574
|
+
*new_cluster_config.cluster->lrs_load_reporting_server,
|
575
|
+
new_config->cluster_name(), new_eds_service_name);
|
576
|
+
if (drop_stats_ == nullptr) {
|
577
|
+
gpr_log(
|
578
|
+
GPR_ERROR,
|
579
|
+
"[xds_cluster_impl_lb %p] Failed to get cluster drop stats for "
|
580
|
+
"LRS server %s, cluster %s, EDS service name %s, load "
|
581
|
+
"reporting for drops will not be done.",
|
582
|
+
this,
|
583
|
+
new_cluster_config.cluster->lrs_load_reporting_server->server_uri()
|
584
|
+
.c_str(),
|
585
|
+
new_config->cluster_name().c_str(), new_eds_service_name.c_str());
|
496
586
|
}
|
497
|
-
call_counter_ = g_call_counter_map->GetOrCreate(
|
498
|
-
config_->cluster_name(), config_->eds_service_name());
|
499
|
-
} else {
|
500
|
-
// Cluster name, EDS service name, and LRS server name should never
|
501
|
-
// change, because the xds_cluster_resolver policy above us should be
|
502
|
-
// swapped out if that happens.
|
503
|
-
GPR_ASSERT(config_->cluster_name() == old_config->cluster_name());
|
504
|
-
GPR_ASSERT(config_->eds_service_name() == old_config->eds_service_name());
|
505
|
-
GPR_ASSERT(config_->lrs_load_reporting_server() ==
|
506
|
-
old_config->lrs_load_reporting_server());
|
507
|
-
}
|
508
|
-
// Update picker if max_concurrent_requests has changed.
|
509
|
-
if (is_initial_update || config_->max_concurrent_requests() !=
|
510
|
-
old_config->max_concurrent_requests()) {
|
511
|
-
MaybeUpdatePickerLocked();
|
512
587
|
}
|
588
|
+
// Update call counter if needed.
|
589
|
+
if (cluster_resource_ == nullptr ||
|
590
|
+
old_eds_service_name != new_eds_service_name) {
|
591
|
+
call_counter_ = g_call_counter_map->GetOrCreate(new_config->cluster_name(),
|
592
|
+
new_eds_service_name);
|
593
|
+
}
|
594
|
+
// Update config state, now that we're done comparing old and new fields.
|
595
|
+
config_ = std::move(new_config);
|
596
|
+
cluster_resource_ = new_cluster_config.cluster;
|
597
|
+
drop_config_ = endpoint_config->endpoints != nullptr
|
598
|
+
? endpoint_config->endpoints->drop_config
|
599
|
+
: nullptr;
|
600
|
+
// Update picker in case some dependent config field changed.
|
601
|
+
MaybeUpdatePickerLocked();
|
513
602
|
// Update child policy.
|
514
603
|
return UpdateChildPolicyLocked(std::move(args.addresses),
|
515
604
|
std::move(args.resolution_note), args.args);
|
516
605
|
}
|
517
606
|
|
607
|
+
absl::StatusOr<RefCountedPtr<XdsCertificateProvider>>
|
608
|
+
XdsClusterImplLb::MaybeCreateCertificateProviderLocked(
|
609
|
+
const XdsClusterResource& cluster_resource) const {
|
610
|
+
// If the channel is not using XdsCreds, do nothing.
|
611
|
+
auto channel_credentials = channel_control_helper()->GetChannelCredentials();
|
612
|
+
if (channel_credentials == nullptr ||
|
613
|
+
channel_credentials->type() != XdsCredentials::Type()) {
|
614
|
+
return nullptr;
|
615
|
+
}
|
616
|
+
// Configure root cert.
|
617
|
+
absl::string_view root_provider_instance_name =
|
618
|
+
cluster_resource.common_tls_context.certificate_validation_context
|
619
|
+
.ca_certificate_provider_instance.instance_name;
|
620
|
+
absl::string_view root_cert_name =
|
621
|
+
cluster_resource.common_tls_context.certificate_validation_context
|
622
|
+
.ca_certificate_provider_instance.certificate_name;
|
623
|
+
RefCountedPtr<grpc_tls_certificate_provider> root_cert_provider;
|
624
|
+
if (!root_provider_instance_name.empty()) {
|
625
|
+
root_cert_provider =
|
626
|
+
xds_client_->certificate_provider_store()
|
627
|
+
.CreateOrGetCertificateProvider(root_provider_instance_name);
|
628
|
+
if (root_cert_provider == nullptr) {
|
629
|
+
return absl::InternalError(
|
630
|
+
absl::StrCat("Certificate provider instance name: \"",
|
631
|
+
root_provider_instance_name, "\" not recognized."));
|
632
|
+
}
|
633
|
+
}
|
634
|
+
// Configure identity cert.
|
635
|
+
absl::string_view identity_provider_instance_name =
|
636
|
+
cluster_resource.common_tls_context.tls_certificate_provider_instance
|
637
|
+
.instance_name;
|
638
|
+
absl::string_view identity_cert_name =
|
639
|
+
cluster_resource.common_tls_context.tls_certificate_provider_instance
|
640
|
+
.certificate_name;
|
641
|
+
RefCountedPtr<grpc_tls_certificate_provider> identity_cert_provider;
|
642
|
+
if (!identity_provider_instance_name.empty()) {
|
643
|
+
identity_cert_provider =
|
644
|
+
xds_client_->certificate_provider_store()
|
645
|
+
.CreateOrGetCertificateProvider(identity_provider_instance_name);
|
646
|
+
if (identity_cert_provider == nullptr) {
|
647
|
+
return absl::InternalError(
|
648
|
+
absl::StrCat("Certificate provider instance name: \"",
|
649
|
+
identity_provider_instance_name, "\" not recognized."));
|
650
|
+
}
|
651
|
+
}
|
652
|
+
// Configure SAN matchers.
|
653
|
+
const std::vector<StringMatcher>& san_matchers =
|
654
|
+
cluster_resource.common_tls_context.certificate_validation_context
|
655
|
+
.match_subject_alt_names;
|
656
|
+
// Create xds cert provider.
|
657
|
+
return MakeRefCounted<XdsCertificateProvider>(
|
658
|
+
root_cert_provider, root_cert_name, identity_cert_provider,
|
659
|
+
identity_cert_name, san_matchers);
|
660
|
+
}
|
661
|
+
|
518
662
|
void XdsClusterImplLb::MaybeUpdatePickerLocked() {
|
519
663
|
// If we're dropping all calls, report READY, regardless of what (or
|
520
664
|
// whether) the child has reported.
|
521
|
-
if (
|
665
|
+
if (drop_config_ != nullptr && drop_config_->drop_all()) {
|
522
666
|
auto drop_picker = MakeRefCounted<Picker>(this, picker_);
|
523
667
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_impl_lb_trace)) {
|
524
668
|
gpr_log(GPR_INFO,
|
@@ -550,8 +694,8 @@ OrphanablePtr<LoadBalancingPolicy> XdsClusterImplLb::CreateChildPolicyLocked(
|
|
550
694
|
LoadBalancingPolicy::Args lb_policy_args;
|
551
695
|
lb_policy_args.work_serializer = work_serializer();
|
552
696
|
lb_policy_args.args = args;
|
553
|
-
lb_policy_args.channel_control_helper =
|
554
|
-
|
697
|
+
lb_policy_args.channel_control_helper = std::make_unique<Helper>(
|
698
|
+
RefAsSubclass<XdsClusterImplLb>(DEBUG_LOCATION, "Helper"));
|
555
699
|
OrphanablePtr<LoadBalancingPolicy> lb_policy =
|
556
700
|
MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
|
557
701
|
&grpc_xds_cluster_impl_lb_trace);
|
@@ -569,7 +713,7 @@ OrphanablePtr<LoadBalancingPolicy> XdsClusterImplLb::CreateChildPolicyLocked(
|
|
569
713
|
}
|
570
714
|
|
571
715
|
absl::Status XdsClusterImplLb::UpdateChildPolicyLocked(
|
572
|
-
absl::StatusOr<
|
716
|
+
absl::StatusOr<std::shared_ptr<EndpointAddressesIterator>> addresses,
|
573
717
|
std::string resolution_note, const ChannelArgs& args) {
|
574
718
|
// Create policy if needed.
|
575
719
|
if (child_policy_ == nullptr) {
|
@@ -601,28 +745,30 @@ RefCountedPtr<SubchannelInterface> XdsClusterImplLb::Helper::CreateSubchannel(
|
|
601
745
|
if (parent()->shutting_down_) return nullptr;
|
602
746
|
// If load reporting is enabled, wrap the subchannel such that it
|
603
747
|
// includes the locality stats object, which will be used by the Picker.
|
604
|
-
if (parent()->
|
748
|
+
if (parent()->cluster_resource_->lrs_load_reporting_server.has_value()) {
|
605
749
|
auto locality_name = per_address_args.GetObjectRef<XdsLocalityName>();
|
606
750
|
RefCountedPtr<XdsClusterLocalityStats> locality_stats =
|
607
751
|
parent()->xds_client_->AddClusterLocalityStats(
|
608
|
-
parent()->
|
752
|
+
parent()->cluster_resource_->lrs_load_reporting_server.value(),
|
609
753
|
parent()->config_->cluster_name(),
|
610
|
-
parent()->
|
754
|
+
GetEdsResourceName(*parent()->cluster_resource_),
|
755
|
+
std::move(locality_name));
|
611
756
|
if (locality_stats != nullptr) {
|
612
757
|
return MakeRefCounted<StatsSubchannelWrapper>(
|
613
758
|
parent()->channel_control_helper()->CreateSubchannel(
|
614
759
|
address, per_address_args, args),
|
615
760
|
std::move(locality_stats));
|
616
761
|
}
|
617
|
-
gpr_log(
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
762
|
+
gpr_log(GPR_ERROR,
|
763
|
+
"[xds_cluster_impl_lb %p] Failed to get locality stats object for "
|
764
|
+
"LRS server %s, cluster %s, EDS service name %s; load reports will "
|
765
|
+
"not be generated (not wrapping subchannel)",
|
766
|
+
parent(),
|
767
|
+
parent()
|
768
|
+
->cluster_resource_->lrs_load_reporting_server->server_uri()
|
769
|
+
.c_str(),
|
770
|
+
parent()->config_->cluster_name().c_str(),
|
771
|
+
GetEdsResourceName(*parent()->cluster_resource_).c_str());
|
626
772
|
}
|
627
773
|
// Load reporting not enabled, so don't wrap the subchannel.
|
628
774
|
return parent()->channel_control_helper()->CreateSubchannel(
|
@@ -652,67 +798,31 @@ void XdsClusterImplLb::Helper::UpdateState(
|
|
652
798
|
// factory
|
653
799
|
//
|
654
800
|
|
655
|
-
struct DropCategory {
|
656
|
-
std::string category;
|
657
|
-
uint32_t requests_per_million;
|
658
|
-
|
659
|
-
static const JsonLoaderInterface* JsonLoader(const JsonArgs&) {
|
660
|
-
static const auto* loader =
|
661
|
-
JsonObjectLoader<DropCategory>()
|
662
|
-
.Field("category", &DropCategory::category)
|
663
|
-
.Field("requests_per_million", &DropCategory::requests_per_million)
|
664
|
-
.Finish();
|
665
|
-
return loader;
|
666
|
-
}
|
667
|
-
};
|
668
|
-
|
669
801
|
const JsonLoaderInterface* XdsClusterImplLbConfig::JsonLoader(const JsonArgs&) {
|
670
802
|
static const auto* loader =
|
671
803
|
JsonObjectLoader<XdsClusterImplLbConfig>()
|
672
804
|
// Note: Some fields require custom processing, so they are
|
673
805
|
// handled in JsonPostLoad() instead.
|
674
806
|
.Field("clusterName", &XdsClusterImplLbConfig::cluster_name_)
|
675
|
-
.OptionalField("edsServiceName",
|
676
|
-
&XdsClusterImplLbConfig::eds_service_name_)
|
677
|
-
.OptionalField("lrsLoadReportingServer",
|
678
|
-
&XdsClusterImplLbConfig::lrs_load_reporting_server_)
|
679
|
-
.OptionalField("maxConcurrentRequests",
|
680
|
-
&XdsClusterImplLbConfig::max_concurrent_requests_)
|
681
807
|
.Finish();
|
682
808
|
return loader;
|
683
809
|
}
|
684
810
|
|
685
|
-
void XdsClusterImplLbConfig::JsonPostLoad(const Json& json,
|
686
|
-
const JsonArgs& args,
|
811
|
+
void XdsClusterImplLbConfig::JsonPostLoad(const Json& json, const JsonArgs&,
|
687
812
|
ValidationErrors* errors) {
|
688
813
|
// Parse "childPolicy" field.
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
814
|
+
ValidationErrors::ScopedField field(errors, ".childPolicy");
|
815
|
+
auto it = json.object().find("childPolicy");
|
816
|
+
if (it == json.object().end()) {
|
817
|
+
errors->AddError("field not present");
|
818
|
+
} else {
|
819
|
+
auto lb_config =
|
820
|
+
CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
|
821
|
+
it->second);
|
822
|
+
if (!lb_config.ok()) {
|
823
|
+
errors->AddError(lb_config.status().message());
|
694
824
|
} else {
|
695
|
-
|
696
|
-
.lb_policy_registry()
|
697
|
-
.ParseLoadBalancingConfig(it->second);
|
698
|
-
if (!lb_config.ok()) {
|
699
|
-
errors->AddError(lb_config.status().message());
|
700
|
-
} else {
|
701
|
-
child_policy_ = std::move(*lb_config);
|
702
|
-
}
|
703
|
-
}
|
704
|
-
}
|
705
|
-
// Parse "dropCategories" field.
|
706
|
-
{
|
707
|
-
auto value = LoadJsonObjectField<std::vector<DropCategory>>(
|
708
|
-
json.object(), args, "dropCategories", errors);
|
709
|
-
if (value.has_value()) {
|
710
|
-
drop_config_ = MakeRefCounted<XdsEndpointResource::DropConfig>();
|
711
|
-
for (size_t i = 0; i < value->size(); ++i) {
|
712
|
-
DropCategory& drop_category = (*value)[i];
|
713
|
-
drop_config_->AddCategory(std::move(drop_category.category),
|
714
|
-
drop_category.requests_per_million);
|
715
|
-
}
|
825
|
+
child_policy_ = std::move(*lb_config);
|
716
826
|
}
|
717
827
|
}
|
718
828
|
}
|
@@ -40,7 +40,7 @@
|
|
40
40
|
|
41
41
|
#include "src/core/ext/filters/client_channel/client_channel_internal.h"
|
42
42
|
#include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
|
43
|
-
#include "src/core/ext/filters/client_channel/resolver/xds/
|
43
|
+
#include "src/core/ext/filters/client_channel/resolver/xds/xds_resolver_attributes.h"
|
44
44
|
#include "src/core/lib/channel/channel_args.h"
|
45
45
|
#include "src/core/lib/config/core_configuration.h"
|
46
46
|
#include "src/core/lib/debug/trace.h"
|
@@ -149,7 +149,8 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
|
|
149
149
|
|
150
150
|
absl::Status UpdateLocked(
|
151
151
|
RefCountedPtr<LoadBalancingPolicy::Config> config,
|
152
|
-
const absl::StatusOr<
|
152
|
+
const absl::StatusOr<std::shared_ptr<EndpointAddressesIterator>>&
|
153
|
+
addresses,
|
153
154
|
const ChannelArgs& args);
|
154
155
|
void ExitIdleLocked();
|
155
156
|
void ResetBackoffLocked();
|
@@ -282,7 +283,7 @@ absl::Status XdsClusterManagerLb::UpdateLocked(UpdateArgs args) {
|
|
282
283
|
}
|
283
284
|
update_in_progress_ = true;
|
284
285
|
// Update config.
|
285
|
-
config_ =
|
286
|
+
config_ = args.config.TakeAsSubclass<XdsClusterManagerLbConfig>();
|
286
287
|
// Deactivate the children not in the new config.
|
287
288
|
for (const auto& p : children_) {
|
288
289
|
const std::string& name = p.first;
|
@@ -298,8 +299,9 @@ absl::Status XdsClusterManagerLb::UpdateLocked(UpdateArgs args) {
|
|
298
299
|
const RefCountedPtr<LoadBalancingPolicy::Config>& config = p.second.config;
|
299
300
|
auto& child = children_[name];
|
300
301
|
if (child == nullptr) {
|
301
|
-
child = MakeOrphanable<ClusterChild>(
|
302
|
-
|
302
|
+
child = MakeOrphanable<ClusterChild>(
|
303
|
+
RefAsSubclass<XdsClusterManagerLb>(DEBUG_LOCATION, "ClusterChild"),
|
304
|
+
name);
|
303
305
|
}
|
304
306
|
absl::Status status =
|
305
307
|
child->UpdateLocked(config, args.addresses, args.args);
|
@@ -482,7 +484,7 @@ XdsClusterManagerLb::ClusterChild::CreateChildPolicyLocked(
|
|
482
484
|
|
483
485
|
absl::Status XdsClusterManagerLb::ClusterChild::UpdateLocked(
|
484
486
|
RefCountedPtr<LoadBalancingPolicy::Config> config,
|
485
|
-
const absl::StatusOr<
|
487
|
+
const absl::StatusOr<std::shared_ptr<EndpointAddressesIterator>>& addresses,
|
486
488
|
const ChannelArgs& args) {
|
487
489
|
if (xds_cluster_manager_policy_->shutting_down_) return absl::OkStatus();
|
488
490
|
// Update child weight.
|