grpc 1.41.0.pre2 → 1.42.0
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 +57 -44
- data/etc/roots.pem +335 -326
- data/include/grpc/event_engine/event_engine.h +82 -42
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
- data/include/grpc/event_engine/memory_allocator.h +210 -0
- data/include/grpc/grpc.h +4 -0
- data/include/grpc/grpc_security.h +18 -0
- data/include/grpc/grpc_security_constants.h +1 -0
- data/include/grpc/impl/codegen/port_platform.h +7 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
- data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
- data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
- data/src/core/ext/filters/client_channel/client_channel.h +74 -27
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
- data/src/core/ext/filters/client_channel/config_selector.h +4 -5
- data/src/core/ext/filters/client_channel/connector.h +18 -18
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
- 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/grpclb/load_balancer_api.cc +2 -4
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
- data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
- data/src/core/ext/filters/client_channel/resolver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
- data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
- data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
- data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
- data/src/core/ext/filters/client_channel/server_address.h +1 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
- data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
- data/src/core/ext/filters/client_channel/subchannel.h +29 -49
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
- data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
- data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
- data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
- data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
- data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
- data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
- data/src/core/ext/service_config/service_config_call_data.h +72 -0
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
- data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
- data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
- data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
- data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
- data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
- data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
- data/src/core/ext/xds/xds_api.cc +325 -362
- data/src/core/ext/xds/xds_api.h +134 -82
- data/src/core/ext/xds/xds_bootstrap.h +10 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
- data/src/core/ext/xds/xds_client.cc +527 -314
- data/src/core/ext/xds/xds_client.h +42 -37
- data/src/core/ext/xds/xds_client_stats.h +1 -1
- data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
- data/src/core/lib/address_utils/parse_address.cc +2 -0
- data/src/core/lib/avl/avl.cc +5 -5
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/channel/channel_args.cc +24 -6
- data/src/core/lib/channel/channel_args.h +9 -0
- data/src/core/lib/channel/channel_stack_builder.cc +3 -3
- data/src/core/lib/channel/channel_trace.cc +1 -1
- data/src/core/lib/channel/channel_trace.h +1 -1
- data/src/core/lib/channel/channelz.cc +3 -3
- data/src/core/lib/channel/channelz.h +2 -2
- data/src/core/lib/channel/channelz_registry.cc +1 -1
- data/src/core/lib/channel/channelz_registry.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +1 -3
- data/src/core/lib/channel/connected_channel.h +1 -2
- data/src/core/lib/compression/compression.cc +2 -2
- data/src/core/lib/compression/compression_args.cc +6 -4
- data/src/core/lib/compression/compression_internal.cc +2 -2
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/config/core_configuration.cc +44 -2
- data/src/core/lib/config/core_configuration.h +39 -1
- data/src/core/lib/debug/stats.cc +1 -1
- data/src/core/lib/debug/stats_data.cc +13 -13
- data/src/core/lib/gpr/atm.cc +1 -1
- data/src/core/lib/gpr/cpu_posix.cc +1 -1
- data/src/core/lib/gpr/string.cc +2 -2
- data/src/core/lib/gpr/tls.h +1 -1
- data/src/core/lib/gpr/useful.h +79 -32
- data/src/core/lib/gprpp/arena.h +10 -0
- data/src/core/lib/gprpp/bitset.h +38 -16
- data/src/core/lib/gprpp/chunked_vector.h +211 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -1
- data/src/core/lib/gprpp/match.h +1 -1
- data/src/core/lib/gprpp/memory.h +6 -0
- data/src/core/lib/gprpp/overload.h +1 -1
- data/src/core/lib/gprpp/status_helper.cc +23 -3
- data/src/core/lib/gprpp/status_helper.h +12 -1
- data/src/core/lib/gprpp/table.h +411 -0
- data/src/core/lib/http/httpcli.cc +200 -182
- data/src/core/lib/http/parser.cc +2 -2
- data/src/core/lib/iomgr/call_combiner.cc +28 -10
- data/src/core/lib/iomgr/combiner.cc +6 -21
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
- data/src/core/lib/iomgr/error.cc +113 -52
- data/src/core/lib/iomgr/error.h +50 -9
- data/src/core/lib/iomgr/error_cfstream.cc +5 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
- data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
- data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
- data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
- data/src/core/lib/iomgr/event_engine/closure.h +10 -1
- data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
- data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
- data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
- data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
- data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
- data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
- data/src/core/lib/iomgr/exec_ctx.cc +1 -9
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
- data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
- data/src/core/lib/iomgr/executor.cc +6 -20
- data/src/core/lib/iomgr/iomgr.cc +3 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
- data/src/core/lib/iomgr/iomgr_internal.h +3 -2
- data/src/core/lib/iomgr/load_file.cc +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +18 -0
- data/src/core/lib/iomgr/pollset_custom.cc +1 -1
- data/src/core/lib/iomgr/pollset_custom.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
- data/src/core/lib/iomgr/resource_quota.cc +13 -11
- data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_mutator.cc +2 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
- data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
- data/src/core/lib/iomgr/tcp_posix.cc +4 -5
- data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
- data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
- data/src/core/lib/iomgr/tcp_windows.cc +2 -2
- data/src/core/lib/iomgr/timer_generic.cc +13 -13
- data/src/core/lib/iomgr/timer_heap.cc +1 -1
- data/src/core/lib/json/json_util.cc +68 -0
- data/src/core/lib/json/json_util.h +57 -99
- data/src/core/lib/json/json_writer.cc +0 -3
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
- data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
- data/src/core/lib/security/context/security_context.cc +4 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
- data/src/core/lib/security/credentials/credentials.cc +4 -2
- data/src/core/lib/security/credentials/credentials.h +6 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
- data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/security_connector.cc +9 -4
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
- data/src/core/lib/security/transport/security_handshaker.cc +73 -43
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
- data/src/core/lib/security/transport/tsi_error.cc +3 -5
- data/src/core/lib/slice/slice.cc +0 -16
- data/src/core/lib/slice/slice_api.cc +39 -0
- data/src/core/lib/slice/slice_buffer.cc +5 -5
- data/src/core/lib/slice/slice_intern.cc +8 -13
- data/src/core/lib/slice/slice_internal.h +1 -244
- data/src/core/lib/slice/slice_refcount.cc +17 -0
- data/src/core/lib/slice/slice_refcount.h +121 -0
- data/src/core/lib/slice/slice_refcount_base.h +173 -0
- data/src/core/lib/slice/slice_split.cc +100 -0
- data/src/core/lib/slice/slice_split.h +40 -0
- data/src/core/lib/slice/slice_string_helpers.cc +0 -83
- data/src/core/lib/slice/slice_string_helpers.h +0 -11
- data/src/core/lib/slice/static_slice.cc +529 -0
- data/src/core/lib/slice/static_slice.h +331 -0
- data/src/core/lib/surface/builtins.cc +49 -0
- data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
- data/src/core/lib/surface/call.cc +103 -120
- data/src/core/lib/surface/call.h +0 -6
- data/src/core/lib/surface/channel.cc +19 -32
- data/src/core/lib/surface/channel.h +0 -9
- data/src/core/lib/surface/channel_init.cc +23 -76
- data/src/core/lib/surface/channel_init.h +52 -44
- data/src/core/lib/surface/completion_queue.cc +6 -5
- data/src/core/lib/surface/init.cc +0 -39
- data/src/core/lib/surface/init_secure.cc +17 -14
- data/src/core/lib/surface/lame_client.cc +18 -11
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +25 -17
- data/src/core/lib/surface/server.h +17 -10
- data/src/core/lib/surface/validate_metadata.cc +5 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +42 -17
- data/src/core/lib/transport/error_utils.h +1 -1
- data/src/core/lib/transport/metadata.cc +31 -10
- data/src/core/lib/transport/metadata.h +2 -1
- data/src/core/lib/transport/metadata_batch.cc +35 -371
- data/src/core/lib/transport/metadata_batch.h +905 -71
- data/src/core/lib/transport/parsed_metadata.h +263 -0
- data/src/core/lib/transport/pid_controller.cc +4 -4
- data/src/core/lib/transport/static_metadata.cc +714 -846
- data/src/core/lib/transport/static_metadata.h +115 -379
- data/src/core/lib/transport/status_metadata.cc +1 -0
- data/src/core/lib/transport/transport.cc +4 -5
- data/src/core/lib/transport/transport_op_string.cc +40 -20
- data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
- data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
- data/src/core/tsi/fake_transport_security.cc +15 -7
- data/src/core/tsi/local_transport_security.cc +36 -73
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
- data/src/core/tsi/ssl_transport_security.cc +10 -2
- data/src/core/tsi/transport_security.cc +12 -0
- data/src/core/tsi/transport_security.h +16 -1
- data/src/core/tsi/transport_security_interface.h +26 -0
- data/src/ruby/ext/grpc/extconf.rb +12 -9
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
- data/third_party/address_sorting/address_sorting_posix.c +1 -0
- data/third_party/boringssl-with-bazel/err_data.c +278 -272
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +21 -22
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +15 -22
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +13 -7
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
- data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +268 -271
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +0 -39
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +38 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +289 -198
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +9 -13
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
- data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +45 -65
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +21 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +5 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +24 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +12 -9
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +151 -12
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +181 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +11 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +11 -50
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +0 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +22 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +11 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +17 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +71 -26
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +366 -227
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -9
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +9 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +8 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +9 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +28 -14
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -32
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +529 -91
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -695
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +48 -8
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +266 -357
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +90 -152
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +15 -13
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +75 -79
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +96 -97
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +63 -43
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -12
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +14 -17
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +14 -27
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +203 -203
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +30 -41
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +47 -33
- data/third_party/re2/re2/compile.cc +91 -109
- data/third_party/re2/re2/dfa.cc +27 -39
- data/third_party/re2/re2/filtered_re2.cc +18 -2
- data/third_party/re2/re2/filtered_re2.h +10 -5
- data/third_party/re2/re2/nfa.cc +1 -1
- data/third_party/re2/re2/parse.cc +42 -23
- data/third_party/re2/re2/perl_groups.cc +34 -34
- data/third_party/re2/re2/prefilter.cc +3 -2
- data/third_party/re2/re2/prog.cc +182 -4
- data/third_party/re2/re2/prog.h +28 -9
- data/third_party/re2/re2/re2.cc +87 -118
- data/third_party/re2/re2/re2.h +156 -141
- data/third_party/re2/re2/regexp.cc +12 -5
- data/third_party/re2/re2/regexp.h +8 -2
- data/third_party/re2/re2/set.cc +31 -9
- data/third_party/re2/re2/set.h +9 -4
- data/third_party/re2/re2/simplify.cc +11 -3
- data/third_party/re2/re2/tostring.cc +1 -1
- data/third_party/re2/re2/walker-inl.h +1 -1
- data/third_party/re2/util/mutex.h +2 -2
- data/third_party/re2/util/pcre.h +3 -3
- metadata +81 -68
- data/include/grpc/event_engine/slice_allocator.h +0 -71
- data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
- data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
- data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
- data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
- data/src/core/ext/transport/chttp2/client/authority.h +0 -36
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
- data/src/core/lib/iomgr/udp_server.cc +0 -747
- data/src/core/lib/iomgr/udp_server.h +0 -103
- data/src/core/lib/transport/authority_override.cc +0 -40
- data/src/core/lib/transport/authority_override.h +0 -37
@@ -1,20 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
*
|
17
|
-
*/
|
1
|
+
//
|
2
|
+
// Copyright 2016 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
18
16
|
|
19
17
|
/// Implementation of the gRPC LB policy.
|
20
18
|
///
|
@@ -88,6 +86,8 @@
|
|
88
86
|
#include "src/core/lib/backoff/backoff.h"
|
89
87
|
#include "src/core/lib/channel/channel_args.h"
|
90
88
|
#include "src/core/lib/channel/channel_stack.h"
|
89
|
+
#include "src/core/lib/channel/channel_stack_builder.h"
|
90
|
+
#include "src/core/lib/config/core_configuration.h"
|
91
91
|
#include "src/core/lib/gpr/string.h"
|
92
92
|
#include "src/core/lib/gprpp/manual_constructor.h"
|
93
93
|
#include "src/core/lib/gprpp/memory.h"
|
@@ -100,7 +100,6 @@
|
|
100
100
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
101
101
|
#include "src/core/lib/surface/call.h"
|
102
102
|
#include "src/core/lib/surface/channel.h"
|
103
|
-
#include "src/core/lib/surface/channel_init.h"
|
104
103
|
#include "src/core/lib/transport/static_metadata.h"
|
105
104
|
|
106
105
|
#define GRPC_GRPCLB_INITIAL_CONNECT_BACKOFF_SECONDS 1
|
@@ -108,9 +107,7 @@
|
|
108
107
|
#define GRPC_GRPCLB_RECONNECT_MAX_BACKOFF_SECONDS 120
|
109
108
|
#define GRPC_GRPCLB_RECONNECT_JITTER 0.2
|
110
109
|
#define GRPC_GRPCLB_DEFAULT_FALLBACK_TIMEOUT_MS 10000
|
111
|
-
|
112
|
-
#define GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN "grpc.grpclb_address_lb_token"
|
113
|
-
#define GRPC_ARG_GRPCLB_ADDRESS_CLIENT_STATS "grpc.grpclb_address_client_stats"
|
110
|
+
#define GRPC_GRPCLB_DEFAULT_SUBCHANNEL_DELETION_DELAY_MS 10000
|
114
111
|
|
115
112
|
namespace grpc_core {
|
116
113
|
|
@@ -233,16 +230,24 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
233
230
|
class SubchannelWrapper : public DelegatingSubchannel {
|
234
231
|
public:
|
235
232
|
SubchannelWrapper(RefCountedPtr<SubchannelInterface> subchannel,
|
236
|
-
std::string lb_token,
|
233
|
+
RefCountedPtr<GrpcLb> lb_policy, std::string lb_token,
|
237
234
|
RefCountedPtr<GrpcLbClientStats> client_stats)
|
238
235
|
: DelegatingSubchannel(std::move(subchannel)),
|
236
|
+
lb_policy_(std::move(lb_policy)),
|
239
237
|
lb_token_(std::move(lb_token)),
|
240
238
|
client_stats_(std::move(client_stats)) {}
|
241
239
|
|
240
|
+
~SubchannelWrapper() override {
|
241
|
+
if (!lb_policy_->shutting_down_) {
|
242
|
+
lb_policy_->CacheDeletedSubchannelLocked(wrapped_subchannel());
|
243
|
+
}
|
244
|
+
}
|
245
|
+
|
242
246
|
const std::string& lb_token() const { return lb_token_; }
|
243
247
|
GrpcLbClientStats* client_stats() const { return client_stats_.get(); }
|
244
248
|
|
245
249
|
private:
|
250
|
+
RefCountedPtr<GrpcLb> lb_policy_;
|
246
251
|
std::string lb_token_;
|
247
252
|
RefCountedPtr<GrpcLbClientStats> client_stats_;
|
248
253
|
};
|
@@ -265,7 +270,7 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
265
270
|
static_cast<const TokenAndClientStatsAttribute*>(other_base);
|
266
271
|
int r = lb_token_.compare(other->lb_token_);
|
267
272
|
if (r != 0) return r;
|
268
|
-
return
|
273
|
+
return QsortCompare(client_stats_.get(), other->client_stats_.get());
|
269
274
|
}
|
270
275
|
|
271
276
|
std::string ToString() const override {
|
@@ -351,6 +356,7 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
351
356
|
void UpdateState(grpc_connectivity_state state, const absl::Status& status,
|
352
357
|
std::unique_ptr<SubchannelPicker> picker) override;
|
353
358
|
void RequestReresolution() override;
|
359
|
+
absl::string_view GetAuthority() override;
|
354
360
|
void AddTraceEvent(TraceSeverity severity,
|
355
361
|
absl::string_view message) override;
|
356
362
|
|
@@ -420,6 +426,13 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
420
426
|
const grpc_channel_args* args);
|
421
427
|
void CreateOrUpdateChildPolicyLocked();
|
422
428
|
|
429
|
+
// Subchannel caching.
|
430
|
+
void CacheDeletedSubchannelLocked(
|
431
|
+
RefCountedPtr<SubchannelInterface> subchannel);
|
432
|
+
void StartSubchannelCacheTimerLocked();
|
433
|
+
static void OnSubchannelCacheTimer(void* arg, grpc_error_handle error);
|
434
|
+
void OnSubchannelCacheTimerLocked(grpc_error_handle error);
|
435
|
+
|
423
436
|
// Who the client is trying to communicate with.
|
424
437
|
std::string server_name_;
|
425
438
|
// Configurations for the policy.
|
@@ -446,7 +459,7 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
446
459
|
// contains a non-NULL lb_call_.
|
447
460
|
OrphanablePtr<BalancerCallState> lb_calld_;
|
448
461
|
// Timeout in milliseconds for the LB call. 0 means no deadline.
|
449
|
-
int lb_call_timeout_ms_ = 0;
|
462
|
+
const int lb_call_timeout_ms_ = 0;
|
450
463
|
// Balancer call retry state.
|
451
464
|
BackOff lb_call_backoff_;
|
452
465
|
bool retry_timer_callback_pending_ = false;
|
@@ -464,7 +477,7 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
464
477
|
// State for fallback-at-startup checks.
|
465
478
|
// Timeout after startup after which we will go into fallback mode if
|
466
479
|
// we have not received a serverlist from the balancer.
|
467
|
-
int fallback_at_startup_timeout_ = 0;
|
480
|
+
const int fallback_at_startup_timeout_ = 0;
|
468
481
|
bool fallback_at_startup_checks_pending_ = false;
|
469
482
|
grpc_timer lb_fallback_timer_;
|
470
483
|
grpc_closure lb_on_fallback_;
|
@@ -473,6 +486,15 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
473
486
|
OrphanablePtr<LoadBalancingPolicy> child_policy_;
|
474
487
|
// Child policy in state READY.
|
475
488
|
bool child_policy_ready_ = false;
|
489
|
+
|
490
|
+
// Deleted subchannel caching.
|
491
|
+
const grpc_millis subchannel_cache_interval_ms_;
|
492
|
+
std::map<grpc_millis /*deletion time*/,
|
493
|
+
std::vector<RefCountedPtr<SubchannelInterface>>>
|
494
|
+
cached_subchannels_;
|
495
|
+
grpc_timer subchannel_cache_timer_;
|
496
|
+
grpc_closure on_subchannel_cache_timer_;
|
497
|
+
bool subchannel_cache_timer_pending_ = false;
|
476
498
|
};
|
477
499
|
|
478
500
|
//
|
@@ -673,7 +695,8 @@ RefCountedPtr<SubchannelInterface> GrpcLb::Helper::CreateSubchannel(
|
|
673
695
|
return MakeRefCounted<SubchannelWrapper>(
|
674
696
|
parent_->channel_control_helper()->CreateSubchannel(std::move(address),
|
675
697
|
args),
|
676
|
-
|
698
|
+
parent_->Ref(DEBUG_LOCATION, "SubchannelWrapper"), std::move(lb_token),
|
699
|
+
std::move(client_stats));
|
677
700
|
}
|
678
701
|
|
679
702
|
void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
|
@@ -729,6 +752,10 @@ void GrpcLb::Helper::RequestReresolution() {
|
|
729
752
|
}
|
730
753
|
}
|
731
754
|
|
755
|
+
absl::string_view GrpcLb::Helper::GetAuthority() {
|
756
|
+
return parent_->channel_control_helper()->GetAuthority();
|
757
|
+
}
|
758
|
+
|
732
759
|
void GrpcLb::Helper::AddTraceEvent(TraceSeverity severity,
|
733
760
|
absl::string_view message) {
|
734
761
|
if (parent_->shutting_down_) return;
|
@@ -902,7 +929,7 @@ void GrpcLb::BalancerCallState::ScheduleNextClientLoadReportLocked() {
|
|
902
929
|
void GrpcLb::BalancerCallState::MaybeSendClientLoadReport(
|
903
930
|
void* arg, grpc_error_handle error) {
|
904
931
|
BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
|
905
|
-
GRPC_ERROR_REF(error); // ref owned by lambda
|
932
|
+
(void)GRPC_ERROR_REF(error); // ref owned by lambda
|
906
933
|
lb_calld->grpclb_policy()->work_serializer()->Run(
|
907
934
|
[lb_calld, error]() { lb_calld->MaybeSendClientLoadReportLocked(error); },
|
908
935
|
DEBUG_LOCATION);
|
@@ -981,7 +1008,7 @@ void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
|
|
981
1008
|
void GrpcLb::BalancerCallState::ClientLoadReportDone(void* arg,
|
982
1009
|
grpc_error_handle error) {
|
983
1010
|
BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
|
984
|
-
GRPC_ERROR_REF(error); // ref owned by lambda
|
1011
|
+
(void)GRPC_ERROR_REF(error); // ref owned by lambda
|
985
1012
|
lb_calld->grpclb_policy()->work_serializer()->Run(
|
986
1013
|
[lb_calld, error]() { lb_calld->ClientLoadReportDoneLocked(error); },
|
987
1014
|
DEBUG_LOCATION);
|
@@ -1054,8 +1081,8 @@ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked() {
|
|
1054
1081
|
switch (response.type) {
|
1055
1082
|
case response.INITIAL: {
|
1056
1083
|
if (response.client_stats_report_interval != 0) {
|
1057
|
-
client_stats_report_interval_ =
|
1058
|
-
|
1084
|
+
client_stats_report_interval_ = std::max(
|
1085
|
+
int64_t(GPR_MS_PER_SEC), response.client_stats_report_interval);
|
1059
1086
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
|
1060
1087
|
gpr_log(GPR_INFO,
|
1061
1088
|
"[grpclb %p] lb_calld=%p: Received initial LB response "
|
@@ -1184,7 +1211,7 @@ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked() {
|
|
1184
1211
|
void GrpcLb::BalancerCallState::OnBalancerStatusReceived(
|
1185
1212
|
void* arg, grpc_error_handle error) {
|
1186
1213
|
BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
|
1187
|
-
GRPC_ERROR_REF(error); // owned by lambda
|
1214
|
+
(void)GRPC_ERROR_REF(error); // owned by lambda
|
1188
1215
|
lb_calld->grpclb_policy()->work_serializer()->Run(
|
1189
1216
|
[lb_calld, error]() { lb_calld->OnBalancerStatusReceivedLocked(error); },
|
1190
1217
|
DEBUG_LOCATION);
|
@@ -1316,9 +1343,21 @@ grpc_channel_args* BuildBalancerChannelArgs(
|
|
1316
1343
|
// ctor and dtor
|
1317
1344
|
//
|
1318
1345
|
|
1346
|
+
std::string GetServerNameFromChannelArgs(const grpc_channel_args* args) {
|
1347
|
+
const char* server_uri =
|
1348
|
+
grpc_channel_args_find_string(args, GRPC_ARG_SERVER_URI);
|
1349
|
+
GPR_ASSERT(server_uri != nullptr);
|
1350
|
+
absl::StatusOr<URI> uri = URI::Parse(server_uri);
|
1351
|
+
GPR_ASSERT(uri.ok() && !uri->path().empty());
|
1352
|
+
return std::string(absl::StripPrefix(uri->path(), "/"));
|
1353
|
+
}
|
1354
|
+
|
1319
1355
|
GrpcLb::GrpcLb(Args args)
|
1320
1356
|
: LoadBalancingPolicy(std::move(args)),
|
1357
|
+
server_name_(GetServerNameFromChannelArgs(args.args)),
|
1321
1358
|
response_generator_(MakeRefCounted<FakeResolverResponseGenerator>()),
|
1359
|
+
lb_call_timeout_ms_(grpc_channel_args_find_integer(
|
1360
|
+
args.args, GRPC_ARG_GRPCLB_CALL_TIMEOUT_MS, {0, 0, INT_MAX})),
|
1322
1361
|
lb_call_backoff_(
|
1323
1362
|
BackOff::Options()
|
1324
1363
|
.set_initial_backoff(GRPC_GRPCLB_INITIAL_CONNECT_BACKOFF_SECONDS *
|
@@ -1326,31 +1365,25 @@ GrpcLb::GrpcLb(Args args)
|
|
1326
1365
|
.set_multiplier(GRPC_GRPCLB_RECONNECT_BACKOFF_MULTIPLIER)
|
1327
1366
|
.set_jitter(GRPC_GRPCLB_RECONNECT_JITTER)
|
1328
1367
|
.set_max_backoff(GRPC_GRPCLB_RECONNECT_MAX_BACKOFF_SECONDS *
|
1329
|
-
1000))
|
1330
|
-
|
1331
|
-
|
1332
|
-
|
1333
|
-
|
1334
|
-
|
1335
|
-
|
1336
|
-
const grpc_arg* arg = grpc_channel_args_find(args.args, GRPC_ARG_SERVER_URI);
|
1337
|
-
const char* server_uri = grpc_channel_arg_get_string(arg);
|
1338
|
-
GPR_ASSERT(server_uri != nullptr);
|
1339
|
-
absl::StatusOr<URI> uri = URI::Parse(server_uri);
|
1340
|
-
GPR_ASSERT(uri.ok() && !uri->path().empty());
|
1341
|
-
server_name_ = std::string(absl::StripPrefix(uri->path(), "/"));
|
1368
|
+
1000)),
|
1369
|
+
fallback_at_startup_timeout_(grpc_channel_args_find_integer(
|
1370
|
+
args.args, GRPC_ARG_GRPCLB_FALLBACK_TIMEOUT_MS,
|
1371
|
+
{GRPC_GRPCLB_DEFAULT_FALLBACK_TIMEOUT_MS, 0, INT_MAX})),
|
1372
|
+
subchannel_cache_interval_ms_(grpc_channel_args_find_integer(
|
1373
|
+
args.args, GRPC_ARG_GRPCLB_SUBCHANNEL_CACHE_INTERVAL_MS,
|
1374
|
+
{GRPC_GRPCLB_DEFAULT_SUBCHANNEL_DELETION_DELAY_MS, 0, INT_MAX})) {
|
1342
1375
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
|
1343
1376
|
gpr_log(GPR_INFO,
|
1344
1377
|
"[grpclb %p] Will use '%s' as the server name for LB request.",
|
1345
1378
|
this, server_name_.c_str());
|
1346
1379
|
}
|
1347
|
-
//
|
1348
|
-
|
1349
|
-
|
1350
|
-
|
1351
|
-
|
1352
|
-
|
1353
|
-
|
1380
|
+
// Closure Initialization
|
1381
|
+
GRPC_CLOSURE_INIT(&lb_on_fallback_, &GrpcLb::OnFallbackTimer, this,
|
1382
|
+
grpc_schedule_on_exec_ctx);
|
1383
|
+
GRPC_CLOSURE_INIT(&lb_on_call_retry_, &GrpcLb::OnBalancerCallRetryTimer, this,
|
1384
|
+
grpc_schedule_on_exec_ctx);
|
1385
|
+
GRPC_CLOSURE_INIT(&on_subchannel_cache_timer_, &OnSubchannelCacheTimer, this,
|
1386
|
+
nullptr);
|
1354
1387
|
}
|
1355
1388
|
|
1356
1389
|
GrpcLb::~GrpcLb() { grpc_channel_args_destroy(args_); }
|
@@ -1358,6 +1391,11 @@ GrpcLb::~GrpcLb() { grpc_channel_args_destroy(args_); }
|
|
1358
1391
|
void GrpcLb::ShutdownLocked() {
|
1359
1392
|
shutting_down_ = true;
|
1360
1393
|
lb_calld_.reset();
|
1394
|
+
if (subchannel_cache_timer_pending_) {
|
1395
|
+
subchannel_cache_timer_pending_ = false;
|
1396
|
+
grpc_timer_cancel(&subchannel_cache_timer_);
|
1397
|
+
}
|
1398
|
+
cached_subchannels_.clear();
|
1361
1399
|
if (retry_timer_callback_pending_) {
|
1362
1400
|
grpc_timer_cancel(&lb_call_retry_timer_);
|
1363
1401
|
}
|
@@ -1534,7 +1572,7 @@ void GrpcLb::StartBalancerCallRetryTimerLocked() {
|
|
1534
1572
|
|
1535
1573
|
void GrpcLb::OnBalancerCallRetryTimer(void* arg, grpc_error_handle error) {
|
1536
1574
|
GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
|
1537
|
-
GRPC_ERROR_REF(error); // ref owned by lambda
|
1575
|
+
(void)GRPC_ERROR_REF(error); // ref owned by lambda
|
1538
1576
|
grpclb_policy->work_serializer()->Run(
|
1539
1577
|
[grpclb_policy, error]() {
|
1540
1578
|
grpclb_policy->OnBalancerCallRetryTimerLocked(error);
|
@@ -1578,7 +1616,7 @@ void GrpcLb::MaybeEnterFallbackModeAfterStartup() {
|
|
1578
1616
|
|
1579
1617
|
void GrpcLb::OnFallbackTimer(void* arg, grpc_error_handle error) {
|
1580
1618
|
GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
|
1581
|
-
GRPC_ERROR_REF(error); // ref owned by lambda
|
1619
|
+
(void)GRPC_ERROR_REF(error); // ref owned by lambda
|
1582
1620
|
grpclb_policy->work_serializer()->Run(
|
1583
1621
|
[grpclb_policy, error]() { grpclb_policy->OnFallbackTimerLocked(error); },
|
1584
1622
|
DEBUG_LOCATION);
|
@@ -1674,6 +1712,57 @@ void GrpcLb::CreateOrUpdateChildPolicyLocked() {
|
|
1674
1712
|
child_policy_->UpdateLocked(std::move(update_args));
|
1675
1713
|
}
|
1676
1714
|
|
1715
|
+
//
|
1716
|
+
// subchannel caching
|
1717
|
+
//
|
1718
|
+
|
1719
|
+
void GrpcLb::CacheDeletedSubchannelLocked(
|
1720
|
+
RefCountedPtr<SubchannelInterface> subchannel) {
|
1721
|
+
grpc_millis deletion_time =
|
1722
|
+
ExecCtx::Get()->Now() + subchannel_cache_interval_ms_;
|
1723
|
+
cached_subchannels_[deletion_time].push_back(std::move(subchannel));
|
1724
|
+
if (!subchannel_cache_timer_pending_) {
|
1725
|
+
Ref(DEBUG_LOCATION, "OnSubchannelCacheTimer").release();
|
1726
|
+
subchannel_cache_timer_pending_ = true;
|
1727
|
+
StartSubchannelCacheTimerLocked();
|
1728
|
+
}
|
1729
|
+
}
|
1730
|
+
|
1731
|
+
void GrpcLb::StartSubchannelCacheTimerLocked() {
|
1732
|
+
GPR_ASSERT(!cached_subchannels_.empty());
|
1733
|
+
grpc_timer_init(&subchannel_cache_timer_, cached_subchannels_.begin()->first,
|
1734
|
+
&on_subchannel_cache_timer_);
|
1735
|
+
}
|
1736
|
+
|
1737
|
+
void GrpcLb::OnSubchannelCacheTimer(void* arg, grpc_error_handle error) {
|
1738
|
+
auto* self = static_cast<GrpcLb*>(arg);
|
1739
|
+
(void)GRPC_ERROR_REF(error);
|
1740
|
+
self->work_serializer()->Run(
|
1741
|
+
[self, error]() { self->GrpcLb::OnSubchannelCacheTimerLocked(error); },
|
1742
|
+
DEBUG_LOCATION);
|
1743
|
+
}
|
1744
|
+
|
1745
|
+
void GrpcLb::OnSubchannelCacheTimerLocked(grpc_error_handle error) {
|
1746
|
+
if (subchannel_cache_timer_pending_ && error == GRPC_ERROR_NONE) {
|
1747
|
+
auto it = cached_subchannels_.begin();
|
1748
|
+
if (it != cached_subchannels_.end()) {
|
1749
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
|
1750
|
+
gpr_log(GPR_INFO,
|
1751
|
+
"[grpclb %p] removing %" PRIuPTR " subchannels from cache",
|
1752
|
+
this, it->second.size());
|
1753
|
+
}
|
1754
|
+
cached_subchannels_.erase(it);
|
1755
|
+
}
|
1756
|
+
if (!cached_subchannels_.empty()) {
|
1757
|
+
StartSubchannelCacheTimerLocked();
|
1758
|
+
return;
|
1759
|
+
}
|
1760
|
+
subchannel_cache_timer_pending_ = false;
|
1761
|
+
}
|
1762
|
+
Unref(DEBUG_LOCATION, "OnSubchannelCacheTimer");
|
1763
|
+
GRPC_ERROR_UNREF(error);
|
1764
|
+
}
|
1765
|
+
|
1677
1766
|
//
|
1678
1767
|
// factory
|
1679
1768
|
//
|
@@ -1744,39 +1833,34 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
|
|
1744
1833
|
// Plugin registration
|
1745
1834
|
//
|
1746
1835
|
|
1747
|
-
namespace {
|
1748
|
-
|
1749
|
-
// Only add client_load_reporting filter if the grpclb LB policy is used.
|
1750
|
-
bool maybe_add_client_load_reporting_filter(grpc_channel_stack_builder* builder,
|
1751
|
-
void* arg) {
|
1752
|
-
const grpc_channel_args* args =
|
1753
|
-
grpc_channel_stack_builder_get_channel_arguments(builder);
|
1754
|
-
const grpc_arg* channel_arg =
|
1755
|
-
grpc_channel_args_find(args, GRPC_ARG_LB_POLICY_NAME);
|
1756
|
-
if (channel_arg != nullptr && channel_arg->type == GRPC_ARG_STRING &&
|
1757
|
-
strcmp(channel_arg->value.string, "grpclb") == 0) {
|
1758
|
-
// TODO(roth): When we get around to re-attempting
|
1759
|
-
// https://github.com/grpc/grpc/pull/16214, we should try to keep
|
1760
|
-
// this filter at the very top of the subchannel stack, since that
|
1761
|
-
// will minimize the number of metadata elements that the filter
|
1762
|
-
// needs to iterate through to find the ClientStats object.
|
1763
|
-
return grpc_channel_stack_builder_prepend_filter(
|
1764
|
-
builder, static_cast<const grpc_channel_filter*>(arg), nullptr,
|
1765
|
-
nullptr);
|
1766
|
-
}
|
1767
|
-
return true;
|
1768
|
-
}
|
1769
|
-
|
1770
|
-
} // namespace
|
1771
|
-
|
1772
1836
|
void grpc_lb_policy_grpclb_init() {
|
1773
1837
|
grpc_core::LoadBalancingPolicyRegistry::Builder::
|
1774
1838
|
RegisterLoadBalancingPolicyFactory(
|
1775
1839
|
absl::make_unique<grpc_core::GrpcLbFactory>());
|
1776
|
-
grpc_channel_init_register_stage(
|
1777
|
-
GRPC_CLIENT_SUBCHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
|
1778
|
-
maybe_add_client_load_reporting_filter,
|
1779
|
-
const_cast<grpc_channel_filter*>(&grpc_client_load_reporting_filter));
|
1780
1840
|
}
|
1781
1841
|
|
1782
1842
|
void grpc_lb_policy_grpclb_shutdown() {}
|
1843
|
+
|
1844
|
+
namespace grpc_core {
|
1845
|
+
void RegisterGrpcLbLoadReportingFilter(CoreConfiguration::Builder* builder) {
|
1846
|
+
builder->channel_init()->RegisterStage(
|
1847
|
+
GRPC_CLIENT_SUBCHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
|
1848
|
+
[](grpc_channel_stack_builder* builder) {
|
1849
|
+
const grpc_channel_args* args =
|
1850
|
+
grpc_channel_stack_builder_get_channel_arguments(builder);
|
1851
|
+
const grpc_arg* channel_arg =
|
1852
|
+
grpc_channel_args_find(args, GRPC_ARG_LB_POLICY_NAME);
|
1853
|
+
if (channel_arg != nullptr && channel_arg->type == GRPC_ARG_STRING &&
|
1854
|
+
strcmp(channel_arg->value.string, "grpclb") == 0) {
|
1855
|
+
// TODO(roth): When we get around to re-attempting
|
1856
|
+
// https://github.com/grpc/grpc/pull/16214, we should try to keep
|
1857
|
+
// this filter at the very top of the subchannel stack, since that
|
1858
|
+
// will minimize the number of metadata elements that the filter
|
1859
|
+
// needs to iterate through to find the ClientStats object.
|
1860
|
+
return grpc_channel_stack_builder_prepend_filter(
|
1861
|
+
builder, &grpc_client_load_reporting_filter, nullptr, nullptr);
|
1862
|
+
}
|
1863
|
+
return true;
|
1864
|
+
});
|
1865
|
+
}
|
1866
|
+
} // namespace grpc_core
|
@@ -32,6 +32,10 @@
|
|
32
32
|
#define GRPC_ARG_ADDRESS_IS_BACKEND_FROM_GRPCLB_LOAD_BALANCER \
|
33
33
|
"grpc.address_is_backend_from_grpclb_load_balancer"
|
34
34
|
|
35
|
+
// For use in tests.
|
36
|
+
#define GRPC_ARG_GRPCLB_SUBCHANNEL_CACHE_INTERVAL_MS \
|
37
|
+
"grpc.internal.grpclb_subchannel_cache_interval_ms"
|
38
|
+
|
35
39
|
namespace grpc_core {
|
36
40
|
|
37
41
|
extern const char kGrpcLbClientStatsMetadataKey[];
|
@@ -42,7 +42,7 @@ int BalancerAddressesArgCmp(void* p, void* q) {
|
|
42
42
|
ServerAddressList* address_list1 = static_cast<ServerAddressList*>(p);
|
43
43
|
ServerAddressList* address_list2 = static_cast<ServerAddressList*>(q);
|
44
44
|
if (address_list1 == nullptr || address_list2 == nullptr) {
|
45
|
-
return
|
45
|
+
return QsortCompare(address_list1, address_list2);
|
46
46
|
}
|
47
47
|
if (address_list1->size() > address_list2->size()) return 1;
|
48
48
|
if (address_list1->size() < address_list2->size()) return -1;
|
@@ -25,8 +25,6 @@
|
|
25
25
|
|
26
26
|
#include <grpc/support/alloc.h>
|
27
27
|
|
28
|
-
#include "src/core/lib/gpr/useful.h"
|
29
|
-
|
30
28
|
namespace grpc_core {
|
31
29
|
|
32
30
|
bool GrpcLbServer::operator==(const GrpcLbServer& other) const {
|
@@ -56,8 +54,8 @@ grpc_slice GrpcLbRequestCreate(const char* lb_service_name, upb_arena* arena) {
|
|
56
54
|
grpc_lb_v1_LoadBalanceRequest* req = grpc_lb_v1_LoadBalanceRequest_new(arena);
|
57
55
|
grpc_lb_v1_InitialLoadBalanceRequest* initial_request =
|
58
56
|
grpc_lb_v1_LoadBalanceRequest_mutable_initial_request(req, arena);
|
59
|
-
size_t name_len =
|
60
|
-
|
57
|
+
size_t name_len = std::min(strlen(lb_service_name),
|
58
|
+
size_t(GRPC_GRPCLB_SERVICE_NAME_MAX_LENGTH));
|
61
59
|
grpc_lb_v1_InitialLoadBalanceRequest_set_name(
|
62
60
|
initial_request, upb_strview_make(lb_service_name, name_len));
|
63
61
|
return grpc_grpclb_request_encode(req, arena);
|
@@ -267,7 +267,7 @@ void PickFirst::UpdateLocked(UpdateArgs args) {
|
|
267
267
|
const_cast<char*>(GRPC_ARG_INHIBIT_HEALTH_CHECKING), 1);
|
268
268
|
const grpc_channel_args* new_args =
|
269
269
|
grpc_channel_args_copy_and_add(args.args, &new_arg, 1);
|
270
|
-
|
270
|
+
std::swap(new_args, args.args);
|
271
271
|
grpc_channel_args_destroy(new_args);
|
272
272
|
latest_update_args_ = std::move(args);
|
273
273
|
// If we are not in idle, start connection attempt immediately.
|
@@ -377,15 +377,31 @@ void PickFirst::PickFirstSubchannelData::ProcessConnectivityChangeLocked(
|
|
377
377
|
sd = subchannel_list()->subchannel(next_index);
|
378
378
|
// If we're tried all subchannels, set state to TRANSIENT_FAILURE.
|
379
379
|
if (sd->Index() == 0) {
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
380
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
381
|
+
gpr_log(GPR_INFO,
|
382
|
+
"Pick First %p subchannel list %p failed to connect to "
|
383
|
+
"all subchannels",
|
384
|
+
p, subchannel_list());
|
385
385
|
}
|
386
386
|
subchannel_list()->set_in_transient_failure(true);
|
387
|
-
//
|
387
|
+
// In case 2, swap to the new subchannel list. This means reporting
|
388
|
+
// TRANSIENT_FAILURE and dropping the existing (working) connection,
|
389
|
+
// but we can't ignore what the control plane has told us.
|
390
|
+
if (subchannel_list() == p->latest_pending_subchannel_list_.get()) {
|
391
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
392
|
+
gpr_log(GPR_INFO,
|
393
|
+
"Pick First %p promoting pending subchannel list %p to "
|
394
|
+
"replace %p",
|
395
|
+
p, p->latest_pending_subchannel_list_.get(),
|
396
|
+
p->subchannel_list_.get());
|
397
|
+
}
|
398
|
+
p->subchannel_list_ = std::move(p->latest_pending_subchannel_list_);
|
399
|
+
}
|
400
|
+
// If this is the current subchannel list (either because we were
|
401
|
+
// in case 1 or because we were in case 2 and just promoted it to
|
402
|
+
// be the current list), re-resolve and report new state.
|
388
403
|
if (subchannel_list() == p->subchannel_list_.get()) {
|
404
|
+
p->channel_control_helper()->RequestReresolution();
|
389
405
|
absl::Status status =
|
390
406
|
absl::UnavailableError("failed to connect to all addresses");
|
391
407
|
p->channel_control_helper()->UpdateState(
|
@@ -162,6 +162,7 @@ class PriorityLb : public LoadBalancingPolicy {
|
|
162
162
|
const absl::Status& status,
|
163
163
|
std::unique_ptr<SubchannelPicker> picker) override;
|
164
164
|
void RequestReresolution() override;
|
165
|
+
absl::string_view GetAuthority() override;
|
165
166
|
void AddTraceEvent(TraceSeverity severity,
|
166
167
|
absl::string_view message) override;
|
167
168
|
|
@@ -656,7 +657,7 @@ void PriorityLb::ChildPriority::MaybeCancelFailoverTimerLocked() {
|
|
656
657
|
void PriorityLb::ChildPriority::OnFailoverTimer(void* arg,
|
657
658
|
grpc_error_handle error) {
|
658
659
|
ChildPriority* self = static_cast<ChildPriority*>(arg);
|
659
|
-
GRPC_ERROR_REF(error); // ref owned by lambda
|
660
|
+
(void)GRPC_ERROR_REF(error); // ref owned by lambda
|
660
661
|
self->priority_policy_->work_serializer()->Run(
|
661
662
|
[self, error]() { self->OnFailoverTimerLocked(error); }, DEBUG_LOCATION);
|
662
663
|
}
|
@@ -713,7 +714,7 @@ void PriorityLb::ChildPriority::MaybeReactivateLocked() {
|
|
713
714
|
void PriorityLb::ChildPriority::OnDeactivationTimer(void* arg,
|
714
715
|
grpc_error_handle error) {
|
715
716
|
ChildPriority* self = static_cast<ChildPriority*>(arg);
|
716
|
-
GRPC_ERROR_REF(error); // ref owned by lambda
|
717
|
+
(void)GRPC_ERROR_REF(error); // ref owned by lambda
|
717
718
|
self->priority_policy_->work_serializer()->Run(
|
718
719
|
[self, error]() { self->OnDeactivationTimerLocked(error); },
|
719
720
|
DEBUG_LOCATION);
|
@@ -740,14 +741,6 @@ void PriorityLb::ChildPriority::OnDeactivationTimerLocked(
|
|
740
741
|
// PriorityLb::ChildPriority::Helper
|
741
742
|
//
|
742
743
|
|
743
|
-
void PriorityLb::ChildPriority::Helper::RequestReresolution() {
|
744
|
-
if (priority_->priority_policy_->shutting_down_) return;
|
745
|
-
if (priority_->ignore_reresolution_requests_) {
|
746
|
-
return;
|
747
|
-
}
|
748
|
-
priority_->priority_policy_->channel_control_helper()->RequestReresolution();
|
749
|
-
}
|
750
|
-
|
751
744
|
RefCountedPtr<SubchannelInterface>
|
752
745
|
PriorityLb::ChildPriority::Helper::CreateSubchannel(
|
753
746
|
ServerAddress address, const grpc_channel_args& args) {
|
@@ -764,6 +757,18 @@ void PriorityLb::ChildPriority::Helper::UpdateState(
|
|
764
757
|
priority_->OnConnectivityStateUpdateLocked(state, status, std::move(picker));
|
765
758
|
}
|
766
759
|
|
760
|
+
void PriorityLb::ChildPriority::Helper::RequestReresolution() {
|
761
|
+
if (priority_->priority_policy_->shutting_down_) return;
|
762
|
+
if (priority_->ignore_reresolution_requests_) {
|
763
|
+
return;
|
764
|
+
}
|
765
|
+
priority_->priority_policy_->channel_control_helper()->RequestReresolution();
|
766
|
+
}
|
767
|
+
|
768
|
+
absl::string_view PriorityLb::ChildPriority::Helper::GetAuthority() {
|
769
|
+
return priority_->priority_policy_->channel_control_helper()->GetAuthority();
|
770
|
+
}
|
771
|
+
|
767
772
|
void PriorityLb::ChildPriority::Helper::AddTraceEvent(
|
768
773
|
TraceSeverity severity, absl::string_view message) {
|
769
774
|
if (priority_->priority_policy_->shutting_down_) return;
|
@@ -33,7 +33,6 @@
|
|
33
33
|
#include "src/core/lib/channel/channel_args.h"
|
34
34
|
#include "src/core/lib/debug/trace.h"
|
35
35
|
#include "src/core/lib/gpr/string.h"
|
36
|
-
#include "src/core/lib/gpr/useful.h"
|
37
36
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
38
37
|
#include "src/core/lib/gprpp/sync.h"
|
39
38
|
#include "src/core/lib/transport/connectivity_state.h"
|
@@ -236,7 +235,7 @@ class RingHash : public LoadBalancingPolicy {
|
|
236
235
|
}
|
237
236
|
|
238
237
|
private:
|
239
|
-
static void RunInExecCtx(void* arg,
|
238
|
+
static void RunInExecCtx(void* arg, grpc_error_handle /*error*/) {
|
240
239
|
auto* self = static_cast<SubchannelConnectionAttempter*>(arg);
|
241
240
|
self->ring_hash_lb_->work_serializer()->Run(
|
242
241
|
[self]() {
|
@@ -730,7 +729,7 @@ class RingHashFactory : public LoadBalancingPolicyFactory {
|
|
730
729
|
const char* name() const override { return kRingHash; }
|
731
730
|
|
732
731
|
RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
|
733
|
-
const Json& json,
|
732
|
+
const Json& json, grpc_error_handle* error) const override {
|
734
733
|
size_t min_ring_size;
|
735
734
|
size_t max_ring_size;
|
736
735
|
std::vector<grpc_error_handle> error_list;
|