grpc 1.47.0 → 1.48.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +105 -47
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/event_engine.h +20 -11
- data/include/grpc/event_engine/slice_buffer.h +8 -2
- data/include/grpc/grpc.h +3 -3
- data/include/grpc/impl/codegen/compression_types.h +2 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -1
- data/include/grpc/impl/codegen/gpr_types.h +2 -1
- data/include/grpc/impl/codegen/grpc_types.h +2 -1
- data/include/grpc/impl/codegen/port_platform.h +6 -3
- data/src/core/ext/filters/census/grpc_context.cc +3 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
- data/src/core/ext/filters/client_channel/client_channel.h +19 -4
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
- data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
- data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
- data/src/core/ext/filters/client_channel/subchannel.h +6 -22
- data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
- data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
- data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
- data/src/core/ext/filters/http/client_authority_filter.h +5 -2
- data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
- data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
- data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
- data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
- data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
- data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
- data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
- data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
- data/src/core/ext/xds/certificate_provider_factory.h +6 -1
- data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
- data/src/core/ext/xds/certificate_provider_registry.h +3 -1
- data/src/core/ext/xds/certificate_provider_store.cc +2 -0
- data/src/core/ext/xds/certificate_provider_store.h +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
- data/src/core/ext/xds/upb_utils.h +1 -2
- data/src/core/ext/xds/xds_api.cc +16 -18
- data/src/core/ext/xds/xds_api.h +12 -5
- data/src/core/ext/xds/xds_bootstrap.cc +37 -24
- data/src/core/ext/xds/xds_bootstrap.h +9 -11
- data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
- data/src/core/ext/xds/xds_certificate_provider.h +16 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
- data/src/core/ext/xds/xds_client.cc +71 -22
- data/src/core/ext/xds/xds_client.h +17 -3
- data/src/core/ext/xds/xds_client_stats.cc +3 -4
- data/src/core/ext/xds/xds_client_stats.h +4 -3
- data/src/core/ext/xds/xds_cluster.cc +21 -10
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
- data/src/core/ext/xds/xds_common_types.cc +36 -22
- data/src/core/ext/xds/xds_common_types.h +12 -4
- data/src/core/ext/xds/xds_endpoint.cc +25 -15
- data/src/core/ext/xds/xds_endpoint.h +13 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
- data/src/core/ext/xds/xds_http_filters.cc +7 -0
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
- data/src/core/ext/xds/xds_listener.cc +51 -33
- data/src/core/ext/xds/xds_listener.h +10 -1
- data/src/core/ext/xds/xds_resource_type.h +3 -3
- data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
- data/src/core/ext/xds/xds_route_config.cc +56 -28
- data/src/core/ext/xds/xds_route_config.h +11 -2
- data/src/core/ext/xds/xds_routing.cc +16 -0
- data/src/core/ext/xds/xds_routing.h +7 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
- data/src/core/lib/address_utils/parse_address.cc +5 -8
- data/src/core/lib/address_utils/parse_address.h +3 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
- data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
- data/src/core/lib/avl/avl.h +3 -3
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/backoff/backoff.h +1 -1
- data/src/core/lib/channel/call_tracer.h +3 -3
- data/src/core/lib/channel/channel_args.h +1 -0
- data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +4 -4
- data/src/core/lib/channel/channel_stack.h +1 -11
- data/src/core/lib/channel/channel_stack_builder.h +2 -5
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
- data/src/core/lib/channel/channelz.cc +2 -1
- data/src/core/lib/channel/channelz.h +2 -3
- data/src/core/lib/channel/channelz_registry.cc +4 -5
- data/src/core/lib/channel/connected_channel.cc +1 -0
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +11 -5
- data/src/core/lib/channel/promise_based_filter.h +2 -0
- data/src/core/lib/compression/compression.cc +6 -1
- data/src/core/lib/compression/compression_internal.cc +3 -6
- data/src/core/lib/compression/compression_internal.h +3 -2
- data/src/core/lib/compression/message_compress.cc +3 -1
- data/src/core/lib/compression/message_compress.h +2 -3
- data/src/core/lib/debug/stats.cc +9 -9
- data/src/core/lib/debug/stats.h +2 -1
- data/src/core/lib/debug/stats_data.cc +2 -1
- data/src/core/lib/debug/stats_data.h +0 -4
- data/src/core/lib/debug/trace.h +13 -12
- data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
- data/src/core/lib/event_engine/event_engine.cc +24 -19
- data/src/core/lib/event_engine/event_engine_factory.h +2 -2
- data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
- data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
- data/src/core/lib/event_engine/promise.h +69 -0
- data/src/core/lib/gpr/time_posix.cc +6 -9
- data/src/core/lib/gpr/time_windows.cc +10 -7
- data/src/core/lib/gprpp/manual_constructor.h +0 -67
- data/src/core/lib/gprpp/status_helper.cc +44 -30
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +4 -0
- data/src/core/lib/http/format_request.cc +5 -4
- data/src/core/lib/http/format_request.h +1 -1
- data/src/core/lib/http/httpcli.cc +18 -12
- data/src/core/lib/http/httpcli.h +19 -3
- data/src/core/lib/http/httpcli_security_connector.cc +16 -4
- data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
- data/src/core/lib/http/parser.cc +6 -7
- data/src/core/lib/http/parser.h +3 -0
- data/src/core/lib/iomgr/call_combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
- data/src/core/lib/iomgr/error.cc +11 -9
- data/src/core/lib/iomgr/error.h +9 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
- data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
- data/src/core/lib/iomgr/ev_posix.cc +54 -92
- data/src/core/lib/iomgr/ev_posix.h +5 -3
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr.cc +7 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/tcp_client.cc +12 -7
- data/src/core/lib/iomgr/tcp_client.h +24 -13
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
- data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
- data/src/core/lib/iomgr/tcp_posix.cc +91 -29
- data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
- data/src/core/lib/iomgr/tcp_windows.cc +5 -5
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
- data/src/core/lib/iomgr/work_serializer.h +2 -3
- data/src/core/lib/matchers/matchers.cc +6 -3
- data/src/core/lib/matchers/matchers.h +2 -0
- data/src/core/lib/promise/activity.cc +0 -1
- data/src/core/lib/promise/activity.h +7 -13
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/sleep.cc +36 -31
- data/src/core/lib/promise/sleep.h +25 -25
- data/src/core/lib/resolver/resolver.cc +5 -0
- data/src/core/lib/resolver/resolver.h +3 -0
- data/src/core/lib/resolver/resolver_factory.h +5 -2
- data/src/core/lib/resolver/resolver_registry.cc +2 -9
- data/src/core/lib/resolver/resolver_registry.h +12 -1
- data/src/core/lib/resolver/server_address.cc +8 -0
- data/src/core/lib/resolver/server_address.h +9 -2
- data/src/core/lib/resource_quota/memory_quota.cc +18 -60
- data/src/core/lib/resource_quota/memory_quota.h +11 -25
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
- data/src/core/lib/security/authorization/evaluate_args.h +6 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
- data/src/core/lib/security/authorization/matchers.cc +9 -1
- data/src/core/lib/security/authorization/matchers.h +7 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
- data/src/core/lib/security/authorization/rbac_policy.h +7 -0
- data/src/core/lib/security/context/security_context.cc +5 -2
- data/src/core/lib/security/context/security_context.h +14 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
- data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
- data/src/core/lib/security/credentials/call_creds_util.h +1 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
- data/src/core/lib/security/credentials/credentials.cc +4 -8
- data/src/core/lib/security/credentials/credentials.h +10 -8
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
- data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
- data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
- data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
- data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
- data/src/core/lib/security/security_connector/security_connector.cc +20 -18
- data/src/core/lib/security/security_connector/security_connector.h +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
- data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
- data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
- data/src/core/lib/security/transport/secure_endpoint.h +4 -3
- data/src/core/lib/security/transport/security_handshaker.cc +44 -11
- data/src/core/lib/security/transport/security_handshaker.h +4 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
- data/src/core/lib/security/util/json_util.cc +3 -2
- data/src/core/lib/security/util/json_util.h +0 -2
- data/src/core/lib/service_config/service_config_call_data.h +2 -1
- data/src/core/lib/service_config/service_config_impl.cc +6 -6
- data/src/core/lib/service_config/service_config_impl.h +1 -3
- data/src/core/lib/service_config/service_config_parser.cc +2 -4
- data/src/core/lib/slice/slice_buffer.cc +30 -1
- data/src/core/lib/slice/slice_buffer.h +37 -6
- data/src/core/lib/slice/slice_string_helpers.cc +0 -20
- data/src/core/lib/slice/slice_string_helpers.h +0 -4
- data/src/core/lib/surface/call.cc +53 -115
- data/src/core/lib/surface/call.h +5 -1
- data/src/core/lib/surface/channel.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +15 -14
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +0 -1
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +14 -8
- data/src/core/lib/surface/server.h +4 -1
- data/src/core/lib/surface/validate_metadata.cc +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +13 -7
- data/src/core/lib/transport/handshaker.cc +3 -3
- data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
- data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
- data/src/core/lib/transport/transport.cc +0 -3
- data/src/core/lib/transport/transport.h +20 -14
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +1 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -9
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
- data/src/core/tsi/fake_transport_security.cc +13 -1
- data/src/core/tsi/fake_transport_security.h +6 -0
- data/src/core/tsi/ssl_transport_security.cc +1 -1
- data/src/core/tsi/transport_security_grpc.cc +3 -2
- data/src/core/tsi/transport_security_grpc.h +5 -2
- data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -0
- data/src/ruby/ext/grpc/extconf.rb +49 -18
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
- data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +182 -41
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
- data/third_party/abseil-cpp/absl/status/status.cc +174 -2
- data/third_party/abseil-cpp/absl/status/status.h +22 -12
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
- data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
- data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/time.h +16 -12
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +2 -1
- metadata +39 -15
- data/src/core/lib/slice/slice_split.cc +0 -103
- data/src/core/lib/slice/slice_split.h +0 -36
- data/src/core/lib/transport/byte_stream.cc +0 -165
- data/src/core/lib/transport/byte_stream.h +0 -170
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -783,7 +783,7 @@ void RlsLb::ChildPolicyWrapper::StartUpdate() {
|
|
783
783
|
grpc_error_handle error = InsertOrUpdateChildPolicyField(
|
784
784
|
lb_policy_->config_->child_policy_config_target_field_name(), target_,
|
785
785
|
&child_policy_config);
|
786
|
-
GPR_ASSERT(error
|
786
|
+
GPR_ASSERT(GRPC_ERROR_IS_NONE(error));
|
787
787
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
|
788
788
|
gpr_log(
|
789
789
|
GPR_INFO,
|
@@ -794,7 +794,7 @@ void RlsLb::ChildPolicyWrapper::StartUpdate() {
|
|
794
794
|
pending_config_ = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
|
795
795
|
child_policy_config, &error);
|
796
796
|
// Returned RLS target fails the validation.
|
797
|
-
if (error
|
797
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
798
798
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
|
799
799
|
gpr_log(GPR_INFO,
|
800
800
|
"[rlslb %p] ChildPolicyWrapper=%p [%s]: config failed to parse: "
|
@@ -1084,7 +1084,8 @@ LoadBalancingPolicy::PickResult RlsLb::Picker::Pick(PickArgs args) {
|
|
1084
1084
|
"[rlslb %p] picker=%p: RLS call in backoff; failing pick",
|
1085
1085
|
lb_policy_.get(), this);
|
1086
1086
|
}
|
1087
|
-
return PickResult::Fail(
|
1087
|
+
return PickResult::Fail(absl::UnavailableError(
|
1088
|
+
absl::StrCat("RLS request failed: ", entry->status().ToString())));
|
1088
1089
|
}
|
1089
1090
|
}
|
1090
1091
|
// RLS call pending. Queue the pick.
|
@@ -1191,46 +1192,48 @@ size_t RlsLb::Cache::Entry::Size() const {
|
|
1191
1192
|
}
|
1192
1193
|
|
1193
1194
|
LoadBalancingPolicy::PickResult RlsLb::Cache::Entry::Pick(PickArgs args) {
|
1194
|
-
|
1195
|
+
size_t i = 0;
|
1196
|
+
ChildPolicyWrapper* child_policy_wrapper = nullptr;
|
1197
|
+
// Skip targets before the last one that are in state TRANSIENT_FAILURE.
|
1198
|
+
for (; i < child_policy_wrappers_.size(); ++i) {
|
1199
|
+
child_policy_wrapper = child_policy_wrappers_[i].get();
|
1195
1200
|
if (child_policy_wrapper->connectivity_state() ==
|
1196
|
-
|
1201
|
+
GRPC_CHANNEL_TRANSIENT_FAILURE &&
|
1202
|
+
i < child_policy_wrappers_.size() - 1) {
|
1197
1203
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
|
1198
1204
|
gpr_log(GPR_INFO,
|
1199
|
-
"[rlslb %p] cache entry=%p %s: target %s
|
1200
|
-
"TRANSIENT_FAILURE; skipping",
|
1205
|
+
"[rlslb %p] cache entry=%p %s: target %s (%" PRIuPTR
|
1206
|
+
" of %" PRIuPTR ") in state TRANSIENT_FAILURE; skipping",
|
1201
1207
|
lb_policy_.get(), this, lru_iterator_->ToString().c_str(),
|
1202
|
-
child_policy_wrapper->target().c_str()
|
1208
|
+
child_policy_wrapper->target().c_str(), i,
|
1209
|
+
child_policy_wrappers_.size());
|
1203
1210
|
}
|
1204
1211
|
continue;
|
1205
1212
|
}
|
1206
|
-
|
1207
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
|
1208
|
-
gpr_log(
|
1209
|
-
GPR_INFO,
|
1210
|
-
"[rlslb %p] cache entry=%p %s: target %s in state %s; "
|
1211
|
-
"delegating",
|
1212
|
-
lb_policy_.get(), this, lru_iterator_->ToString().c_str(),
|
1213
|
-
child_policy_wrapper->target().c_str(),
|
1214
|
-
ConnectivityStateName(child_policy_wrapper->connectivity_state()));
|
1215
|
-
}
|
1216
|
-
// Add header data.
|
1217
|
-
if (!header_data_.empty()) {
|
1218
|
-
char* copied_header_data =
|
1219
|
-
static_cast<char*>(args.call_state->Alloc(header_data_.length() + 1));
|
1220
|
-
strcpy(copied_header_data, header_data_.c_str());
|
1221
|
-
args.initial_metadata->Add(kRlsHeaderKey, copied_header_data);
|
1222
|
-
}
|
1223
|
-
return child_policy_wrapper->Pick(args);
|
1213
|
+
break;
|
1224
1214
|
}
|
1225
|
-
//
|
1215
|
+
// Child policy not in TRANSIENT_FAILURE or is the last target in
|
1216
|
+
// the list, so delegate.
|
1226
1217
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
|
1227
1218
|
gpr_log(GPR_INFO,
|
1228
|
-
"[rlslb %p] cache entry=%p %s:
|
1229
|
-
"
|
1230
|
-
lb_policy_.get(), this, lru_iterator_->ToString().c_str()
|
1231
|
-
|
1232
|
-
|
1233
|
-
|
1219
|
+
"[rlslb %p] cache entry=%p %s: target %s (%" PRIuPTR " of %" PRIuPTR
|
1220
|
+
") in state %s; delegating",
|
1221
|
+
lb_policy_.get(), this, lru_iterator_->ToString().c_str(),
|
1222
|
+
child_policy_wrapper->target().c_str(), i,
|
1223
|
+
child_policy_wrappers_.size(),
|
1224
|
+
ConnectivityStateName(child_policy_wrapper->connectivity_state()));
|
1225
|
+
}
|
1226
|
+
// Add header data.
|
1227
|
+
// Note that even if the target we're using is in TRANSIENT_FAILURE,
|
1228
|
+
// the pick might still succeed (e.g., if the child is ring_hash), so
|
1229
|
+
// we need to pass the right header info down in all cases.
|
1230
|
+
if (!header_data_.empty()) {
|
1231
|
+
char* copied_header_data =
|
1232
|
+
static_cast<char*>(args.call_state->Alloc(header_data_.length() + 1));
|
1233
|
+
strcpy(copied_header_data, header_data_.c_str());
|
1234
|
+
args.initial_metadata->Add(kRlsHeaderKey, copied_header_data);
|
1235
|
+
}
|
1236
|
+
return child_policy_wrapper->Pick(args);
|
1234
1237
|
}
|
1235
1238
|
|
1236
1239
|
void RlsLb::Cache::Entry::ResetBackoff() {
|
@@ -1776,7 +1779,7 @@ void RlsLb::RlsRequest::OnRlsCallCompleteLocked(grpc_error_handle error) {
|
|
1776
1779
|
}
|
1777
1780
|
// Parse response.
|
1778
1781
|
ResponseInfo response;
|
1779
|
-
if (error
|
1782
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
1780
1783
|
grpc_status_code code;
|
1781
1784
|
std::string message;
|
1782
1785
|
grpc_error_get_status(error, deadline_, &code, &message,
|
@@ -1979,7 +1982,7 @@ void RlsLb::UpdateLocked(UpdateArgs args) {
|
|
1979
1982
|
// Resize cache if needed.
|
1980
1983
|
if (old_config == nullptr ||
|
1981
1984
|
config_->cache_size_bytes() != old_config->cache_size_bytes()) {
|
1982
|
-
cache_.Resize(config_->cache_size_bytes());
|
1985
|
+
cache_.Resize(static_cast<size_t>(config_->cache_size_bytes()));
|
1983
1986
|
}
|
1984
1987
|
// Start update of child policies if needed.
|
1985
1988
|
if (update_child_policies) {
|
@@ -2230,7 +2233,7 @@ grpc_error_handle ParseGrpcKeybuilder(
|
|
2230
2233
|
grpc_error_handle child_error = GRPC_ERROR_NONE;
|
2231
2234
|
std::string name =
|
2232
2235
|
ParseJsonMethodName(name_idx++, name_json, &child_error);
|
2233
|
-
if (child_error
|
2236
|
+
if (!GRPC_ERROR_IS_NONE(child_error)) {
|
2234
2237
|
error_list.push_back(child_error);
|
2235
2238
|
} else {
|
2236
2239
|
bool inserted = names.insert(name).second;
|
@@ -2266,7 +2269,7 @@ grpc_error_handle ParseGrpcKeybuilder(
|
|
2266
2269
|
std::vector<std::string> headers;
|
2267
2270
|
grpc_error_handle child_error =
|
2268
2271
|
ParseJsonHeaders(header_idx++, header_json, &key, &headers);
|
2269
|
-
if (child_error
|
2272
|
+
if (!GRPC_ERROR_IS_NONE(child_error)) {
|
2270
2273
|
error_list.push_back(child_error);
|
2271
2274
|
} else {
|
2272
2275
|
duplicate_key_check_func(key);
|
@@ -2359,7 +2362,7 @@ RlsLbConfig::KeyBuilderMap ParseGrpcKeybuilders(
|
|
2359
2362
|
for (const Json& key_builder : key_builder_list) {
|
2360
2363
|
grpc_error_handle child_error =
|
2361
2364
|
ParseGrpcKeybuilder(idx++, key_builder, &key_builder_map);
|
2362
|
-
if (child_error
|
2365
|
+
if (!GRPC_ERROR_IS_NONE(child_error)) error_list.push_back(child_error);
|
2363
2366
|
}
|
2364
2367
|
*error = GRPC_ERROR_CREATE_FROM_VECTOR("field:grpcKeybuilders", &error_list);
|
2365
2368
|
return key_builder_map;
|
@@ -2376,7 +2379,7 @@ RlsLbConfig::RouteLookupConfig ParseRouteLookupConfig(
|
|
2376
2379
|
grpc_error_handle child_error = GRPC_ERROR_NONE;
|
2377
2380
|
route_lookup_config.key_builder_map =
|
2378
2381
|
ParseGrpcKeybuilders(*keybuilder_list, &child_error);
|
2379
|
-
if (child_error
|
2382
|
+
if (!GRPC_ERROR_IS_NONE(child_error)) error_list.push_back(child_error);
|
2380
2383
|
}
|
2381
2384
|
// Parse lookupService.
|
2382
2385
|
if (ParseJsonObjectField(json, "lookupService",
|
@@ -2452,12 +2455,12 @@ grpc_error_handle ValidateChildPolicyList(
|
|
2452
2455
|
default_target.empty() ? kFakeTargetFieldValue : default_target;
|
2453
2456
|
grpc_error_handle error = InsertOrUpdateChildPolicyField(
|
2454
2457
|
child_policy_config_target_field_name, target, child_policy_config);
|
2455
|
-
if (error
|
2458
|
+
if (!GRPC_ERROR_IS_NONE(error)) return error;
|
2456
2459
|
// Parse the config.
|
2457
2460
|
RefCountedPtr<LoadBalancingPolicy::Config> parsed_config =
|
2458
2461
|
LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
|
2459
2462
|
*child_policy_config, &error);
|
2460
|
-
if (error
|
2463
|
+
if (!GRPC_ERROR_IS_NONE(error)) return error;
|
2461
2464
|
// Find the chosen config and return it in JSON form.
|
2462
2465
|
// We remove all non-selected configs, and in the selected config, we leave
|
2463
2466
|
// the target field in place, set to the default value. This slightly
|
@@ -2500,7 +2503,7 @@ class RlsLbFactory : public LoadBalancingPolicyFactory {
|
|
2500
2503
|
grpc_error_handle child_error = GRPC_ERROR_NONE;
|
2501
2504
|
route_lookup_config =
|
2502
2505
|
ParseRouteLookupConfig(*route_lookup_config_json, &child_error);
|
2503
|
-
if (child_error
|
2506
|
+
if (!GRPC_ERROR_IS_NONE(child_error)) error_list.push_back(child_error);
|
2504
2507
|
}
|
2505
2508
|
// Parse routeLookupChannelServiceConfig.
|
2506
2509
|
std::string rls_channel_service_config;
|
@@ -2516,7 +2519,7 @@ class RlsLbFactory : public LoadBalancingPolicyFactory {
|
|
2516
2519
|
auto service_config = MakeRefCounted<ServiceConfigImpl>(
|
2517
2520
|
/*args=*/nullptr, rls_channel_service_config,
|
2518
2521
|
std::move(rls_channel_service_config_json), &child_error);
|
2519
|
-
if (child_error
|
2522
|
+
if (!GRPC_ERROR_IS_NONE(child_error)) {
|
2520
2523
|
error_list.push_back(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
2521
2524
|
"field:routeLookupChannelServiceConfig", &child_error, 1));
|
2522
2525
|
GRPC_ERROR_UNREF(child_error);
|
@@ -2548,7 +2551,7 @@ class RlsLbFactory : public LoadBalancingPolicyFactory {
|
|
2548
2551
|
it->second, child_policy_config_target_field_name,
|
2549
2552
|
route_lookup_config.default_target, &child_policy_config,
|
2550
2553
|
&default_child_policy_parsed_config);
|
2551
|
-
if (child_error
|
2554
|
+
if (!GRPC_ERROR_IS_NONE(child_error)) {
|
2552
2555
|
error_list.push_back(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
2553
2556
|
"field:childPolicy", &child_error, 1));
|
2554
2557
|
GRPC_ERROR_UNREF(child_error);
|
@@ -19,15 +19,17 @@
|
|
19
19
|
#include <inttypes.h>
|
20
20
|
#include <stdlib.h>
|
21
21
|
|
22
|
+
#include <algorithm>
|
22
23
|
#include <memory>
|
23
24
|
#include <string>
|
24
25
|
#include <utility>
|
26
|
+
#include <vector>
|
25
27
|
|
26
|
-
#include "absl/container/inlined_vector.h"
|
27
28
|
#include "absl/memory/memory.h"
|
28
29
|
#include "absl/status/status.h"
|
29
30
|
#include "absl/status/statusor.h"
|
30
31
|
#include "absl/strings/str_cat.h"
|
32
|
+
#include "absl/types/optional.h"
|
31
33
|
|
32
34
|
#include <grpc/impl/codegen/connectivity_state.h>
|
33
35
|
#include <grpc/impl/codegen/grpc_types.h>
|
@@ -89,25 +91,27 @@ class RoundRobin : public LoadBalancingPolicy {
|
|
89
91
|
RefCountedPtr<SubchannelInterface> subchannel)
|
90
92
|
: SubchannelData(subchannel_list, address, std::move(subchannel)) {}
|
91
93
|
|
92
|
-
grpc_connectivity_state connectivity_state() const {
|
94
|
+
absl::optional<grpc_connectivity_state> connectivity_state() const {
|
93
95
|
return logical_connectivity_state_;
|
94
96
|
}
|
95
97
|
|
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(
|
102
|
-
grpc_connectivity_state connectivity_state);
|
103
|
-
|
104
98
|
private:
|
105
99
|
// Performs connectivity state updates that need to be done only
|
106
100
|
// after we have started watching.
|
107
101
|
void ProcessConnectivityChangeLocked(
|
108
|
-
grpc_connectivity_state
|
102
|
+
absl::optional<grpc_connectivity_state> old_state,
|
103
|
+
grpc_connectivity_state new_state) override;
|
104
|
+
|
105
|
+
// Updates the logical connectivity state.
|
106
|
+
void UpdateLogicalConnectivityStateLocked(
|
107
|
+
grpc_connectivity_state connectivity_state);
|
109
108
|
|
110
|
-
|
109
|
+
// The logical connectivity state of the subchannel.
|
110
|
+
// Note that the logical connectivity state may differ from the
|
111
|
+
// actual reported state in some cases (e.g., after we see
|
112
|
+
// TRANSIENT_FAILURE, we ignore any subsequent state changes until
|
113
|
+
// we see READY).
|
114
|
+
absl::optional<grpc_connectivity_state> logical_connectivity_state_;
|
111
115
|
};
|
112
116
|
|
113
117
|
// A list of subchannels.
|
@@ -134,13 +138,11 @@ class RoundRobin : public LoadBalancingPolicy {
|
|
134
138
|
p->Unref(DEBUG_LOCATION, "subchannel_list");
|
135
139
|
}
|
136
140
|
|
137
|
-
// Starts watching the subchannels in this list.
|
138
|
-
void StartWatchingLocked(absl::Status status_for_tf);
|
139
|
-
|
140
141
|
// Updates the counters of subchannels in each state when a
|
141
142
|
// subchannel transitions from old_state to new_state.
|
142
|
-
void UpdateStateCountersLocked(
|
143
|
-
|
143
|
+
void UpdateStateCountersLocked(
|
144
|
+
absl::optional<grpc_connectivity_state> old_state,
|
145
|
+
grpc_connectivity_state new_state);
|
144
146
|
|
145
147
|
// Ensures that the right subchannel list is used and then updates
|
146
148
|
// the RR policy's connectivity state based on the subchannel list's
|
@@ -159,6 +161,8 @@ class RoundRobin : public LoadBalancingPolicy {
|
|
159
161
|
size_t num_ready_ = 0;
|
160
162
|
size_t num_connecting_ = 0;
|
161
163
|
size_t num_transient_failure_ = 0;
|
164
|
+
|
165
|
+
absl::Status last_failure_;
|
162
166
|
};
|
163
167
|
|
164
168
|
class Picker : public SubchannelPicker {
|
@@ -172,7 +176,7 @@ class RoundRobin : public LoadBalancingPolicy {
|
|
172
176
|
RoundRobin* parent_;
|
173
177
|
|
174
178
|
size_t last_picked_index_;
|
175
|
-
|
179
|
+
std::vector<RefCountedPtr<SubchannelInterface>> subchannels_;
|
176
180
|
};
|
177
181
|
|
178
182
|
void ShutdownLocked() override;
|
@@ -197,7 +201,8 @@ RoundRobin::Picker::Picker(RoundRobin* parent,
|
|
197
201
|
: parent_(parent) {
|
198
202
|
for (size_t i = 0; i < subchannel_list->num_subchannels(); ++i) {
|
199
203
|
RoundRobinSubchannelData* sd = subchannel_list->subchannel(i);
|
200
|
-
if (sd->connectivity_state() ==
|
204
|
+
if (sd->connectivity_state().value_or(GRPC_CHANNEL_IDLE) ==
|
205
|
+
GRPC_CHANNEL_READY) {
|
201
206
|
subchannels_.push_back(sd->subchannel()->Ref());
|
202
207
|
}
|
203
208
|
}
|
@@ -285,55 +290,54 @@ void RoundRobin::UpdateLocked(UpdateArgs args) {
|
|
285
290
|
}
|
286
291
|
latest_pending_subchannel_list_ = MakeOrphanable<RoundRobinSubchannelList>(
|
287
292
|
this, std::move(addresses), *args.args);
|
288
|
-
//
|
289
|
-
//
|
290
|
-
latest_pending_subchannel_list_->
|
291
|
-
|
292
|
-
|
293
|
-
|
293
|
+
// If the new list is empty, immediately promote it to
|
294
|
+
// subchannel_list_ and report TRANSIENT_FAILURE.
|
295
|
+
if (latest_pending_subchannel_list_->num_subchannels() == 0) {
|
296
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace) &&
|
297
|
+
subchannel_list_ != nullptr) {
|
298
|
+
gpr_log(GPR_INFO, "[RR %p] replacing previous subchannel list %p", this,
|
299
|
+
subchannel_list_.get());
|
300
|
+
}
|
301
|
+
subchannel_list_ = std::move(latest_pending_subchannel_list_);
|
302
|
+
absl::Status status =
|
303
|
+
args.addresses.ok() ? absl::UnavailableError(absl::StrCat(
|
304
|
+
"empty address list: ", args.resolution_note))
|
305
|
+
: args.addresses.status();
|
306
|
+
channel_control_helper()->UpdateState(
|
307
|
+
GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
308
|
+
absl::make_unique<TransientFailurePicker>(status));
|
309
|
+
}
|
310
|
+
// Otherwise, if this is the initial update, immediately promote it to
|
311
|
+
// subchannel_list_ and report CONNECTING.
|
312
|
+
else if (subchannel_list_.get() == nullptr) {
|
313
|
+
subchannel_list_ = std::move(latest_pending_subchannel_list_);
|
314
|
+
channel_control_helper()->UpdateState(
|
315
|
+
GRPC_CHANNEL_CONNECTING, absl::Status(),
|
316
|
+
absl::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker")));
|
317
|
+
}
|
294
318
|
}
|
295
319
|
|
296
320
|
//
|
297
321
|
// RoundRobinSubchannelList
|
298
322
|
//
|
299
323
|
|
300
|
-
void RoundRobin::RoundRobinSubchannelList::
|
301
|
-
absl::
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
if (
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
if (subchannel(i)->subchannel() != nullptr) {
|
315
|
-
subchannel(i)->StartConnectivityWatchLocked();
|
316
|
-
subchannel(i)->subchannel()->RequestConnection();
|
324
|
+
void RoundRobin::RoundRobinSubchannelList::UpdateStateCountersLocked(
|
325
|
+
absl::optional<grpc_connectivity_state> old_state,
|
326
|
+
grpc_connectivity_state new_state) {
|
327
|
+
if (old_state.has_value()) {
|
328
|
+
GPR_ASSERT(*old_state != GRPC_CHANNEL_SHUTDOWN);
|
329
|
+
if (*old_state == GRPC_CHANNEL_READY) {
|
330
|
+
GPR_ASSERT(num_ready_ > 0);
|
331
|
+
--num_ready_;
|
332
|
+
} else if (*old_state == GRPC_CHANNEL_CONNECTING) {
|
333
|
+
GPR_ASSERT(num_connecting_ > 0);
|
334
|
+
--num_connecting_;
|
335
|
+
} else if (*old_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
336
|
+
GPR_ASSERT(num_transient_failure_ > 0);
|
337
|
+
--num_transient_failure_;
|
317
338
|
}
|
318
339
|
}
|
319
|
-
// Update RR connectivity state if needed.
|
320
|
-
MaybeUpdateRoundRobinConnectivityStateLocked(status_for_tf);
|
321
|
-
}
|
322
|
-
|
323
|
-
void RoundRobin::RoundRobinSubchannelList::UpdateStateCountersLocked(
|
324
|
-
grpc_connectivity_state old_state, grpc_connectivity_state new_state) {
|
325
|
-
GPR_ASSERT(old_state != GRPC_CHANNEL_SHUTDOWN);
|
326
340
|
GPR_ASSERT(new_state != GRPC_CHANNEL_SHUTDOWN);
|
327
|
-
if (old_state == GRPC_CHANNEL_READY) {
|
328
|
-
GPR_ASSERT(num_ready_ > 0);
|
329
|
-
--num_ready_;
|
330
|
-
} else if (old_state == GRPC_CHANNEL_CONNECTING) {
|
331
|
-
GPR_ASSERT(num_connecting_ > 0);
|
332
|
-
--num_connecting_;
|
333
|
-
} else if (old_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
334
|
-
GPR_ASSERT(num_transient_failure_ > 0);
|
335
|
-
--num_transient_failure_;
|
336
|
-
}
|
337
341
|
if (new_state == GRPC_CHANNEL_READY) {
|
338
342
|
++num_ready_;
|
339
343
|
} else if (new_state == GRPC_CHANNEL_CONNECTING) {
|
@@ -348,17 +352,13 @@ void RoundRobin::RoundRobinSubchannelList::
|
|
348
352
|
RoundRobin* p = static_cast<RoundRobin*>(policy());
|
349
353
|
// If this is latest_pending_subchannel_list_, then swap it into
|
350
354
|
// subchannel_list_ in the following cases:
|
351
|
-
// - subchannel_list_ is null (i.e., this is the first update).
|
352
355
|
// - subchannel_list_ has no READY subchannels.
|
353
356
|
// - This list has at least one READY subchannel.
|
354
|
-
// - All of the subchannels in this list are in TRANSIENT_FAILURE
|
355
|
-
//
|
356
|
-
//
|
357
|
-
// us to do.
|
357
|
+
// - All of the subchannels in this list are in TRANSIENT_FAILURE.
|
358
|
+
// (This may cause the channel to go from READY to TRANSIENT_FAILURE,
|
359
|
+
// but we're doing what the control plane told us to do.)
|
358
360
|
if (p->latest_pending_subchannel_list_.get() == this &&
|
359
|
-
(p->subchannel_list_ ==
|
360
|
-
num_ready_ > 0 ||
|
361
|
-
// Note: num_transient_failure_ and num_subchannels() may both be 0.
|
361
|
+
(p->subchannel_list_->num_ready_ == 0 || num_ready_ > 0 ||
|
362
362
|
num_transient_failure_ == num_subchannels())) {
|
363
363
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
|
364
364
|
const std::string old_counters_string =
|
@@ -399,9 +399,14 @@ void RoundRobin::RoundRobinSubchannelList::
|
|
399
399
|
"[RR %p] reporting TRANSIENT_FAILURE with subchannel list %p: %s",
|
400
400
|
p, this, status_for_tf.ToString().c_str());
|
401
401
|
}
|
402
|
+
if (!status_for_tf.ok()) {
|
403
|
+
last_failure_ = absl::UnavailableError(
|
404
|
+
absl::StrCat("connections to all backends failing; last error: ",
|
405
|
+
status_for_tf.ToString()));
|
406
|
+
}
|
402
407
|
p->channel_control_helper()->UpdateState(
|
403
|
-
GRPC_CHANNEL_TRANSIENT_FAILURE,
|
404
|
-
absl::make_unique<TransientFailurePicker>(
|
408
|
+
GRPC_CHANNEL_TRANSIENT_FAILURE, last_failure_,
|
409
|
+
absl::make_unique<TransientFailurePicker>(last_failure_));
|
405
410
|
}
|
406
411
|
}
|
407
412
|
|
@@ -409,7 +414,40 @@ void RoundRobin::RoundRobinSubchannelList::
|
|
409
414
|
// RoundRobinSubchannelData
|
410
415
|
//
|
411
416
|
|
412
|
-
|
417
|
+
void RoundRobin::RoundRobinSubchannelData::ProcessConnectivityChangeLocked(
|
418
|
+
absl::optional<grpc_connectivity_state> old_state,
|
419
|
+
grpc_connectivity_state new_state) {
|
420
|
+
RoundRobin* p = static_cast<RoundRobin*>(subchannel_list()->policy());
|
421
|
+
GPR_ASSERT(subchannel() != nullptr);
|
422
|
+
// If this is not the initial state notification and the new state is
|
423
|
+
// TRANSIENT_FAILURE or IDLE, re-resolve.
|
424
|
+
// Note that we don't want to do this on the initial state notification,
|
425
|
+
// because that would result in an endless loop of re-resolution.
|
426
|
+
if (old_state.has_value() && (new_state == GRPC_CHANNEL_TRANSIENT_FAILURE ||
|
427
|
+
new_state == GRPC_CHANNEL_IDLE)) {
|
428
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
|
429
|
+
gpr_log(GPR_INFO,
|
430
|
+
"[RR %p] Subchannel %p reported %s; requesting re-resolution", p,
|
431
|
+
subchannel(), ConnectivityStateName(new_state));
|
432
|
+
}
|
433
|
+
p->channel_control_helper()->RequestReresolution();
|
434
|
+
}
|
435
|
+
if (new_state == GRPC_CHANNEL_IDLE) {
|
436
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
|
437
|
+
gpr_log(GPR_INFO,
|
438
|
+
"[RR %p] Subchannel %p reported IDLE; requesting connection", p,
|
439
|
+
subchannel());
|
440
|
+
}
|
441
|
+
subchannel()->RequestConnection();
|
442
|
+
}
|
443
|
+
// Update logical connectivity state.
|
444
|
+
UpdateLogicalConnectivityStateLocked(new_state);
|
445
|
+
// Update the policy state.
|
446
|
+
subchannel_list()->MaybeUpdateRoundRobinConnectivityStateLocked(
|
447
|
+
connectivity_status());
|
448
|
+
}
|
449
|
+
|
450
|
+
void RoundRobin::RoundRobinSubchannelData::UpdateLogicalConnectivityStateLocked(
|
413
451
|
grpc_connectivity_state connectivity_state) {
|
414
452
|
RoundRobin* p = static_cast<RoundRobin*>(subchannel_list()->policy());
|
415
453
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
|
@@ -419,15 +457,18 @@ bool RoundRobin::RoundRobinSubchannelData::UpdateLogicalConnectivityStateLocked(
|
|
419
457
|
"(index %" PRIuPTR " of %" PRIuPTR "): prev_state=%s new_state=%s",
|
420
458
|
p, subchannel(), subchannel_list(), Index(),
|
421
459
|
subchannel_list()->num_subchannels(),
|
422
|
-
|
460
|
+
(logical_connectivity_state_.has_value()
|
461
|
+
? ConnectivityStateName(*logical_connectivity_state_)
|
462
|
+
: "N/A"),
|
423
463
|
ConnectivityStateName(connectivity_state));
|
424
464
|
}
|
425
465
|
// Decide what state to report for aggregation purposes.
|
426
466
|
// If the last logical state was TRANSIENT_FAILURE, then ignore the
|
427
467
|
// state change unless the new state is READY.
|
428
|
-
if (logical_connectivity_state_
|
468
|
+
if (logical_connectivity_state_.has_value() &&
|
469
|
+
*logical_connectivity_state_ == GRPC_CHANNEL_TRANSIENT_FAILURE &&
|
429
470
|
connectivity_state != GRPC_CHANNEL_READY) {
|
430
|
-
return
|
471
|
+
return;
|
431
472
|
}
|
432
473
|
// If the new state is IDLE, treat it as CONNECTING, since it will
|
433
474
|
// immediately transition into CONNECTING anyway.
|
@@ -442,40 +483,14 @@ bool RoundRobin::RoundRobinSubchannelData::UpdateLogicalConnectivityStateLocked(
|
|
442
483
|
connectivity_state = GRPC_CHANNEL_CONNECTING;
|
443
484
|
}
|
444
485
|
// If no change, return false.
|
445
|
-
if (logical_connectivity_state_
|
486
|
+
if (logical_connectivity_state_.has_value() &&
|
487
|
+
*logical_connectivity_state_ == connectivity_state) {
|
488
|
+
return;
|
489
|
+
}
|
446
490
|
// Otherwise, update counters and logical state.
|
447
491
|
subchannel_list()->UpdateStateCountersLocked(logical_connectivity_state_,
|
448
492
|
connectivity_state);
|
449
493
|
logical_connectivity_state_ = connectivity_state;
|
450
|
-
return true;
|
451
|
-
}
|
452
|
-
|
453
|
-
void RoundRobin::RoundRobinSubchannelData::ProcessConnectivityChangeLocked(
|
454
|
-
grpc_connectivity_state connectivity_state) {
|
455
|
-
RoundRobin* p = static_cast<RoundRobin*>(subchannel_list()->policy());
|
456
|
-
GPR_ASSERT(subchannel() != nullptr);
|
457
|
-
// If the new state is TRANSIENT_FAILURE or IDLE, re-resolve.
|
458
|
-
// Only do this if we've started watching, not at startup time.
|
459
|
-
// Otherwise, if the subchannel was already in state TRANSIENT_FAILURE
|
460
|
-
// when the subchannel list was created, we'd wind up in a constant
|
461
|
-
// loop of re-resolution.
|
462
|
-
// Also attempt to reconnect.
|
463
|
-
if (connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE ||
|
464
|
-
connectivity_state == GRPC_CHANNEL_IDLE) {
|
465
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
|
466
|
-
gpr_log(GPR_INFO,
|
467
|
-
"[RR %p] Subchannel %p reported %s; requesting re-resolution", p,
|
468
|
-
subchannel(), ConnectivityStateName(connectivity_state));
|
469
|
-
}
|
470
|
-
p->channel_control_helper()->RequestReresolution();
|
471
|
-
subchannel()->RequestConnection();
|
472
|
-
}
|
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"));
|
478
|
-
}
|
479
494
|
}
|
480
495
|
|
481
496
|
//
|