grpc 1.47.0-x86_64-linux → 1.48.0.pre1-x86_64-linux
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +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/2.5/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
- data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +182 -41
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +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
@@ -19,15 +19,17 @@
|
|
19
19
|
#include <inttypes.h>
|
20
20
|
#include <string.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>
|
@@ -87,12 +89,11 @@ class PickFirst : public LoadBalancingPolicy {
|
|
87
89
|
: SubchannelData(subchannel_list, address, std::move(subchannel)) {}
|
88
90
|
|
89
91
|
void ProcessConnectivityChangeLocked(
|
90
|
-
grpc_connectivity_state
|
92
|
+
absl::optional<grpc_connectivity_state> old_state,
|
93
|
+
grpc_connectivity_state new_state) override;
|
91
94
|
|
92
95
|
// Processes the connectivity change to READY for an unselected subchannel.
|
93
96
|
void ProcessUnselectedReadyLocked();
|
94
|
-
|
95
|
-
void CheckConnectivityStateAndStartWatchingLocked();
|
96
97
|
};
|
97
98
|
|
98
99
|
class PickFirstSubchannelList
|
@@ -111,6 +112,9 @@ class PickFirst : public LoadBalancingPolicy {
|
|
111
112
|
// any references to subchannels, since the subchannels'
|
112
113
|
// pollset_sets will include the LB policy's pollset_set.
|
113
114
|
policy->Ref(DEBUG_LOCATION, "subchannel_list").release();
|
115
|
+
// Note that we do not start trying to connect to any subchannel here,
|
116
|
+
// since we will wait until we see the initial connectivity state for all
|
117
|
+
// subchannels before doing that.
|
114
118
|
}
|
115
119
|
|
116
120
|
~PickFirstSubchannelList() override {
|
@@ -123,8 +127,19 @@ class PickFirst : public LoadBalancingPolicy {
|
|
123
127
|
in_transient_failure_ = in_transient_failure;
|
124
128
|
}
|
125
129
|
|
130
|
+
size_t attempting_index() const { return attempting_index_; }
|
131
|
+
void set_attempting_index(size_t index) { attempting_index_ = index; }
|
132
|
+
|
133
|
+
bool AllSubchannelsSeenInitialState() {
|
134
|
+
for (size_t i = 0; i < num_subchannels(); ++i) {
|
135
|
+
if (!subchannel(i)->connectivity_state().has_value()) return false;
|
136
|
+
}
|
137
|
+
return true;
|
138
|
+
}
|
139
|
+
|
126
140
|
private:
|
127
141
|
bool in_transient_failure_ = false;
|
142
|
+
size_t attempting_index_ = 0;
|
128
143
|
};
|
129
144
|
|
130
145
|
class Picker : public SubchannelPicker {
|
@@ -205,14 +220,18 @@ void PickFirst::AttemptToConnectUsingLatestUpdateArgsLocked() {
|
|
205
220
|
if (latest_update_args_.addresses.ok()) {
|
206
221
|
addresses = *latest_update_args_.addresses;
|
207
222
|
}
|
208
|
-
|
223
|
+
// Replace latest_pending_subchannel_list_.
|
224
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace) &&
|
225
|
+
latest_pending_subchannel_list_ != nullptr) {
|
226
|
+
gpr_log(GPR_INFO,
|
227
|
+
"[PF %p] Shutting down previous pending subchannel list %p", this,
|
228
|
+
latest_pending_subchannel_list_.get());
|
229
|
+
}
|
230
|
+
latest_pending_subchannel_list_ = MakeOrphanable<PickFirstSubchannelList>(
|
209
231
|
this, std::move(addresses), *latest_update_args_.args);
|
210
|
-
// Empty update or no valid subchannels.
|
211
|
-
|
212
|
-
|
213
|
-
subchannel_list_ = std::move(subchannel_list); // Empty list.
|
214
|
-
selected_ = nullptr;
|
215
|
-
// Put the channel in TRANSIENT_FAILURE.
|
232
|
+
// Empty update or no valid subchannels. Put the channel in
|
233
|
+
// TRANSIENT_FAILURE.
|
234
|
+
if (latest_pending_subchannel_list_->num_subchannels() == 0) {
|
216
235
|
absl::Status status =
|
217
236
|
latest_update_args_.addresses.ok()
|
218
237
|
? absl::UnavailableError(absl::StrCat(
|
@@ -221,65 +240,24 @@ void PickFirst::AttemptToConnectUsingLatestUpdateArgsLocked() {
|
|
221
240
|
channel_control_helper()->UpdateState(
|
222
241
|
GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
223
242
|
absl::make_unique<TransientFailurePicker>(status));
|
224
|
-
// If there was a previously pending update (which may or may
|
225
|
-
// not have contained the currently selected subchannel), drop
|
226
|
-
// it, so that it doesn't override what we've done here.
|
227
|
-
latest_pending_subchannel_list_.reset();
|
228
|
-
return;
|
229
243
|
}
|
230
|
-
//
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
for (size_t i = 0; i < subchannel_list->num_subchannels(); ++i) {
|
236
|
-
PickFirstSubchannelData* sd = subchannel_list->subchannel(i);
|
237
|
-
grpc_connectivity_state state = sd->CheckConnectivityStateLocked();
|
238
|
-
if (state == GRPC_CHANNEL_READY) {
|
239
|
-
subchannel_list_ = std::move(subchannel_list);
|
240
|
-
sd->StartConnectivityWatchLocked();
|
241
|
-
sd->ProcessUnselectedReadyLocked();
|
242
|
-
// If there was a previously pending update (which may or may
|
243
|
-
// not have contained the currently selected subchannel), drop
|
244
|
-
// it, so that it doesn't override what we've done here.
|
245
|
-
latest_pending_subchannel_list_.reset();
|
246
|
-
return;
|
247
|
-
}
|
244
|
+
// Otherwise, if this is the initial update, report CONNECTING.
|
245
|
+
else if (subchannel_list_.get() == nullptr) {
|
246
|
+
channel_control_helper()->UpdateState(
|
247
|
+
GRPC_CHANNEL_CONNECTING, absl::Status(),
|
248
|
+
absl::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker")));
|
248
249
|
}
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
subchannel_list_->subchannel(0)->StartConnectivityWatchLocked();
|
259
|
-
subchannel_list_->subchannel(0)->subchannel()->RequestConnection();
|
260
|
-
} else {
|
261
|
-
// We do have a selected subchannel (which means it's READY), so keep
|
262
|
-
// using it until one of the subchannels in the new list reports READY.
|
263
|
-
if (latest_pending_subchannel_list_ != nullptr) {
|
264
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
265
|
-
gpr_log(GPR_INFO,
|
266
|
-
"Pick First %p Shutting down latest pending subchannel list "
|
267
|
-
"%p, about to be replaced by newer latest %p",
|
268
|
-
this, latest_pending_subchannel_list_.get(),
|
269
|
-
subchannel_list.get());
|
270
|
-
}
|
250
|
+
// If the new update is empty or we don't yet have a selected subchannel in
|
251
|
+
// the current list, replace the current subchannel list immediately.
|
252
|
+
if (latest_pending_subchannel_list_->num_subchannels() == 0 ||
|
253
|
+
selected_ == nullptr) {
|
254
|
+
selected_ = nullptr;
|
255
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace) &&
|
256
|
+
subchannel_list_ != nullptr) {
|
257
|
+
gpr_log(GPR_INFO, "[PF %p] Shutting down previous subchannel list %p",
|
258
|
+
this, subchannel_list_.get());
|
271
259
|
}
|
272
|
-
|
273
|
-
// If we're not in IDLE state, start trying to connect to the first
|
274
|
-
// subchannel in the new list.
|
275
|
-
// Note: No need to use CheckConnectivityStateAndStartWatchingLocked()
|
276
|
-
// here, since we've already checked the initial connectivity
|
277
|
-
// state of all subchannels above.
|
278
|
-
latest_pending_subchannel_list_->subchannel(0)
|
279
|
-
->StartConnectivityWatchLocked();
|
280
|
-
latest_pending_subchannel_list_->subchannel(0)
|
281
|
-
->subchannel()
|
282
|
-
->RequestConnection();
|
260
|
+
subchannel_list_ = std::move(latest_pending_subchannel_list_);
|
283
261
|
}
|
284
262
|
}
|
285
263
|
|
@@ -316,26 +294,24 @@ void PickFirst::UpdateLocked(UpdateArgs args) {
|
|
316
294
|
}
|
317
295
|
|
318
296
|
void PickFirst::PickFirstSubchannelData::ProcessConnectivityChangeLocked(
|
319
|
-
grpc_connectivity_state
|
297
|
+
absl::optional<grpc_connectivity_state> old_state,
|
298
|
+
grpc_connectivity_state new_state) {
|
320
299
|
PickFirst* p = static_cast<PickFirst*>(subchannel_list()->policy());
|
321
300
|
// The notification must be for a subchannel in either the current or
|
322
301
|
// latest pending subchannel lists.
|
323
302
|
GPR_ASSERT(subchannel_list() == p->subchannel_list_.get() ||
|
324
303
|
subchannel_list() == p->latest_pending_subchannel_list_.get());
|
325
|
-
GPR_ASSERT(
|
304
|
+
GPR_ASSERT(new_state != GRPC_CHANNEL_SHUTDOWN);
|
326
305
|
// Handle updates for the currently selected subchannel.
|
327
306
|
if (p->selected_ == this) {
|
328
307
|
GPR_ASSERT(subchannel_list() == p->subchannel_list_.get());
|
329
308
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
330
309
|
gpr_log(GPR_INFO,
|
331
310
|
"Pick First %p selected subchannel connectivity changed to %s", p,
|
332
|
-
ConnectivityStateName(
|
311
|
+
ConnectivityStateName(new_state));
|
333
312
|
}
|
334
|
-
//
|
335
|
-
//
|
336
|
-
// If the new state is READY, just ignore it; otherwise, regardless of
|
337
|
-
// what state it is, we treat it as a failure of the existing connection.
|
338
|
-
if (connectivity_state == GRPC_CHANNEL_READY) return;
|
313
|
+
// Any state change is considered to be a failure of the existing
|
314
|
+
// connection.
|
339
315
|
// If there is a pending update, switch to the pending update.
|
340
316
|
if (p->latest_pending_subchannel_list_ != nullptr) {
|
341
317
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
@@ -346,13 +322,16 @@ void PickFirst::PickFirstSubchannelData::ProcessConnectivityChangeLocked(
|
|
346
322
|
p->subchannel_list_.get());
|
347
323
|
}
|
348
324
|
p->selected_ = nullptr;
|
349
|
-
CancelConnectivityWatchLocked(
|
350
|
-
"selected subchannel failed; switching to pending update");
|
351
325
|
p->subchannel_list_ = std::move(p->latest_pending_subchannel_list_);
|
352
326
|
// Set our state to that of the pending subchannel list.
|
353
327
|
if (p->subchannel_list_->in_transient_failure()) {
|
354
|
-
absl::Status status = absl::UnavailableError(
|
355
|
-
"selected subchannel failed; switching to pending update"
|
328
|
+
absl::Status status = absl::UnavailableError(absl::StrCat(
|
329
|
+
"selected subchannel failed; switching to pending update; "
|
330
|
+
"last failure: ",
|
331
|
+
p->subchannel_list_
|
332
|
+
->subchannel(p->subchannel_list_->num_subchannels())
|
333
|
+
->connectivity_status()
|
334
|
+
.ToString()));
|
356
335
|
p->channel_control_helper()->UpdateState(
|
357
336
|
GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
358
337
|
absl::make_unique<TransientFailurePicker>(status));
|
@@ -368,6 +347,9 @@ void PickFirst::PickFirstSubchannelData::ProcessConnectivityChangeLocked(
|
|
368
347
|
// TODO(qianchengz): We may want to request re-resolution in
|
369
348
|
// ExitIdleLocked().
|
370
349
|
p->channel_control_helper()->RequestReresolution();
|
350
|
+
// TODO(roth): We chould check the connectivity states of all the
|
351
|
+
// subchannels here, just in case one of them happens to be READY,
|
352
|
+
// and we could switch to that rather than going IDLE.
|
371
353
|
// Enter idle.
|
372
354
|
p->idle_ = true;
|
373
355
|
p->selected_ = nullptr;
|
@@ -386,19 +368,35 @@ void PickFirst::PickFirstSubchannelData::ProcessConnectivityChangeLocked(
|
|
386
368
|
// for a subchannel in p->latest_pending_subchannel_list_. The
|
387
369
|
// goal here is to find a subchannel from the update that we can
|
388
370
|
// select in place of the current one.
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
371
|
+
// If the subchannel is READY, use it.
|
372
|
+
if (new_state == GRPC_CHANNEL_READY) {
|
373
|
+
subchannel_list()->set_in_transient_failure(false);
|
374
|
+
ProcessUnselectedReadyLocked();
|
375
|
+
return;
|
376
|
+
}
|
377
|
+
// If this is the initial connectivity state notification for this
|
378
|
+
// subchannel, check to see if it's the last one we were waiting for,
|
379
|
+
// in which case we start trying to connect to the first subchannel.
|
380
|
+
// Otherwise, do nothing, since we'll continue to wait until all of
|
381
|
+
// the subchannels report their state.
|
382
|
+
if (!old_state.has_value()) {
|
383
|
+
if (subchannel_list()->AllSubchannelsSeenInitialState()) {
|
384
|
+
subchannel_list()->subchannel(0)->subchannel()->RequestConnection();
|
394
385
|
}
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
386
|
+
return;
|
387
|
+
}
|
388
|
+
// Ignore any other updates for subchannels we're not currently trying to
|
389
|
+
// connect to.
|
390
|
+
if (Index() != subchannel_list()->attempting_index()) return;
|
391
|
+
// Otherwise, process connectivity state.
|
392
|
+
switch (new_state) {
|
393
|
+
case GRPC_CHANNEL_READY:
|
394
|
+
// Already handled this case above, so this should not happen.
|
395
|
+
GPR_UNREACHABLE_CODE(break);
|
396
|
+
case GRPC_CHANNEL_TRANSIENT_FAILURE: {
|
397
|
+
size_t next_index = (Index() + 1) % subchannel_list()->num_subchannels();
|
398
|
+
subchannel_list()->set_attempting_index(next_index);
|
399
|
+
PickFirstSubchannelData* sd = subchannel_list()->subchannel(next_index);
|
402
400
|
// If we're tried all subchannels, set state to TRANSIENT_FAILURE.
|
403
401
|
if (sd->Index() == 0) {
|
404
402
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
@@ -427,14 +425,28 @@ void PickFirst::PickFirstSubchannelData::ProcessConnectivityChangeLocked(
|
|
427
425
|
// be the current list), re-resolve and report new state.
|
428
426
|
if (subchannel_list() == p->subchannel_list_.get()) {
|
429
427
|
p->channel_control_helper()->RequestReresolution();
|
430
|
-
absl::Status status =
|
431
|
-
absl::
|
428
|
+
absl::Status status = absl::UnavailableError(
|
429
|
+
absl::StrCat("failed to connect to all addresses; last error: ",
|
430
|
+
connectivity_status().ToString()));
|
432
431
|
p->channel_control_helper()->UpdateState(
|
433
432
|
GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
434
433
|
absl::make_unique<TransientFailurePicker>(status));
|
435
434
|
}
|
436
435
|
}
|
437
|
-
|
436
|
+
// If the next subchannel is in IDLE, trigger a connection attempt.
|
437
|
+
// If it's in READY, we can't get here, because we would already
|
438
|
+
// have selected the subchannel above.
|
439
|
+
// If it's already in CONNECTING, we don't need to do this.
|
440
|
+
// If it's in TRANSIENT_FAILURE, then we will trigger the
|
441
|
+
// connection attempt later when it reports IDLE.
|
442
|
+
auto sd_state = sd->connectivity_state();
|
443
|
+
if (sd_state.has_value() && *sd_state == GRPC_CHANNEL_IDLE) {
|
444
|
+
sd->subchannel()->RequestConnection();
|
445
|
+
}
|
446
|
+
break;
|
447
|
+
}
|
448
|
+
case GRPC_CHANNEL_IDLE: {
|
449
|
+
subchannel()->RequestConnection();
|
438
450
|
break;
|
439
451
|
}
|
440
452
|
case GRPC_CHANNEL_CONNECTING: {
|
@@ -493,24 +505,6 @@ void PickFirst::PickFirstSubchannelData::ProcessUnselectedReadyLocked() {
|
|
493
505
|
}
|
494
506
|
}
|
495
507
|
|
496
|
-
void PickFirst::PickFirstSubchannelData::
|
497
|
-
CheckConnectivityStateAndStartWatchingLocked() {
|
498
|
-
PickFirst* p = static_cast<PickFirst*>(subchannel_list()->policy());
|
499
|
-
// Check current state.
|
500
|
-
grpc_connectivity_state current_state = CheckConnectivityStateLocked();
|
501
|
-
// Start watch.
|
502
|
-
StartConnectivityWatchLocked();
|
503
|
-
// If current state is READY, select the subchannel now, since we started
|
504
|
-
// watching from this state and will not get a notification of it
|
505
|
-
// transitioning into this state.
|
506
|
-
// If the current state is not READY, attempt to connect.
|
507
|
-
if (current_state == GRPC_CHANNEL_READY) {
|
508
|
-
if (p->selected_ != this) ProcessUnselectedReadyLocked();
|
509
|
-
} else {
|
510
|
-
subchannel()->RequestConnection();
|
511
|
-
}
|
512
|
-
}
|
513
|
-
|
514
508
|
class PickFirstConfig : public LoadBalancingPolicy::Config {
|
515
509
|
public:
|
516
510
|
const char* name() const override { return kPickFirst; }
|
@@ -14,8 +14,6 @@
|
|
14
14
|
// limitations under the License.
|
15
15
|
//
|
16
16
|
|
17
|
-
// IWYU pragma: no_include <ext/alloc_traits.h>
|
18
|
-
|
19
17
|
#include <grpc/support/port_platform.h>
|
20
18
|
|
21
19
|
#include <inttypes.h>
|
@@ -135,9 +133,7 @@ class PriorityLb : public LoadBalancingPolicy {
|
|
135
133
|
|
136
134
|
void Orphan() override;
|
137
135
|
|
138
|
-
std::unique_ptr<SubchannelPicker> GetPicker()
|
139
|
-
return absl::make_unique<RefCountedPickerWrapper>(picker_wrapper_);
|
140
|
-
}
|
136
|
+
std::unique_ptr<SubchannelPicker> GetPicker();
|
141
137
|
|
142
138
|
grpc_connectivity_state connectivity_state() const {
|
143
139
|
return connectivity_state_;
|
@@ -267,18 +263,16 @@ class PriorityLb : public LoadBalancingPolicy {
|
|
267
263
|
|
268
264
|
// Iterates through the list of priorities to choose one:
|
269
265
|
// - If the child for a priority doesn't exist, creates it.
|
270
|
-
// - If a child's failover timer is pending,
|
271
|
-
//
|
272
|
-
//
|
273
|
-
// the channel.
|
274
|
-
// - If the child is connected, it will be used as the current priority.
|
266
|
+
// - If a child's failover timer is pending, selects that priority
|
267
|
+
// while we wait for the child to attempt to connect.
|
268
|
+
// - If the child is connected, selects that priority.
|
275
269
|
// - Otherwise, continues on to the next child.
|
276
|
-
//
|
277
|
-
//
|
270
|
+
// Delegates to the last child if none of the children are connecting.
|
271
|
+
// Reports TRANSIENT_FAILURE if the priority list is empty.
|
278
272
|
//
|
279
273
|
// This method is idempotent; it should yield the same result every
|
280
274
|
// time as a function of the state of the children.
|
281
|
-
void ChoosePriorityLocked(
|
275
|
+
void ChoosePriorityLocked();
|
282
276
|
|
283
277
|
// Sets the specified priority as the current priority.
|
284
278
|
// Deactivates any children at lower priorities.
|
@@ -362,12 +356,11 @@ void PriorityLb::UpdateLocked(UpdateArgs args) {
|
|
362
356
|
// Save current child.
|
363
357
|
if (current_priority_ != UINT32_MAX) {
|
364
358
|
const std::string& child_name = config_->priorities()[current_priority_];
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
current_priority_ = UINT32_MAX;
|
359
|
+
auto* child = children_[child_name].get();
|
360
|
+
GPR_ASSERT(child != nullptr);
|
361
|
+
if (child->connectivity_state() == GRPC_CHANNEL_READY) {
|
362
|
+
current_child_from_before_update_ = children_[child_name].get();
|
363
|
+
}
|
371
364
|
}
|
372
365
|
// Update config.
|
373
366
|
config_ = std::move(args.config);
|
@@ -394,7 +387,7 @@ void PriorityLb::UpdateLocked(UpdateArgs args) {
|
|
394
387
|
}
|
395
388
|
update_in_progress_ = false;
|
396
389
|
// Try to get connected.
|
397
|
-
ChoosePriorityLocked(
|
390
|
+
ChoosePriorityLocked();
|
398
391
|
}
|
399
392
|
|
400
393
|
uint32_t PriorityLb::GetChildPriorityLocked(
|
@@ -437,7 +430,7 @@ void PriorityLb::HandleChildConnectivityStateChangeLocked(
|
|
437
430
|
// properly select between CONNECTING and TRANSIENT_FAILURE as the
|
438
431
|
// new state to report to our parent.
|
439
432
|
current_child_from_before_update_ = nullptr;
|
440
|
-
ChoosePriorityLocked(
|
433
|
+
ChoosePriorityLocked();
|
441
434
|
}
|
442
435
|
return;
|
443
436
|
}
|
@@ -451,8 +444,7 @@ void PriorityLb::HandleChildConnectivityStateChangeLocked(
|
|
451
444
|
}
|
452
445
|
// Unconditionally call ChoosePriorityLocked(). It should do the
|
453
446
|
// right thing based on the state of all children.
|
454
|
-
ChoosePriorityLocked(
|
455
|
-
/*report_connecting=*/child_priority == current_priority_);
|
447
|
+
ChoosePriorityLocked();
|
456
448
|
}
|
457
449
|
|
458
450
|
void PriorityLb::DeleteChild(ChildPriority* child) {
|
@@ -463,12 +455,24 @@ void PriorityLb::DeleteChild(ChildPriority* child) {
|
|
463
455
|
// new state to report to our parent.
|
464
456
|
if (current_child_from_before_update_ == child) {
|
465
457
|
current_child_from_before_update_ = nullptr;
|
466
|
-
ChoosePriorityLocked(
|
458
|
+
ChoosePriorityLocked();
|
467
459
|
}
|
468
460
|
children_.erase(child->name());
|
469
461
|
}
|
470
462
|
|
471
|
-
void PriorityLb::ChoosePriorityLocked(
|
463
|
+
void PriorityLb::ChoosePriorityLocked() {
|
464
|
+
// If priority list is empty, report TF.
|
465
|
+
if (config_->priorities().empty()) {
|
466
|
+
current_child_from_before_update_ = nullptr;
|
467
|
+
absl::Status status =
|
468
|
+
absl::UnavailableError("priority policy has empty priority list");
|
469
|
+
channel_control_helper()->UpdateState(
|
470
|
+
GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
471
|
+
absl::make_unique<TransientFailurePicker>(status));
|
472
|
+
return;
|
473
|
+
}
|
474
|
+
// Iterate through priorities, searching for one in READY or IDLE,
|
475
|
+
// creating new children as needed.
|
472
476
|
current_priority_ = UINT32_MAX;
|
473
477
|
for (uint32_t priority = 0; priority < config_->priorities().size();
|
474
478
|
++priority) {
|
@@ -480,11 +484,18 @@ void PriorityLb::ChoosePriorityLocked(bool report_connecting) {
|
|
480
484
|
}
|
481
485
|
auto& child = children_[child_name];
|
482
486
|
if (child == nullptr) {
|
483
|
-
|
487
|
+
// If we're not still using an old child from before the last
|
488
|
+
// update, report CONNECTING here.
|
489
|
+
// This is probably not strictly necessary, since the child should
|
490
|
+
// immediately report CONNECTING and cause us to report that state
|
491
|
+
// anyway, but we do this just in case the child fails to report
|
492
|
+
// state before UpdateLocked() returns.
|
493
|
+
if (current_child_from_before_update_ != nullptr) {
|
484
494
|
channel_control_helper()->UpdateState(
|
485
495
|
GRPC_CHANNEL_CONNECTING, absl::Status(),
|
486
496
|
absl::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker")));
|
487
497
|
}
|
498
|
+
current_priority_ = priority;
|
488
499
|
child = MakeOrphanable<ChildPriority>(
|
489
500
|
Ref(DEBUG_LOCATION, "ChildPriority"), child_name);
|
490
501
|
auto child_config = config_->children().find(child_name);
|
@@ -510,10 +521,13 @@ void PriorityLb::ChoosePriorityLocked(bool report_connecting) {
|
|
510
521
|
"attempting to connect, will wait",
|
511
522
|
this, priority, child_name.c_str());
|
512
523
|
}
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
524
|
+
current_priority_ = priority;
|
525
|
+
// If we're not still using an old child from before the last
|
526
|
+
// update, report CONNECTING here.
|
527
|
+
if (current_child_from_before_update_ != nullptr) {
|
528
|
+
channel_control_helper()->UpdateState(child->connectivity_state(),
|
529
|
+
child->connectivity_status(),
|
530
|
+
child->GetPicker());
|
517
531
|
}
|
518
532
|
return;
|
519
533
|
}
|
@@ -526,18 +540,44 @@ void PriorityLb::ChoosePriorityLocked(bool report_connecting) {
|
|
526
540
|
ConnectivityStateName(child->connectivity_state()));
|
527
541
|
}
|
528
542
|
}
|
529
|
-
// If
|
543
|
+
// If we didn't find any priority to try, pick the first one in state
|
544
|
+
// CONNECTING.
|
530
545
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
|
531
546
|
gpr_log(GPR_INFO,
|
532
|
-
"[priority_lb %p] no priority reachable,
|
533
|
-
"
|
547
|
+
"[priority_lb %p] no priority reachable, checking for CONNECTING "
|
548
|
+
"priority to delegate to",
|
534
549
|
this);
|
535
550
|
}
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
551
|
+
for (uint32_t priority = 0; priority < config_->priorities().size();
|
552
|
+
++priority) {
|
553
|
+
// If the child for the priority does not exist yet, create it.
|
554
|
+
const std::string& child_name = config_->priorities()[priority];
|
555
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
|
556
|
+
gpr_log(GPR_INFO, "[priority_lb %p] trying priority %u, child %s", this,
|
557
|
+
priority, child_name.c_str());
|
558
|
+
}
|
559
|
+
auto& child = children_[child_name];
|
560
|
+
GPR_ASSERT(child != nullptr);
|
561
|
+
if (child->connectivity_state() == GRPC_CHANNEL_CONNECTING) {
|
562
|
+
channel_control_helper()->UpdateState(child->connectivity_state(),
|
563
|
+
child->connectivity_status(),
|
564
|
+
child->GetPicker());
|
565
|
+
return;
|
566
|
+
}
|
567
|
+
}
|
568
|
+
// Did not find any child in CONNECTING, delegate to last child.
|
569
|
+
const std::string& child_name = config_->priorities().back();
|
570
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
|
571
|
+
gpr_log(GPR_INFO,
|
572
|
+
"[priority_lb %p] no priority in CONNECTING, delegating to "
|
573
|
+
"lowest priority child %s",
|
574
|
+
this, child_name.c_str());
|
575
|
+
}
|
576
|
+
auto& child = children_[child_name];
|
577
|
+
GPR_ASSERT(child != nullptr);
|
578
|
+
channel_control_helper()->UpdateState(child->connectivity_state(),
|
579
|
+
child->connectivity_status(),
|
580
|
+
child->GetPicker());
|
541
581
|
}
|
542
582
|
|
543
583
|
void PriorityLb::SetCurrentPriorityLocked(uint32_t priority) {
|
@@ -604,7 +644,7 @@ void PriorityLb::ChildPriority::DeactivationTimer::OnTimer(
|
|
604
644
|
|
605
645
|
void PriorityLb::ChildPriority::DeactivationTimer::OnTimerLocked(
|
606
646
|
grpc_error_handle error) {
|
607
|
-
if (error
|
647
|
+
if (GRPC_ERROR_IS_NONE(error) && timer_pending_) {
|
608
648
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
|
609
649
|
gpr_log(GPR_INFO,
|
610
650
|
"[priority_lb %p] child %s (%p): deactivation timer fired, "
|
@@ -668,7 +708,7 @@ void PriorityLb::ChildPriority::FailoverTimer::OnTimer(
|
|
668
708
|
|
669
709
|
void PriorityLb::ChildPriority::FailoverTimer::OnTimerLocked(
|
670
710
|
grpc_error_handle error) {
|
671
|
-
if (error
|
711
|
+
if (GRPC_ERROR_IS_NONE(error) && timer_pending_) {
|
672
712
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
|
673
713
|
gpr_log(GPR_INFO,
|
674
714
|
"[priority_lb %p] child %s (%p): failover timer fired, "
|
@@ -719,6 +759,15 @@ void PriorityLb::ChildPriority::Orphan() {
|
|
719
759
|
Unref(DEBUG_LOCATION, "ChildPriority+Orphan");
|
720
760
|
}
|
721
761
|
|
762
|
+
std::unique_ptr<LoadBalancingPolicy::SubchannelPicker>
|
763
|
+
PriorityLb::ChildPriority::GetPicker() {
|
764
|
+
if (picker_wrapper_ == nullptr) {
|
765
|
+
return absl::make_unique<QueuePicker>(
|
766
|
+
priority_policy_->Ref(DEBUG_LOCATION, "QueuePicker"));
|
767
|
+
}
|
768
|
+
return absl::make_unique<RefCountedPickerWrapper>(picker_wrapper_);
|
769
|
+
}
|
770
|
+
|
722
771
|
void PriorityLb::ChildPriority::UpdateLocked(
|
723
772
|
RefCountedPtr<LoadBalancingPolicy::Config> config,
|
724
773
|
bool ignore_reresolution_requests) {
|
@@ -882,7 +931,7 @@ class PriorityLbFactory : public LoadBalancingPolicyFactory {
|
|
882
931
|
|
883
932
|
RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
|
884
933
|
const Json& json, grpc_error_handle* error) const override {
|
885
|
-
GPR_DEBUG_ASSERT(error != nullptr && *error
|
934
|
+
GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
|
886
935
|
if (json.type() == Json::Type::JSON_NULL) {
|
887
936
|
// priority was mentioned as a policy in the deprecated
|
888
937
|
// loadBalancingPolicy field or in the client API.
|
@@ -937,7 +986,7 @@ class PriorityLbFactory : public LoadBalancingPolicyFactory {
|
|
937
986
|
}
|
938
987
|
}
|
939
988
|
if (config == nullptr) {
|
940
|
-
GPR_DEBUG_ASSERT(parse_error
|
989
|
+
GPR_DEBUG_ASSERT(!GRPC_ERROR_IS_NONE(parse_error));
|
941
990
|
error_list.push_back(
|
942
991
|
GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(
|
943
992
|
absl::StrCat("field:children key:", child_name).c_str(),
|