grpc 1.47.0 → 1.48.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +105 -47
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/event_engine.h +20 -11
- data/include/grpc/event_engine/slice_buffer.h +8 -2
- data/include/grpc/grpc.h +3 -3
- data/include/grpc/impl/codegen/compression_types.h +2 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -1
- data/include/grpc/impl/codegen/gpr_types.h +2 -1
- data/include/grpc/impl/codegen/grpc_types.h +2 -1
- data/include/grpc/impl/codegen/port_platform.h +6 -3
- data/src/core/ext/filters/census/grpc_context.cc +3 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
- data/src/core/ext/filters/client_channel/client_channel.h +19 -4
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
- data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
- data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
- data/src/core/ext/filters/client_channel/subchannel.h +6 -22
- data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
- data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
- data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
- data/src/core/ext/filters/http/client_authority_filter.h +5 -2
- data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
- data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
- data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
- data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
- data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
- data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
- data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
- data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
- data/src/core/ext/xds/certificate_provider_factory.h +6 -1
- data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
- data/src/core/ext/xds/certificate_provider_registry.h +3 -1
- data/src/core/ext/xds/certificate_provider_store.cc +2 -0
- data/src/core/ext/xds/certificate_provider_store.h +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
- data/src/core/ext/xds/upb_utils.h +1 -2
- data/src/core/ext/xds/xds_api.cc +16 -18
- data/src/core/ext/xds/xds_api.h +12 -5
- data/src/core/ext/xds/xds_bootstrap.cc +37 -24
- data/src/core/ext/xds/xds_bootstrap.h +9 -11
- data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
- data/src/core/ext/xds/xds_certificate_provider.h +16 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
- data/src/core/ext/xds/xds_client.cc +71 -22
- data/src/core/ext/xds/xds_client.h +17 -3
- data/src/core/ext/xds/xds_client_stats.cc +3 -4
- data/src/core/ext/xds/xds_client_stats.h +4 -3
- data/src/core/ext/xds/xds_cluster.cc +21 -10
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
- data/src/core/ext/xds/xds_common_types.cc +36 -22
- data/src/core/ext/xds/xds_common_types.h +12 -4
- data/src/core/ext/xds/xds_endpoint.cc +25 -15
- data/src/core/ext/xds/xds_endpoint.h +13 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
- data/src/core/ext/xds/xds_http_filters.cc +7 -0
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
- data/src/core/ext/xds/xds_listener.cc +51 -33
- data/src/core/ext/xds/xds_listener.h +10 -1
- data/src/core/ext/xds/xds_resource_type.h +3 -3
- data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
- data/src/core/ext/xds/xds_route_config.cc +56 -28
- data/src/core/ext/xds/xds_route_config.h +11 -2
- data/src/core/ext/xds/xds_routing.cc +16 -0
- data/src/core/ext/xds/xds_routing.h +7 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
- data/src/core/lib/address_utils/parse_address.cc +5 -8
- data/src/core/lib/address_utils/parse_address.h +3 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
- data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
- data/src/core/lib/avl/avl.h +3 -3
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/backoff/backoff.h +1 -1
- data/src/core/lib/channel/call_tracer.h +3 -3
- data/src/core/lib/channel/channel_args.h +1 -0
- data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +4 -4
- data/src/core/lib/channel/channel_stack.h +1 -11
- data/src/core/lib/channel/channel_stack_builder.h +2 -5
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
- data/src/core/lib/channel/channelz.cc +2 -1
- data/src/core/lib/channel/channelz.h +2 -3
- data/src/core/lib/channel/channelz_registry.cc +4 -5
- data/src/core/lib/channel/connected_channel.cc +1 -0
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +11 -5
- data/src/core/lib/channel/promise_based_filter.h +2 -0
- data/src/core/lib/compression/compression.cc +6 -1
- data/src/core/lib/compression/compression_internal.cc +3 -6
- data/src/core/lib/compression/compression_internal.h +3 -2
- data/src/core/lib/compression/message_compress.cc +3 -1
- data/src/core/lib/compression/message_compress.h +2 -3
- data/src/core/lib/debug/stats.cc +9 -9
- data/src/core/lib/debug/stats.h +2 -1
- data/src/core/lib/debug/stats_data.cc +2 -1
- data/src/core/lib/debug/stats_data.h +0 -4
- data/src/core/lib/debug/trace.h +13 -12
- data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
- data/src/core/lib/event_engine/event_engine.cc +24 -19
- data/src/core/lib/event_engine/event_engine_factory.h +2 -2
- data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
- data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
- data/src/core/lib/event_engine/promise.h +69 -0
- data/src/core/lib/gpr/time_posix.cc +6 -9
- data/src/core/lib/gpr/time_windows.cc +10 -7
- data/src/core/lib/gprpp/manual_constructor.h +0 -67
- data/src/core/lib/gprpp/status_helper.cc +44 -30
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +4 -0
- data/src/core/lib/http/format_request.cc +5 -4
- data/src/core/lib/http/format_request.h +1 -1
- data/src/core/lib/http/httpcli.cc +18 -12
- data/src/core/lib/http/httpcli.h +19 -3
- data/src/core/lib/http/httpcli_security_connector.cc +16 -4
- data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
- data/src/core/lib/http/parser.cc +6 -7
- data/src/core/lib/http/parser.h +3 -0
- data/src/core/lib/iomgr/call_combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
- data/src/core/lib/iomgr/error.cc +11 -9
- data/src/core/lib/iomgr/error.h +9 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
- data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
- data/src/core/lib/iomgr/ev_posix.cc +54 -92
- data/src/core/lib/iomgr/ev_posix.h +5 -3
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr.cc +7 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/tcp_client.cc +12 -7
- data/src/core/lib/iomgr/tcp_client.h +24 -13
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
- data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
- data/src/core/lib/iomgr/tcp_posix.cc +91 -29
- data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
- data/src/core/lib/iomgr/tcp_windows.cc +5 -5
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
- data/src/core/lib/iomgr/work_serializer.h +2 -3
- data/src/core/lib/matchers/matchers.cc +6 -3
- data/src/core/lib/matchers/matchers.h +2 -0
- data/src/core/lib/promise/activity.cc +0 -1
- data/src/core/lib/promise/activity.h +7 -13
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/sleep.cc +36 -31
- data/src/core/lib/promise/sleep.h +25 -25
- data/src/core/lib/resolver/resolver.cc +5 -0
- data/src/core/lib/resolver/resolver.h +3 -0
- data/src/core/lib/resolver/resolver_factory.h +5 -2
- data/src/core/lib/resolver/resolver_registry.cc +2 -9
- data/src/core/lib/resolver/resolver_registry.h +12 -1
- data/src/core/lib/resolver/server_address.cc +8 -0
- data/src/core/lib/resolver/server_address.h +9 -2
- data/src/core/lib/resource_quota/memory_quota.cc +18 -60
- data/src/core/lib/resource_quota/memory_quota.h +11 -25
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
- data/src/core/lib/security/authorization/evaluate_args.h +6 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
- data/src/core/lib/security/authorization/matchers.cc +9 -1
- data/src/core/lib/security/authorization/matchers.h +7 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
- data/src/core/lib/security/authorization/rbac_policy.h +7 -0
- data/src/core/lib/security/context/security_context.cc +5 -2
- data/src/core/lib/security/context/security_context.h +14 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
- data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
- data/src/core/lib/security/credentials/call_creds_util.h +1 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
- data/src/core/lib/security/credentials/credentials.cc +4 -8
- data/src/core/lib/security/credentials/credentials.h +10 -8
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
- data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
- data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
- 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 +9 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
- data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
- data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
- data/src/core/lib/security/security_connector/security_connector.cc +20 -18
- data/src/core/lib/security/security_connector/security_connector.h +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
- data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
- data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
- data/src/core/lib/security/transport/secure_endpoint.h +4 -3
- data/src/core/lib/security/transport/security_handshaker.cc +44 -11
- data/src/core/lib/security/transport/security_handshaker.h +4 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
- data/src/core/lib/security/util/json_util.cc +3 -2
- data/src/core/lib/security/util/json_util.h +0 -2
- data/src/core/lib/service_config/service_config_call_data.h +2 -1
- data/src/core/lib/service_config/service_config_impl.cc +6 -6
- data/src/core/lib/service_config/service_config_impl.h +1 -3
- data/src/core/lib/service_config/service_config_parser.cc +2 -4
- data/src/core/lib/slice/slice_buffer.cc +30 -1
- data/src/core/lib/slice/slice_buffer.h +37 -6
- data/src/core/lib/slice/slice_string_helpers.cc +0 -20
- data/src/core/lib/slice/slice_string_helpers.h +0 -4
- data/src/core/lib/surface/call.cc +53 -115
- data/src/core/lib/surface/call.h +5 -1
- data/src/core/lib/surface/channel.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +15 -14
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +0 -1
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +14 -8
- data/src/core/lib/surface/server.h +4 -1
- data/src/core/lib/surface/validate_metadata.cc +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +13 -7
- data/src/core/lib/transport/handshaker.cc +3 -3
- data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
- data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
- data/src/core/lib/transport/transport.cc +0 -3
- data/src/core/lib/transport/transport.h +20 -14
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +1 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -9
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
- data/src/core/tsi/fake_transport_security.cc +13 -1
- data/src/core/tsi/fake_transport_security.h +6 -0
- data/src/core/tsi/ssl_transport_security.cc +1 -1
- data/src/core/tsi/transport_security_grpc.cc +3 -2
- data/src/core/tsi/transport_security_grpc.h +5 -2
- data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -0
- data/src/ruby/ext/grpc/extconf.rb +49 -18
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
- data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +182 -41
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
- data/third_party/abseil-cpp/absl/status/status.cc +174 -2
- data/third_party/abseil-cpp/absl/status/status.h +22 -12
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
- data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
- data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/time.h +16 -12
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +2 -1
- metadata +39 -15
- data/src/core/lib/slice/slice_split.cc +0 -103
- data/src/core/lib/slice/slice_split.h +0 -36
- data/src/core/lib/transport/byte_stream.cc +0 -165
- data/src/core/lib/transport/byte_stream.h +0 -170
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -25,10 +25,12 @@
|
|
25
25
|
#include <map>
|
26
26
|
#include <memory>
|
27
27
|
#include <string>
|
28
|
+
#include <type_traits>
|
28
29
|
#include <utility>
|
29
30
|
#include <vector>
|
30
31
|
|
31
32
|
#include "absl/base/attributes.h"
|
33
|
+
#include "absl/base/thread_annotations.h"
|
32
34
|
#include "absl/container/inlined_vector.h"
|
33
35
|
#include "absl/memory/memory.h"
|
34
36
|
#include "absl/status/status.h"
|
@@ -45,6 +47,7 @@
|
|
45
47
|
#include <grpc/impl/codegen/grpc_types.h>
|
46
48
|
#include <grpc/support/log.h>
|
47
49
|
|
50
|
+
#include "src/core/ext/filters/client_channel/client_channel.h"
|
48
51
|
#include "src/core/ext/filters/client_channel/lb_policy.h"
|
49
52
|
#include "src/core/ext/filters/client_channel/lb_policy/subchannel_list.h"
|
50
53
|
#include "src/core/ext/filters/client_channel/lb_policy_factory.h"
|
@@ -57,6 +60,8 @@
|
|
57
60
|
#include "src/core/lib/gprpp/orphanable.h"
|
58
61
|
#include "src/core/lib/gprpp/ref_counted.h"
|
59
62
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
63
|
+
#include "src/core/lib/gprpp/sync.h"
|
64
|
+
#include "src/core/lib/gprpp/unique_type_name.h"
|
60
65
|
#include "src/core/lib/iomgr/closure.h"
|
61
66
|
#include "src/core/lib/iomgr/error.h"
|
62
67
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
@@ -67,9 +72,13 @@
|
|
67
72
|
|
68
73
|
namespace grpc_core {
|
69
74
|
|
70
|
-
const char* kRequestRingHashAttribute = "request_ring_hash";
|
71
75
|
TraceFlag grpc_lb_ring_hash_trace(false, "ring_hash_lb");
|
72
76
|
|
77
|
+
UniqueTypeName RequestHashAttributeName() {
|
78
|
+
static UniqueTypeName::Factory kFactory("request_hash");
|
79
|
+
return kFactory.Create();
|
80
|
+
}
|
81
|
+
|
73
82
|
// Helper Parser method
|
74
83
|
void ParseRingHashLbConfig(const Json& json, size_t* min_ring_size,
|
75
84
|
size_t* max_ring_size,
|
@@ -164,22 +173,23 @@ class RingHash : public LoadBalancingPolicy {
|
|
164
173
|
: SubchannelData(subchannel_list, address, std::move(subchannel)),
|
165
174
|
address_(address) {}
|
166
175
|
|
176
|
+
const ServerAddress& address() const { return address_; }
|
177
|
+
|
167
178
|
grpc_connectivity_state GetConnectivityState() const {
|
168
|
-
return
|
179
|
+
return connectivity_state_.load(std::memory_order_relaxed);
|
169
180
|
}
|
170
181
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
void UpdateConnectivityStateLocked(
|
176
|
-
grpc_connectivity_state connectivity_state);
|
182
|
+
absl::Status GetConnectivityStatus() const {
|
183
|
+
MutexLock lock(&mu_);
|
184
|
+
return connectivity_status_;
|
185
|
+
}
|
177
186
|
|
178
187
|
private:
|
179
188
|
// Performs connectivity state updates that need to be done only
|
180
189
|
// after we have started watching.
|
181
190
|
void ProcessConnectivityChangeLocked(
|
182
|
-
grpc_connectivity_state
|
191
|
+
absl::optional<grpc_connectivity_state> old_state,
|
192
|
+
grpc_connectivity_state new_state) override;
|
183
193
|
|
184
194
|
ServerAddress address_;
|
185
195
|
|
@@ -188,12 +198,11 @@ class RingHash : public LoadBalancingPolicy {
|
|
188
198
|
// subchannel in some cases; for example, once this is set to
|
189
199
|
// TRANSIENT_FAILURE, we do not change it again until we get READY,
|
190
200
|
// so we skip any interim stops in CONNECTING.
|
191
|
-
grpc_connectivity_state last_connectivity_state_ = GRPC_CHANNEL_SHUTDOWN;
|
192
|
-
|
193
|
-
// Connectivity state seen by picker.
|
194
201
|
// Uses an atomic so that it can be accessed outside of the WorkSerializer.
|
195
|
-
std::atomic<grpc_connectivity_state>
|
196
|
-
|
202
|
+
std::atomic<grpc_connectivity_state> connectivity_state_{GRPC_CHANNEL_IDLE};
|
203
|
+
|
204
|
+
mutable Mutex mu_;
|
205
|
+
absl::Status connectivity_status_ ABSL_GUARDED_BY(&mu_);
|
197
206
|
};
|
198
207
|
|
199
208
|
// A list of subchannels.
|
@@ -207,7 +216,9 @@ class RingHash : public LoadBalancingPolicy {
|
|
207
216
|
? "RingHashSubchannelList"
|
208
217
|
: nullptr),
|
209
218
|
std::move(addresses), policy->channel_control_helper(),
|
210
|
-
args)
|
219
|
+
args),
|
220
|
+
num_idle_(num_subchannels()),
|
221
|
+
ring_(MakeRefCounted<Ring>(policy, Ref(DEBUG_LOCATION, "Ring"))) {
|
211
222
|
// Need to maintain a ref to the LB policy as long as we maintain
|
212
223
|
// any references to subchannels, since the subchannels'
|
213
224
|
// pollset_sets will include the LB policy's pollset_set.
|
@@ -215,13 +226,11 @@ class RingHash : public LoadBalancingPolicy {
|
|
215
226
|
}
|
216
227
|
|
217
228
|
~RingHashSubchannelList() override {
|
229
|
+
ring_.reset(DEBUG_LOCATION, "~RingHashSubchannelList");
|
218
230
|
RingHash* p = static_cast<RingHash*>(policy());
|
219
231
|
p->Unref(DEBUG_LOCATION, "subchannel_list");
|
220
232
|
}
|
221
233
|
|
222
|
-
// Starts watching the subchannels in this list.
|
223
|
-
void StartWatchingLocked();
|
224
|
-
|
225
234
|
// Updates the counters of subchannels in each state when a
|
226
235
|
// subchannel transitions from old_state to new_state.
|
227
236
|
void UpdateStateCountersLocked(grpc_connectivity_state old_state,
|
@@ -234,21 +243,39 @@ class RingHash : public LoadBalancingPolicy {
|
|
234
243
|
// UpdateRingHashConnectivityStateLocked().
|
235
244
|
// connection_attempt_complete is true if the subchannel just
|
236
245
|
// finished a connection attempt.
|
237
|
-
void UpdateRingHashConnectivityStateLocked(
|
238
|
-
|
239
|
-
|
240
|
-
// Create a new ring from this subchannel list.
|
241
|
-
RefCountedPtr<Ring> MakeRing();
|
246
|
+
void UpdateRingHashConnectivityStateLocked(size_t index,
|
247
|
+
bool connection_attempt_complete,
|
248
|
+
absl::Status status);
|
242
249
|
|
243
250
|
private:
|
244
|
-
|
251
|
+
bool AllSubchannelsSeenInitialState() {
|
252
|
+
for (size_t i = 0; i < num_subchannels(); ++i) {
|
253
|
+
if (!subchannel(i)->connectivity_state().has_value()) return false;
|
254
|
+
}
|
255
|
+
return true;
|
256
|
+
}
|
257
|
+
|
258
|
+
void ShutdownLocked() override {
|
259
|
+
ring_.reset(DEBUG_LOCATION, "RingHashSubchannelList::ShutdownLocked()");
|
260
|
+
SubchannelList::ShutdownLocked();
|
261
|
+
}
|
262
|
+
|
263
|
+
size_t num_idle_;
|
245
264
|
size_t num_ready_ = 0;
|
246
265
|
size_t num_connecting_ = 0;
|
247
266
|
size_t num_transient_failure_ = 0;
|
248
267
|
|
268
|
+
RefCountedPtr<Ring> ring_;
|
269
|
+
|
249
270
|
// The index of the subchannel currently doing an internally
|
250
271
|
// triggered connection attempt, if any.
|
251
272
|
absl::optional<size_t> internally_triggered_connection_index_;
|
273
|
+
|
274
|
+
// TODO(roth): If we ever change the helper UpdateState() API to not
|
275
|
+
// need the status reported for TRANSIENT_FAILURE state (because
|
276
|
+
// it's not currently actually used for anything outside of the picker),
|
277
|
+
// then we will no longer need this data member.
|
278
|
+
absl::Status last_failure_;
|
252
279
|
};
|
253
280
|
|
254
281
|
class Ring : public RefCounted<Ring> {
|
@@ -313,7 +340,7 @@ class RingHash : public LoadBalancingPolicy {
|
|
313
340
|
|
314
341
|
RefCountedPtr<RingHash> ring_hash_lb_;
|
315
342
|
grpc_closure closure_;
|
316
|
-
|
343
|
+
std::vector<RefCountedPtr<SubchannelInterface>> subchannels_;
|
317
344
|
};
|
318
345
|
|
319
346
|
RefCountedPtr<RingHash> parent_;
|
@@ -327,11 +354,9 @@ class RingHash : public LoadBalancingPolicy {
|
|
327
354
|
|
328
355
|
// list of subchannels.
|
329
356
|
OrphanablePtr<RingHashSubchannelList> subchannel_list_;
|
357
|
+
OrphanablePtr<RingHashSubchannelList> latest_pending_subchannel_list_;
|
330
358
|
// indicating if we are shutting down.
|
331
359
|
bool shutdown_ = false;
|
332
|
-
|
333
|
-
// Current ring.
|
334
|
-
RefCountedPtr<Ring> ring_;
|
335
360
|
};
|
336
361
|
|
337
362
|
//
|
@@ -361,8 +386,9 @@ RingHash::Ring::Ring(RingHash* parent,
|
|
361
386
|
AddressWeight address_weight;
|
362
387
|
address_weight.address =
|
363
388
|
grpc_sockaddr_to_string(&sd->address().address(), false).value();
|
364
|
-
|
365
|
-
|
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) {
|
366
392
|
address_weight.weight = weight_attribute->weight();
|
367
393
|
}
|
368
394
|
sum += address_weight.weight;
|
@@ -391,7 +417,7 @@ RingHash::Ring::Ring(RingHash* parent,
|
|
391
417
|
std::ceil(min_normalized_weight * min_ring_size) / min_normalized_weight,
|
392
418
|
static_cast<double>(max_ring_size));
|
393
419
|
// Reserve memory for the entire ring up front.
|
394
|
-
const
|
420
|
+
const size_t ring_size = std::ceil(scale);
|
395
421
|
ring_.reserve(ring_size);
|
396
422
|
// Populate the hash ring by walking through the (host, weight) pairs in
|
397
423
|
// normalized_host_weights, and generating (scale * weight) hashes for each
|
@@ -443,23 +469,24 @@ RingHash::Ring::Ring(RingHash* parent,
|
|
443
469
|
//
|
444
470
|
|
445
471
|
RingHash::PickResult RingHash::Picker::Pick(PickArgs args) {
|
446
|
-
auto
|
447
|
-
args.call_state
|
472
|
+
auto* call_state = static_cast<ClientChannel::LoadBalancedCall::LbCallState*>(
|
473
|
+
args.call_state);
|
474
|
+
auto hash = call_state->GetCallAttribute(RequestHashAttributeName());
|
448
475
|
uint64_t h;
|
449
476
|
if (!absl::SimpleAtoi(hash, &h)) {
|
450
477
|
return PickResult::Fail(
|
451
|
-
absl::InternalError("
|
478
|
+
absl::InternalError("ring hash value is not a number"));
|
452
479
|
}
|
453
480
|
const std::vector<Ring::Entry>& ring = ring_->ring();
|
454
481
|
// Ported from https://github.com/RJ/ketama/blob/master/libketama/ketama.c
|
455
482
|
// (ketama_get_server) NOTE: The algorithm depends on using signed integers
|
456
483
|
// for lowp, highp, and first_index. Do not change them!
|
457
|
-
|
458
|
-
|
459
|
-
|
484
|
+
size_t lowp = 0;
|
485
|
+
size_t highp = ring.size();
|
486
|
+
size_t first_index = 0;
|
460
487
|
while (true) {
|
461
488
|
first_index = (lowp + highp) / 2;
|
462
|
-
if (first_index ==
|
489
|
+
if (first_index == ring.size()) {
|
463
490
|
first_index = 0;
|
464
491
|
break;
|
465
492
|
}
|
@@ -543,39 +570,17 @@ RingHash::PickResult RingHash::Picker::Pick(PickArgs args) {
|
|
543
570
|
}
|
544
571
|
}
|
545
572
|
}
|
546
|
-
return PickResult::Fail(absl::UnavailableError(
|
547
|
-
"
|
573
|
+
return PickResult::Fail(absl::UnavailableError(absl::StrCat(
|
574
|
+
"ring hash cannot find a connected subchannel; first failure: ",
|
575
|
+
ring[first_index].subchannel->GetConnectivityStatus().ToString())));
|
548
576
|
}
|
549
577
|
|
550
578
|
//
|
551
579
|
// RingHash::RingHashSubchannelList
|
552
580
|
//
|
553
581
|
|
554
|
-
void RingHash::RingHashSubchannelList::StartWatchingLocked() {
|
555
|
-
GPR_ASSERT(num_subchannels() != 0);
|
556
|
-
// Check current state of each subchannel synchronously.
|
557
|
-
for (size_t i = 0; i < num_subchannels(); ++i) {
|
558
|
-
grpc_connectivity_state state =
|
559
|
-
subchannel(i)->CheckConnectivityStateLocked();
|
560
|
-
subchannel(i)->UpdateConnectivityStateLocked(state);
|
561
|
-
}
|
562
|
-
// Start connectivity watch for each subchannel.
|
563
|
-
for (size_t i = 0; i < num_subchannels(); i++) {
|
564
|
-
if (subchannel(i)->subchannel() != nullptr) {
|
565
|
-
subchannel(i)->StartConnectivityWatchLocked();
|
566
|
-
}
|
567
|
-
}
|
568
|
-
// Send updated state to parent based on reported subchannel states.
|
569
|
-
// Pretend we're getting this update from the last subchannel, so that
|
570
|
-
// if we need to proactively start connecting, we'll start from the
|
571
|
-
// first subchannel.
|
572
|
-
UpdateRingHashConnectivityStateLocked(num_subchannels() - 1,
|
573
|
-
/*connection_attempt_complete=*/false);
|
574
|
-
}
|
575
|
-
|
576
582
|
void RingHash::RingHashSubchannelList::UpdateStateCountersLocked(
|
577
583
|
grpc_connectivity_state old_state, grpc_connectivity_state new_state) {
|
578
|
-
GPR_ASSERT(new_state != GRPC_CHANNEL_SHUTDOWN);
|
579
584
|
if (old_state == GRPC_CHANNEL_IDLE) {
|
580
585
|
GPR_ASSERT(num_idle_ > 0);
|
581
586
|
--num_idle_;
|
@@ -589,6 +594,7 @@ void RingHash::RingHashSubchannelList::UpdateStateCountersLocked(
|
|
589
594
|
GPR_ASSERT(num_transient_failure_ > 0);
|
590
595
|
--num_transient_failure_;
|
591
596
|
}
|
597
|
+
GPR_ASSERT(new_state != GRPC_CHANNEL_SHUTDOWN);
|
592
598
|
if (new_state == GRPC_CHANNEL_IDLE) {
|
593
599
|
++num_idle_;
|
594
600
|
} else if (new_state == GRPC_CHANNEL_READY) {
|
@@ -601,8 +607,19 @@ void RingHash::RingHashSubchannelList::UpdateStateCountersLocked(
|
|
601
607
|
}
|
602
608
|
|
603
609
|
void RingHash::RingHashSubchannelList::UpdateRingHashConnectivityStateLocked(
|
604
|
-
size_t index, bool connection_attempt_complete) {
|
610
|
+
size_t index, bool connection_attempt_complete, absl::Status status) {
|
605
611
|
RingHash* p = static_cast<RingHash*>(policy());
|
612
|
+
// If this is latest_pending_subchannel_list_, then swap it into
|
613
|
+
// subchannel_list_ as soon as we get the initial connectivity state
|
614
|
+
// report for every subchannel in the list.
|
615
|
+
if (p->latest_pending_subchannel_list_.get() == this &&
|
616
|
+
AllSubchannelsSeenInitialState()) {
|
617
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)) {
|
618
|
+
gpr_log(GPR_INFO, "[RH %p] replacing subchannel list %p with %p", p,
|
619
|
+
p->subchannel_list_.get(), this);
|
620
|
+
}
|
621
|
+
p->subchannel_list_ = std::move(p->latest_pending_subchannel_list_);
|
622
|
+
}
|
606
623
|
// Only set connectivity state if this is the current subchannel list.
|
607
624
|
if (p->subchannel_list_.get() != this) return;
|
608
625
|
// The overall aggregation rules here are:
|
@@ -618,13 +635,11 @@ void RingHash::RingHashSubchannelList::UpdateRingHashConnectivityStateLocked(
|
|
618
635
|
//
|
619
636
|
// We set start_connection_attempt to true if we match rules 2, 3, or 6.
|
620
637
|
grpc_connectivity_state state;
|
621
|
-
absl::Status status;
|
622
638
|
bool start_connection_attempt = false;
|
623
639
|
if (num_ready_ > 0) {
|
624
640
|
state = GRPC_CHANNEL_READY;
|
625
641
|
} else if (num_transient_failure_ >= 2) {
|
626
642
|
state = GRPC_CHANNEL_TRANSIENT_FAILURE;
|
627
|
-
status = absl::UnavailableError("connections to backends failing");
|
628
643
|
start_connection_attempt = true;
|
629
644
|
} else if (num_connecting_ > 0) {
|
630
645
|
state = GRPC_CHANNEL_CONNECTING;
|
@@ -635,15 +650,25 @@ void RingHash::RingHashSubchannelList::UpdateRingHashConnectivityStateLocked(
|
|
635
650
|
state = GRPC_CHANNEL_IDLE;
|
636
651
|
} else {
|
637
652
|
state = GRPC_CHANNEL_TRANSIENT_FAILURE;
|
638
|
-
status = absl::UnavailableError("connections to backends failing");
|
639
653
|
start_connection_attempt = true;
|
640
654
|
}
|
655
|
+
// In TRANSIENT_FAILURE, report the last reported failure.
|
656
|
+
// Otherwise, report OK.
|
657
|
+
if (state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
658
|
+
if (!status.ok()) {
|
659
|
+
last_failure_ = absl::UnavailableError(absl::StrCat(
|
660
|
+
"no reachable subchannels; last error: ", status.ToString()));
|
661
|
+
}
|
662
|
+
status = last_failure_;
|
663
|
+
} else {
|
664
|
+
status = absl::OkStatus();
|
665
|
+
}
|
641
666
|
// Generate new picker and return it to the channel.
|
642
667
|
// Note that we use our own picker regardless of connectivity state.
|
643
668
|
p->channel_control_helper()->UpdateState(
|
644
669
|
state, status,
|
645
670
|
absl::make_unique<Picker>(p->Ref(DEBUG_LOCATION, "RingHashPicker"),
|
646
|
-
|
671
|
+
ring_));
|
647
672
|
// While the ring_hash policy is reporting TRANSIENT_FAILURE, it will
|
648
673
|
// not be getting any pick requests from the priority policy.
|
649
674
|
// However, because the ring_hash policy does not attempt to
|
@@ -682,18 +707,15 @@ void RingHash::RingHashSubchannelList::UpdateRingHashConnectivityStateLocked(
|
|
682
707
|
}
|
683
708
|
}
|
684
709
|
|
685
|
-
RefCountedPtr<RingHash::Ring> RingHash::RingHashSubchannelList::MakeRing() {
|
686
|
-
RingHash* p = static_cast<RingHash*>(policy());
|
687
|
-
return MakeRefCounted<Ring>(p, Ref(DEBUG_LOCATION, "Ring"));
|
688
|
-
}
|
689
|
-
|
690
710
|
//
|
691
711
|
// RingHash::RingHashSubchannelData
|
692
712
|
//
|
693
713
|
|
694
|
-
void RingHash::RingHashSubchannelData::
|
695
|
-
grpc_connectivity_state
|
714
|
+
void RingHash::RingHashSubchannelData::ProcessConnectivityChangeLocked(
|
715
|
+
absl::optional<grpc_connectivity_state> old_state,
|
716
|
+
grpc_connectivity_state new_state) {
|
696
717
|
RingHash* p = static_cast<RingHash*>(subchannel_list()->policy());
|
718
|
+
grpc_connectivity_state last_connectivity_state = GetConnectivityState();
|
697
719
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)) {
|
698
720
|
gpr_log(
|
699
721
|
GPR_INFO,
|
@@ -701,53 +723,54 @@ void RingHash::RingHashSubchannelData::UpdateConnectivityStateLocked(
|
|
701
723
|
"(index %" PRIuPTR " of %" PRIuPTR "): prev_state=%s new_state=%s",
|
702
724
|
p, subchannel(), subchannel_list(), Index(),
|
703
725
|
subchannel_list()->num_subchannels(),
|
704
|
-
ConnectivityStateName(
|
705
|
-
ConnectivityStateName(
|
726
|
+
ConnectivityStateName(last_connectivity_state),
|
727
|
+
ConnectivityStateName(new_state));
|
728
|
+
}
|
729
|
+
GPR_ASSERT(subchannel() != nullptr);
|
730
|
+
// If this is not the initial state notification and the new state is
|
731
|
+
// TRANSIENT_FAILURE or IDLE, re-resolve.
|
732
|
+
// Note that we don't want to do this on the initial state notification,
|
733
|
+
// because that would result in an endless loop of re-resolution.
|
734
|
+
if (old_state.has_value() && (new_state == GRPC_CHANNEL_TRANSIENT_FAILURE ||
|
735
|
+
new_state == GRPC_CHANNEL_IDLE)) {
|
736
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)) {
|
737
|
+
gpr_log(GPR_INFO,
|
738
|
+
"[RH %p] Subchannel %p reported %s; requesting re-resolution", p,
|
739
|
+
subchannel(), ConnectivityStateName(new_state));
|
740
|
+
}
|
741
|
+
p->channel_control_helper()->RequestReresolution();
|
706
742
|
}
|
743
|
+
const bool connection_attempt_complete = new_state != GRPC_CHANNEL_CONNECTING;
|
707
744
|
// Decide what state to report for the purposes of aggregation and
|
708
745
|
// picker behavior.
|
709
746
|
// If the last recorded state was TRANSIENT_FAILURE, ignore the update
|
710
747
|
// unless the new state is READY.
|
711
|
-
|
712
|
-
|
713
|
-
|
748
|
+
bool update_status = true;
|
749
|
+
absl::Status status = connectivity_status();
|
750
|
+
if (last_connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE &&
|
751
|
+
new_state != GRPC_CHANNEL_READY &&
|
752
|
+
new_state != GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
753
|
+
new_state = GRPC_CHANNEL_TRANSIENT_FAILURE;
|
754
|
+
{
|
755
|
+
MutexLock lock(&mu_);
|
756
|
+
status = connectivity_status_;
|
757
|
+
}
|
758
|
+
update_status = false;
|
714
759
|
}
|
715
760
|
// Update state counters used for aggregation.
|
716
|
-
subchannel_list()->UpdateStateCountersLocked(
|
717
|
-
|
718
|
-
// Update
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
last_connectivity_state_ = connectivity_state;
|
723
|
-
}
|
724
|
-
|
725
|
-
void RingHash::RingHashSubchannelData::ProcessConnectivityChangeLocked(
|
726
|
-
grpc_connectivity_state connectivity_state) {
|
727
|
-
RingHash* p = static_cast<RingHash*>(subchannel_list()->policy());
|
728
|
-
GPR_ASSERT(subchannel() != nullptr);
|
729
|
-
// If the new state is TRANSIENT_FAILURE, re-resolve.
|
730
|
-
// Only do this if we've started watching, not at startup time.
|
731
|
-
// Otherwise, if the subchannel was already in state TRANSIENT_FAILURE
|
732
|
-
// when the subchannel list was created, we'd wind up in a constant
|
733
|
-
// loop of re-resolution.
|
734
|
-
if (connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
735
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)) {
|
736
|
-
gpr_log(GPR_INFO,
|
737
|
-
"[RH %p] Subchannel %p has gone into TRANSIENT_FAILURE. "
|
738
|
-
"Requesting re-resolution",
|
739
|
-
p, subchannel());
|
740
|
-
}
|
741
|
-
p->channel_control_helper()->RequestReresolution();
|
761
|
+
subchannel_list()->UpdateStateCountersLocked(last_connectivity_state,
|
762
|
+
new_state);
|
763
|
+
// Update status seen by picker if needed.
|
764
|
+
if (update_status) {
|
765
|
+
MutexLock lock(&mu_);
|
766
|
+
connectivity_status_ = connectivity_status();
|
742
767
|
}
|
743
|
-
// Update state
|
744
|
-
|
768
|
+
// Update last seen state, also used by picker.
|
769
|
+
connectivity_state_.store(new_state, std::memory_order_relaxed);
|
745
770
|
// Update the RH policy's connectivity state, creating new picker and new
|
746
771
|
// ring.
|
747
|
-
bool connection_attempt_complete =
|
748
|
-
connectivity_state != GRPC_CHANNEL_CONNECTING;
|
749
772
|
subchannel_list()->UpdateRingHashConnectivityStateLocked(
|
750
|
-
Index(), connection_attempt_complete);
|
773
|
+
Index(), connection_attempt_complete, status);
|
751
774
|
}
|
752
775
|
|
753
776
|
//
|
@@ -765,6 +788,7 @@ RingHash::~RingHash() {
|
|
765
788
|
gpr_log(GPR_INFO, "[RH %p] Destroying Ring Hash policy", this);
|
766
789
|
}
|
767
790
|
GPR_ASSERT(subchannel_list_ == nullptr);
|
791
|
+
GPR_ASSERT(latest_pending_subchannel_list_ == nullptr);
|
768
792
|
}
|
769
793
|
|
770
794
|
void RingHash::ShutdownLocked() {
|
@@ -773,10 +797,15 @@ void RingHash::ShutdownLocked() {
|
|
773
797
|
}
|
774
798
|
shutdown_ = true;
|
775
799
|
subchannel_list_.reset();
|
776
|
-
|
800
|
+
latest_pending_subchannel_list_.reset();
|
777
801
|
}
|
778
802
|
|
779
|
-
void RingHash::ResetBackoffLocked() {
|
803
|
+
void RingHash::ResetBackoffLocked() {
|
804
|
+
subchannel_list_->ResetBackoffLocked();
|
805
|
+
if (latest_pending_subchannel_list_ != nullptr) {
|
806
|
+
latest_pending_subchannel_list_->ResetBackoffLocked();
|
807
|
+
}
|
808
|
+
}
|
780
809
|
|
781
810
|
void RingHash::UpdateLocked(UpdateArgs args) {
|
782
811
|
config_ = std::move(args.config);
|
@@ -786,16 +815,7 @@ void RingHash::UpdateLocked(UpdateArgs args) {
|
|
786
815
|
gpr_log(GPR_INFO, "[RH %p] received update with %" PRIuPTR " addresses",
|
787
816
|
this, args.addresses->size());
|
788
817
|
}
|
789
|
-
|
790
|
-
addresses.reserve(args.addresses->size());
|
791
|
-
for (ServerAddress& address : *args.addresses) {
|
792
|
-
const ServerAddressWeightAttribute* weight_attribute =
|
793
|
-
static_cast<const ServerAddressWeightAttribute*>(address.GetAttribute(
|
794
|
-
ServerAddressWeightAttribute::kServerAddressWeightAttributeKey));
|
795
|
-
if (weight_attribute == nullptr || weight_attribute->weight() > 0) {
|
796
|
-
addresses.emplace_back(std::move(address));
|
797
|
-
}
|
798
|
-
}
|
818
|
+
addresses = *std::move(args.addresses);
|
799
819
|
} else {
|
800
820
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)) {
|
801
821
|
gpr_log(GPR_INFO, "[RH %p] received update with addresses error: %s",
|
@@ -805,22 +825,41 @@ void RingHash::UpdateLocked(UpdateArgs args) {
|
|
805
825
|
// failure and keep using the existing list.
|
806
826
|
if (subchannel_list_ != nullptr) return;
|
807
827
|
}
|
808
|
-
|
828
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace) &&
|
829
|
+
latest_pending_subchannel_list_ != nullptr) {
|
830
|
+
gpr_log(GPR_INFO, "[RH %p] replacing latest pending subchannel list %p",
|
831
|
+
this, latest_pending_subchannel_list_.get());
|
832
|
+
}
|
833
|
+
latest_pending_subchannel_list_ = MakeOrphanable<RingHashSubchannelList>(
|
809
834
|
this, std::move(addresses), *args.args);
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
835
|
+
// If we have no existing list or the new list is empty, immediately
|
836
|
+
// promote the new list.
|
837
|
+
// Otherwise, do nothing; the new list will be promoted when the
|
838
|
+
// initial subchannel states are reported.
|
839
|
+
if (subchannel_list_ == nullptr ||
|
840
|
+
latest_pending_subchannel_list_->num_subchannels() == 0) {
|
841
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace) &&
|
842
|
+
subchannel_list_ != nullptr) {
|
843
|
+
gpr_log(GPR_INFO,
|
844
|
+
"[RH %p] empty address list, replacing subchannel list %p", this,
|
845
|
+
subchannel_list_.get());
|
846
|
+
}
|
847
|
+
subchannel_list_ = std::move(latest_pending_subchannel_list_);
|
848
|
+
// If the new list is empty, report TRANSIENT_FAILURE.
|
849
|
+
if (subchannel_list_->num_subchannels() == 0) {
|
850
|
+
absl::Status status =
|
851
|
+
args.addresses.ok()
|
852
|
+
? absl::UnavailableError(
|
853
|
+
absl::StrCat("empty address list: ", args.resolution_note))
|
854
|
+
: args.addresses.status();
|
855
|
+
channel_control_helper()->UpdateState(
|
856
|
+
GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
857
|
+
absl::make_unique<TransientFailurePicker>(status));
|
858
|
+
} else {
|
859
|
+
// Otherwise, report IDLE.
|
860
|
+
subchannel_list_->UpdateRingHashConnectivityStateLocked(
|
861
|
+
/*index=*/0, /*connection_attempt_complete=*/false, absl::OkStatus());
|
862
|
+
}
|
824
863
|
}
|
825
864
|
}
|
826
865
|
|
@@ -23,17 +23,20 @@
|
|
23
23
|
|
24
24
|
#include <vector>
|
25
25
|
|
26
|
+
#include "src/core/lib/gprpp/unique_type_name.h"
|
26
27
|
#include "src/core/lib/iomgr/error.h"
|
27
28
|
#include "src/core/lib/json/json.h"
|
28
29
|
|
29
30
|
namespace grpc_core {
|
30
|
-
|
31
|
+
|
32
|
+
UniqueTypeName RequestHashAttributeName();
|
31
33
|
|
32
34
|
// Helper Parsing method to parse ring hash policy configs; for example, ring
|
33
35
|
// hash size validity.
|
34
36
|
void ParseRingHashLbConfig(const Json& json, size_t* min_ring_size,
|
35
37
|
size_t* max_ring_size,
|
36
38
|
std::vector<grpc_error_handle>* error_list);
|
39
|
+
|
37
40
|
} // namespace grpc_core
|
38
41
|
|
39
42
|
#endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_RING_HASH_RING_HASH_H
|