grpc 1.46.3-x86_64-linux → 1.47.0-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 +49 -97
- data/include/grpc/event_engine/event_engine.h +42 -7
- 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 +112 -0
- data/include/grpc/grpc_security.h +11 -0
- data/include/grpc/impl/codegen/port_platform.h +100 -36
- data/include/grpc/impl/codegen/slice.h +1 -1
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +18 -30
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +4 -1
- 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 +5 -5
- data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
- data/src/core/ext/filters/client_channel/client_channel.cc +60 -17
- data/src/core/ext/filters/client_channel/client_channel.h +26 -6
- 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 +7 -5
- data/src/core/ext/filters/client_channel/connector.h +8 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
- 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 +9 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
- 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 +408 -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 +1038 -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 +60 -52
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -60
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +157 -96
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +45 -10
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +30 -5
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +99 -23
- 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 +30 -4
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +75 -11
- data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
- data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
- 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 +2 -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 +23 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +134 -43
- 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 +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
- 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 +30 -7
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
- 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 +59 -13
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +13 -1
- 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 +15 -11
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -33
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
- data/src/core/ext/filters/client_channel/retry_filter.cc +42 -2
- data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
- 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 +22 -5
- data/src/core/ext/filters/client_channel/subchannel.cc +156 -160
- data/src/core/ext/filters/client_channel/subchannel.h +80 -20
- data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
- 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 +16 -2
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +12 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +14 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +7 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +5 -10
- data/src/core/ext/filters/http/http_filters_plugin.cc +7 -8
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +80 -247
- data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
- data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
- data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +101 -135
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -15
- 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 +69 -20
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
- 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 +6 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
- 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 +12 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
- 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 +25 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -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 +24 -3
- data/src/core/ext/transport/chttp2/transport/parsing.cc +27 -6
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
- 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 +38 -2
- data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
- 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_store.cc +4 -2
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -1
- data/src/core/ext/xds/xds_certificate_provider.h +1 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
- data/src/core/ext/xds/xds_client.cc +46 -22
- data/src/core/ext/xds/xds_cluster.cc +106 -16
- data/src/core/ext/xds/xds_cluster.h +3 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +3 -3
- data/src/core/ext/xds/xds_listener.cc +19 -9
- data/src/core/ext/xds/xds_server_config_fetcher.cc +2 -1
- data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
- data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
- data/src/core/lib/avl/avl.h +3 -1
- data/src/core/lib/channel/call_finalization.h +4 -0
- data/src/core/lib/channel/call_tracer.h +8 -2
- data/src/core/lib/channel/channel_args.cc +41 -22
- data/src/core/lib/channel/channel_args.h +33 -3
- data/src/core/lib/channel/channel_args_preconditioning.cc +3 -3
- data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
- data/src/core/lib/channel/channel_stack.cc +41 -3
- data/src/core/lib/channel/channel_stack.h +49 -3
- data/src/core/lib/channel/channel_stack_builder.cc +9 -19
- data/src/core/lib/channel/channel_stack_builder.h +15 -27
- data/src/core/lib/channel/channel_stack_builder_impl.cc +36 -41
- data/src/core/lib/channel/channel_stack_builder_impl.h +3 -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 +8 -13
- data/src/core/lib/channel/channelz.h +13 -4
- data/src/core/lib/channel/channelz_registry.cc +7 -14
- data/src/core/lib/channel/channelz_registry.h +10 -9
- data/src/core/lib/channel/connected_channel.cc +21 -31
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +444 -189
- data/src/core/lib/channel/promise_based_filter.h +160 -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_internal.cc +45 -10
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/config/core_configuration.cc +3 -0
- data/src/core/lib/config/core_configuration.h +2 -1
- 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 +12 -2
- 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.cc +206 -0
- data/src/core/lib/event_engine/iomgr_engine.h +118 -0
- data/src/core/lib/event_engine/memory_allocator.cc +12 -4
- 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/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 -1
- 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 +8 -4
- 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 +8 -0
- data/src/core/lib/gprpp/time.h +6 -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 +29 -0
- data/src/core/lib/http/format_request.h +2 -0
- data/src/core/lib/http/httpcli.cc +88 -81
- data/src/core/lib/http/httpcli.h +39 -7
- data/src/core/lib/http/httpcli_security_connector.cc +3 -4
- data/src/core/lib/iomgr/endpoint.cc +4 -4
- data/src/core/lib/iomgr/endpoint.h +6 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
- data/src/core/lib/iomgr/ev_posix.cc +1 -4
- data/src/core/lib/iomgr/exec_ctx.h +1 -2
- 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 +0 -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/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 +8 -14
- data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
- 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_cfstream.cc +10 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +12 -5
- data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
- data/src/core/lib/iomgr/tcp_posix.cc +9 -27
- data/src/core/lib/iomgr/tcp_server_posix.cc +26 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
- data/src/core/lib/iomgr/tcp_windows.cc +7 -4
- 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/promise/activity.cc +1 -1
- data/src/core/lib/promise/activity.h +6 -6
- 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 +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 +2 -0
- data/src/core/lib/promise/sleep.h +10 -0
- data/src/core/lib/promise/try_seq.h +2 -2
- data/src/core/lib/resolver/resolver_factory.h +1 -2
- data/src/core/lib/resolver/server_address.cc +9 -3
- data/src/core/lib/resolver/server_address.h +4 -4
- 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 +47 -5
- data/src/core/lib/resource_quota/memory_quota.h +24 -5
- 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/grpc_server_authz_filter.cc +3 -0
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
- data/src/core/lib/security/credentials/call_creds_util.cc +2 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -4
- data/src/core/lib/security/credentials/credentials.h +17 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +13 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -15
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +8 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +4 -4
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +8 -2
- data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +4 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +4 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +26 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +28 -4
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +10 -0
- data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +12 -3
- data/src/core/lib/security/credentials/xds/xds_credentials.h +5 -5
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
- data/src/core/lib/security/security_connector/security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
- data/src/core/lib/security/transport/client_auth_filter.cc +6 -8
- data/src/core/lib/security/transport/secure_endpoint.cc +23 -12
- data/src/core/lib/security/transport/security_handshaker.cc +5 -5
- data/src/core/lib/security/transport/security_handshaker.h +1 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
- data/src/core/lib/service_config/service_config.h +4 -8
- data/src/core/lib/service_config/service_config_call_data.h +4 -1
- data/src/core/lib/service_config/service_config_impl.cc +7 -0
- data/src/core/lib/service_config/service_config_impl.h +9 -2
- data/src/core/lib/service_config/service_config_parser.cc +8 -0
- 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 +50 -23
- data/src/core/lib/slice/slice_buffer.h +106 -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_split.cc +3 -0
- data/src/core/lib/slice/slice_split.h +0 -4
- data/src/core/lib/slice/slice_string_helpers.cc +4 -0
- data/src/core/lib/slice/slice_string_helpers.h +1 -4
- 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 +41 -26
- data/src/core/lib/surface/call.h +16 -2
- 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 +94 -57
- 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 +14 -6
- data/src/core/lib/surface/completion_queue.h +5 -1
- 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 -45
- data/src/core/lib/surface/init.h +0 -8
- data/src/core/lib/surface/lame_client.cc +64 -110
- data/src/core/lib/surface/lame_client.h +40 -2
- data/src/core/lib/surface/metadata_array.cc +2 -0
- data/src/core/lib/surface/server.cc +69 -56
- data/src/core/lib/surface/server.h +39 -9
- data/src/core/lib/surface/validate_metadata.cc +2 -5
- 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/byte_stream.cc +4 -3
- data/src/core/lib/transport/byte_stream.h +5 -1
- 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 +4 -2
- data/src/core/lib/transport/error_utils.h +5 -1
- data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
- 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 +24 -10
- 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 -17
- data/src/core/lib/transport/transport.h +28 -2
- data/src/core/lib/transport/transport_impl.h +10 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -10
- 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/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/ruby/ext/grpc/extconf.rb +2 -2
- 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/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
- metadata +36 -29
- 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/promise.h +0 -51
- 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
@@ -23,36 +23,43 @@
|
|
23
23
|
|
24
24
|
#include <algorithm>
|
25
25
|
#include <cstring>
|
26
|
+
#include <memory>
|
27
|
+
#include <new>
|
28
|
+
#include <type_traits>
|
29
|
+
#include <utility>
|
26
30
|
|
27
|
-
#include "absl/
|
31
|
+
#include "absl/status/statusor.h"
|
28
32
|
|
33
|
+
#include <grpc/slice.h>
|
29
34
|
#include <grpc/status.h>
|
30
35
|
#include <grpc/support/alloc.h>
|
31
|
-
#include <grpc/support/
|
36
|
+
#include <grpc/support/log.h>
|
32
37
|
|
33
|
-
#include "src/core/ext/filters/client_channel/client_channel.h"
|
34
38
|
#include "src/core/ext/filters/client_channel/health/health_check_client.h"
|
35
39
|
#include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
|
36
40
|
#include "src/core/ext/filters/client_channel/subchannel_pool_interface.h"
|
37
|
-
#include "src/core/
|
41
|
+
#include "src/core/ext/filters/client_channel/subchannel_stream_client.h"
|
38
42
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
39
43
|
#include "src/core/lib/backoff/backoff.h"
|
40
44
|
#include "src/core/lib/channel/channel_args.h"
|
45
|
+
#include "src/core/lib/channel/channel_stack_builder.h"
|
41
46
|
#include "src/core/lib/channel/channel_stack_builder_impl.h"
|
42
|
-
#include "src/core/lib/channel/
|
47
|
+
#include "src/core/lib/channel/channel_trace.h"
|
48
|
+
#include "src/core/lib/channel/channelz.h"
|
43
49
|
#include "src/core/lib/config/core_configuration.h"
|
44
50
|
#include "src/core/lib/debug/stats.h"
|
51
|
+
#include "src/core/lib/debug/trace.h"
|
45
52
|
#include "src/core/lib/gpr/alloc.h"
|
46
53
|
#include "src/core/lib/gprpp/debug_location.h"
|
47
|
-
#include "src/core/lib/gprpp/manual_constructor.h"
|
48
54
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
49
55
|
#include "src/core/lib/gprpp/sync.h"
|
56
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
57
|
+
#include "src/core/lib/iomgr/pollset_set.h"
|
50
58
|
#include "src/core/lib/profiling/timers.h"
|
51
|
-
#include "src/core/lib/
|
52
|
-
#include "src/core/lib/surface/
|
59
|
+
#include "src/core/lib/surface/channel_init.h"
|
60
|
+
#include "src/core/lib/surface/channel_stack_type.h"
|
53
61
|
#include "src/core/lib/transport/connectivity_state.h"
|
54
62
|
#include "src/core/lib/transport/error_utils.h"
|
55
|
-
#include "src/core/lib/uri/uri_parser.h"
|
56
63
|
|
57
64
|
// Strong and weak refs.
|
58
65
|
#define INTERNAL_REF_BITS 16
|
@@ -308,43 +315,33 @@ class Subchannel::ConnectedSubchannelStateWatcher
|
|
308
315
|
const absl::Status& status) override {
|
309
316
|
Subchannel* c = subchannel_.get();
|
310
317
|
MutexLock lock(&c->mu_);
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
// We need to construct our own status if the underlying state was
|
328
|
-
// shutdown since the accompanying status will be StatusCode::OK
|
329
|
-
// otherwise.
|
330
|
-
c->SetConnectivityStateLocked(
|
331
|
-
GRPC_CHANNEL_TRANSIENT_FAILURE,
|
332
|
-
new_state == GRPC_CHANNEL_SHUTDOWN
|
333
|
-
? absl::Status(absl::StatusCode::kUnavailable,
|
334
|
-
"Subchannel has disconnected.")
|
335
|
-
: status);
|
336
|
-
c->backoff_begun_ = false;
|
337
|
-
c->backoff_.Reset();
|
338
|
-
}
|
339
|
-
break;
|
318
|
+
// If we're either shutting down or have already seen this connection
|
319
|
+
// failure (i.e., c->connected_subchannel_ is null), do nothing.
|
320
|
+
//
|
321
|
+
// The transport reports TRANSIENT_FAILURE upon GOAWAY but SHUTDOWN
|
322
|
+
// upon connection close. So if the server gracefully shuts down,
|
323
|
+
// we will see TRANSIENT_FAILURE followed by SHUTDOWN, but if not, we
|
324
|
+
// will see only SHUTDOWN. Either way, we react to the first one we
|
325
|
+
// see, ignoring anything that happens after that.
|
326
|
+
if (c->connected_subchannel_ == nullptr) return;
|
327
|
+
if (new_state == GRPC_CHANNEL_TRANSIENT_FAILURE ||
|
328
|
+
new_state == GRPC_CHANNEL_SHUTDOWN) {
|
329
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_subchannel)) {
|
330
|
+
gpr_log(GPR_INFO,
|
331
|
+
"subchannel %p %s: Connected subchannel %p reports %s: %s", c,
|
332
|
+
c->key_.ToString().c_str(), c->connected_subchannel_.get(),
|
333
|
+
ConnectivityStateName(new_state), status.ToString().c_str());
|
340
334
|
}
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
// this watch from. And a connected subchannel should never go
|
345
|
-
// from READY to CONNECTING or IDLE.
|
346
|
-
c->SetConnectivityStateLocked(new_state, status);
|
335
|
+
c->connected_subchannel_.reset();
|
336
|
+
if (c->channelz_node() != nullptr) {
|
337
|
+
c->channelz_node()->SetChildSocket(nullptr);
|
347
338
|
}
|
339
|
+
// Even though we're reporting IDLE instead of TRANSIENT_FAILURE here,
|
340
|
+
// pass along the status from the transport, since it may have
|
341
|
+
// keepalive info attached to it that the channel needs.
|
342
|
+
// TODO(roth): Consider whether there's a cleaner way to do this.
|
343
|
+
c->SetConnectivityStateLocked(GRPC_CHANNEL_IDLE, status);
|
344
|
+
c->backoff_.Reset();
|
348
345
|
}
|
349
346
|
}
|
350
347
|
|
@@ -563,6 +560,25 @@ Subchannel::HealthWatcherMap::CheckConnectivityStateLocked(
|
|
563
560
|
|
564
561
|
void Subchannel::HealthWatcherMap::ShutdownLocked() { map_.clear(); }
|
565
562
|
|
563
|
+
//
|
564
|
+
// Subchannel::ConnectivityStateWatcherInterface
|
565
|
+
//
|
566
|
+
|
567
|
+
void Subchannel::ConnectivityStateWatcherInterface::PushConnectivityStateChange(
|
568
|
+
ConnectivityStateChange state_change) {
|
569
|
+
MutexLock lock(&mu_);
|
570
|
+
connectivity_state_queue_.push_back(std::move(state_change));
|
571
|
+
}
|
572
|
+
|
573
|
+
Subchannel::ConnectivityStateWatcherInterface::ConnectivityStateChange
|
574
|
+
Subchannel::ConnectivityStateWatcherInterface::PopConnectivityStateChange() {
|
575
|
+
MutexLock lock(&mu_);
|
576
|
+
GPR_ASSERT(!connectivity_state_queue_.empty());
|
577
|
+
ConnectivityStateChange state_change = connectivity_state_queue_.front();
|
578
|
+
connectivity_state_queue_.pop_front();
|
579
|
+
return state_change;
|
580
|
+
}
|
581
|
+
|
566
582
|
//
|
567
583
|
// Subchannel
|
568
584
|
//
|
@@ -622,21 +638,6 @@ BackOff::Options ParseArgsForBackoffValues(const grpc_channel_args* args,
|
|
622
638
|
|
623
639
|
} // namespace
|
624
640
|
|
625
|
-
void Subchannel::ConnectivityStateWatcherInterface::PushConnectivityStateChange(
|
626
|
-
ConnectivityStateChange state_change) {
|
627
|
-
MutexLock lock(&mu_);
|
628
|
-
connectivity_state_queue_.push_back(std::move(state_change));
|
629
|
-
}
|
630
|
-
|
631
|
-
Subchannel::ConnectivityStateWatcherInterface::ConnectivityStateChange
|
632
|
-
Subchannel::ConnectivityStateWatcherInterface::PopConnectivityStateChange() {
|
633
|
-
MutexLock lock(&mu_);
|
634
|
-
GPR_ASSERT(!connectivity_state_queue_.empty());
|
635
|
-
ConnectivityStateChange state_change = connectivity_state_queue_.front();
|
636
|
-
connectivity_state_queue_.pop_front();
|
637
|
-
return state_change;
|
638
|
-
}
|
639
|
-
|
640
641
|
Subchannel::Subchannel(SubchannelKey key,
|
641
642
|
OrphanablePtr<SubchannelConnector> connector,
|
642
643
|
const grpc_channel_args* args)
|
@@ -650,6 +651,7 @@ Subchannel::Subchannel(SubchannelKey key,
|
|
650
651
|
GRPC_STATS_INC_CLIENT_SUBCHANNELS_CREATED();
|
651
652
|
GRPC_CLOSURE_INIT(&on_connecting_finished_, OnConnectingFinished, this,
|
652
653
|
grpc_schedule_on_exec_ctx);
|
654
|
+
GRPC_CLOSURE_INIT(&on_retry_timer_, OnRetryTimer, this, nullptr);
|
653
655
|
// Check proxy mapper to determine address to connect to and channel
|
654
656
|
// args to use.
|
655
657
|
address_for_connect_ = key_.address();
|
@@ -676,7 +678,9 @@ Subchannel::Subchannel(SubchannelKey key,
|
|
676
678
|
{GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT, 0,
|
677
679
|
INT_MAX}));
|
678
680
|
channelz_node_ = MakeRefCounted<channelz::SubchannelNode>(
|
679
|
-
grpc_sockaddr_to_uri(&key_.address())
|
681
|
+
grpc_sockaddr_to_uri(&key_.address())
|
682
|
+
.value_or("<unknown address type>"),
|
683
|
+
channel_tracer_max_memory);
|
680
684
|
channelz_node_->AddTraceEvent(
|
681
685
|
channelz::ChannelTrace::Severity::Info,
|
682
686
|
grpc_slice_from_static_string("subchannel created"));
|
@@ -787,20 +791,20 @@ void Subchannel::CancelConnectivityStateWatch(
|
|
787
791
|
}
|
788
792
|
}
|
789
793
|
|
790
|
-
void Subchannel::
|
794
|
+
void Subchannel::RequestConnection() {
|
791
795
|
MutexLock lock(&mu_);
|
792
|
-
|
796
|
+
if (state_ == GRPC_CHANNEL_IDLE) {
|
797
|
+
StartConnectingLocked();
|
798
|
+
} else if (state_ == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
799
|
+
connection_requested_ = true;
|
800
|
+
}
|
793
801
|
}
|
794
802
|
|
795
803
|
void Subchannel::ResetBackoff() {
|
796
804
|
MutexLock lock(&mu_);
|
797
805
|
backoff_.Reset();
|
798
|
-
if (
|
799
|
-
|
800
|
-
grpc_timer_cancel(&retry_alarm_);
|
801
|
-
} else {
|
802
|
-
backoff_begun_ = false;
|
803
|
-
MaybeStartConnectingLocked();
|
806
|
+
if (state_ == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
807
|
+
grpc_timer_cancel(&retry_timer_);
|
804
808
|
}
|
805
809
|
}
|
806
810
|
|
@@ -812,13 +816,36 @@ void Subchannel::Orphan() {
|
|
812
816
|
subchannel_pool_.reset();
|
813
817
|
}
|
814
818
|
MutexLock lock(&mu_);
|
815
|
-
GPR_ASSERT(!
|
816
|
-
|
819
|
+
GPR_ASSERT(!shutdown_);
|
820
|
+
shutdown_ = true;
|
817
821
|
connector_.reset();
|
818
822
|
connected_subchannel_.reset();
|
819
823
|
health_watcher_map_.ShutdownLocked();
|
820
824
|
}
|
821
825
|
|
826
|
+
void Subchannel::AddDataProducer(DataProducerInterface* data_producer) {
|
827
|
+
MutexLock lock(&mu_);
|
828
|
+
auto& entry = data_producer_map_[data_producer->type()];
|
829
|
+
GPR_ASSERT(entry == nullptr);
|
830
|
+
entry = data_producer;
|
831
|
+
}
|
832
|
+
|
833
|
+
void Subchannel::RemoveDataProducer(DataProducerInterface* data_producer) {
|
834
|
+
MutexLock lock(&mu_);
|
835
|
+
auto it = data_producer_map_.find(data_producer->type());
|
836
|
+
GPR_ASSERT(it != data_producer_map_.end());
|
837
|
+
GPR_ASSERT(it->second == data_producer);
|
838
|
+
data_producer_map_.erase(it);
|
839
|
+
}
|
840
|
+
|
841
|
+
Subchannel::DataProducerInterface* Subchannel::GetDataProducer(
|
842
|
+
UniqueTypeName type) {
|
843
|
+
MutexLock lock(&mu_);
|
844
|
+
auto it = data_producer_map_.find(type);
|
845
|
+
if (it == data_producer_map_.end()) return nullptr;
|
846
|
+
return it->second;
|
847
|
+
}
|
848
|
+
|
822
849
|
namespace {
|
823
850
|
|
824
851
|
// Returns a string indicating the subchannel's connectivity state change to
|
@@ -860,77 +887,44 @@ void Subchannel::SetConnectivityStateLocked(grpc_connectivity_state state,
|
|
860
887
|
health_watcher_map_.NotifyLocked(state, status);
|
861
888
|
}
|
862
889
|
|
863
|
-
void Subchannel::
|
864
|
-
|
865
|
-
|
866
|
-
|
867
|
-
|
868
|
-
if (connecting_) {
|
869
|
-
// Already connecting: don't restart.
|
870
|
-
return;
|
871
|
-
}
|
872
|
-
if (connected_subchannel_ != nullptr) {
|
873
|
-
// Already connected: don't restart.
|
874
|
-
return;
|
875
|
-
}
|
876
|
-
connecting_ = true;
|
877
|
-
WeakRef(DEBUG_LOCATION, "connecting")
|
878
|
-
.release(); // ref held by pending connect
|
879
|
-
if (!backoff_begun_) {
|
880
|
-
backoff_begun_ = true;
|
881
|
-
ContinueConnectingLocked();
|
882
|
-
} else {
|
883
|
-
GPR_ASSERT(!have_retry_alarm_);
|
884
|
-
have_retry_alarm_ = true;
|
885
|
-
const Duration time_til_next =
|
886
|
-
next_attempt_deadline_ - ExecCtx::Get()->Now();
|
887
|
-
if (time_til_next <= Duration::Zero()) {
|
888
|
-
gpr_log(GPR_INFO, "subchannel %p %s: Retry immediately", this,
|
889
|
-
key_.ToString().c_str());
|
890
|
-
} else {
|
891
|
-
gpr_log(GPR_INFO, "subchannel %p %s: Retry in %" PRId64 " milliseconds",
|
892
|
-
this, key_.ToString().c_str(), time_til_next.millis());
|
893
|
-
}
|
894
|
-
GRPC_CLOSURE_INIT(&on_retry_alarm_, OnRetryAlarm, this,
|
895
|
-
grpc_schedule_on_exec_ctx);
|
896
|
-
grpc_timer_init(&retry_alarm_, next_attempt_deadline_, &on_retry_alarm_);
|
890
|
+
void Subchannel::OnRetryTimer(void* arg, grpc_error_handle /*error*/) {
|
891
|
+
WeakRefCountedPtr<Subchannel> c(static_cast<Subchannel*>(arg));
|
892
|
+
{
|
893
|
+
MutexLock lock(&c->mu_);
|
894
|
+
c->OnRetryTimerLocked();
|
897
895
|
}
|
896
|
+
c.reset(DEBUG_LOCATION, "RetryTimer");
|
898
897
|
}
|
899
898
|
|
900
|
-
void Subchannel::
|
901
|
-
|
902
|
-
|
903
|
-
c->have_retry_alarm_ = false;
|
904
|
-
if (c->disconnected_) {
|
905
|
-
error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING("Disconnected",
|
906
|
-
&error, 1);
|
907
|
-
} else if (c->retry_immediately_) {
|
908
|
-
c->retry_immediately_ = false;
|
909
|
-
error = GRPC_ERROR_NONE;
|
910
|
-
} else {
|
911
|
-
(void)GRPC_ERROR_REF(error);
|
912
|
-
}
|
913
|
-
if (error == GRPC_ERROR_NONE) {
|
899
|
+
void Subchannel::OnRetryTimerLocked() {
|
900
|
+
if (shutdown_) return;
|
901
|
+
if (connection_requested_) {
|
914
902
|
gpr_log(GPR_INFO,
|
915
|
-
"subchannel %p %s:
|
916
|
-
|
917
|
-
|
918
|
-
|
919
|
-
|
920
|
-
|
903
|
+
"subchannel %p %s: connection attempt requested while backoff "
|
904
|
+
"timer was pending, retrying now",
|
905
|
+
this, key_.ToString().c_str());
|
906
|
+
connection_requested_ = false;
|
907
|
+
StartConnectingLocked();
|
908
|
+
} else {
|
909
|
+
gpr_log(GPR_INFO, "subchannel %p %s: backoff delay elapsed, reporting IDLE",
|
910
|
+
this, key_.ToString().c_str());
|
911
|
+
SetConnectivityStateLocked(GRPC_CHANNEL_IDLE, absl::OkStatus());
|
921
912
|
}
|
922
|
-
GRPC_ERROR_UNREF(error);
|
923
913
|
}
|
924
914
|
|
925
|
-
void Subchannel::
|
915
|
+
void Subchannel::StartConnectingLocked() {
|
916
|
+
// Set next attempt time.
|
917
|
+
const Timestamp min_deadline = min_connect_timeout_ + ExecCtx::Get()->Now();
|
918
|
+
next_attempt_time_ = backoff_.NextAttemptTime();
|
919
|
+
// Report CONNECTING.
|
920
|
+
SetConnectivityStateLocked(GRPC_CHANNEL_CONNECTING, absl::OkStatus());
|
921
|
+
// Start connection attempt.
|
926
922
|
SubchannelConnector::Args args;
|
927
923
|
args.address = &address_for_connect_;
|
928
924
|
args.interested_parties = pollset_set_;
|
929
|
-
|
930
|
-
next_attempt_deadline_ = backoff_.NextAttemptTime();
|
931
|
-
args.deadline = std::max(next_attempt_deadline_, min_deadline);
|
925
|
+
args.deadline = std::max(next_attempt_time_, min_deadline);
|
932
926
|
args.channel_args = args_;
|
933
|
-
|
927
|
+
WeakRef(DEBUG_LOCATION, "Connect").release(); // Ref held by callback.
|
934
928
|
connector_->Connect(args, &connecting_result_, &on_connecting_finished_);
|
935
929
|
}
|
936
930
|
|
@@ -940,43 +934,49 @@ void Subchannel::OnConnectingFinished(void* arg, grpc_error_handle error) {
|
|
940
934
|
c->connecting_result_.channel_args;
|
941
935
|
{
|
942
936
|
MutexLock lock(&c->mu_);
|
943
|
-
c->
|
944
|
-
if (c->connecting_result_.transport != nullptr &&
|
945
|
-
c->PublishTransportLocked()) {
|
946
|
-
// Do nothing, transport was published.
|
947
|
-
} else if (!c->disconnected_) {
|
948
|
-
gpr_log(GPR_INFO, "subchannel %p %s: connect failed: %s", c.get(),
|
949
|
-
c->key_.ToString().c_str(), grpc_error_std_string(error).c_str());
|
950
|
-
c->SetConnectivityStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE,
|
951
|
-
grpc_error_to_absl_status(error));
|
952
|
-
}
|
937
|
+
c->OnConnectingFinishedLocked(GRPC_ERROR_REF(error));
|
953
938
|
}
|
954
939
|
grpc_channel_args_destroy(delete_channel_args);
|
955
|
-
c.reset(DEBUG_LOCATION, "
|
940
|
+
c.reset(DEBUG_LOCATION, "Connect");
|
956
941
|
}
|
957
942
|
|
958
|
-
|
959
|
-
|
960
|
-
void
|
961
|
-
|
962
|
-
|
963
|
-
|
943
|
+
void Subchannel::OnConnectingFinishedLocked(grpc_error_handle error) {
|
944
|
+
if (shutdown_) {
|
945
|
+
(void)GRPC_ERROR_UNREF(error);
|
946
|
+
return;
|
947
|
+
}
|
948
|
+
// If we didn't get a transport or we fail to publish it, report
|
949
|
+
// TRANSIENT_FAILURE and start the retry timer.
|
950
|
+
// Note that if the connection attempt took longer than the backoff
|
951
|
+
// time, then the timer will fire immediately, and we will quickly
|
952
|
+
// transition back to IDLE.
|
953
|
+
if (connecting_result_.transport == nullptr || !PublishTransportLocked()) {
|
954
|
+
const Duration time_until_next_attempt =
|
955
|
+
next_attempt_time_ - ExecCtx::Get()->Now();
|
956
|
+
gpr_log(GPR_INFO,
|
957
|
+
"subchannel %p %s: connect failed (%s), backing off for %" PRId64
|
958
|
+
" ms",
|
959
|
+
this, key_.ToString().c_str(), grpc_error_std_string(error).c_str(),
|
960
|
+
time_until_next_attempt.millis());
|
961
|
+
SetConnectivityStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE,
|
962
|
+
grpc_error_to_absl_status(error));
|
963
|
+
WeakRef(DEBUG_LOCATION, "RetryTimer").release(); // Ref held by callback.
|
964
|
+
grpc_timer_init(&retry_timer_, next_attempt_time_, &on_retry_timer_);
|
965
|
+
}
|
966
|
+
(void)GRPC_ERROR_UNREF(error);
|
964
967
|
}
|
965
968
|
|
966
|
-
} // namespace
|
967
|
-
|
968
969
|
bool Subchannel::PublishTransportLocked() {
|
969
970
|
// Construct channel stack.
|
970
971
|
ChannelStackBuilderImpl builder("subchannel", GRPC_CLIENT_SUBCHANNEL);
|
971
|
-
builder.SetChannelArgs(connecting_result_.channel_args)
|
972
|
+
builder.SetChannelArgs(ChannelArgs::FromC(connecting_result_.channel_args))
|
972
973
|
.SetTransport(connecting_result_.transport);
|
973
974
|
if (!CoreConfiguration::Get().channel_init().CreateStack(&builder)) {
|
974
975
|
return false;
|
975
976
|
}
|
976
|
-
grpc_channel_stack
|
977
|
-
|
978
|
-
|
979
|
-
if (error != GRPC_ERROR_NONE) {
|
977
|
+
absl::StatusOr<RefCountedPtr<grpc_channel_stack>> stk = builder.Build();
|
978
|
+
if (!stk.ok()) {
|
979
|
+
auto error = absl_status_to_grpc_error(stk.status());
|
980
980
|
grpc_transport_destroy(connecting_result_.transport);
|
981
981
|
gpr_log(GPR_ERROR,
|
982
982
|
"subchannel %p %s: error initializing subchannel stack: %s", this,
|
@@ -987,14 +987,10 @@ bool Subchannel::PublishTransportLocked() {
|
|
987
987
|
RefCountedPtr<channelz::SocketNode> socket =
|
988
988
|
std::move(connecting_result_.socket_node);
|
989
989
|
connecting_result_.Reset();
|
990
|
-
if (
|
991
|
-
grpc_channel_stack_destroy(stk);
|
992
|
-
gpr_free(stk);
|
993
|
-
return false;
|
994
|
-
}
|
990
|
+
if (shutdown_) return false;
|
995
991
|
// Publish.
|
996
992
|
connected_subchannel_.reset(
|
997
|
-
new ConnectedSubchannel(stk, args_, channelz_node_));
|
993
|
+
new ConnectedSubchannel(stk->release(), args_, channelz_node_));
|
998
994
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_subchannel)) {
|
999
995
|
gpr_log(GPR_INFO, "subchannel %p %s: new connected subchannel at %p", this,
|
1000
996
|
key_.ToString().c_str(), connected_subchannel_.get());
|
@@ -19,22 +19,46 @@
|
|
19
19
|
|
20
20
|
#include <grpc/support/port_platform.h>
|
21
21
|
|
22
|
+
#include <stddef.h>
|
23
|
+
|
22
24
|
#include <deque>
|
25
|
+
#include <map>
|
26
|
+
#include <string>
|
27
|
+
|
28
|
+
#include "absl/base/thread_annotations.h"
|
29
|
+
#include "absl/status/status.h"
|
30
|
+
#include "absl/types/optional.h"
|
31
|
+
|
32
|
+
#include <grpc/impl/codegen/connectivity_state.h>
|
33
|
+
#include <grpc/impl/codegen/grpc_types.h>
|
23
34
|
|
24
35
|
#include "src/core/ext/filters/client_channel/client_channel_channelz.h"
|
25
36
|
#include "src/core/ext/filters/client_channel/connector.h"
|
26
37
|
#include "src/core/ext/filters/client_channel/subchannel_pool_interface.h"
|
27
38
|
#include "src/core/lib/backoff/backoff.h"
|
28
39
|
#include "src/core/lib/channel/channel_stack.h"
|
40
|
+
#include "src/core/lib/channel/context.h"
|
29
41
|
#include "src/core/lib/gpr/time_precise.h"
|
42
|
+
#include "src/core/lib/gprpp/debug_location.h"
|
30
43
|
#include "src/core/lib/gprpp/dual_ref_counted.h"
|
44
|
+
#include "src/core/lib/gprpp/orphanable.h"
|
31
45
|
#include "src/core/lib/gprpp/ref_counted.h"
|
32
46
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
33
47
|
#include "src/core/lib/gprpp/sync.h"
|
48
|
+
#include "src/core/lib/gprpp/time.h"
|
49
|
+
#include "src/core/lib/gprpp/unique_type_name.h"
|
50
|
+
#include "src/core/lib/iomgr/call_combiner.h"
|
51
|
+
#include "src/core/lib/iomgr/closure.h"
|
52
|
+
#include "src/core/lib/iomgr/error.h"
|
53
|
+
#include "src/core/lib/iomgr/iomgr_fwd.h"
|
34
54
|
#include "src/core/lib/iomgr/polling_entity.h"
|
55
|
+
#include "src/core/lib/iomgr/resolved_address.h"
|
35
56
|
#include "src/core/lib/iomgr/timer.h"
|
36
57
|
#include "src/core/lib/resource_quota/arena.h"
|
58
|
+
#include "src/core/lib/slice/slice.h"
|
37
59
|
#include "src/core/lib/transport/connectivity_state.h"
|
60
|
+
#include "src/core/lib/transport/metadata_batch.h"
|
61
|
+
#include "src/core/lib/transport/transport.h"
|
38
62
|
|
39
63
|
namespace grpc_core {
|
40
64
|
|
@@ -183,6 +207,20 @@ class Subchannel : public DualRefCounted<Subchannel> {
|
|
183
207
|
ABSL_GUARDED_BY(&mu_);
|
184
208
|
};
|
185
209
|
|
210
|
+
// A base class for producers of subchannel-specific data.
|
211
|
+
// Implementations will typically add their own methods as needed.
|
212
|
+
class DataProducerInterface : public DualRefCounted<DataProducerInterface> {
|
213
|
+
public:
|
214
|
+
// A unique identifier for this implementation.
|
215
|
+
// Only one producer may be registered under a given type name on a
|
216
|
+
// given subchannel at any given time.
|
217
|
+
// Note that we use the pointer address instead of the string
|
218
|
+
// contents for uniqueness; all instances for a given implementation
|
219
|
+
// are expected to return the same string *instance*, not just the
|
220
|
+
// same string contents.
|
221
|
+
virtual UniqueTypeName type() const = 0;
|
222
|
+
};
|
223
|
+
|
186
224
|
// Creates a subchannel.
|
187
225
|
static RefCountedPtr<Subchannel> Create(
|
188
226
|
OrphanablePtr<SubchannelConnector> connector,
|
@@ -198,6 +236,8 @@ class Subchannel : public DualRefCounted<Subchannel> {
|
|
198
236
|
// will have an affect when the subchannel creates a new ConnectedSubchannel.
|
199
237
|
void ThrottleKeepaliveTime(int new_keepalive_time) ABSL_LOCKS_EXCLUDED(mu_);
|
200
238
|
|
239
|
+
grpc_pollset_set* pollset_set() const { return pollset_set_; }
|
240
|
+
|
201
241
|
const grpc_channel_args* channel_args() const { return args_; }
|
202
242
|
|
203
243
|
channelz::SubchannelNode* channelz_node();
|
@@ -237,7 +277,7 @@ class Subchannel : public DualRefCounted<Subchannel> {
|
|
237
277
|
}
|
238
278
|
|
239
279
|
// Attempt to connect to the backend. Has no effect if already connected.
|
240
|
-
void
|
280
|
+
void RequestConnection() ABSL_LOCKS_EXCLUDED(mu_);
|
241
281
|
|
242
282
|
// Resets the connection backoff of the subchannel.
|
243
283
|
void ResetBackoff() ABSL_LOCKS_EXCLUDED(mu_);
|
@@ -245,6 +285,17 @@ class Subchannel : public DualRefCounted<Subchannel> {
|
|
245
285
|
// Tears down any existing connection, and arranges for destruction
|
246
286
|
void Orphan() override ABSL_LOCKS_EXCLUDED(mu_);
|
247
287
|
|
288
|
+
// Access to data producer map.
|
289
|
+
// We do not hold refs to the data producer; the implementation is
|
290
|
+
// expected to register itself upon construction and remove itself
|
291
|
+
// upon destruction.
|
292
|
+
void AddDataProducer(DataProducerInterface* data_producer)
|
293
|
+
ABSL_LOCKS_EXCLUDED(mu_);
|
294
|
+
void RemoveDataProducer(DataProducerInterface* data_producer)
|
295
|
+
ABSL_LOCKS_EXCLUDED(mu_);
|
296
|
+
DataProducerInterface* GetDataProducer(UniqueTypeName type)
|
297
|
+
ABSL_LOCKS_EXCLUDED(mu_);
|
298
|
+
|
248
299
|
private:
|
249
300
|
// A linked list of ConnectivityStateWatcherInterfaces that are monitoring
|
250
301
|
// the subchannel's state.
|
@@ -308,7 +359,6 @@ class Subchannel : public DualRefCounted<Subchannel> {
|
|
308
359
|
};
|
309
360
|
|
310
361
|
class ConnectedSubchannelStateWatcher;
|
311
|
-
|
312
362
|
class AsyncWatcherNotifierLocked;
|
313
363
|
|
314
364
|
// Sets the subchannel's connectivity state to \a state.
|
@@ -317,12 +367,14 @@ class Subchannel : public DualRefCounted<Subchannel> {
|
|
317
367
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
318
368
|
|
319
369
|
// Methods for connection.
|
320
|
-
void
|
321
|
-
static void OnRetryAlarm(void* arg, grpc_error_handle error)
|
370
|
+
static void OnRetryTimer(void* arg, grpc_error_handle error)
|
322
371
|
ABSL_LOCKS_EXCLUDED(mu_);
|
323
|
-
void
|
372
|
+
void OnRetryTimerLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
373
|
+
void StartConnectingLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
324
374
|
static void OnConnectingFinished(void* arg, grpc_error_handle error)
|
325
375
|
ABSL_LOCKS_EXCLUDED(mu_);
|
376
|
+
void OnConnectingFinishedLocked(grpc_error_handle error)
|
377
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
326
378
|
bool PublishTransportLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
327
379
|
|
328
380
|
// The subchannel pool this subchannel is in.
|
@@ -338,6 +390,8 @@ class Subchannel : public DualRefCounted<Subchannel> {
|
|
338
390
|
grpc_pollset_set* pollset_set_;
|
339
391
|
// Channelz tracking.
|
340
392
|
RefCountedPtr<channelz::SubchannelNode> channelz_node_;
|
393
|
+
// Minimum connection timeout.
|
394
|
+
Duration min_connect_timeout_;
|
341
395
|
|
342
396
|
// Connection state.
|
343
397
|
OrphanablePtr<SubchannelConnector> connector_;
|
@@ -347,12 +401,18 @@ class Subchannel : public DualRefCounted<Subchannel> {
|
|
347
401
|
// Protects the other members.
|
348
402
|
Mutex mu_;
|
349
403
|
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
bool
|
404
|
+
bool shutdown_ ABSL_GUARDED_BY(mu_) = false;
|
405
|
+
|
406
|
+
// Records if RequestConnection() was called while in backoff.
|
407
|
+
bool connection_requested_ ABSL_GUARDED_BY(mu_) = false;
|
354
408
|
|
355
409
|
// Connectivity state tracking.
|
410
|
+
// Note that the connectivity state implies the state of the
|
411
|
+
// Subchannel object:
|
412
|
+
// - IDLE: no retry timer pending, can start a connection attempt at any time
|
413
|
+
// - CONNECTING: connection attempt in progress
|
414
|
+
// - READY: connection attempt succeeded, connected_subchannel_ created
|
415
|
+
// - TRANSIENT_FAILURE: connection attempt failed, retry timer pending
|
356
416
|
grpc_connectivity_state state_ ABSL_GUARDED_BY(mu_) = GRPC_CHANNEL_IDLE;
|
357
417
|
absl::Status status_ ABSL_GUARDED_BY(mu_);
|
358
418
|
// The list of watchers without a health check service name.
|
@@ -360,21 +420,21 @@ class Subchannel : public DualRefCounted<Subchannel> {
|
|
360
420
|
// The map of watchers with health check service names.
|
361
421
|
HealthWatcherMap health_watcher_map_ ABSL_GUARDED_BY(mu_);
|
362
422
|
|
363
|
-
//
|
364
|
-
|
423
|
+
// Active connection, or null.
|
424
|
+
RefCountedPtr<ConnectedSubchannel> connected_subchannel_ ABSL_GUARDED_BY(mu_);
|
425
|
+
|
365
426
|
// Backoff state.
|
366
427
|
BackOff backoff_ ABSL_GUARDED_BY(mu_);
|
367
|
-
Timestamp
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
grpc_timer retry_alarm_ ABSL_GUARDED_BY(mu_);
|
372
|
-
grpc_closure on_retry_alarm_ ABSL_GUARDED_BY(mu_);
|
373
|
-
bool have_retry_alarm_ ABSL_GUARDED_BY(mu_) = false;
|
374
|
-
// reset_backoff() was called while alarm was pending.
|
375
|
-
bool retry_immediately_ ABSL_GUARDED_BY(mu_) = false;
|
428
|
+
Timestamp next_attempt_time_ ABSL_GUARDED_BY(mu_);
|
429
|
+
grpc_timer retry_timer_ ABSL_GUARDED_BY(mu_);
|
430
|
+
grpc_closure on_retry_timer_ ABSL_GUARDED_BY(mu_);
|
431
|
+
|
376
432
|
// Keepalive time period (-1 for unset)
|
377
433
|
int keepalive_time_ ABSL_GUARDED_BY(mu_) = -1;
|
434
|
+
|
435
|
+
// Data producer map.
|
436
|
+
std::map<UniqueTypeName, DataProducerInterface*> data_producer_map_
|
437
|
+
ABSL_GUARDED_BY(mu_);
|
378
438
|
};
|
379
439
|
|
380
440
|
} // namespace grpc_core
|