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
@@ -16,21 +16,36 @@
|
|
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 <
|
22
|
+
#include <memory>
|
23
|
+
#include <string>
|
24
|
+
#include <utility>
|
23
25
|
|
26
|
+
#include "absl/container/inlined_vector.h"
|
27
|
+
#include "absl/memory/memory.h"
|
28
|
+
#include "absl/status/status.h"
|
29
|
+
#include "absl/status/statusor.h"
|
30
|
+
#include "absl/strings/str_cat.h"
|
31
|
+
|
32
|
+
#include <grpc/impl/codegen/connectivity_state.h>
|
33
|
+
#include <grpc/impl/codegen/grpc_types.h>
|
34
|
+
#include <grpc/support/log.h>
|
35
|
+
|
36
|
+
#include "src/core/ext/filters/client_channel/lb_policy.h"
|
24
37
|
#include "src/core/ext/filters/client_channel/lb_policy/subchannel_list.h"
|
38
|
+
#include "src/core/ext/filters/client_channel/lb_policy_factory.h"
|
25
39
|
#include "src/core/ext/filters/client_channel/lb_policy_registry.h"
|
26
|
-
#include "src/core/ext/filters/client_channel/
|
27
|
-
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
28
|
-
#include "src/core/lib/channel/channel_args.h"
|
40
|
+
#include "src/core/ext/filters/client_channel/subchannel_interface.h"
|
29
41
|
#include "src/core/lib/debug/trace.h"
|
42
|
+
#include "src/core/lib/gprpp/debug_location.h"
|
43
|
+
#include "src/core/lib/gprpp/orphanable.h"
|
30
44
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
31
|
-
#include "src/core/lib/
|
45
|
+
#include "src/core/lib/iomgr/error.h"
|
46
|
+
#include "src/core/lib/json/json.h"
|
47
|
+
#include "src/core/lib/resolver/server_address.h"
|
32
48
|
#include "src/core/lib/transport/connectivity_state.h"
|
33
|
-
#include "src/core/lib/transport/error_utils.h"
|
34
49
|
|
35
50
|
namespace grpc_core {
|
36
51
|
|
@@ -75,14 +90,15 @@ class RoundRobin : public LoadBalancingPolicy {
|
|
75
90
|
: SubchannelData(subchannel_list, address, std::move(subchannel)) {}
|
76
91
|
|
77
92
|
grpc_connectivity_state connectivity_state() const {
|
78
|
-
return
|
93
|
+
return logical_connectivity_state_;
|
79
94
|
}
|
80
95
|
|
81
|
-
|
82
|
-
|
83
|
-
//
|
84
|
-
//
|
85
|
-
|
96
|
+
// Computes and updates the logical connectivity state of the subchannel.
|
97
|
+
// Note that the logical connectivity state may differ from the
|
98
|
+
// actual reported state in some cases (e.g., after we see
|
99
|
+
// TRANSIENT_FAILURE, we ignore any subsequent state changes until
|
100
|
+
// we see READY). Returns true if the state changed.
|
101
|
+
bool UpdateLogicalConnectivityStateLocked(
|
86
102
|
grpc_connectivity_state connectivity_state);
|
87
103
|
|
88
104
|
private:
|
@@ -91,8 +107,7 @@ class RoundRobin : public LoadBalancingPolicy {
|
|
91
107
|
void ProcessConnectivityChangeLocked(
|
92
108
|
grpc_connectivity_state connectivity_state) override;
|
93
109
|
|
94
|
-
grpc_connectivity_state
|
95
|
-
bool seen_failure_since_ready_ = false;
|
110
|
+
grpc_connectivity_state logical_connectivity_state_ = GRPC_CHANNEL_IDLE;
|
96
111
|
};
|
97
112
|
|
98
113
|
// A list of subchannels.
|
@@ -100,11 +115,14 @@ class RoundRobin : public LoadBalancingPolicy {
|
|
100
115
|
: public SubchannelList<RoundRobinSubchannelList,
|
101
116
|
RoundRobinSubchannelData> {
|
102
117
|
public:
|
103
|
-
RoundRobinSubchannelList(RoundRobin* policy,
|
104
|
-
ServerAddressList addresses,
|
118
|
+
RoundRobinSubchannelList(RoundRobin* policy, ServerAddressList addresses,
|
105
119
|
const grpc_channel_args& args)
|
106
|
-
: SubchannelList(policy,
|
107
|
-
|
120
|
+
: SubchannelList(policy,
|
121
|
+
(GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)
|
122
|
+
? "RoundRobinSubchannelList"
|
123
|
+
: nullptr),
|
124
|
+
std::move(addresses), policy->channel_control_helper(),
|
125
|
+
args) {
|
108
126
|
// Need to maintain a ref to the LB policy as long as we maintain
|
109
127
|
// any references to subchannels, since the subchannels'
|
110
128
|
// pollset_sets will include the LB policy's pollset_set.
|
@@ -117,23 +135,27 @@ class RoundRobin : public LoadBalancingPolicy {
|
|
117
135
|
}
|
118
136
|
|
119
137
|
// Starts watching the subchannels in this list.
|
120
|
-
void StartWatchingLocked();
|
138
|
+
void StartWatchingLocked(absl::Status status_for_tf);
|
121
139
|
|
122
140
|
// Updates the counters of subchannels in each state when a
|
123
141
|
// subchannel transitions from old_state to new_state.
|
124
142
|
void UpdateStateCountersLocked(grpc_connectivity_state old_state,
|
125
143
|
grpc_connectivity_state new_state);
|
126
144
|
|
127
|
-
//
|
128
|
-
//
|
129
|
-
//
|
130
|
-
void MaybeUpdateRoundRobinConnectivityStateLocked(
|
131
|
-
|
132
|
-
// Updates the RR policy's overall state based on the counters of
|
133
|
-
// subchannels in each state.
|
134
|
-
void UpdateRoundRobinStateFromSubchannelStateCountsLocked();
|
145
|
+
// Ensures that the right subchannel list is used and then updates
|
146
|
+
// the RR policy's connectivity state based on the subchannel list's
|
147
|
+
// state counters.
|
148
|
+
void MaybeUpdateRoundRobinConnectivityStateLocked(
|
149
|
+
absl::Status status_for_tf);
|
135
150
|
|
136
151
|
private:
|
152
|
+
std::string CountersString() const {
|
153
|
+
return absl::StrCat("num_subchannels=", num_subchannels(),
|
154
|
+
" num_ready=", num_ready_,
|
155
|
+
" num_connecting=", num_connecting_,
|
156
|
+
" num_transient_failure=", num_transient_failure_);
|
157
|
+
}
|
158
|
+
|
137
159
|
size_t num_ready_ = 0;
|
138
160
|
size_t num_connecting_ = 0;
|
139
161
|
size_t num_transient_failure_ = 0;
|
@@ -238,8 +260,45 @@ void RoundRobin::ResetBackoffLocked() {
|
|
238
260
|
}
|
239
261
|
}
|
240
262
|
|
241
|
-
void RoundRobin::
|
242
|
-
|
263
|
+
void RoundRobin::UpdateLocked(UpdateArgs args) {
|
264
|
+
ServerAddressList addresses;
|
265
|
+
if (args.addresses.ok()) {
|
266
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
|
267
|
+
gpr_log(GPR_INFO, "[RR %p] received update with %" PRIuPTR " addresses",
|
268
|
+
this, args.addresses->size());
|
269
|
+
}
|
270
|
+
addresses = std::move(*args.addresses);
|
271
|
+
} else {
|
272
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
|
273
|
+
gpr_log(GPR_INFO, "[RR %p] received update with address error: %s", this,
|
274
|
+
args.addresses.status().ToString().c_str());
|
275
|
+
}
|
276
|
+
// If we already have a subchannel list, then ignore the resolver
|
277
|
+
// failure and keep using the existing list.
|
278
|
+
if (subchannel_list_ != nullptr) return;
|
279
|
+
}
|
280
|
+
// Create new subchannel list, replacing the previous pending list, if any.
|
281
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace) &&
|
282
|
+
latest_pending_subchannel_list_ != nullptr) {
|
283
|
+
gpr_log(GPR_INFO, "[RR %p] replacing previous pending subchannel list %p",
|
284
|
+
this, latest_pending_subchannel_list_.get());
|
285
|
+
}
|
286
|
+
latest_pending_subchannel_list_ = MakeOrphanable<RoundRobinSubchannelList>(
|
287
|
+
this, std::move(addresses), *args.args);
|
288
|
+
// Start watching the new list. If appropriate, this will cause it to be
|
289
|
+
// immediately promoted to subchannel_list_ and to generate a new picker.
|
290
|
+
latest_pending_subchannel_list_->StartWatchingLocked(
|
291
|
+
args.addresses.ok() ? absl::UnavailableError(absl::StrCat(
|
292
|
+
"empty address list: ", args.resolution_note))
|
293
|
+
: args.addresses.status());
|
294
|
+
}
|
295
|
+
|
296
|
+
//
|
297
|
+
// RoundRobinSubchannelList
|
298
|
+
//
|
299
|
+
|
300
|
+
void RoundRobin::RoundRobinSubchannelList::StartWatchingLocked(
|
301
|
+
absl::Status status_for_tf) {
|
243
302
|
// Check current state of each subchannel synchronously, since any
|
244
303
|
// subchannel already used by some other channel may have a non-IDLE
|
245
304
|
// state.
|
@@ -247,18 +306,18 @@ void RoundRobin::RoundRobinSubchannelList::StartWatchingLocked() {
|
|
247
306
|
grpc_connectivity_state state =
|
248
307
|
subchannel(i)->CheckConnectivityStateLocked();
|
249
308
|
if (state != GRPC_CHANNEL_IDLE) {
|
250
|
-
subchannel(i)->
|
309
|
+
subchannel(i)->UpdateLogicalConnectivityStateLocked(state);
|
251
310
|
}
|
252
311
|
}
|
253
312
|
// Start connectivity watch for each subchannel.
|
254
313
|
for (size_t i = 0; i < num_subchannels(); i++) {
|
255
314
|
if (subchannel(i)->subchannel() != nullptr) {
|
256
315
|
subchannel(i)->StartConnectivityWatchLocked();
|
257
|
-
subchannel(i)->subchannel()->
|
316
|
+
subchannel(i)->subchannel()->RequestConnection();
|
258
317
|
}
|
259
318
|
}
|
260
|
-
//
|
261
|
-
|
319
|
+
// Update RR connectivity state if needed.
|
320
|
+
MaybeUpdateRoundRobinConnectivityStateLocked(status_for_tf);
|
262
321
|
}
|
263
322
|
|
264
323
|
void RoundRobin::RoundRobinSubchannelList::UpdateStateCountersLocked(
|
@@ -284,80 +343,73 @@ void RoundRobin::RoundRobinSubchannelList::UpdateStateCountersLocked(
|
|
284
343
|
}
|
285
344
|
}
|
286
345
|
|
287
|
-
// Sets the RR policy's connectivity state and generates a new picker based
|
288
|
-
// on the current subchannel list.
|
289
346
|
void RoundRobin::RoundRobinSubchannelList::
|
290
|
-
MaybeUpdateRoundRobinConnectivityStateLocked() {
|
347
|
+
MaybeUpdateRoundRobinConnectivityStateLocked(absl::Status status_for_tf) {
|
291
348
|
RoundRobin* p = static_cast<RoundRobin*>(policy());
|
349
|
+
// If this is latest_pending_subchannel_list_, then swap it into
|
350
|
+
// subchannel_list_ in the following cases:
|
351
|
+
// - subchannel_list_ is null (i.e., this is the first update).
|
352
|
+
// - subchannel_list_ has no READY subchannels.
|
353
|
+
// - This list has at least one READY subchannel.
|
354
|
+
// - All of the subchannels in this list are in TRANSIENT_FAILURE, or
|
355
|
+
// the list is empty. (This may cause the channel to go from READY
|
356
|
+
// to TRANSIENT_FAILURE, but we're doing what the control plane told
|
357
|
+
// us to do.
|
358
|
+
if (p->latest_pending_subchannel_list_.get() == this &&
|
359
|
+
(p->subchannel_list_ == nullptr || p->subchannel_list_->num_ready_ == 0 ||
|
360
|
+
num_ready_ > 0 ||
|
361
|
+
// Note: num_transient_failure_ and num_subchannels() may both be 0.
|
362
|
+
num_transient_failure_ == num_subchannels())) {
|
363
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
|
364
|
+
const std::string old_counters_string =
|
365
|
+
p->subchannel_list_ != nullptr ? p->subchannel_list_->CountersString()
|
366
|
+
: "";
|
367
|
+
gpr_log(
|
368
|
+
GPR_INFO,
|
369
|
+
"[RR %p] swapping out subchannel list %p (%s) in favor of %p (%s)", p,
|
370
|
+
p->subchannel_list_.get(), old_counters_string.c_str(), this,
|
371
|
+
CountersString().c_str());
|
372
|
+
}
|
373
|
+
p->subchannel_list_ = std::move(p->latest_pending_subchannel_list_);
|
374
|
+
}
|
292
375
|
// Only set connectivity state if this is the current subchannel list.
|
293
376
|
if (p->subchannel_list_.get() != this) return;
|
294
|
-
//
|
295
|
-
//
|
296
|
-
//
|
297
|
-
//
|
298
|
-
// CHECK: subchannel_list->num_ready > 0.
|
299
|
-
//
|
300
|
-
// 2) RULE: ANY subchannel is CONNECTING => policy is CONNECTING.
|
301
|
-
// CHECK: sd->curr_connectivity_state == CONNECTING.
|
302
|
-
//
|
303
|
-
// 3) RULE: ALL subchannels are TRANSIENT_FAILURE => policy is
|
304
|
-
// TRANSIENT_FAILURE.
|
305
|
-
// CHECK: subchannel_list->num_transient_failures ==
|
306
|
-
// subchannel_list->num_subchannels.
|
377
|
+
// First matching rule wins:
|
378
|
+
// 1) ANY subchannel is READY => policy is READY.
|
379
|
+
// 2) ANY subchannel is CONNECTING => policy is CONNECTING.
|
380
|
+
// 3) ALL subchannels are TRANSIENT_FAILURE => policy is TRANSIENT_FAILURE.
|
307
381
|
if (num_ready_ > 0) {
|
308
|
-
|
382
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
|
383
|
+
gpr_log(GPR_INFO, "[RR %p] reporting READY with subchannel list %p", p,
|
384
|
+
this);
|
385
|
+
}
|
309
386
|
p->channel_control_helper()->UpdateState(
|
310
387
|
GRPC_CHANNEL_READY, absl::Status(), absl::make_unique<Picker>(p, this));
|
311
388
|
} else if (num_connecting_ > 0) {
|
312
|
-
|
389
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
|
390
|
+
gpr_log(GPR_INFO, "[RR %p] reporting CONNECTING with subchannel list %p",
|
391
|
+
p, this);
|
392
|
+
}
|
313
393
|
p->channel_control_helper()->UpdateState(
|
314
394
|
GRPC_CHANNEL_CONNECTING, absl::Status(),
|
315
395
|
absl::make_unique<QueuePicker>(p->Ref(DEBUG_LOCATION, "QueuePicker")));
|
316
396
|
} else if (num_transient_failure_ == num_subchannels()) {
|
317
|
-
|
318
|
-
|
319
|
-
|
397
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
|
398
|
+
gpr_log(GPR_INFO,
|
399
|
+
"[RR %p] reporting TRANSIENT_FAILURE with subchannel list %p: %s",
|
400
|
+
p, this, status_for_tf.ToString().c_str());
|
401
|
+
}
|
320
402
|
p->channel_control_helper()->UpdateState(
|
321
|
-
GRPC_CHANNEL_TRANSIENT_FAILURE,
|
322
|
-
absl::make_unique<TransientFailurePicker>(
|
403
|
+
GRPC_CHANNEL_TRANSIENT_FAILURE, status_for_tf,
|
404
|
+
absl::make_unique<TransientFailurePicker>(status_for_tf));
|
323
405
|
}
|
324
406
|
}
|
325
407
|
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
// If we have at least one READY subchannel, then swap to the new list.
|
330
|
-
// Also, if all of the subchannels are in TRANSIENT_FAILURE, then we know
|
331
|
-
// we've tried all of them and failed, so we go ahead and swap over
|
332
|
-
// anyway; this may cause the channel to go from READY to TRANSIENT_FAILURE,
|
333
|
-
// but we are doing what the control plane told us to do.
|
334
|
-
if (num_ready_ > 0 || num_transient_failure_ == num_subchannels()) {
|
335
|
-
if (p->subchannel_list_.get() != this) {
|
336
|
-
// Promote this list to p->subchannel_list_.
|
337
|
-
// This list must be p->latest_pending_subchannel_list_, because
|
338
|
-
// any previous update would have been shut down already and
|
339
|
-
// therefore we would not be receiving a notification for them.
|
340
|
-
GPR_ASSERT(p->latest_pending_subchannel_list_.get() == this);
|
341
|
-
GPR_ASSERT(!shutting_down());
|
342
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
|
343
|
-
const size_t old_num_subchannels =
|
344
|
-
p->subchannel_list_ != nullptr
|
345
|
-
? p->subchannel_list_->num_subchannels()
|
346
|
-
: 0;
|
347
|
-
gpr_log(GPR_INFO,
|
348
|
-
"[RR %p] phasing out subchannel list %p (size %" PRIuPTR
|
349
|
-
") in favor of %p (size %" PRIuPTR ")",
|
350
|
-
p, p->subchannel_list_.get(), old_num_subchannels, this,
|
351
|
-
num_subchannels());
|
352
|
-
}
|
353
|
-
p->subchannel_list_ = std::move(p->latest_pending_subchannel_list_);
|
354
|
-
}
|
355
|
-
}
|
356
|
-
// Update the RR policy's connectivity state if needed.
|
357
|
-
MaybeUpdateRoundRobinConnectivityStateLocked();
|
358
|
-
}
|
408
|
+
//
|
409
|
+
// RoundRobinSubchannelData
|
410
|
+
//
|
359
411
|
|
360
|
-
|
412
|
+
bool RoundRobin::RoundRobinSubchannelData::UpdateLogicalConnectivityStateLocked(
|
361
413
|
grpc_connectivity_state connectivity_state) {
|
362
414
|
RoundRobin* p = static_cast<RoundRobin*>(subchannel_list()->policy());
|
363
415
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
|
@@ -367,115 +419,74 @@ void RoundRobin::RoundRobinSubchannelData::UpdateConnectivityStateLocked(
|
|
367
419
|
"(index %" PRIuPTR " of %" PRIuPTR "): prev_state=%s new_state=%s",
|
368
420
|
p, subchannel(), subchannel_list(), Index(),
|
369
421
|
subchannel_list()->num_subchannels(),
|
370
|
-
ConnectivityStateName(
|
422
|
+
ConnectivityStateName(logical_connectivity_state_),
|
371
423
|
ConnectivityStateName(connectivity_state));
|
372
424
|
}
|
373
425
|
// Decide what state to report for aggregation purposes.
|
374
|
-
// If
|
375
|
-
//
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
426
|
+
// If the last logical state was TRANSIENT_FAILURE, then ignore the
|
427
|
+
// state change unless the new state is READY.
|
428
|
+
if (logical_connectivity_state_ == GRPC_CHANNEL_TRANSIENT_FAILURE &&
|
429
|
+
connectivity_state != GRPC_CHANNEL_READY) {
|
430
|
+
return false;
|
431
|
+
}
|
432
|
+
// If the new state is IDLE, treat it as CONNECTING, since it will
|
433
|
+
// immediately transition into CONNECTING anyway.
|
434
|
+
if (connectivity_state == GRPC_CHANNEL_IDLE) {
|
435
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
|
436
|
+
gpr_log(GPR_INFO,
|
437
|
+
"[RR %p] subchannel %p, subchannel_list %p (index %" PRIuPTR
|
438
|
+
" of %" PRIuPTR "): treating IDLE as CONNECTING",
|
439
|
+
p, subchannel(), subchannel_list(), Index(),
|
440
|
+
subchannel_list()->num_subchannels());
|
389
441
|
}
|
442
|
+
connectivity_state = GRPC_CHANNEL_CONNECTING;
|
390
443
|
}
|
391
|
-
//
|
392
|
-
|
444
|
+
// If no change, return false.
|
445
|
+
if (logical_connectivity_state_ == connectivity_state) return false;
|
446
|
+
// Otherwise, update counters and logical state.
|
447
|
+
subchannel_list()->UpdateStateCountersLocked(logical_connectivity_state_,
|
448
|
+
connectivity_state);
|
449
|
+
logical_connectivity_state_ = connectivity_state;
|
450
|
+
return true;
|
393
451
|
}
|
394
452
|
|
395
453
|
void RoundRobin::RoundRobinSubchannelData::ProcessConnectivityChangeLocked(
|
396
454
|
grpc_connectivity_state connectivity_state) {
|
397
455
|
RoundRobin* p = static_cast<RoundRobin*>(subchannel_list()->policy());
|
398
456
|
GPR_ASSERT(subchannel() != nullptr);
|
399
|
-
// If the new state is TRANSIENT_FAILURE, re-resolve.
|
457
|
+
// If the new state is TRANSIENT_FAILURE or IDLE, re-resolve.
|
400
458
|
// Only do this if we've started watching, not at startup time.
|
401
459
|
// Otherwise, if the subchannel was already in state TRANSIENT_FAILURE
|
402
460
|
// when the subchannel list was created, we'd wind up in a constant
|
403
461
|
// loop of re-resolution.
|
404
462
|
// Also attempt to reconnect.
|
405
|
-
if (connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE
|
463
|
+
if (connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE ||
|
464
|
+
connectivity_state == GRPC_CHANNEL_IDLE) {
|
406
465
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
|
407
466
|
gpr_log(GPR_INFO,
|
408
|
-
"[RR %p] Subchannel %p
|
409
|
-
|
410
|
-
p, subchannel());
|
467
|
+
"[RR %p] Subchannel %p reported %s; requesting re-resolution", p,
|
468
|
+
subchannel(), ConnectivityStateName(connectivity_state));
|
411
469
|
}
|
412
470
|
p->channel_control_helper()->RequestReresolution();
|
413
|
-
subchannel()->
|
471
|
+
subchannel()->RequestConnection();
|
414
472
|
}
|
415
|
-
// Update state
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
void RoundRobin::UpdateLocked(UpdateArgs args) {
|
422
|
-
ServerAddressList addresses;
|
423
|
-
if (args.addresses.ok()) {
|
424
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
|
425
|
-
gpr_log(GPR_INFO, "[RR %p] received update with %" PRIuPTR " addresses",
|
426
|
-
this, args.addresses->size());
|
427
|
-
}
|
428
|
-
addresses = std::move(*args.addresses);
|
429
|
-
} else {
|
430
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
|
431
|
-
gpr_log(GPR_INFO, "[RR %p] received update with address error: %s", this,
|
432
|
-
args.addresses.status().ToString().c_str());
|
433
|
-
}
|
434
|
-
// If we already have a subchannel list, then ignore the resolver
|
435
|
-
// failure and keep using the existing list.
|
436
|
-
if (subchannel_list_ != nullptr) return;
|
437
|
-
}
|
438
|
-
// Replace latest_pending_subchannel_list_.
|
439
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace) &&
|
440
|
-
latest_pending_subchannel_list_ != nullptr) {
|
441
|
-
gpr_log(GPR_INFO,
|
442
|
-
"[RR %p] Shutting down previous pending subchannel list %p", this,
|
443
|
-
latest_pending_subchannel_list_.get());
|
444
|
-
}
|
445
|
-
latest_pending_subchannel_list_ = MakeOrphanable<RoundRobinSubchannelList>(
|
446
|
-
this, &grpc_lb_round_robin_trace, std::move(addresses), *args.args);
|
447
|
-
if (latest_pending_subchannel_list_->num_subchannels() == 0) {
|
448
|
-
// If the new list is empty, immediately promote the new list to the
|
449
|
-
// current list and transition to TRANSIENT_FAILURE.
|
450
|
-
absl::Status status =
|
451
|
-
args.addresses.ok() ? absl::UnavailableError(absl::StrCat(
|
452
|
-
"empty address list: ", args.resolution_note))
|
453
|
-
: args.addresses.status();
|
454
|
-
channel_control_helper()->UpdateState(
|
455
|
-
GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
456
|
-
absl::make_unique<TransientFailurePicker>(status));
|
457
|
-
subchannel_list_ = std::move(latest_pending_subchannel_list_);
|
458
|
-
} else if (subchannel_list_ == nullptr) {
|
459
|
-
// If there is no current list, immediately promote the new list to
|
460
|
-
// the current list and start watching it.
|
461
|
-
subchannel_list_ = std::move(latest_pending_subchannel_list_);
|
462
|
-
subchannel_list_->StartWatchingLocked();
|
463
|
-
} else {
|
464
|
-
// Start watching the pending list. It will get swapped into the
|
465
|
-
// current list when it reports READY.
|
466
|
-
latest_pending_subchannel_list_->StartWatchingLocked();
|
473
|
+
// Update logical connectivity state.
|
474
|
+
// If it changed, update the policy state.
|
475
|
+
if (UpdateLogicalConnectivityStateLocked(connectivity_state)) {
|
476
|
+
subchannel_list()->MaybeUpdateRoundRobinConnectivityStateLocked(
|
477
|
+
absl::UnavailableError("connections to all backends failing"));
|
467
478
|
}
|
468
479
|
}
|
469
480
|
|
481
|
+
//
|
482
|
+
// factory
|
483
|
+
//
|
484
|
+
|
470
485
|
class RoundRobinConfig : public LoadBalancingPolicy::Config {
|
471
486
|
public:
|
472
487
|
const char* name() const override { return kRoundRobin; }
|
473
488
|
};
|
474
489
|
|
475
|
-
//
|
476
|
-
// factory
|
477
|
-
//
|
478
|
-
|
479
490
|
class RoundRobinFactory : public LoadBalancingPolicyFactory {
|
480
491
|
public:
|
481
492
|
OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
|