grpc 1.48.0 → 1.50.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +114 -150
- data/include/grpc/event_engine/endpoint_config.h +11 -5
- data/include/grpc/event_engine/event_engine.h +20 -17
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +19 -28
- data/include/grpc/impl/codegen/atm_gcc_sync.h +0 -2
- data/include/grpc/impl/codegen/atm_windows.h +0 -2
- data/include/grpc/impl/codegen/grpc_types.h +9 -8
- data/include/grpc/impl/codegen/port_platform.h +0 -8
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +6 -6
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +2 -2
- data/src/core/ext/filters/client_channel/backup_poller.cc +4 -6
- data/src/core/ext/filters/client_channel/client_channel.cc +154 -218
- data/src/core/ext/filters/client_channel/client_channel.h +16 -9
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
- data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +0 -16
- data/src/core/ext/filters/client_channel/config_selector.h +12 -4
- data/src/core/ext/filters/client_channel/connector.h +4 -5
- data/src/core/ext/filters/client_channel/http_proxy.cc +55 -74
- data/src/core/ext/filters/client_channel/http_proxy.h +15 -11
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +20 -16
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +11 -10
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +0 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +181 -194
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +20 -11
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +250 -146
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +41 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +35 -32
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +195 -299
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +237 -250
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +12 -7
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +431 -498
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +31 -30
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +27 -27
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +108 -124
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +68 -76
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +131 -227
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +126 -121
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +325 -304
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +4 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +431 -145
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +172 -101
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +18 -16
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +7 -17
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +51 -32
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +87 -41
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +16 -6
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -13
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +167 -168
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +40 -32
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
- data/src/core/ext/filters/client_channel/retry_filter.cc +25 -36
- data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
- data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +6 -7
- data/src/core/ext/filters/client_channel/subchannel.cc +86 -121
- data/src/core/ext/filters/client_channel/subchannel.h +20 -11
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +4 -6
- data/src/core/ext/filters/deadline/deadline_filter.cc +6 -6
- data/src/core/ext/filters/deadline/deadline_filter.h +2 -3
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +24 -19
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +9 -1
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +17 -12
- data/src/core/ext/filters/fault_injection/service_config_parser.h +4 -5
- data/src/core/ext/filters/http/client/http_client_filter.cc +3 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
- data/src/core/ext/filters/http/client_authority_filter.h +1 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +2 -4
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -2
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -5
- data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +13 -7
- data/src/core/ext/filters/message_size/message_size_filter.h +3 -6
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +16 -12
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -6
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +5 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +3 -5
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +40 -63
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +86 -107
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +155 -295
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -2
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +287 -0
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +1018 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +139 -42
- data/src/core/ext/transport/chttp2/transport/flow_control.h +12 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +1 -2
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +27 -28
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +30 -38
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +1 -10
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +11 -6
- data/src/core/ext/transport/chttp2/transport/internal.h +4 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +44 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -14
- data/src/core/ext/transport/inproc/inproc_transport.cc +41 -77
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -8
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +21 -19
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -34
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +23 -22
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +21 -20
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -44
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -13
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -15
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -9
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +131 -16
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -12
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
- data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
- data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
- data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
- data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +162 -139
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +72 -75
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -84
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
- data/src/core/ext/xds/certificate_provider_store.cc +63 -3
- data/src/core/ext/xds/certificate_provider_store.h +9 -1
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +5 -5
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +1 -1
- data/src/core/ext/xds/upb_utils.h +0 -21
- data/src/core/ext/xds/xds_api.cc +73 -102
- data/src/core/ext/xds/xds_api.h +26 -28
- data/src/core/ext/xds/xds_bootstrap.cc +5 -550
- data/src/core/ext/xds/xds_bootstrap.h +39 -91
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +370 -0
- data/src/core/ext/xds/xds_bootstrap_grpc.h +169 -0
- data/src/core/ext/xds/xds_certificate_provider.h +9 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +6 -4
- data/src/core/ext/xds/xds_channel_stack_modifier.h +8 -0
- data/src/core/ext/xds/xds_client.cc +732 -1317
- data/src/core/ext/xds/xds_client.h +33 -59
- data/src/core/ext/xds/xds_client_grpc.cc +229 -0
- data/src/core/ext/xds/xds_client_grpc.h +79 -0
- data/src/core/ext/xds/xds_client_stats.cc +4 -4
- data/src/core/ext/xds/xds_cluster.cc +162 -165
- data/src/core/ext/xds/xds_cluster.h +8 -7
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +12 -14
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -0
- data/src/core/ext/xds/xds_common_types.cc +140 -108
- data/src/core/ext/xds/xds_common_types.h +6 -7
- data/src/core/ext/xds/xds_endpoint.cc +87 -85
- data/src/core/ext/xds/xds_endpoint.h +4 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +4 -11
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.cc +39 -58
- data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
- data/src/core/ext/xds/xds_lb_policy_registry.cc +21 -22
- data/src/core/ext/xds/xds_lb_policy_registry.h +4 -4
- data/src/core/ext/xds/xds_listener.cc +348 -313
- data/src/core/ext/xds/xds_listener.h +4 -5
- data/src/core/ext/xds/xds_resource_type.h +23 -9
- data/src/core/ext/xds/xds_route_config.cc +193 -191
- data/src/core/ext/xds/xds_route_config.h +31 -17
- data/src/core/ext/xds/xds_routing.cc +3 -6
- data/src/core/ext/xds/xds_routing.h +7 -9
- data/src/core/ext/xds/xds_server_config_fetcher.cc +81 -84
- data/src/core/ext/xds/xds_transport.h +86 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +357 -0
- data/src/core/ext/xds/xds_transport_grpc.h +135 -0
- data/src/core/lib/address_utils/parse_address.cc +19 -17
- data/src/core/lib/address_utils/parse_address.h +8 -5
- data/src/core/lib/avl/avl.h +47 -25
- data/src/core/lib/backoff/backoff.cc +2 -4
- data/src/core/lib/channel/call_finalization.h +1 -3
- data/src/core/lib/channel/call_tracer.h +1 -1
- data/src/core/lib/channel/channel_args.cc +88 -19
- data/src/core/lib/channel/channel_args.h +218 -67
- data/src/core/lib/channel/channel_stack.cc +0 -1
- data/src/core/lib/channel/channel_stack_builder.cc +3 -3
- data/src/core/lib/channel/channel_stack_builder.h +2 -2
- data/src/core/lib/channel/channel_stack_builder_impl.cc +2 -4
- data/src/core/lib/channel/channel_trace.cc +3 -4
- data/src/core/lib/channel/channelz.cc +27 -37
- data/src/core/lib/channel/channelz.h +9 -0
- data/src/core/lib/channel/promise_based_filter.cc +18 -19
- data/src/core/lib/channel/promise_based_filter.h +0 -1
- data/src/core/lib/channel/status_util.cc +27 -0
- data/src/core/lib/channel/status_util.h +10 -0
- data/src/core/lib/config/core_configuration.cc +5 -1
- data/src/core/lib/config/core_configuration.h +81 -35
- data/src/core/lib/debug/stats.cc +39 -46
- data/src/core/lib/debug/stats.h +11 -13
- data/src/core/lib/debug/stats_data.cc +118 -614
- data/src/core/lib/debug/stats_data.h +67 -465
- data/src/core/lib/debug/trace.cc +0 -2
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +12 -20
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +13 -7
- data/src/core/lib/event_engine/{event_engine.cc → default_event_engine.cc} +9 -5
- data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +4 -8
- data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
- data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
- data/src/core/lib/event_engine/executor/executor.h +38 -0
- data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
- data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
- data/src/core/lib/event_engine/forkable.cc +101 -0
- data/src/core/lib/event_engine/forkable.h +61 -0
- data/src/core/lib/event_engine/poller.h +56 -0
- data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.cc → posix_engine/posix_engine.cc} +30 -47
- data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.h → posix_engine/posix_engine.h} +27 -28
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.cc +4 -5
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.h +8 -8
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.cc +4 -4
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.h +5 -5
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.cc +87 -30
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.h +40 -9
- data/src/core/lib/event_engine/socket_notifier.h +55 -0
- data/src/core/lib/event_engine/thread_pool.cc +195 -0
- data/src/core/lib/event_engine/thread_pool.h +114 -0
- data/src/core/lib/event_engine/time_util.cc +30 -0
- data/src/core/lib/event_engine/time_util.h +32 -0
- data/src/core/lib/event_engine/utils.cc +44 -0
- data/src/core/lib/event_engine/utils.h +36 -0
- data/src/core/lib/event_engine/windows/iocp.cc +155 -0
- data/src/core/lib/event_engine/windows/iocp.h +69 -0
- data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
- data/src/core/lib/event_engine/windows/win_socket.h +120 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
- data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
- data/src/core/lib/experiments/config.cc +146 -0
- data/src/core/lib/experiments/config.h +43 -0
- data/src/core/lib/experiments/experiments.cc +75 -0
- data/src/core/lib/experiments/experiments.h +56 -0
- data/src/core/lib/gpr/alloc.cc +1 -9
- data/src/core/lib/gpr/log_windows.cc +0 -1
- data/src/core/lib/gpr/string_util_windows.cc +3 -30
- data/src/core/lib/gpr/sync_abseil.cc +0 -14
- data/src/core/lib/gpr/sync_posix.cc +0 -14
- data/src/core/lib/gpr/time.cc +11 -9
- data/src/core/lib/gpr/time_posix.cc +0 -6
- data/src/core/lib/gpr/time_precise.h +1 -1
- data/src/core/lib/gpr/tmpfile_windows.cc +5 -7
- data/src/core/lib/gpr/useful.h +40 -0
- data/src/core/lib/gprpp/bitset.h +3 -13
- data/src/core/lib/gprpp/debug_location.h +39 -7
- data/src/core/lib/{gpr → gprpp}/env.h +25 -12
- data/src/core/lib/{gpr → gprpp}/env_linux.cc +20 -15
- data/src/core/lib/{gpr → gprpp}/env_posix.cc +11 -10
- data/src/core/lib/gprpp/env_windows.cc +56 -0
- data/src/core/lib/gprpp/fork.cc +14 -22
- data/src/core/lib/gprpp/fork.h +0 -8
- data/src/core/lib/gprpp/global_config_env.cc +7 -6
- data/src/core/lib/gprpp/manual_constructor.h +0 -1
- data/src/core/lib/gprpp/no_destruct.h +94 -0
- data/src/core/lib/gprpp/notification.h +67 -0
- data/src/core/lib/gprpp/packed_table.h +40 -0
- data/src/core/lib/gprpp/ref_counted_ptr.h +20 -34
- data/src/core/lib/gprpp/sorted_pack.h +98 -0
- data/src/core/lib/gprpp/status_helper.cc +1 -0
- data/src/core/lib/gprpp/status_helper.h +6 -0
- data/src/core/lib/gprpp/table.h +9 -2
- data/src/core/lib/gprpp/tchar.cc +49 -0
- data/src/core/lib/gprpp/tchar.h +33 -0
- data/src/core/lib/gprpp/time.cc +21 -0
- data/src/core/lib/gprpp/time.h +55 -0
- data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.cc +3 -5
- data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.h +5 -7
- data/src/core/lib/gprpp/validation_errors.cc +61 -0
- data/src/core/lib/gprpp/validation_errors.h +110 -0
- data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
- data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -27
- data/src/core/{ext/filters/client_channel → lib/handshaker}/proxy_mapper.h +16 -17
- data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
- data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
- data/src/core/lib/http/httpcli.cc +12 -24
- data/src/core/lib/http/httpcli_security_connector.cc +11 -11
- data/src/core/lib/iomgr/call_combiner.cc +0 -34
- data/src/core/lib/iomgr/closure.h +0 -10
- data/src/core/lib/iomgr/combiner.cc +0 -20
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +14 -9
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
- data/src/core/lib/iomgr/error.cc +0 -773
- data/src/core/lib/iomgr/error.h +0 -145
- data/src/core/lib/iomgr/error_cfstream.cc +0 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +1 -38
- data/src/core/lib/iomgr/ev_poll_posix.cc +19 -26
- data/src/core/lib/iomgr/exec_ctx.cc +0 -22
- data/src/core/lib/iomgr/exec_ctx.h +7 -31
- data/src/core/lib/iomgr/executor.cc +0 -10
- data/src/core/lib/iomgr/executor.h +0 -3
- data/src/core/lib/iomgr/iocp_windows.cc +1 -2
- data/src/core/lib/iomgr/iomgr.cc +6 -8
- data/src/core/lib/iomgr/iomgr_fwd.h +1 -0
- data/src/core/lib/iomgr/lockfree_event.cc +0 -17
- data/src/core/lib/iomgr/pollset.h +1 -1
- data/src/core/lib/iomgr/pollset_set.h +0 -1
- data/src/core/lib/iomgr/port.h +3 -0
- data/src/core/lib/iomgr/resolve_address.h +30 -6
- data/src/core/lib/iomgr/resolve_address_impl.h +1 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +43 -8
- data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
- data/src/core/lib/iomgr/resolve_address_windows.cc +45 -10
- data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +2 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +12 -34
- data/src/core/lib/iomgr/socket_utils_posix.cc +83 -1
- data/src/core/lib/iomgr/socket_utils_posix.h +98 -6
- data/src/core/lib/iomgr/socket_windows.h +0 -2
- data/src/core/lib/iomgr/tcp_client.cc +6 -7
- data/src/core/lib/iomgr/tcp_client.h +11 -11
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -6
- data/src/core/lib/iomgr/tcp_client_posix.cc +33 -29
- data/src/core/lib/iomgr/tcp_client_posix.h +12 -9
- data/src/core/lib/iomgr/tcp_client_windows.cc +6 -6
- data/src/core/lib/iomgr/tcp_posix.cc +249 -120
- data/src/core/lib/iomgr/tcp_posix.h +3 -1
- data/src/core/lib/iomgr/tcp_server.cc +5 -4
- data/src/core/lib/iomgr/tcp_server.h +9 -6
- data/src/core/lib/iomgr/tcp_server_posix.cc +17 -28
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +2 -2
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +3 -3
- data/src/core/lib/iomgr/tcp_server_windows.cc +6 -7
- data/src/core/lib/iomgr/tcp_windows.cc +0 -1
- data/src/core/lib/iomgr/tcp_windows.h +0 -1
- data/src/core/lib/iomgr/timer_generic.cc +10 -12
- data/src/core/lib/iomgr/timer_manager.cc +1 -2
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +0 -2
- data/src/core/lib/json/json.h +19 -22
- data/src/core/lib/json/json_args.h +34 -0
- data/src/core/lib/json/json_object_loader.cc +202 -0
- data/src/core/lib/json/json_object_loader.h +598 -0
- data/src/core/lib/json/json_reader.cc +86 -62
- data/src/core/lib/json/json_util.cc +9 -36
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +20 -29
- data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
- data/src/core/lib/load_balancing/lb_policy_registry.cc +141 -0
- data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +6 -6
- data/src/core/lib/promise/activity.h +57 -10
- data/src/core/lib/promise/arena_promise.h +84 -81
- data/src/core/lib/promise/context.h +1 -2
- data/src/core/lib/promise/detail/basic_seq.h +43 -23
- data/src/core/lib/promise/detail/promise_factory.h +0 -1
- data/src/core/lib/promise/map.h +0 -1
- data/src/core/lib/promise/seq.h +25 -4
- data/src/core/lib/promise/sleep.cc +50 -42
- data/src/core/lib/promise/sleep.h +32 -23
- data/src/core/lib/promise/try_seq.h +26 -6
- data/src/core/lib/resolver/resolver.cc +0 -47
- data/src/core/lib/resolver/resolver.h +15 -15
- data/src/core/lib/resolver/resolver_factory.h +2 -3
- data/src/core/lib/resolver/resolver_registry.cc +1 -1
- data/src/core/lib/resolver/resolver_registry.h +2 -3
- data/src/core/lib/resolver/server_address.cc +11 -15
- data/src/core/lib/resolver/server_address.h +4 -8
- data/src/core/lib/resource_quota/api.cc +10 -1
- data/src/core/lib/resource_quota/api.h +6 -0
- data/src/core/lib/resource_quota/arena.cc +19 -1
- data/src/core/lib/resource_quota/arena.h +24 -2
- data/src/core/lib/resource_quota/memory_quota.cc +143 -19
- data/src/core/lib/resource_quota/memory_quota.h +85 -17
- data/src/core/lib/resource_quota/periodic_update.cc +78 -0
- data/src/core/lib/resource_quota/periodic_update.h +71 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +10 -7
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
- data/src/core/lib/security/authorization/matchers.cc +13 -10
- data/src/core/lib/security/authorization/rbac_policy.cc +0 -1
- data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +3 -3
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -3
- data/src/core/lib/security/credentials/alts/alts_credentials.h +3 -4
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +1 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +3 -7
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -4
- data/src/core/lib/security/credentials/credentials.h +16 -12
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +33 -27
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +34 -24
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -12
- data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -4
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +5 -8
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +35 -32
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +0 -1
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +3 -3
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -4
- data/src/core/lib/security/credentials/jwt/json_token.cc +12 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -8
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +14 -15
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
- data/src/core/lib/security/credentials/local/local_credentials.cc +3 -4
- data/src/core/lib/security/credentials/local/local_credentials.h +3 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +18 -20
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +0 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -21
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +3 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +4 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +10 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +13 -25
- data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -4
- data/src/core/lib/security/credentials/tls/tls_utils.cc +3 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +13 -30
- data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -18
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +26 -38
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +6 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +13 -11
- data/src/core/lib/security/security_connector/local/local_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/security_connector.h +5 -3
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +5 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +5 -5
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +5 -5
- data/src/core/lib/security/transport/auth_filters.h +1 -1
- data/src/core/lib/security/transport/client_auth_filter.cc +15 -5
- data/src/core/lib/security/transport/secure_endpoint.cc +0 -4
- data/src/core/lib/security/transport/security_handshaker.cc +32 -44
- data/src/core/lib/security/transport/security_handshaker.h +2 -1
- data/src/core/lib/service_config/service_config.h +11 -0
- data/src/core/lib/service_config/service_config_impl.cc +98 -97
- data/src/core/lib/service_config/service_config_impl.h +11 -13
- data/src/core/lib/service_config/service_config_parser.cc +26 -27
- data/src/core/lib/service_config/service_config_parser.h +10 -22
- data/src/core/lib/slice/percent_encoding.cc +4 -13
- data/src/core/lib/slice/slice.cc +10 -4
- data/src/core/lib/surface/call.cc +9 -13
- data/src/core/lib/surface/channel.cc +9 -8
- data/src/core/lib/surface/channel.h +1 -1
- data/src/core/lib/surface/completion_queue.cc +16 -30
- data/src/core/lib/surface/completion_queue.h +1 -4
- data/src/core/lib/surface/completion_queue_factory.cc +5 -0
- data/src/core/lib/surface/init.cc +17 -16
- data/src/core/lib/surface/init_internally.cc +24 -0
- data/src/core/lib/surface/init_internally.h +28 -0
- data/src/core/lib/surface/lame_client.cc +2 -3
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +8 -19
- data/src/core/lib/surface/server.h +11 -13
- data/src/core/lib/surface/validate_metadata.cc +4 -14
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +1 -3
- data/src/core/lib/transport/connectivity_state.cc +0 -1
- data/src/core/lib/transport/connectivity_state.h +1 -1
- data/src/core/lib/transport/error_utils.cc +0 -36
- data/src/core/lib/transport/handshaker.cc +7 -9
- data/src/core/lib/transport/handshaker.h +4 -5
- data/src/core/lib/transport/handshaker_factory.h +2 -3
- data/src/core/lib/transport/handshaker_registry.cc +2 -1
- data/src/core/lib/transport/handshaker_registry.h +2 -4
- data/src/core/lib/transport/http_connect_handshaker.cc +16 -16
- data/src/core/lib/transport/metadata_batch.cc +7 -3
- data/src/core/lib/transport/metadata_batch.h +61 -14
- data/src/core/lib/transport/parsed_metadata.h +4 -3
- data/src/core/lib/transport/status_conversion.cc +1 -3
- data/src/core/lib/transport/tcp_connect_handshaker.cc +20 -22
- data/src/core/lib/transport/transport.h +0 -8
- data/src/core/lib/transport/transport_impl.h +0 -1
- data/src/core/plugin_registry/grpc_plugin_registry.cc +23 -46
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +13 -25
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +14 -7
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
- data/src/core/tsi/fake_transport_security.cc +53 -30
- data/src/core/tsi/local_transport_security.cc +9 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
- data/src/core/tsi/ssl_transport_security.cc +47 -23
- data/src/core/tsi/transport_security.cc +18 -6
- data/src/core/tsi/transport_security.h +2 -1
- data/src/core/tsi/transport_security_interface.h +17 -5
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_loader.c +6 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
- data/src/ruby/spec/channel_spec.rb +5 -0
- data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
- data/src/ruby/spec/user_agent_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
- data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
- data/third_party/upb/upb/arena.c +277 -0
- data/third_party/upb/upb/arena.h +225 -0
- data/third_party/upb/upb/array.c +114 -0
- data/third_party/upb/upb/array.h +83 -0
- data/third_party/upb/upb/collections.h +36 -0
- data/third_party/upb/upb/decode.c +161 -65
- data/third_party/upb/upb/decode.h +1 -0
- data/third_party/upb/upb/decode_fast.c +1 -1
- data/third_party/upb/upb/def.c +10 -2
- data/third_party/upb/upb/def.h +8 -1
- data/third_party/upb/upb/def.hpp +7 -4
- data/third_party/upb/upb/encode.c +29 -20
- data/third_party/upb/upb/encode.h +16 -6
- data/third_party/upb/upb/extension_registry.c +93 -0
- data/third_party/upb/upb/extension_registry.h +84 -0
- data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
- data/third_party/upb/upb/internal/table.h +385 -0
- data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
- data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
- data/third_party/upb/upb/json_decode.c +1512 -0
- data/third_party/upb/upb/json_decode.h +47 -0
- data/third_party/upb/upb/json_encode.c +7 -3
- data/third_party/upb/upb/json_encode.h +6 -3
- data/third_party/upb/upb/map.c +108 -0
- data/third_party/upb/upb/map.h +117 -0
- data/third_party/upb/upb/message_value.h +66 -0
- data/third_party/upb/upb/mini_table.c +1147 -0
- data/third_party/upb/upb/mini_table.h +189 -0
- data/third_party/upb/upb/mini_table.hpp +112 -0
- data/third_party/upb/upb/msg.c +2 -62
- data/third_party/upb/upb/msg.h +2 -45
- data/third_party/upb/upb/msg_internal.h +28 -22
- data/third_party/upb/upb/port_def.inc +2 -1
- data/third_party/upb/upb/port_undef.inc +1 -0
- data/third_party/upb/upb/reflection.c +2 -159
- data/third_party/upb/upb/reflection.h +2 -112
- data/third_party/upb/upb/status.c +86 -0
- data/third_party/upb/upb/status.h +66 -0
- data/third_party/upb/upb/table.c +2 -2
- data/third_party/upb/upb/table_internal.h +3 -352
- data/third_party/upb/upb/text_encode.c +3 -2
- data/third_party/upb/upb/upb.c +4 -290
- data/third_party/upb/upb/upb.h +7 -196
- metadata +117 -51
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -190
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -70
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -90
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -55
- data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
- data/src/core/ext/xds/certificate_provider_registry.h +0 -59
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +0 -123
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +0 -70
- data/src/core/lib/event_engine/promise.h +0 -69
- data/src/core/lib/gpr/env_windows.cc +0 -74
- data/src/core/lib/gpr/string_windows.h +0 -32
- data/src/core/lib/iomgr/error_internal.h +0 -66
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
- data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
- data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
- data/src/core/lib/iomgr/executor/threadpool.h +0 -150
- data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
- data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
- data/src/core/lib/profiling/basic_timers.cc +0 -295
- data/src/core/lib/profiling/stap_timers.cc +0 -50
- data/src/core/lib/profiling/timers.h +0 -94
- data/src/core/lib/promise/detail/switch.h +0 -1455
@@ -16,16 +16,16 @@
|
|
16
16
|
|
17
17
|
#include <grpc/support/port_platform.h>
|
18
18
|
|
19
|
+
#include "src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h"
|
20
|
+
|
19
21
|
#include <inttypes.h>
|
20
22
|
#include <stdlib.h>
|
21
23
|
|
22
24
|
#include <algorithm>
|
23
25
|
#include <atomic>
|
24
26
|
#include <cmath>
|
25
|
-
#include <map>
|
26
27
|
#include <memory>
|
27
28
|
#include <string>
|
28
|
-
#include <type_traits>
|
29
29
|
#include <utility>
|
30
30
|
#include <vector>
|
31
31
|
|
@@ -44,29 +44,28 @@
|
|
44
44
|
#include "xxhash.h"
|
45
45
|
|
46
46
|
#include <grpc/impl/codegen/connectivity_state.h>
|
47
|
-
#include <grpc/impl/codegen/grpc_types.h>
|
48
47
|
#include <grpc/support/log.h>
|
49
48
|
|
50
49
|
#include "src/core/ext/filters/client_channel/client_channel.h"
|
51
|
-
#include "src/core/ext/filters/client_channel/lb_policy.h"
|
52
50
|
#include "src/core/ext/filters/client_channel/lb_policy/subchannel_list.h"
|
53
|
-
#include "src/core/ext/filters/client_channel/lb_policy_factory.h"
|
54
|
-
#include "src/core/ext/filters/client_channel/lb_policy_registry.h"
|
55
|
-
#include "src/core/ext/filters/client_channel/subchannel_interface.h"
|
56
51
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
52
|
+
#include "src/core/lib/channel/channel_args.h"
|
53
|
+
#include "src/core/lib/config/core_configuration.h"
|
57
54
|
#include "src/core/lib/debug/trace.h"
|
58
|
-
#include "src/core/lib/gpr/string.h"
|
59
55
|
#include "src/core/lib/gprpp/debug_location.h"
|
60
56
|
#include "src/core/lib/gprpp/orphanable.h"
|
61
|
-
#include "src/core/lib/gprpp/ref_counted.h"
|
62
57
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
63
58
|
#include "src/core/lib/gprpp/sync.h"
|
64
59
|
#include "src/core/lib/gprpp/unique_type_name.h"
|
60
|
+
#include "src/core/lib/gprpp/work_serializer.h"
|
65
61
|
#include "src/core/lib/iomgr/closure.h"
|
66
62
|
#include "src/core/lib/iomgr/error.h"
|
67
63
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
68
|
-
#include "src/core/lib/iomgr/work_serializer.h"
|
69
64
|
#include "src/core/lib/json/json.h"
|
65
|
+
#include "src/core/lib/load_balancing/lb_policy.h"
|
66
|
+
#include "src/core/lib/load_balancing/lb_policy_factory.h"
|
67
|
+
#include "src/core/lib/load_balancing/lb_policy_registry.h"
|
68
|
+
#include "src/core/lib/load_balancing/subchannel_interface.h"
|
70
69
|
#include "src/core/lib/resolver/server_address.h"
|
71
70
|
#include "src/core/lib/transport/connectivity_state.h"
|
72
71
|
|
@@ -80,56 +79,46 @@ UniqueTypeName RequestHashAttributeName() {
|
|
80
79
|
}
|
81
80
|
|
82
81
|
// Helper Parser method
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
*min_ring_size = gpr_parse_nonnegative_int(
|
101
|
-
ring_hash_it->second.string_value().c_str());
|
82
|
+
|
83
|
+
const JsonLoaderInterface* RingHashConfig::JsonLoader(const JsonArgs&) {
|
84
|
+
static const auto* loader =
|
85
|
+
JsonObjectLoader<RingHashConfig>()
|
86
|
+
.OptionalField("min_ring_size", &RingHashConfig::min_ring_size)
|
87
|
+
.OptionalField("max_ring_size", &RingHashConfig::max_ring_size)
|
88
|
+
.Finish();
|
89
|
+
return loader;
|
90
|
+
}
|
91
|
+
|
92
|
+
void RingHashConfig::JsonPostLoad(const Json&, const JsonArgs&,
|
93
|
+
ValidationErrors* errors) {
|
94
|
+
{
|
95
|
+
ValidationErrors::ScopedField field(errors, ".min_ring_size");
|
96
|
+
if (!errors->FieldHasErrors() &&
|
97
|
+
(min_ring_size == 0 || min_ring_size > 8388608)) {
|
98
|
+
errors->AddError("must be in the range [1, 8388608]");
|
102
99
|
}
|
103
100
|
}
|
104
|
-
|
105
|
-
|
106
|
-
if (
|
107
|
-
|
108
|
-
|
109
|
-
} else {
|
110
|
-
*max_ring_size = gpr_parse_nonnegative_int(
|
111
|
-
ring_hash_it->second.string_value().c_str());
|
101
|
+
{
|
102
|
+
ValidationErrors::ScopedField field(errors, ".max_ring_size");
|
103
|
+
if (!errors->FieldHasErrors() &&
|
104
|
+
(max_ring_size == 0 || max_ring_size > 8388608)) {
|
105
|
+
errors->AddError("must be in the range [1, 8388608]");
|
112
106
|
}
|
113
107
|
}
|
114
|
-
if (
|
115
|
-
|
116
|
-
error_list->push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
117
|
-
"field:max_ring_size and or min_ring_size error: "
|
118
|
-
"values need to be in the range of 1 to 8388608 "
|
119
|
-
"and max_ring_size cannot be smaller than "
|
120
|
-
"min_ring_size"));
|
108
|
+
if (min_ring_size > max_ring_size) {
|
109
|
+
errors->AddError("max_ring_size cannot be smaller than min_ring_size");
|
121
110
|
}
|
122
111
|
}
|
123
112
|
|
124
113
|
namespace {
|
125
114
|
|
126
|
-
constexpr
|
115
|
+
constexpr absl::string_view kRingHash = "ring_hash_experimental";
|
127
116
|
|
128
117
|
class RingHashLbConfig : public LoadBalancingPolicy::Config {
|
129
118
|
public:
|
130
119
|
RingHashLbConfig(size_t min_ring_size, size_t max_ring_size)
|
131
120
|
: min_ring_size_(min_ring_size), max_ring_size_(max_ring_size) {}
|
132
|
-
|
121
|
+
absl::string_view name() const override { return kRingHash; }
|
133
122
|
size_t min_ring_size() const { return min_ring_size_; }
|
134
123
|
size_t max_ring_size() const { return max_ring_size_; }
|
135
124
|
|
@@ -146,17 +135,16 @@ class RingHash : public LoadBalancingPolicy {
|
|
146
135
|
public:
|
147
136
|
explicit RingHash(Args args);
|
148
137
|
|
149
|
-
|
138
|
+
absl::string_view name() const override { return kRingHash; }
|
150
139
|
|
151
|
-
|
140
|
+
absl::Status UpdateLocked(UpdateArgs args) override;
|
152
141
|
void ResetBackoffLocked() override;
|
153
142
|
|
154
143
|
private:
|
155
144
|
~RingHash() override;
|
156
145
|
|
157
|
-
// Forward
|
146
|
+
// Forward declaration.
|
158
147
|
class RingHashSubchannelList;
|
159
|
-
class Ring;
|
160
148
|
|
161
149
|
// Data for a particular subchannel in a subchannel list.
|
162
150
|
// This subclass adds the following functionality:
|
@@ -205,32 +193,25 @@ class RingHash : public LoadBalancingPolicy {
|
|
205
193
|
absl::Status connectivity_status_ ABSL_GUARDED_BY(&mu_);
|
206
194
|
};
|
207
195
|
|
208
|
-
// A list of subchannels.
|
196
|
+
// A list of subchannels and the ring containing those subchannels.
|
209
197
|
class RingHashSubchannelList
|
210
198
|
: public SubchannelList<RingHashSubchannelList, RingHashSubchannelData> {
|
211
199
|
public:
|
200
|
+
struct RingEntry {
|
201
|
+
uint64_t hash;
|
202
|
+
RingHashSubchannelData* subchannel;
|
203
|
+
};
|
204
|
+
|
212
205
|
RingHashSubchannelList(RingHash* policy, ServerAddressList addresses,
|
213
|
-
const
|
214
|
-
: SubchannelList(policy,
|
215
|
-
(GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)
|
216
|
-
? "RingHashSubchannelList"
|
217
|
-
: nullptr),
|
218
|
-
std::move(addresses), policy->channel_control_helper(),
|
219
|
-
args),
|
220
|
-
num_idle_(num_subchannels()),
|
221
|
-
ring_(MakeRefCounted<Ring>(policy, Ref(DEBUG_LOCATION, "Ring"))) {
|
222
|
-
// Need to maintain a ref to the LB policy as long as we maintain
|
223
|
-
// any references to subchannels, since the subchannels'
|
224
|
-
// pollset_sets will include the LB policy's pollset_set.
|
225
|
-
policy->Ref(DEBUG_LOCATION, "subchannel_list").release();
|
226
|
-
}
|
206
|
+
const ChannelArgs& args);
|
227
207
|
|
228
208
|
~RingHashSubchannelList() override {
|
229
|
-
ring_.reset(DEBUG_LOCATION, "~RingHashSubchannelList");
|
230
209
|
RingHash* p = static_cast<RingHash*>(policy());
|
231
210
|
p->Unref(DEBUG_LOCATION, "subchannel_list");
|
232
211
|
}
|
233
212
|
|
213
|
+
const std::vector<RingEntry>& ring() const { return ring_; }
|
214
|
+
|
234
215
|
// Updates the counters of subchannels in each state when a
|
235
216
|
// subchannel transitions from old_state to new_state.
|
236
217
|
void UpdateStateCountersLocked(grpc_connectivity_state old_state,
|
@@ -255,17 +236,12 @@ class RingHash : public LoadBalancingPolicy {
|
|
255
236
|
return true;
|
256
237
|
}
|
257
238
|
|
258
|
-
void ShutdownLocked() override {
|
259
|
-
ring_.reset(DEBUG_LOCATION, "RingHashSubchannelList::ShutdownLocked()");
|
260
|
-
SubchannelList::ShutdownLocked();
|
261
|
-
}
|
262
|
-
|
263
239
|
size_t num_idle_;
|
264
240
|
size_t num_ready_ = 0;
|
265
241
|
size_t num_connecting_ = 0;
|
266
242
|
size_t num_transient_failure_ = 0;
|
267
243
|
|
268
|
-
|
244
|
+
std::vector<RingEntry> ring_;
|
269
245
|
|
270
246
|
// The index of the subchannel currently doing an internally
|
271
247
|
// triggered connection attempt, if any.
|
@@ -278,73 +254,83 @@ class RingHash : public LoadBalancingPolicy {
|
|
278
254
|
absl::Status last_failure_;
|
279
255
|
};
|
280
256
|
|
281
|
-
class Ring : public RefCounted<Ring> {
|
282
|
-
public:
|
283
|
-
struct Entry {
|
284
|
-
uint64_t hash;
|
285
|
-
RingHashSubchannelData* subchannel;
|
286
|
-
};
|
287
|
-
|
288
|
-
Ring(RingHash* parent,
|
289
|
-
RefCountedPtr<RingHashSubchannelList> subchannel_list);
|
290
|
-
|
291
|
-
const std::vector<Entry>& ring() const { return ring_; }
|
292
|
-
|
293
|
-
private:
|
294
|
-
RefCountedPtr<RingHashSubchannelList> subchannel_list_;
|
295
|
-
std::vector<Entry> ring_;
|
296
|
-
};
|
297
|
-
|
298
257
|
class Picker : public SubchannelPicker {
|
299
258
|
public:
|
300
|
-
Picker(RefCountedPtr<
|
301
|
-
:
|
259
|
+
explicit Picker(RefCountedPtr<RingHashSubchannelList> subchannel_list)
|
260
|
+
: subchannel_list_(std::move(subchannel_list)) {}
|
261
|
+
|
262
|
+
~Picker() override {
|
263
|
+
// Hop into WorkSerializer to unref the subchannel list, since that may
|
264
|
+
// trigger the unreffing of the underlying subchannels.
|
265
|
+
MakeOrphanable<WorkSerializerRunner>(std::move(subchannel_list_));
|
266
|
+
}
|
302
267
|
|
303
268
|
PickResult Pick(PickArgs args) override;
|
304
269
|
|
305
270
|
private:
|
306
|
-
//
|
307
|
-
|
308
|
-
class SubchannelConnectionAttempter : public Orphanable {
|
271
|
+
// An interface for running a callback in the control plane WorkSerializer.
|
272
|
+
class WorkSerializerRunner : public Orphanable {
|
309
273
|
public:
|
310
|
-
explicit
|
311
|
-
RefCountedPtr<
|
312
|
-
:
|
274
|
+
explicit WorkSerializerRunner(
|
275
|
+
RefCountedPtr<RingHashSubchannelList> subchannel_list)
|
276
|
+
: subchannel_list_(std::move(subchannel_list)) {
|
313
277
|
GRPC_CLOSURE_INIT(&closure_, RunInExecCtx, this, nullptr);
|
314
278
|
}
|
315
279
|
|
316
|
-
void AddSubchannel(RefCountedPtr<SubchannelInterface> subchannel) {
|
317
|
-
subchannels_.push_back(std::move(subchannel));
|
318
|
-
}
|
319
|
-
|
320
280
|
void Orphan() override {
|
321
281
|
// Hop into ExecCtx, so that we're not holding the data plane mutex
|
322
282
|
// while we run control-plane code.
|
323
283
|
ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
|
324
284
|
}
|
325
285
|
|
286
|
+
// Will be invoked inside of the WorkSerializer.
|
287
|
+
virtual void Run() {}
|
288
|
+
|
289
|
+
protected:
|
290
|
+
RingHash* ring_hash_lb() const {
|
291
|
+
return static_cast<RingHash*>(subchannel_list_->policy());
|
292
|
+
}
|
293
|
+
|
326
294
|
private:
|
327
295
|
static void RunInExecCtx(void* arg, grpc_error_handle /*error*/) {
|
328
296
|
auto* self = static_cast<SubchannelConnectionAttempter*>(arg);
|
329
|
-
self->
|
297
|
+
self->ring_hash_lb()->work_serializer()->Run(
|
330
298
|
[self]() {
|
331
|
-
|
332
|
-
for (auto& subchannel : self->subchannels_) {
|
333
|
-
subchannel->RequestConnection();
|
334
|
-
}
|
335
|
-
}
|
299
|
+
self->Run();
|
336
300
|
delete self;
|
337
301
|
},
|
338
302
|
DEBUG_LOCATION);
|
339
303
|
}
|
340
304
|
|
341
|
-
RefCountedPtr<
|
305
|
+
RefCountedPtr<RingHashSubchannelList> subchannel_list_;
|
342
306
|
grpc_closure closure_;
|
307
|
+
};
|
308
|
+
|
309
|
+
// A fire-and-forget class that schedules subchannel connection attempts
|
310
|
+
// on the control plane WorkSerializer.
|
311
|
+
class SubchannelConnectionAttempter : public WorkSerializerRunner {
|
312
|
+
public:
|
313
|
+
explicit SubchannelConnectionAttempter(
|
314
|
+
RefCountedPtr<RingHashSubchannelList> subchannel_list)
|
315
|
+
: WorkSerializerRunner(std::move(subchannel_list)) {}
|
316
|
+
|
317
|
+
void AddSubchannel(RefCountedPtr<SubchannelInterface> subchannel) {
|
318
|
+
subchannels_.push_back(std::move(subchannel));
|
319
|
+
}
|
320
|
+
|
321
|
+
void Run() override {
|
322
|
+
if (!ring_hash_lb()->shutdown_) {
|
323
|
+
for (auto& subchannel : subchannels_) {
|
324
|
+
subchannel->RequestConnection();
|
325
|
+
}
|
326
|
+
}
|
327
|
+
}
|
328
|
+
|
329
|
+
private:
|
343
330
|
std::vector<RefCountedPtr<SubchannelInterface>> subchannels_;
|
344
331
|
};
|
345
332
|
|
346
|
-
RefCountedPtr<
|
347
|
-
RefCountedPtr<Ring> ring_;
|
333
|
+
RefCountedPtr<RingHashSubchannelList> subchannel_list_;
|
348
334
|
};
|
349
335
|
|
350
336
|
void ShutdownLocked() override;
|
@@ -353,117 +339,12 @@ class RingHash : public LoadBalancingPolicy {
|
|
353
339
|
RefCountedPtr<RingHashLbConfig> config_;
|
354
340
|
|
355
341
|
// list of subchannels.
|
356
|
-
|
357
|
-
|
342
|
+
RefCountedPtr<RingHashSubchannelList> subchannel_list_;
|
343
|
+
RefCountedPtr<RingHashSubchannelList> latest_pending_subchannel_list_;
|
358
344
|
// indicating if we are shutting down.
|
359
345
|
bool shutdown_ = false;
|
360
346
|
};
|
361
347
|
|
362
|
-
//
|
363
|
-
// RingHash::Ring
|
364
|
-
//
|
365
|
-
|
366
|
-
RingHash::Ring::Ring(RingHash* parent,
|
367
|
-
RefCountedPtr<RingHashSubchannelList> subchannel_list)
|
368
|
-
: subchannel_list_(std::move(subchannel_list)) {
|
369
|
-
size_t num_subchannels = subchannel_list_->num_subchannels();
|
370
|
-
// Store the weights while finding the sum.
|
371
|
-
struct AddressWeight {
|
372
|
-
std::string address;
|
373
|
-
// Default weight is 1 for the cases where a weight is not provided,
|
374
|
-
// each occurrence of the address will be counted a weight value of 1.
|
375
|
-
uint32_t weight = 1;
|
376
|
-
double normalized_weight;
|
377
|
-
};
|
378
|
-
std::vector<AddressWeight> address_weights;
|
379
|
-
size_t sum = 0;
|
380
|
-
address_weights.reserve(num_subchannels);
|
381
|
-
for (size_t i = 0; i < num_subchannels; ++i) {
|
382
|
-
RingHashSubchannelData* sd = subchannel_list_->subchannel(i);
|
383
|
-
const ServerAddressWeightAttribute* weight_attribute = static_cast<
|
384
|
-
const ServerAddressWeightAttribute*>(sd->address().GetAttribute(
|
385
|
-
ServerAddressWeightAttribute::kServerAddressWeightAttributeKey));
|
386
|
-
AddressWeight address_weight;
|
387
|
-
address_weight.address =
|
388
|
-
grpc_sockaddr_to_string(&sd->address().address(), false).value();
|
389
|
-
// Weight should never be zero, but ignore it just in case, since
|
390
|
-
// that value would screw up the ring-building algorithm.
|
391
|
-
if (weight_attribute != nullptr && weight_attribute->weight() > 0) {
|
392
|
-
address_weight.weight = weight_attribute->weight();
|
393
|
-
}
|
394
|
-
sum += address_weight.weight;
|
395
|
-
address_weights.push_back(std::move(address_weight));
|
396
|
-
}
|
397
|
-
// Calculating normalized weights and find min and max.
|
398
|
-
double min_normalized_weight = 1.0;
|
399
|
-
double max_normalized_weight = 0.0;
|
400
|
-
for (auto& address : address_weights) {
|
401
|
-
address.normalized_weight = static_cast<double>(address.weight) / sum;
|
402
|
-
min_normalized_weight =
|
403
|
-
std::min(address.normalized_weight, min_normalized_weight);
|
404
|
-
max_normalized_weight =
|
405
|
-
std::max(address.normalized_weight, max_normalized_weight);
|
406
|
-
}
|
407
|
-
// Scale up the number of hashes per host such that the least-weighted host
|
408
|
-
// gets a whole number of hashes on the ring. Other hosts might not end up
|
409
|
-
// with whole numbers, and that's fine (the ring-building algorithm below can
|
410
|
-
// handle this). This preserves the original implementation's behavior: when
|
411
|
-
// weights aren't provided, all hosts should get an equal number of hashes. In
|
412
|
-
// the case where this number exceeds the max_ring_size, it's scaled back down
|
413
|
-
// to fit.
|
414
|
-
const size_t min_ring_size = parent->config_->min_ring_size();
|
415
|
-
const size_t max_ring_size = parent->config_->max_ring_size();
|
416
|
-
const double scale = std::min(
|
417
|
-
std::ceil(min_normalized_weight * min_ring_size) / min_normalized_weight,
|
418
|
-
static_cast<double>(max_ring_size));
|
419
|
-
// Reserve memory for the entire ring up front.
|
420
|
-
const size_t ring_size = std::ceil(scale);
|
421
|
-
ring_.reserve(ring_size);
|
422
|
-
// Populate the hash ring by walking through the (host, weight) pairs in
|
423
|
-
// normalized_host_weights, and generating (scale * weight) hashes for each
|
424
|
-
// host. Since these aren't necessarily whole numbers, we maintain running
|
425
|
-
// sums -- current_hashes and target_hashes -- which allows us to populate the
|
426
|
-
// ring in a mostly stable way.
|
427
|
-
absl::InlinedVector<char, 196> hash_key_buffer;
|
428
|
-
double current_hashes = 0.0;
|
429
|
-
double target_hashes = 0.0;
|
430
|
-
uint64_t min_hashes_per_host = ring_size;
|
431
|
-
uint64_t max_hashes_per_host = 0;
|
432
|
-
for (size_t i = 0; i < num_subchannels; ++i) {
|
433
|
-
const std::string& address_string = address_weights[i].address;
|
434
|
-
hash_key_buffer.assign(address_string.begin(), address_string.end());
|
435
|
-
hash_key_buffer.emplace_back('_');
|
436
|
-
auto offset_start = hash_key_buffer.end();
|
437
|
-
target_hashes += scale * address_weights[i].normalized_weight;
|
438
|
-
size_t count = 0;
|
439
|
-
while (current_hashes < target_hashes) {
|
440
|
-
const std::string count_str = absl::StrCat(count);
|
441
|
-
hash_key_buffer.insert(offset_start, count_str.begin(), count_str.end());
|
442
|
-
absl::string_view hash_key(hash_key_buffer.data(),
|
443
|
-
hash_key_buffer.size());
|
444
|
-
const uint64_t hash = XXH64(hash_key.data(), hash_key.size(), 0);
|
445
|
-
ring_.push_back({hash, subchannel_list_->subchannel(i)});
|
446
|
-
++count;
|
447
|
-
++current_hashes;
|
448
|
-
hash_key_buffer.erase(offset_start, hash_key_buffer.end());
|
449
|
-
}
|
450
|
-
min_hashes_per_host =
|
451
|
-
std::min(static_cast<uint64_t>(i), min_hashes_per_host);
|
452
|
-
max_hashes_per_host =
|
453
|
-
std::max(static_cast<uint64_t>(i), max_hashes_per_host);
|
454
|
-
}
|
455
|
-
std::sort(ring_.begin(), ring_.end(),
|
456
|
-
[](const Entry& lhs, const Entry& rhs) -> bool {
|
457
|
-
return lhs.hash < rhs.hash;
|
458
|
-
});
|
459
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)) {
|
460
|
-
gpr_log(GPR_INFO,
|
461
|
-
"[RH %p picker %p] created ring from subchannel_list=%p "
|
462
|
-
"with %" PRIuPTR " ring entries",
|
463
|
-
parent, this, subchannel_list_.get(), ring_.size());
|
464
|
-
}
|
465
|
-
}
|
466
|
-
|
467
348
|
//
|
468
349
|
// RingHash::Picker
|
469
350
|
//
|
@@ -477,7 +358,7 @@ RingHash::PickResult RingHash::Picker::Pick(PickArgs args) {
|
|
477
358
|
return PickResult::Fail(
|
478
359
|
absl::InternalError("ring hash value is not a number"));
|
479
360
|
}
|
480
|
-
const
|
361
|
+
const auto& ring = subchannel_list_->ring();
|
481
362
|
// Ported from https://github.com/RJ/ketama/blob/master/libketama/ketama.c
|
482
363
|
// (ketama_get_server) NOTE: The algorithm depends on using signed integers
|
483
364
|
// for lowp, highp, and first_index. Do not change them!
|
@@ -510,7 +391,9 @@ RingHash::PickResult RingHash::Picker::Pick(PickArgs args) {
|
|
510
391
|
[&](RefCountedPtr<SubchannelInterface> subchannel) {
|
511
392
|
if (subchannel_connection_attempter == nullptr) {
|
512
393
|
subchannel_connection_attempter =
|
513
|
-
MakeOrphanable<SubchannelConnectionAttempter>(
|
394
|
+
MakeOrphanable<SubchannelConnectionAttempter>(
|
395
|
+
subchannel_list_->Ref(DEBUG_LOCATION,
|
396
|
+
"SubchannelConnectionAttempter"));
|
514
397
|
}
|
515
398
|
subchannel_connection_attempter->AddSubchannel(std::move(subchannel));
|
516
399
|
};
|
@@ -535,7 +418,7 @@ RingHash::PickResult RingHash::Picker::Pick(PickArgs args) {
|
|
535
418
|
bool found_second_subchannel = false;
|
536
419
|
bool found_first_non_failed = false;
|
537
420
|
for (size_t i = 1; i < ring.size(); ++i) {
|
538
|
-
const
|
421
|
+
const auto& entry = ring[(first_index + i) % ring.size()];
|
539
422
|
if (entry.subchannel == ring[first_index].subchannel) {
|
540
423
|
continue;
|
541
424
|
}
|
@@ -579,6 +462,117 @@ RingHash::PickResult RingHash::Picker::Pick(PickArgs args) {
|
|
579
462
|
// RingHash::RingHashSubchannelList
|
580
463
|
//
|
581
464
|
|
465
|
+
RingHash::RingHashSubchannelList::RingHashSubchannelList(
|
466
|
+
RingHash* policy, ServerAddressList addresses, const ChannelArgs& args)
|
467
|
+
: SubchannelList(policy,
|
468
|
+
(GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)
|
469
|
+
? "RingHashSubchannelList"
|
470
|
+
: nullptr),
|
471
|
+
std::move(addresses), policy->channel_control_helper(),
|
472
|
+
args),
|
473
|
+
num_idle_(num_subchannels()) {
|
474
|
+
// Need to maintain a ref to the LB policy as long as we maintain
|
475
|
+
// any references to subchannels, since the subchannels'
|
476
|
+
// pollset_sets will include the LB policy's pollset_set.
|
477
|
+
policy->Ref(DEBUG_LOCATION, "subchannel_list").release();
|
478
|
+
// Construct the ring.
|
479
|
+
// Store the weights while finding the sum.
|
480
|
+
struct AddressWeight {
|
481
|
+
std::string address;
|
482
|
+
// Default weight is 1 for the cases where a weight is not provided,
|
483
|
+
// each occurrence of the address will be counted a weight value of 1.
|
484
|
+
uint32_t weight = 1;
|
485
|
+
double normalized_weight;
|
486
|
+
};
|
487
|
+
std::vector<AddressWeight> address_weights;
|
488
|
+
size_t sum = 0;
|
489
|
+
address_weights.reserve(num_subchannels());
|
490
|
+
for (size_t i = 0; i < num_subchannels(); ++i) {
|
491
|
+
RingHashSubchannelData* sd = subchannel(i);
|
492
|
+
const ServerAddressWeightAttribute* weight_attribute = static_cast<
|
493
|
+
const ServerAddressWeightAttribute*>(sd->address().GetAttribute(
|
494
|
+
ServerAddressWeightAttribute::kServerAddressWeightAttributeKey));
|
495
|
+
AddressWeight address_weight;
|
496
|
+
address_weight.address =
|
497
|
+
grpc_sockaddr_to_string(&sd->address().address(), false).value();
|
498
|
+
// Weight should never be zero, but ignore it just in case, since
|
499
|
+
// that value would screw up the ring-building algorithm.
|
500
|
+
if (weight_attribute != nullptr && weight_attribute->weight() > 0) {
|
501
|
+
address_weight.weight = weight_attribute->weight();
|
502
|
+
}
|
503
|
+
sum += address_weight.weight;
|
504
|
+
address_weights.push_back(std::move(address_weight));
|
505
|
+
}
|
506
|
+
// Calculating normalized weights and find min and max.
|
507
|
+
double min_normalized_weight = 1.0;
|
508
|
+
double max_normalized_weight = 0.0;
|
509
|
+
for (auto& address : address_weights) {
|
510
|
+
address.normalized_weight = static_cast<double>(address.weight) / sum;
|
511
|
+
min_normalized_weight =
|
512
|
+
std::min(address.normalized_weight, min_normalized_weight);
|
513
|
+
max_normalized_weight =
|
514
|
+
std::max(address.normalized_weight, max_normalized_weight);
|
515
|
+
}
|
516
|
+
// Scale up the number of hashes per host such that the least-weighted host
|
517
|
+
// gets a whole number of hashes on the ring. Other hosts might not end up
|
518
|
+
// with whole numbers, and that's fine (the ring-building algorithm below can
|
519
|
+
// handle this). This preserves the original implementation's behavior: when
|
520
|
+
// weights aren't provided, all hosts should get an equal number of hashes. In
|
521
|
+
// the case where this number exceeds the max_ring_size, it's scaled back down
|
522
|
+
// to fit.
|
523
|
+
const size_t min_ring_size = policy->config_->min_ring_size();
|
524
|
+
const size_t max_ring_size = policy->config_->max_ring_size();
|
525
|
+
const double scale = std::min(
|
526
|
+
std::ceil(min_normalized_weight * min_ring_size) / min_normalized_weight,
|
527
|
+
static_cast<double>(max_ring_size));
|
528
|
+
// Reserve memory for the entire ring up front.
|
529
|
+
const size_t ring_size = std::ceil(scale);
|
530
|
+
ring_.reserve(ring_size);
|
531
|
+
// Populate the hash ring by walking through the (host, weight) pairs in
|
532
|
+
// normalized_host_weights, and generating (scale * weight) hashes for each
|
533
|
+
// host. Since these aren't necessarily whole numbers, we maintain running
|
534
|
+
// sums -- current_hashes and target_hashes -- which allows us to populate the
|
535
|
+
// ring in a mostly stable way.
|
536
|
+
absl::InlinedVector<char, 196> hash_key_buffer;
|
537
|
+
double current_hashes = 0.0;
|
538
|
+
double target_hashes = 0.0;
|
539
|
+
uint64_t min_hashes_per_host = ring_size;
|
540
|
+
uint64_t max_hashes_per_host = 0;
|
541
|
+
for (size_t i = 0; i < num_subchannels(); ++i) {
|
542
|
+
const std::string& address_string = address_weights[i].address;
|
543
|
+
hash_key_buffer.assign(address_string.begin(), address_string.end());
|
544
|
+
hash_key_buffer.emplace_back('_');
|
545
|
+
auto offset_start = hash_key_buffer.end();
|
546
|
+
target_hashes += scale * address_weights[i].normalized_weight;
|
547
|
+
size_t count = 0;
|
548
|
+
while (current_hashes < target_hashes) {
|
549
|
+
const std::string count_str = absl::StrCat(count);
|
550
|
+
hash_key_buffer.insert(offset_start, count_str.begin(), count_str.end());
|
551
|
+
absl::string_view hash_key(hash_key_buffer.data(),
|
552
|
+
hash_key_buffer.size());
|
553
|
+
const uint64_t hash = XXH64(hash_key.data(), hash_key.size(), 0);
|
554
|
+
ring_.push_back({hash, subchannel(i)});
|
555
|
+
++count;
|
556
|
+
++current_hashes;
|
557
|
+
hash_key_buffer.erase(offset_start, hash_key_buffer.end());
|
558
|
+
}
|
559
|
+
min_hashes_per_host =
|
560
|
+
std::min(static_cast<uint64_t>(i), min_hashes_per_host);
|
561
|
+
max_hashes_per_host =
|
562
|
+
std::max(static_cast<uint64_t>(i), max_hashes_per_host);
|
563
|
+
}
|
564
|
+
std::sort(ring_.begin(), ring_.end(),
|
565
|
+
[](const RingHashSubchannelList::RingEntry& lhs,
|
566
|
+
const RingHashSubchannelList::RingEntry& rhs) -> bool {
|
567
|
+
return lhs.hash < rhs.hash;
|
568
|
+
});
|
569
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)) {
|
570
|
+
gpr_log(GPR_INFO,
|
571
|
+
"[RH %p] created subchannel list %p with %" PRIuPTR " ring entries",
|
572
|
+
policy, this, ring_.size());
|
573
|
+
}
|
574
|
+
}
|
575
|
+
|
582
576
|
void RingHash::RingHashSubchannelList::UpdateStateCountersLocked(
|
583
577
|
grpc_connectivity_state old_state, grpc_connectivity_state new_state) {
|
584
578
|
if (old_state == GRPC_CHANNEL_IDLE) {
|
@@ -667,8 +661,7 @@ void RingHash::RingHashSubchannelList::UpdateRingHashConnectivityStateLocked(
|
|
667
661
|
// Note that we use our own picker regardless of connectivity state.
|
668
662
|
p->channel_control_helper()->UpdateState(
|
669
663
|
state, status,
|
670
|
-
absl::make_unique<Picker>(
|
671
|
-
ring_));
|
664
|
+
absl::make_unique<Picker>(Ref(DEBUG_LOCATION, "RingHashPicker")));
|
672
665
|
// While the ring_hash policy is reporting TRANSIENT_FAILURE, it will
|
673
666
|
// not be getting any pick requests from the priority policy.
|
674
667
|
// However, because the ring_hash policy does not attempt to
|
@@ -807,7 +800,7 @@ void RingHash::ResetBackoffLocked() {
|
|
807
800
|
}
|
808
801
|
}
|
809
802
|
|
810
|
-
|
803
|
+
absl::Status RingHash::UpdateLocked(UpdateArgs args) {
|
811
804
|
config_ = std::move(args.config);
|
812
805
|
ServerAddressList addresses;
|
813
806
|
if (args.addresses.ok()) {
|
@@ -821,17 +814,18 @@ void RingHash::UpdateLocked(UpdateArgs args) {
|
|
821
814
|
gpr_log(GPR_INFO, "[RH %p] received update with addresses error: %s",
|
822
815
|
this, args.addresses.status().ToString().c_str());
|
823
816
|
}
|
824
|
-
// If we already have a subchannel list, then
|
825
|
-
//
|
826
|
-
if (subchannel_list_ != nullptr) return;
|
817
|
+
// If we already have a subchannel list, then keep using the existing
|
818
|
+
// list, but still report back that the update was not accepted.
|
819
|
+
if (subchannel_list_ != nullptr) return args.addresses.status();
|
827
820
|
}
|
828
821
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace) &&
|
829
822
|
latest_pending_subchannel_list_ != nullptr) {
|
830
823
|
gpr_log(GPR_INFO, "[RH %p] replacing latest pending subchannel list %p",
|
831
824
|
this, latest_pending_subchannel_list_.get());
|
832
825
|
}
|
833
|
-
latest_pending_subchannel_list_ =
|
834
|
-
this, std::move(addresses),
|
826
|
+
latest_pending_subchannel_list_ = MakeRefCounted<RingHashSubchannelList>(
|
827
|
+
this, std::move(addresses), args.args);
|
828
|
+
latest_pending_subchannel_list_->StartWatchingLocked();
|
835
829
|
// If we have no existing list or the new list is empty, immediately
|
836
830
|
// promote the new list.
|
837
831
|
// Otherwise, do nothing; the new list will be promoted when the
|
@@ -855,12 +849,13 @@ void RingHash::UpdateLocked(UpdateArgs args) {
|
|
855
849
|
channel_control_helper()->UpdateState(
|
856
850
|
GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
857
851
|
absl::make_unique<TransientFailurePicker>(status));
|
858
|
-
|
859
|
-
// Otherwise, report IDLE.
|
860
|
-
subchannel_list_->UpdateRingHashConnectivityStateLocked(
|
861
|
-
/*index=*/0, /*connection_attempt_complete=*/false, absl::OkStatus());
|
852
|
+
return status;
|
862
853
|
}
|
854
|
+
// Otherwise, report IDLE.
|
855
|
+
subchannel_list_->UpdateRingHashConnectivityStateLocked(
|
856
|
+
/*index=*/0, /*connection_attempt_complete=*/false, absl::OkStatus());
|
863
857
|
}
|
858
|
+
return absl::OkStatus();
|
864
859
|
}
|
865
860
|
|
866
861
|
//
|
@@ -874,31 +869,23 @@ class RingHashFactory : public LoadBalancingPolicyFactory {
|
|
874
869
|
return MakeOrphanable<RingHash>(std::move(args));
|
875
870
|
}
|
876
871
|
|
877
|
-
|
872
|
+
absl::string_view name() const override { return kRingHash; }
|
878
873
|
|
879
|
-
RefCountedPtr<LoadBalancingPolicy::Config
|
880
|
-
|
881
|
-
|
882
|
-
|
883
|
-
|
884
|
-
|
885
|
-
|
886
|
-
return MakeRefCounted<RingHashLbConfig>(min_ring_size, max_ring_size);
|
887
|
-
} else {
|
888
|
-
*error = GRPC_ERROR_CREATE_FROM_VECTOR(
|
889
|
-
"ring_hash_experimental LB policy config", &error_list);
|
890
|
-
return nullptr;
|
891
|
-
}
|
874
|
+
absl::StatusOr<RefCountedPtr<LoadBalancingPolicy::Config>>
|
875
|
+
ParseLoadBalancingConfig(const Json& json) const override {
|
876
|
+
auto config = LoadFromJson<RingHashConfig>(
|
877
|
+
json, JsonArgs(), "errors validating ring_hash LB policy config");
|
878
|
+
if (!config.ok()) return config.status();
|
879
|
+
return MakeRefCounted<RingHashLbConfig>(config->min_ring_size,
|
880
|
+
config->max_ring_size);
|
892
881
|
}
|
893
882
|
};
|
894
883
|
|
895
884
|
} // namespace
|
896
885
|
|
897
|
-
void
|
898
|
-
|
886
|
+
void RegisterRingHashLbPolicy(CoreConfiguration::Builder* builder) {
|
887
|
+
builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
|
899
888
|
absl::make_unique<RingHashFactory>());
|
900
889
|
}
|
901
890
|
|
902
|
-
void GrpcLbPolicyRingHashShutdown() {}
|
903
|
-
|
904
891
|
} // namespace grpc_core
|