grpc 1.46.2-x86_64-linux → 1.48.0.pre1-x86_64-linux
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 +138 -128
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/event_engine.h +62 -18
- data/include/grpc/event_engine/memory_allocator.h +0 -15
- data/include/grpc/event_engine/port.h +1 -1
- data/include/grpc/event_engine/slice.h +286 -0
- data/include/grpc/event_engine/slice_buffer.h +118 -0
- data/include/grpc/grpc.h +3 -3
- data/include/grpc/grpc_security.h +11 -0
- 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 +106 -39
- data/include/grpc/impl/codegen/slice.h +1 -1
- data/src/core/ext/filters/census/grpc_context.cc +3 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +35 -35
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +20 -1
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
- data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
- data/src/core/ext/filters/client_channel/backup_poller.cc +8 -6
- data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +43 -21
- data/src/core/ext/filters/client_channel/client_channel.cc +111 -82
- data/src/core/ext/filters/client_channel/client_channel.h +43 -8
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/config_selector.h +8 -6
- data/src/core/ext/filters/client_channel/connector.h +9 -3
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +19 -6
- data/src/core/ext/filters/client_channel/dynamic_filters.h +12 -2
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
- data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
- data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +11 -5
- 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 +132 -62
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +407 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1036 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +149 -147
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +176 -85
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +303 -203
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +6 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +92 -54
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +240 -214
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +119 -111
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +86 -71
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +101 -25
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +35 -11
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +36 -20
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +78 -14
- data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
- data/src/core/ext/filters/client_channel/lb_policy.h +18 -31
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +11 -6
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +1 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +26 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +139 -48
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +6 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +36 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +39 -7
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +18 -19
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +61 -16
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +14 -2
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +17 -12
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +111 -46
- 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 +12 -18
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
- data/src/core/ext/filters/client_channel/retry_filter.cc +75 -36
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +12 -13
- data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
- data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +24 -6
- data/src/core/ext/filters/client_channel/subchannel.cc +186 -187
- data/src/core/ext/filters/client_channel/subchannel.h +80 -36
- data/src/core/ext/filters/client_channel/subchannel_interface.h +51 -41
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +24 -95
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +17 -9
- data/src/core/ext/filters/deadline/deadline_filter.cc +18 -9
- data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +22 -6
- 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 +30 -10
- data/src/core/ext/filters/http/client/http_client_filter.h +15 -2
- data/src/core/ext/filters/http/client_authority_filter.cc +16 -20
- data/src/core/ext/filters/http/client_authority_filter.h +5 -2
- data/src/core/ext/filters/http/http_filters_plugin.cc +16 -9
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +65 -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 +45 -107
- 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 +95 -255
- data/src/core/ext/filters/http/server/http_server_filter.h +37 -3
- data/src/core/ext/filters/message_size/message_size_filter.cc +45 -41
- data/src/core/ext/filters/message_size/message_size_filter.h +15 -2
- data/src/core/ext/filters/rbac/rbac_filter.cc +15 -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 +104 -138
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +58 -29
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +260 -491
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +6 -1
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +145 -261
- data/src/core/ext/transport/chttp2/transport/flow_control.h +179 -288
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +59 -211
- data/src/core/ext/transport/chttp2/transport/frame_data.h +13 -36
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +10 -42
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +10 -12
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +32 -13
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +53 -37
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +31 -112
- data/src/core/ext/transport/chttp2/transport/parsing.cc +77 -43
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +11 -11
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +54 -21
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +93 -86
- 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/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -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 +6 -2
- data/src/core/ext/xds/certificate_provider_store.h +10 -1
- 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 +39 -26
- data/src/core/ext/xds/xds_bootstrap.h +11 -11
- data/src/core/ext/xds/xds_certificate_provider.cc +16 -4
- data/src/core/ext/xds/xds_certificate_provider.h +17 -2
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +14 -5
- data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
- data/src/core/ext/xds/xds_client.cc +121 -46
- data/src/core/ext/xds/xds_client.h +19 -4
- 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 +126 -25
- data/src/core/ext/xds/xds_cluster.h +12 -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 +10 -8
- 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 +70 -42
- 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 +56 -7
- 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 +60 -26
- data/src/core/lib/address_utils/sockaddr_utils.h +9 -4
- data/src/core/lib/avl/avl.h +6 -4
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/backoff/backoff.h +1 -1
- data/src/core/lib/channel/call_finalization.h +4 -0
- data/src/core/lib/channel/call_tracer.h +11 -5
- data/src/core/lib/channel/channel_args.cc +41 -22
- data/src/core/lib/channel/channel_args.h +34 -3
- data/src/core/lib/channel/channel_args_preconditioning.cc +4 -3
- data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +45 -7
- data/src/core/lib/channel/channel_stack.h +45 -9
- data/src/core/lib/channel/channel_stack_builder.cc +9 -19
- data/src/core/lib/channel/channel_stack_builder.h +17 -32
- data/src/core/lib/channel/channel_stack_builder_impl.cc +38 -43
- data/src/core/lib/channel/channel_stack_builder_impl.h +4 -6
- data/src/core/lib/channel/channel_trace.cc +8 -13
- data/src/core/lib/channel/channel_trace.h +6 -3
- data/src/core/lib/channel/channelz.cc +10 -14
- data/src/core/lib/channel/channelz.h +15 -7
- data/src/core/lib/channel/channelz_registry.cc +11 -19
- data/src/core/lib/channel/channelz_registry.h +10 -9
- data/src/core/lib/channel/connected_channel.cc +22 -31
- data/src/core/lib/channel/connected_channel.h +2 -0
- data/src/core/lib/channel/promise_based_filter.cc +451 -190
- data/src/core/lib/channel/promise_based_filter.h +162 -27
- data/src/core/lib/channel/status_util.cc +2 -0
- data/src/core/lib/channel/status_util.h +0 -3
- data/src/core/lib/compression/compression.cc +6 -1
- data/src/core/lib/compression/compression_internal.cc +48 -16
- data/src/core/lib/compression/compression_internal.h +4 -3
- data/src/core/lib/compression/message_compress.cc +3 -1
- data/src/core/lib/compression/message_compress.h +2 -3
- data/src/core/lib/config/core_configuration.cc +3 -0
- data/src/core/lib/config/core_configuration.h +2 -1
- 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/channel_args_endpoint_config.cc +4 -2
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
- data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
- data/src/core/lib/event_engine/event_engine.cc +29 -14
- data/src/core/lib/event_engine/event_engine_factory.h +5 -0
- data/src/core/lib/event_engine/handle_containers.h +67 -0
- data/src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc +159 -0
- data/src/core/lib/event_engine/iomgr_engine/iomgr_engine.h +122 -0
- 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/memory_allocator.cc +12 -4
- data/src/core/lib/{iomgr/event_engine → event_engine}/promise.h +27 -9
- data/src/core/lib/event_engine/resolved_address.cc +4 -2
- data/src/core/lib/event_engine/slice.cc +102 -0
- data/src/core/lib/event_engine/slice_buffer.cc +50 -0
- data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
- data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
- data/src/core/lib/gpr/log.cc +5 -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/gpr/tls.h +3 -5
- data/src/core/lib/gprpp/bitset.h +5 -1
- data/src/core/lib/gprpp/chunked_vector.h +4 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
- data/src/core/lib/gprpp/examine_stack.h +0 -1
- data/src/core/lib/gprpp/fork.cc +3 -6
- data/src/core/lib/gprpp/global_config.h +2 -4
- data/src/core/lib/gprpp/global_config_env.cc +3 -2
- data/src/core/lib/gprpp/global_config_env.h +3 -1
- data/src/core/lib/gprpp/global_config_generic.h +0 -4
- data/src/core/lib/gprpp/host_port.cc +2 -0
- data/src/core/lib/gprpp/manual_constructor.h +0 -68
- data/src/core/lib/gprpp/match.h +2 -0
- data/src/core/lib/gprpp/memory.h +1 -5
- data/src/core/lib/gprpp/orphanable.h +1 -4
- data/src/core/lib/gprpp/ref_counted.h +1 -3
- data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
- data/src/core/lib/gprpp/stat.h +0 -2
- data/src/core/lib/gprpp/stat_posix.cc +7 -2
- data/src/core/lib/gprpp/status_helper.cc +50 -32
- data/src/core/lib/gprpp/status_helper.h +4 -0
- data/src/core/lib/gprpp/sync.h +3 -1
- data/src/core/lib/gprpp/table.h +10 -0
- data/src/core/lib/gprpp/thd.h +2 -5
- data/src/core/lib/gprpp/thd_posix.cc +4 -2
- data/src/core/lib/gprpp/thd_windows.cc +2 -0
- data/src/core/lib/gprpp/time.cc +16 -0
- data/src/core/lib/gprpp/time.h +10 -1
- data/src/core/lib/gprpp/time_util.cc +4 -0
- data/src/core/lib/gprpp/time_util.h +1 -1
- data/src/core/lib/gprpp/unique_type_name.h +104 -0
- data/src/core/lib/http/format_request.cc +34 -4
- data/src/core/lib/http/format_request.h +3 -1
- data/src/core/lib/http/httpcli.cc +106 -93
- data/src/core/lib/http/httpcli.h +58 -10
- data/src/core/lib/http/httpcli_security_connector.cc +19 -8
- 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.cc +4 -4
- data/src/core/lib/iomgr/endpoint.h +7 -5
- data/src/core/lib/iomgr/endpoint_cfstream.cc +9 -6
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
- 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 +55 -96
- data/src/core/lib/iomgr/ev_posix.h +5 -3
- data/src/core/lib/iomgr/exec_ctx.h +1 -2
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
- data/src/core/lib/iomgr/internal_errqueue.h +1 -6
- data/src/core/lib/iomgr/iomgr.cc +7 -1
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
- 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/pollset_set.h +1 -2
- data/src/core/lib/iomgr/port.h +25 -6
- data/src/core/lib/iomgr/resolve_address.cc +8 -0
- data/src/core/lib/iomgr/resolve_address.h +21 -14
- data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +9 -15
- data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -15
- data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
- data/src/core/lib/iomgr/sockaddr.h +2 -3
- data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
- data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
- 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 +24 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +154 -29
- data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_windows.cc +27 -16
- data/src/core/lib/iomgr/tcp_posix.cc +96 -52
- data/src/core/lib/iomgr/tcp_server_posix.cc +33 -19
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +41 -38
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -6
- data/src/core/lib/iomgr/tcp_server_windows.cc +20 -12
- data/src/core/lib/iomgr/tcp_windows.cc +12 -9
- 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/json/json.h +1 -2
- data/src/core/lib/json/json_reader.cc +9 -1
- data/src/core/lib/json/json_util.cc +7 -0
- data/src/core/lib/json/json_util.h +10 -1
- data/src/core/lib/json/json_writer.cc +6 -1
- 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 +1 -2
- data/src/core/lib/promise/activity.h +13 -19
- data/src/core/lib/promise/arena_promise.h +11 -1
- data/src/core/lib/promise/call_push_pull.h +4 -0
- data/src/core/lib/promise/context.h +1 -1
- data/src/core/lib/promise/detail/basic_seq.h +2 -2
- data/src/core/lib/promise/detail/promise_factory.h +0 -1
- data/src/core/lib/promise/latch.h +0 -1
- data/src/core/lib/promise/loop.h +2 -0
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/race.h +0 -1
- data/src/core/lib/promise/seq.h +0 -2
- data/src/core/lib/promise/sleep.cc +38 -31
- data/src/core/lib/promise/sleep.h +32 -22
- data/src/core/lib/promise/try_seq.h +2 -2
- 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 +6 -4
- 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 +17 -3
- data/src/core/lib/resolver/server_address.h +13 -6
- data/src/core/lib/resource_quota/api.cc +14 -1
- data/src/core/lib/resource_quota/api.h +4 -1
- data/src/core/lib/resource_quota/arena.cc +0 -6
- data/src/core/lib/resource_quota/arena.h +1 -2
- data/src/core/lib/resource_quota/memory_quota.cc +62 -62
- data/src/core/lib/resource_quota/memory_quota.h +35 -30
- data/src/core/lib/resource_quota/resource_quota.h +8 -0
- data/src/core/lib/resource_quota/thread_quota.cc +2 -0
- data/src/core/lib/resource_quota/thread_quota.h +4 -0
- 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 +15 -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 +12 -4
- data/src/core/lib/security/credentials/alts/alts_credentials.h +8 -3
- 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 +10 -0
- data/src/core/lib/security/credentials/call_creds_util.h +1 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +7 -1
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +11 -7
- data/src/core/lib/security/credentials/composite/composite_credentials.h +21 -6
- data/src/core/lib/security/credentials/credentials.cc +4 -8
- data/src/core/lib/security/credentials/credentials.h +27 -18
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +108 -9
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +18 -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 +27 -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 +22 -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 +21 -9
- data/src/core/lib/security/credentials/fake/fake_credentials.h +15 -3
- 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 +51 -24
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +12 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +13 -4
- data/src/core/lib/security/credentials/iam/iam_credentials.h +12 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +12 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +9 -4
- 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 +14 -7
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +16 -2
- 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 +12 -5
- data/src/core/lib/security/credentials/local/local_credentials.h +9 -2
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +36 -19
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +12 -8
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +25 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +17 -4
- 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 +39 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +14 -11
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +35 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +34 -11
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +17 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +7 -3
- 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 +20 -4
- data/src/core/lib/security/credentials/xds/xds_credentials.h +19 -5
- 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 +18 -2
- 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 +19 -7
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +19 -7
- 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 +24 -17
- data/src/core/lib/security/transport/secure_endpoint.cc +81 -20
- data/src/core/lib/security/transport/secure_endpoint.h +4 -3
- data/src/core/lib/security/transport/security_handshaker.cc +49 -16
- data/src/core/lib/security/transport/security_handshaker.h +5 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +29 -6
- 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.h +4 -8
- data/src/core/lib/service_config/service_config_call_data.h +6 -2
- data/src/core/lib/service_config/service_config_impl.cc +13 -6
- data/src/core/lib/service_config/service_config_impl.h +9 -4
- data/src/core/lib/service_config/service_config_parser.cc +8 -2
- data/src/core/lib/service_config/service_config_parser.h +7 -0
- data/src/core/lib/slice/b64.cc +1 -1
- data/src/core/lib/slice/b64.h +2 -0
- data/src/core/lib/slice/percent_encoding.cc +4 -1
- data/src/core/lib/slice/percent_encoding.h +0 -6
- data/src/core/lib/slice/slice.cc +2 -1
- data/src/core/lib/slice/slice.h +10 -5
- data/src/core/lib/slice/slice_api.cc +1 -1
- data/src/core/lib/slice/slice_buffer.cc +79 -23
- data/src/core/lib/slice/slice_buffer.h +137 -0
- data/src/core/lib/slice/slice_buffer_api.cc +35 -0
- data/src/core/lib/slice/slice_internal.h +4 -3
- data/src/core/lib/slice/slice_refcount.h +2 -3
- data/src/core/lib/slice/slice_refcount_base.h +2 -3
- data/src/core/lib/slice/slice_string_helpers.cc +0 -16
- data/src/core/lib/slice/slice_string_helpers.h +1 -8
- data/src/core/lib/surface/builtins.cc +7 -2
- data/src/core/lib/surface/byte_buffer.cc +7 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
- data/src/core/lib/surface/call.cc +90 -137
- data/src/core/lib/surface/call.h +21 -3
- data/src/core/lib/surface/call_details.cc +4 -4
- data/src/core/lib/surface/call_log_batch.cc +7 -1
- data/src/core/lib/surface/call_test_only.h +4 -1
- data/src/core/lib/surface/channel.cc +179 -242
- data/src/core/lib/surface/channel.h +97 -58
- data/src/core/lib/surface/channel_init.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +8 -2
- data/src/core/lib/surface/channel_stack_type.cc +0 -2
- data/src/core/lib/surface/channel_stack_type.h +0 -2
- data/src/core/lib/surface/completion_queue.cc +29 -20
- data/src/core/lib/surface/completion_queue.h +7 -2
- data/src/core/lib/surface/completion_queue_factory.cc +1 -0
- data/src/core/lib/surface/completion_queue_factory.h +1 -3
- data/src/core/lib/surface/event_string.cc +1 -7
- data/src/core/lib/surface/event_string.h +1 -1
- data/src/core/lib/surface/init.cc +17 -46
- data/src/core/lib/surface/init.h +0 -8
- data/src/core/lib/surface/lame_client.cc +63 -109
- data/src/core/lib/surface/lame_client.h +41 -3
- data/src/core/lib/surface/metadata_array.cc +2 -0
- data/src/core/lib/surface/server.cc +83 -64
- data/src/core/lib/surface/server.h +42 -9
- data/src/core/lib/surface/validate_metadata.cc +3 -6
- data/src/core/lib/surface/validate_metadata.h +3 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +3 -1
- data/src/core/lib/transport/bdp_estimator.h +2 -3
- data/src/core/lib/transport/connectivity_state.cc +6 -4
- data/src/core/lib/transport/connectivity_state.h +2 -3
- data/src/core/lib/transport/error_utils.cc +16 -8
- data/src/core/lib/transport/error_utils.h +5 -1
- data/src/core/lib/{channel → transport}/handshaker.cc +12 -7
- data/src/core/lib/{channel → transport}/handshaker.h +13 -6
- data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
- data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
- data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +28 -14
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
- data/src/core/lib/transport/metadata_batch.cc +287 -0
- data/src/core/lib/transport/metadata_batch.h +133 -264
- data/src/core/lib/transport/parsed_metadata.cc +2 -0
- data/src/core/lib/transport/parsed_metadata.h +10 -3
- data/src/core/lib/transport/status_conversion.cc +2 -0
- data/src/core/lib/transport/status_conversion.h +2 -2
- data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
- data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
- data/src/core/lib/transport/timeout_encoding.cc +2 -6
- data/src/core/lib/transport/timeout_encoding.h +5 -1
- data/src/core/lib/transport/transport.cc +18 -20
- data/src/core/lib/transport/transport.h +48 -16
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +11 -0
- data/src/core/lib/transport/transport_op_string.cc +17 -18
- data/src/core/lib/uri/uri_parser.cc +11 -3
- data/src/core/lib/uri/uri_parser.h +0 -2
- data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
- 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/session_cache/ssl_session.h +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -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 +50 -19
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/grpc_c.so +0 -0
- 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 +510 -0
- 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 +69 -38
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
- data/src/core/lib/event_engine/sockaddr.cc +0 -40
- data/src/core/lib/event_engine/sockaddr.h +0 -44
- data/src/core/lib/gprpp/capture.h +0 -76
- data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
- data/src/core/lib/iomgr/event_engine/closure.h +0 -42
- data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
- data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
- data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
- data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
- data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
- data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
- data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
- data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
- data/src/core/lib/slice/slice_split.cc +0 -100
- data/src/core/lib/slice/slice_split.h +0 -40
- data/src/core/lib/transport/byte_stream.cc +0 -164
- data/src/core/lib/transport/byte_stream.h +0 -166
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -16,33 +16,69 @@
|
|
16
16
|
|
17
17
|
#include <grpc/support/port_platform.h>
|
18
18
|
|
19
|
+
#include <inttypes.h>
|
19
20
|
#include <stdlib.h>
|
20
|
-
#include <string.h>
|
21
21
|
|
22
|
+
#include <algorithm>
|
23
|
+
#include <atomic>
|
24
|
+
#include <cmath>
|
25
|
+
#include <map>
|
26
|
+
#include <memory>
|
27
|
+
#include <string>
|
28
|
+
#include <type_traits>
|
29
|
+
#include <utility>
|
30
|
+
#include <vector>
|
31
|
+
|
32
|
+
#include "absl/base/attributes.h"
|
33
|
+
#include "absl/base/thread_annotations.h"
|
34
|
+
#include "absl/container/inlined_vector.h"
|
35
|
+
#include "absl/memory/memory.h"
|
36
|
+
#include "absl/status/status.h"
|
37
|
+
#include "absl/status/statusor.h"
|
22
38
|
#include "absl/strings/numbers.h"
|
23
39
|
#include "absl/strings/str_cat.h"
|
40
|
+
#include "absl/strings/string_view.h"
|
41
|
+
#include "absl/types/optional.h"
|
42
|
+
|
24
43
|
#define XXH_INLINE_ALL
|
25
44
|
#include "xxhash.h"
|
26
45
|
|
27
|
-
#include <grpc/
|
46
|
+
#include <grpc/impl/codegen/connectivity_state.h>
|
47
|
+
#include <grpc/impl/codegen/grpc_types.h>
|
48
|
+
#include <grpc/support/log.h>
|
28
49
|
|
50
|
+
#include "src/core/ext/filters/client_channel/client_channel.h"
|
51
|
+
#include "src/core/ext/filters/client_channel/lb_policy.h"
|
29
52
|
#include "src/core/ext/filters/client_channel/lb_policy/subchannel_list.h"
|
53
|
+
#include "src/core/ext/filters/client_channel/lb_policy_factory.h"
|
30
54
|
#include "src/core/ext/filters/client_channel/lb_policy_registry.h"
|
31
|
-
#include "src/core/ext/filters/client_channel/
|
55
|
+
#include "src/core/ext/filters/client_channel/subchannel_interface.h"
|
32
56
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
33
|
-
#include "src/core/lib/channel/channel_args.h"
|
34
57
|
#include "src/core/lib/debug/trace.h"
|
35
58
|
#include "src/core/lib/gpr/string.h"
|
59
|
+
#include "src/core/lib/gprpp/debug_location.h"
|
60
|
+
#include "src/core/lib/gprpp/orphanable.h"
|
61
|
+
#include "src/core/lib/gprpp/ref_counted.h"
|
36
62
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
37
63
|
#include "src/core/lib/gprpp/sync.h"
|
64
|
+
#include "src/core/lib/gprpp/unique_type_name.h"
|
65
|
+
#include "src/core/lib/iomgr/closure.h"
|
66
|
+
#include "src/core/lib/iomgr/error.h"
|
67
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
68
|
+
#include "src/core/lib/iomgr/work_serializer.h"
|
69
|
+
#include "src/core/lib/json/json.h"
|
70
|
+
#include "src/core/lib/resolver/server_address.h"
|
38
71
|
#include "src/core/lib/transport/connectivity_state.h"
|
39
|
-
#include "src/core/lib/transport/error_utils.h"
|
40
72
|
|
41
73
|
namespace grpc_core {
|
42
74
|
|
43
|
-
const char* kRequestRingHashAttribute = "request_ring_hash";
|
44
75
|
TraceFlag grpc_lb_ring_hash_trace(false, "ring_hash_lb");
|
45
76
|
|
77
|
+
UniqueTypeName RequestHashAttributeName() {
|
78
|
+
static UniqueTypeName::Factory kFactory("request_hash");
|
79
|
+
return kFactory.Create();
|
80
|
+
}
|
81
|
+
|
46
82
|
// Helper Parser method
|
47
83
|
void ParseRingHashLbConfig(const Json& json, size_t* min_ring_size,
|
48
84
|
size_t* max_ring_size,
|
@@ -137,41 +173,52 @@ class RingHash : public LoadBalancingPolicy {
|
|
137
173
|
: SubchannelData(subchannel_list, address, std::move(subchannel)),
|
138
174
|
address_(address) {}
|
139
175
|
|
140
|
-
grpc_connectivity_state GetConnectivityState() const {
|
141
|
-
return connectivity_state_for_picker_.load(std::memory_order_relaxed);
|
142
|
-
}
|
143
|
-
|
144
176
|
const ServerAddress& address() const { return address_; }
|
145
177
|
|
146
|
-
|
178
|
+
grpc_connectivity_state GetConnectivityState() const {
|
179
|
+
return connectivity_state_.load(std::memory_order_relaxed);
|
180
|
+
}
|
147
181
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
182
|
+
absl::Status GetConnectivityStatus() const {
|
183
|
+
MutexLock lock(&mu_);
|
184
|
+
return connectivity_status_;
|
185
|
+
}
|
152
186
|
|
153
187
|
private:
|
154
188
|
// Performs connectivity state updates that need to be done only
|
155
189
|
// after we have started watching.
|
156
190
|
void ProcessConnectivityChangeLocked(
|
157
|
-
grpc_connectivity_state
|
191
|
+
absl::optional<grpc_connectivity_state> old_state,
|
192
|
+
grpc_connectivity_state new_state) override;
|
158
193
|
|
159
194
|
ServerAddress address_;
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
195
|
+
|
196
|
+
// Last logical connectivity state seen.
|
197
|
+
// Note that this may differ from the state actually reported by the
|
198
|
+
// subchannel in some cases; for example, once this is set to
|
199
|
+
// TRANSIENT_FAILURE, we do not change it again until we get READY,
|
200
|
+
// so we skip any interim stops in CONNECTING.
|
201
|
+
// Uses an atomic so that it can be accessed outside of the WorkSerializer.
|
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_);
|
164
206
|
};
|
165
207
|
|
166
208
|
// A list of subchannels.
|
167
209
|
class RingHashSubchannelList
|
168
210
|
: public SubchannelList<RingHashSubchannelList, RingHashSubchannelData> {
|
169
211
|
public:
|
170
|
-
RingHashSubchannelList(RingHash* policy,
|
171
|
-
ServerAddressList addresses,
|
212
|
+
RingHashSubchannelList(RingHash* policy, ServerAddressList addresses,
|
172
213
|
const grpc_channel_args& args)
|
173
|
-
: SubchannelList(policy,
|
174
|
-
|
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"))) {
|
175
222
|
// Need to maintain a ref to the LB policy as long as we maintain
|
176
223
|
// any references to subchannels, since the subchannels'
|
177
224
|
// pollset_sets will include the LB policy's pollset_set.
|
@@ -179,13 +226,11 @@ class RingHash : public LoadBalancingPolicy {
|
|
179
226
|
}
|
180
227
|
|
181
228
|
~RingHashSubchannelList() override {
|
229
|
+
ring_.reset(DEBUG_LOCATION, "~RingHashSubchannelList");
|
182
230
|
RingHash* p = static_cast<RingHash*>(policy());
|
183
231
|
p->Unref(DEBUG_LOCATION, "subchannel_list");
|
184
232
|
}
|
185
233
|
|
186
|
-
// Starts watching the subchannels in this list.
|
187
|
-
void StartWatchingLocked();
|
188
|
-
|
189
234
|
// Updates the counters of subchannels in each state when a
|
190
235
|
// subchannel transitions from old_state to new_state.
|
191
236
|
void UpdateStateCountersLocked(grpc_connectivity_state old_state,
|
@@ -193,18 +238,44 @@ class RingHash : public LoadBalancingPolicy {
|
|
193
238
|
|
194
239
|
// Updates the RH policy's connectivity state based on the
|
195
240
|
// subchannel list's state counters, creating new picker and new ring.
|
196
|
-
//
|
197
|
-
//
|
198
|
-
|
199
|
-
|
200
|
-
//
|
201
|
-
|
241
|
+
// The index parameter indicates the index into the list of the subchannel
|
242
|
+
// whose status report triggered the call to
|
243
|
+
// UpdateRingHashConnectivityStateLocked().
|
244
|
+
// connection_attempt_complete is true if the subchannel just
|
245
|
+
// finished a connection attempt.
|
246
|
+
void UpdateRingHashConnectivityStateLocked(size_t index,
|
247
|
+
bool connection_attempt_complete,
|
248
|
+
absl::Status status);
|
202
249
|
|
203
250
|
private:
|
204
|
-
|
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_;
|
205
264
|
size_t num_ready_ = 0;
|
206
265
|
size_t num_connecting_ = 0;
|
207
266
|
size_t num_transient_failure_ = 0;
|
267
|
+
|
268
|
+
RefCountedPtr<Ring> ring_;
|
269
|
+
|
270
|
+
// The index of the subchannel currently doing an internally
|
271
|
+
// triggered connection attempt, if any.
|
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_;
|
208
279
|
};
|
209
280
|
|
210
281
|
class Ring : public RefCounted<Ring> {
|
@@ -259,7 +330,7 @@ class RingHash : public LoadBalancingPolicy {
|
|
259
330
|
[self]() {
|
260
331
|
if (!self->ring_hash_lb_->shutdown_) {
|
261
332
|
for (auto& subchannel : self->subchannels_) {
|
262
|
-
subchannel->
|
333
|
+
subchannel->RequestConnection();
|
263
334
|
}
|
264
335
|
}
|
265
336
|
delete self;
|
@@ -269,7 +340,7 @@ class RingHash : public LoadBalancingPolicy {
|
|
269
340
|
|
270
341
|
RefCountedPtr<RingHash> ring_hash_lb_;
|
271
342
|
grpc_closure closure_;
|
272
|
-
|
343
|
+
std::vector<RefCountedPtr<SubchannelInterface>> subchannels_;
|
273
344
|
};
|
274
345
|
|
275
346
|
RefCountedPtr<RingHash> parent_;
|
@@ -283,11 +354,9 @@ class RingHash : public LoadBalancingPolicy {
|
|
283
354
|
|
284
355
|
// list of subchannels.
|
285
356
|
OrphanablePtr<RingHashSubchannelList> subchannel_list_;
|
357
|
+
OrphanablePtr<RingHashSubchannelList> latest_pending_subchannel_list_;
|
286
358
|
// indicating if we are shutting down.
|
287
359
|
bool shutdown_ = false;
|
288
|
-
|
289
|
-
// Current ring.
|
290
|
-
RefCountedPtr<Ring> ring_;
|
291
360
|
};
|
292
361
|
|
293
362
|
//
|
@@ -316,9 +385,10 @@ RingHash::Ring::Ring(RingHash* parent,
|
|
316
385
|
ServerAddressWeightAttribute::kServerAddressWeightAttributeKey));
|
317
386
|
AddressWeight address_weight;
|
318
387
|
address_weight.address =
|
319
|
-
grpc_sockaddr_to_string(&sd->address().address(), false);
|
320
|
-
|
321
|
-
|
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) {
|
322
392
|
address_weight.weight = weight_attribute->weight();
|
323
393
|
}
|
324
394
|
sum += address_weight.weight;
|
@@ -347,7 +417,7 @@ RingHash::Ring::Ring(RingHash* parent,
|
|
347
417
|
std::ceil(min_normalized_weight * min_ring_size) / min_normalized_weight,
|
348
418
|
static_cast<double>(max_ring_size));
|
349
419
|
// Reserve memory for the entire ring up front.
|
350
|
-
const
|
420
|
+
const size_t ring_size = std::ceil(scale);
|
351
421
|
ring_.reserve(ring_size);
|
352
422
|
// Populate the hash ring by walking through the (host, weight) pairs in
|
353
423
|
// normalized_host_weights, and generating (scale * weight) hashes for each
|
@@ -399,23 +469,24 @@ RingHash::Ring::Ring(RingHash* parent,
|
|
399
469
|
//
|
400
470
|
|
401
471
|
RingHash::PickResult RingHash::Picker::Pick(PickArgs args) {
|
402
|
-
auto
|
403
|
-
args.call_state
|
472
|
+
auto* call_state = static_cast<ClientChannel::LoadBalancedCall::LbCallState*>(
|
473
|
+
args.call_state);
|
474
|
+
auto hash = call_state->GetCallAttribute(RequestHashAttributeName());
|
404
475
|
uint64_t h;
|
405
476
|
if (!absl::SimpleAtoi(hash, &h)) {
|
406
477
|
return PickResult::Fail(
|
407
|
-
absl::InternalError("
|
478
|
+
absl::InternalError("ring hash value is not a number"));
|
408
479
|
}
|
409
480
|
const std::vector<Ring::Entry>& ring = ring_->ring();
|
410
481
|
// Ported from https://github.com/RJ/ketama/blob/master/libketama/ketama.c
|
411
482
|
// (ketama_get_server) NOTE: The algorithm depends on using signed integers
|
412
483
|
// for lowp, highp, and first_index. Do not change them!
|
413
|
-
|
414
|
-
|
415
|
-
|
484
|
+
size_t lowp = 0;
|
485
|
+
size_t highp = ring.size();
|
486
|
+
size_t first_index = 0;
|
416
487
|
while (true) {
|
417
488
|
first_index = (lowp + highp) / 2;
|
418
|
-
if (first_index ==
|
489
|
+
if (first_index == ring.size()) {
|
419
490
|
first_index = 0;
|
420
491
|
break;
|
421
492
|
}
|
@@ -499,35 +570,17 @@ RingHash::PickResult RingHash::Picker::Pick(PickArgs args) {
|
|
499
570
|
}
|
500
571
|
}
|
501
572
|
}
|
502
|
-
return PickResult::Fail(absl::UnavailableError(
|
503
|
-
"
|
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())));
|
504
576
|
}
|
505
577
|
|
506
578
|
//
|
507
579
|
// RingHash::RingHashSubchannelList
|
508
580
|
//
|
509
581
|
|
510
|
-
void RingHash::RingHashSubchannelList::StartWatchingLocked() {
|
511
|
-
if (num_subchannels() == 0) return;
|
512
|
-
// Check current state of each subchannel synchronously.
|
513
|
-
for (size_t i = 0; i < num_subchannels(); ++i) {
|
514
|
-
grpc_connectivity_state state =
|
515
|
-
subchannel(i)->CheckConnectivityStateLocked();
|
516
|
-
subchannel(i)->UpdateConnectivityStateLocked(state);
|
517
|
-
}
|
518
|
-
// Start connectivity watch for each subchannel.
|
519
|
-
for (size_t i = 0; i < num_subchannels(); i++) {
|
520
|
-
if (subchannel(i)->subchannel() != nullptr) {
|
521
|
-
subchannel(i)->StartConnectivityWatchLocked();
|
522
|
-
}
|
523
|
-
}
|
524
|
-
// Send updated state to parent based on reported subchannel states.
|
525
|
-
UpdateRingHashConnectivityStateLocked();
|
526
|
-
}
|
527
|
-
|
528
582
|
void RingHash::RingHashSubchannelList::UpdateStateCountersLocked(
|
529
583
|
grpc_connectivity_state old_state, grpc_connectivity_state new_state) {
|
530
|
-
GPR_ASSERT(new_state != GRPC_CHANNEL_SHUTDOWN);
|
531
584
|
if (old_state == GRPC_CHANNEL_IDLE) {
|
532
585
|
GPR_ASSERT(num_idle_ > 0);
|
533
586
|
--num_idle_;
|
@@ -541,6 +594,7 @@ void RingHash::RingHashSubchannelList::UpdateStateCountersLocked(
|
|
541
594
|
GPR_ASSERT(num_transient_failure_ > 0);
|
542
595
|
--num_transient_failure_;
|
543
596
|
}
|
597
|
+
GPR_ASSERT(new_state != GRPC_CHANNEL_SHUTDOWN);
|
544
598
|
if (new_state == GRPC_CHANNEL_IDLE) {
|
545
599
|
++num_idle_;
|
546
600
|
} else if (new_state == GRPC_CHANNEL_READY) {
|
@@ -552,61 +606,116 @@ void RingHash::RingHashSubchannelList::UpdateStateCountersLocked(
|
|
552
606
|
}
|
553
607
|
}
|
554
608
|
|
555
|
-
|
556
|
-
|
557
|
-
bool RingHash::RingHashSubchannelList::UpdateRingHashConnectivityStateLocked() {
|
609
|
+
void RingHash::RingHashSubchannelList::UpdateRingHashConnectivityStateLocked(
|
610
|
+
size_t index, bool connection_attempt_complete, absl::Status status) {
|
558
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
|
+
}
|
559
623
|
// Only set connectivity state if this is the current subchannel list.
|
560
|
-
if (p->subchannel_list_.get() != this) return
|
624
|
+
if (p->subchannel_list_.get() != this) return;
|
561
625
|
// The overall aggregation rules here are:
|
562
626
|
// 1. If there is at least one subchannel in READY state, report READY.
|
563
627
|
// 2. If there are 2 or more subchannels in TRANSIENT_FAILURE state, report
|
564
|
-
//
|
628
|
+
// TRANSIENT_FAILURE.
|
565
629
|
// 3. If there is at least one subchannel in CONNECTING state, report
|
566
|
-
//
|
567
|
-
// 4. If there is
|
568
|
-
//
|
630
|
+
// CONNECTING.
|
631
|
+
// 4. If there is one subchannel in TRANSIENT_FAILURE state and there is
|
632
|
+
// more than one subchannel, report CONNECTING.
|
633
|
+
// 5. If there is at least one subchannel in IDLE state, report IDLE.
|
634
|
+
// 6. Otherwise, report TRANSIENT_FAILURE.
|
635
|
+
//
|
636
|
+
// We set start_connection_attempt to true if we match rules 2, 3, or 6.
|
637
|
+
grpc_connectivity_state state;
|
638
|
+
bool start_connection_attempt = false;
|
569
639
|
if (num_ready_ > 0) {
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
}
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
640
|
+
state = GRPC_CHANNEL_READY;
|
641
|
+
} else if (num_transient_failure_ >= 2) {
|
642
|
+
state = GRPC_CHANNEL_TRANSIENT_FAILURE;
|
643
|
+
start_connection_attempt = true;
|
644
|
+
} else if (num_connecting_ > 0) {
|
645
|
+
state = GRPC_CHANNEL_CONNECTING;
|
646
|
+
} else if (num_transient_failure_ == 1 && num_subchannels() > 1) {
|
647
|
+
state = GRPC_CHANNEL_CONNECTING;
|
648
|
+
start_connection_attempt = true;
|
649
|
+
} else if (num_idle_ > 0) {
|
650
|
+
state = GRPC_CHANNEL_IDLE;
|
651
|
+
} else {
|
652
|
+
state = GRPC_CHANNEL_TRANSIENT_FAILURE;
|
653
|
+
start_connection_attempt = true;
|
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
|
+
}
|
666
|
+
// Generate new picker and return it to the channel.
|
667
|
+
// Note that we use our own picker regardless of connectivity state.
|
592
668
|
p->channel_control_helper()->UpdateState(
|
593
|
-
|
594
|
-
absl::make_unique<
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
669
|
+
state, status,
|
670
|
+
absl::make_unique<Picker>(p->Ref(DEBUG_LOCATION, "RingHashPicker"),
|
671
|
+
ring_));
|
672
|
+
// While the ring_hash policy is reporting TRANSIENT_FAILURE, it will
|
673
|
+
// not be getting any pick requests from the priority policy.
|
674
|
+
// However, because the ring_hash policy does not attempt to
|
675
|
+
// reconnect to subchannels unless it is getting pick requests,
|
676
|
+
// it will need special handling to ensure that it will eventually
|
677
|
+
// recover from TRANSIENT_FAILURE state once the problem is resolved.
|
678
|
+
// Specifically, it will make sure that it is attempting to connect to
|
679
|
+
// at least one subchannel at any given time. After a given subchannel
|
680
|
+
// fails a connection attempt, it will move on to the next subchannel
|
681
|
+
// in the ring. It will keep doing this until one of the subchannels
|
682
|
+
// successfully connects, at which point it will report READY and stop
|
683
|
+
// proactively trying to connect. The policy will remain in
|
684
|
+
// TRANSIENT_FAILURE until at least one subchannel becomes connected,
|
685
|
+
// even if subchannels are in state CONNECTING during that time.
|
686
|
+
//
|
687
|
+
// Note that we do the same thing when the policy is in state
|
688
|
+
// CONNECTING, just to ensure that we don't remain in CONNECTING state
|
689
|
+
// indefinitely if there are no new picks coming in.
|
690
|
+
if (internally_triggered_connection_index_.has_value() &&
|
691
|
+
*internally_triggered_connection_index_ == index &&
|
692
|
+
connection_attempt_complete) {
|
693
|
+
internally_triggered_connection_index_.reset();
|
694
|
+
}
|
695
|
+
if (start_connection_attempt &&
|
696
|
+
!internally_triggered_connection_index_.has_value()) {
|
697
|
+
size_t next_index = (index + 1) % num_subchannels();
|
698
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)) {
|
699
|
+
gpr_log(GPR_INFO,
|
700
|
+
"[RH %p] triggering internal connection attempt for subchannel "
|
701
|
+
"%p, subchannel_list %p (index %" PRIuPTR " of %" PRIuPTR ")",
|
702
|
+
p, subchannel(next_index)->subchannel(), this, next_index,
|
703
|
+
num_subchannels());
|
704
|
+
}
|
705
|
+
internally_triggered_connection_index_ = next_index;
|
706
|
+
subchannel(next_index)->subchannel()->RequestConnection();
|
707
|
+
}
|
601
708
|
}
|
602
709
|
|
603
710
|
//
|
604
711
|
// RingHash::RingHashSubchannelData
|
605
712
|
//
|
606
713
|
|
607
|
-
void RingHash::RingHashSubchannelData::
|
608
|
-
grpc_connectivity_state
|
714
|
+
void RingHash::RingHashSubchannelData::ProcessConnectivityChangeLocked(
|
715
|
+
absl::optional<grpc_connectivity_state> old_state,
|
716
|
+
grpc_connectivity_state new_state) {
|
609
717
|
RingHash* p = static_cast<RingHash*>(subchannel_list()->policy());
|
718
|
+
grpc_connectivity_state last_connectivity_state = GetConnectivityState();
|
610
719
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)) {
|
611
720
|
gpr_log(
|
612
721
|
GPR_INFO,
|
@@ -614,79 +723,54 @@ void RingHash::RingHashSubchannelData::UpdateConnectivityStateLocked(
|
|
614
723
|
"(index %" PRIuPTR " of %" PRIuPTR "): prev_state=%s new_state=%s",
|
615
724
|
p, subchannel(), subchannel_list(), Index(),
|
616
725
|
subchannel_list()->num_subchannels(),
|
617
|
-
ConnectivityStateName(
|
618
|
-
ConnectivityStateName(
|
619
|
-
}
|
620
|
-
// Decide what state to report for aggregation purposes.
|
621
|
-
// If we haven't seen a failure since the last time we were in state
|
622
|
-
// READY, then we report the state change as-is. However, once we do see
|
623
|
-
// a failure, we report TRANSIENT_FAILURE and do not report any subsequent
|
624
|
-
// state changes until we go back into state READY.
|
625
|
-
if (!seen_failure_since_ready_) {
|
626
|
-
if (connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
627
|
-
seen_failure_since_ready_ = true;
|
628
|
-
}
|
629
|
-
subchannel_list()->UpdateStateCountersLocked(last_connectivity_state_,
|
630
|
-
connectivity_state);
|
631
|
-
} else {
|
632
|
-
if (connectivity_state == GRPC_CHANNEL_READY) {
|
633
|
-
seen_failure_since_ready_ = false;
|
634
|
-
subchannel_list()->UpdateStateCountersLocked(
|
635
|
-
GRPC_CHANNEL_TRANSIENT_FAILURE, connectivity_state);
|
636
|
-
}
|
726
|
+
ConnectivityStateName(last_connectivity_state),
|
727
|
+
ConnectivityStateName(new_state));
|
637
728
|
}
|
638
|
-
// Record last seen connectivity state.
|
639
|
-
last_connectivity_state_ = connectivity_state;
|
640
|
-
}
|
641
|
-
|
642
|
-
void RingHash::RingHashSubchannelData::ProcessConnectivityChangeLocked(
|
643
|
-
grpc_connectivity_state connectivity_state) {
|
644
|
-
RingHash* p = static_cast<RingHash*>(subchannel_list()->policy());
|
645
729
|
GPR_ASSERT(subchannel() != nullptr);
|
646
|
-
//
|
647
|
-
|
648
|
-
|
649
|
-
//
|
650
|
-
|
651
|
-
|
652
|
-
// when the subchannel list was created, we'd wind up in a constant
|
653
|
-
// loop of re-resolution.
|
654
|
-
// Also attempt to reconnect.
|
655
|
-
if (connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
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)) {
|
656
736
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)) {
|
657
737
|
gpr_log(GPR_INFO,
|
658
|
-
"[RH %p] Subchannel %p
|
659
|
-
|
660
|
-
p, subchannel());
|
738
|
+
"[RH %p] Subchannel %p reported %s; requesting re-resolution", p,
|
739
|
+
subchannel(), ConnectivityStateName(new_state));
|
661
740
|
}
|
662
741
|
p->channel_control_helper()->RequestReresolution();
|
663
742
|
}
|
664
|
-
|
665
|
-
|
743
|
+
const bool connection_attempt_complete = new_state != GRPC_CHANNEL_CONNECTING;
|
744
|
+
// Decide what state to report for the purposes of aggregation and
|
745
|
+
// picker behavior.
|
746
|
+
// If the last recorded state was TRANSIENT_FAILURE, ignore the update
|
747
|
+
// unless the new state is READY.
|
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;
|
759
|
+
}
|
760
|
+
// Update state counters used for aggregation.
|
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();
|
767
|
+
}
|
768
|
+
// Update last seen state, also used by picker.
|
769
|
+
connectivity_state_.store(new_state, std::memory_order_relaxed);
|
666
770
|
// Update the RH policy's connectivity state, creating new picker and new
|
667
771
|
// ring.
|
668
|
-
|
669
|
-
|
670
|
-
// While the ring_hash policy is reporting TRANSIENT_FAILURE, it will
|
671
|
-
// not be getting any pick requests from the priority policy.
|
672
|
-
// However, because the ring_hash policy does not attempt to
|
673
|
-
// reconnect to subchannels unless it is getting pick requests,
|
674
|
-
// it will need special handling to ensure that it will eventually
|
675
|
-
// recover from TRANSIENT_FAILURE state once the problem is resolved.
|
676
|
-
// Specifically, it will make sure that it is attempting to connect to
|
677
|
-
// at least one subchannel at any given time. After a given subchannel
|
678
|
-
// fails a connection attempt, it will move on to the next subchannel
|
679
|
-
// in the ring. It will keep doing this until one of the subchannels
|
680
|
-
// successfully connects, at which point it will report READY and stop
|
681
|
-
// proactively trying to connect. The policy will remain in
|
682
|
-
// TRANSIENT_FAILURE until at least one subchannel becomes connected,
|
683
|
-
// even if subchannels are in state CONNECTING during that time.
|
684
|
-
if (transient_failure &&
|
685
|
-
connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
686
|
-
size_t next_index = (Index() + 1) % subchannel_list()->num_subchannels();
|
687
|
-
RingHashSubchannelData* next_sd = subchannel_list()->subchannel(next_index);
|
688
|
-
next_sd->subchannel()->AttemptToConnect();
|
689
|
-
}
|
772
|
+
subchannel_list()->UpdateRingHashConnectivityStateLocked(
|
773
|
+
Index(), connection_attempt_complete, status);
|
690
774
|
}
|
691
775
|
|
692
776
|
//
|
@@ -704,6 +788,7 @@ RingHash::~RingHash() {
|
|
704
788
|
gpr_log(GPR_INFO, "[RH %p] Destroying Ring Hash policy", this);
|
705
789
|
}
|
706
790
|
GPR_ASSERT(subchannel_list_ == nullptr);
|
791
|
+
GPR_ASSERT(latest_pending_subchannel_list_ == nullptr);
|
707
792
|
}
|
708
793
|
|
709
794
|
void RingHash::ShutdownLocked() {
|
@@ -712,10 +797,15 @@ void RingHash::ShutdownLocked() {
|
|
712
797
|
}
|
713
798
|
shutdown_ = true;
|
714
799
|
subchannel_list_.reset();
|
715
|
-
|
800
|
+
latest_pending_subchannel_list_.reset();
|
716
801
|
}
|
717
802
|
|
718
|
-
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
|
+
}
|
719
809
|
|
720
810
|
void RingHash::UpdateLocked(UpdateArgs args) {
|
721
811
|
config_ = std::move(args.config);
|
@@ -725,16 +815,7 @@ void RingHash::UpdateLocked(UpdateArgs args) {
|
|
725
815
|
gpr_log(GPR_INFO, "[RH %p] received update with %" PRIuPTR " addresses",
|
726
816
|
this, args.addresses->size());
|
727
817
|
}
|
728
|
-
|
729
|
-
addresses.reserve(args.addresses->size());
|
730
|
-
for (ServerAddress& address : *args.addresses) {
|
731
|
-
const ServerAddressWeightAttribute* weight_attribute =
|
732
|
-
static_cast<const ServerAddressWeightAttribute*>(address.GetAttribute(
|
733
|
-
ServerAddressWeightAttribute::kServerAddressWeightAttributeKey));
|
734
|
-
if (weight_attribute == nullptr || weight_attribute->weight() > 0) {
|
735
|
-
addresses.emplace_back(std::move(address));
|
736
|
-
}
|
737
|
-
}
|
818
|
+
addresses = *std::move(args.addresses);
|
738
819
|
} else {
|
739
820
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_ring_hash_trace)) {
|
740
821
|
gpr_log(GPR_INFO, "[RH %p] received update with addresses error: %s",
|
@@ -744,22 +825,41 @@ void RingHash::UpdateLocked(UpdateArgs args) {
|
|
744
825
|
// failure and keep using the existing list.
|
745
826
|
if (subchannel_list_ != nullptr) return;
|
746
827
|
}
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
|
756
|
-
|
757
|
-
|
758
|
-
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
|
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>(
|
834
|
+
this, std::move(addresses), *args.args);
|
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
|
+
}
|
763
863
|
}
|
764
864
|
}
|
765
865
|
|