grpc 1.41.1 → 1.42.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +55 -43
- 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/src/crypto/asn1/a_bool.c +20 -21
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +104 -114
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +13 -0
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
- data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
- 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 +3 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
- 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/siphash/siphash.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +0 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +72 -45
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +479 -15
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -564
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +0 -1
- 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 +78 -66
- 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 2015 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
|
#include <grpc/support/port_platform.h>
|
20
18
|
|
@@ -34,13 +32,13 @@
|
|
34
32
|
#include "src/core/ext/filters/client_channel/client_channel.h"
|
35
33
|
#include "src/core/ext/filters/client_channel/health/health_check_client.h"
|
36
34
|
#include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
|
37
|
-
#include "src/core/ext/filters/client_channel/service_config.h"
|
38
35
|
#include "src/core/ext/filters/client_channel/subchannel_pool_interface.h"
|
39
36
|
#include "src/core/lib/address_utils/parse_address.h"
|
40
37
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
41
38
|
#include "src/core/lib/backoff/backoff.h"
|
42
39
|
#include "src/core/lib/channel/channel_args.h"
|
43
40
|
#include "src/core/lib/channel/connected_channel.h"
|
41
|
+
#include "src/core/lib/config/core_configuration.h"
|
44
42
|
#include "src/core/lib/debug/stats.h"
|
45
43
|
#include "src/core/lib/gpr/alloc.h"
|
46
44
|
#include "src/core/lib/gprpp/debug_location.h"
|
@@ -50,7 +48,6 @@
|
|
50
48
|
#include "src/core/lib/profiling/timers.h"
|
51
49
|
#include "src/core/lib/slice/slice_internal.h"
|
52
50
|
#include "src/core/lib/surface/channel.h"
|
53
|
-
#include "src/core/lib/surface/channel_init.h"
|
54
51
|
#include "src/core/lib/transport/connectivity_state.h"
|
55
52
|
#include "src/core/lib/transport/error_utils.h"
|
56
53
|
#include "src/core/lib/transport/status_metadata.h"
|
@@ -255,9 +252,9 @@ void GetCallStatus(grpc_status_code* status, grpc_millis deadline,
|
|
255
252
|
if (error != GRPC_ERROR_NONE) {
|
256
253
|
grpc_error_get_status(error, deadline, status, nullptr, nullptr, nullptr);
|
257
254
|
} else {
|
258
|
-
if (md_batch->
|
255
|
+
if (md_batch->legacy_index()->named.grpc_status != nullptr) {
|
259
256
|
*status = grpc_get_status_code_from_metadata(
|
260
|
-
md_batch->
|
257
|
+
md_batch->legacy_index()->named.grpc_status->md);
|
261
258
|
} else {
|
262
259
|
*status = GRPC_STATUS_UNKNOWN;
|
263
260
|
}
|
@@ -319,11 +316,12 @@ class Subchannel::ConnectedSubchannelStateWatcher
|
|
319
316
|
case GRPC_CHANNEL_TRANSIENT_FAILURE:
|
320
317
|
case GRPC_CHANNEL_SHUTDOWN: {
|
321
318
|
if (!c->disconnected_ && c->connected_subchannel_ != nullptr) {
|
322
|
-
if (grpc_trace_subchannel
|
319
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_subchannel)) {
|
323
320
|
gpr_log(GPR_INFO,
|
324
|
-
"
|
321
|
+
"subchannel %p %s: Connected subchannel %p has gone into "
|
325
322
|
"%s. Attempting to reconnect.",
|
326
|
-
c->
|
323
|
+
c, c->key_.ToString().c_str(),
|
324
|
+
c->connected_subchannel_.get(),
|
327
325
|
ConnectivityStateName(new_state));
|
328
326
|
}
|
329
327
|
c->connected_subchannel_.reset();
|
@@ -363,15 +361,9 @@ class Subchannel::AsyncWatcherNotifierLocked {
|
|
363
361
|
public:
|
364
362
|
AsyncWatcherNotifierLocked(
|
365
363
|
RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface> watcher,
|
366
|
-
|
367
|
-
const absl::Status& status)
|
364
|
+
grpc_connectivity_state state, const absl::Status& status)
|
368
365
|
: watcher_(std::move(watcher)) {
|
369
|
-
|
370
|
-
if (state == GRPC_CHANNEL_READY) {
|
371
|
-
connected_subchannel = subchannel->connected_subchannel_;
|
372
|
-
}
|
373
|
-
watcher_->PushConnectivityStateChange(
|
374
|
-
{state, status, std::move(connected_subchannel)});
|
366
|
+
watcher_->PushConnectivityStateChange({state, status});
|
375
367
|
ExecCtx::Run(DEBUG_LOCATION,
|
376
368
|
GRPC_CLOSURE_INIT(
|
377
369
|
&closure_,
|
@@ -405,10 +397,9 @@ void Subchannel::ConnectivityStateWatcherList::RemoveWatcherLocked(
|
|
405
397
|
}
|
406
398
|
|
407
399
|
void Subchannel::ConnectivityStateWatcherList::NotifyLocked(
|
408
|
-
|
409
|
-
const absl::Status& status) {
|
400
|
+
grpc_connectivity_state state, const absl::Status& status) {
|
410
401
|
for (const auto& p : watchers_) {
|
411
|
-
new AsyncWatcherNotifierLocked(p.second,
|
402
|
+
new AsyncWatcherNotifierLocked(p.second, state, status);
|
412
403
|
}
|
413
404
|
}
|
414
405
|
|
@@ -446,8 +437,7 @@ class Subchannel::HealthWatcherMap::HealthWatcher
|
|
446
437
|
grpc_connectivity_state initial_state,
|
447
438
|
RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface> watcher) {
|
448
439
|
if (state_ != initial_state) {
|
449
|
-
new AsyncWatcherNotifierLocked(watcher,
|
450
|
-
status_);
|
440
|
+
new AsyncWatcherNotifierLocked(watcher, state_, status_);
|
451
441
|
}
|
452
442
|
watcher_list_.AddWatcherLocked(std::move(watcher));
|
453
443
|
}
|
@@ -469,14 +459,14 @@ class Subchannel::HealthWatcherMap::HealthWatcher
|
|
469
459
|
if (state_ != GRPC_CHANNEL_CONNECTING) {
|
470
460
|
state_ = GRPC_CHANNEL_CONNECTING;
|
471
461
|
status_ = status;
|
472
|
-
watcher_list_.NotifyLocked(
|
462
|
+
watcher_list_.NotifyLocked(state_, status);
|
473
463
|
}
|
474
464
|
// If we've become connected, start health checking.
|
475
465
|
StartHealthCheckingLocked();
|
476
466
|
} else {
|
477
467
|
state_ = state;
|
478
468
|
status_ = status;
|
479
|
-
watcher_list_.NotifyLocked(
|
469
|
+
watcher_list_.NotifyLocked(state_, status);
|
480
470
|
// We're not connected, so stop health checking.
|
481
471
|
health_check_client_.reset();
|
482
472
|
}
|
@@ -495,7 +485,7 @@ class Subchannel::HealthWatcherMap::HealthWatcher
|
|
495
485
|
if (new_state != GRPC_CHANNEL_SHUTDOWN && health_check_client_ != nullptr) {
|
496
486
|
state_ = new_state;
|
497
487
|
status_ = status;
|
498
|
-
watcher_list_.NotifyLocked(
|
488
|
+
watcher_list_.NotifyLocked(new_state, status);
|
499
489
|
}
|
500
490
|
}
|
501
491
|
|
@@ -655,42 +645,39 @@ Subchannel::Subchannel(SubchannelKey key,
|
|
655
645
|
GRPC_TRACE_FLAG_ENABLED(grpc_trace_subchannel_refcount) ? "Subchannel"
|
656
646
|
: nullptr),
|
657
647
|
key_(std::move(key)),
|
648
|
+
pollset_set_(grpc_pollset_set_create()),
|
658
649
|
connector_(std::move(connector)),
|
659
650
|
backoff_(ParseArgsForBackoffValues(args, &min_connect_timeout_ms_)) {
|
660
651
|
GRPC_STATS_INC_CLIENT_SUBCHANNELS_CREATED();
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
652
|
+
GRPC_CLOSURE_INIT(&on_connecting_finished_, OnConnectingFinished, this,
|
653
|
+
grpc_schedule_on_exec_ctx);
|
654
|
+
// Check proxy mapper to determine address to connect to and channel
|
655
|
+
// args to use.
|
656
|
+
address_for_connect_ = key_.address();
|
665
657
|
grpc_resolved_address* new_address = nullptr;
|
666
658
|
grpc_channel_args* new_args = nullptr;
|
667
|
-
if (ProxyMapperRegistry::MapAddress(
|
659
|
+
if (ProxyMapperRegistry::MapAddress(address_for_connect_, args, &new_address,
|
660
|
+
&new_args)) {
|
668
661
|
GPR_ASSERT(new_address != nullptr);
|
669
|
-
|
670
|
-
|
662
|
+
address_for_connect_ = *new_address;
|
663
|
+
gpr_free(new_address);
|
671
664
|
}
|
672
|
-
|
673
|
-
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
GRPC_CLOSURE_INIT(&on_connecting_finished_, OnConnectingFinished, this,
|
681
|
-
grpc_schedule_on_exec_ctx);
|
682
|
-
const grpc_arg* arg = grpc_channel_args_find(args_, GRPC_ARG_ENABLE_CHANNELZ);
|
683
|
-
const bool channelz_enabled =
|
684
|
-
grpc_channel_arg_get_bool(arg, GRPC_ENABLE_CHANNELZ_DEFAULT);
|
685
|
-
arg = grpc_channel_args_find(
|
686
|
-
args_, GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE);
|
687
|
-
const grpc_integer_options options = {
|
688
|
-
GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT, 0, INT_MAX};
|
689
|
-
size_t channel_tracer_max_memory =
|
690
|
-
static_cast<size_t>(grpc_channel_arg_get_integer(arg, options));
|
665
|
+
if (new_args != nullptr) {
|
666
|
+
args_ = new_args;
|
667
|
+
} else {
|
668
|
+
args_ = grpc_channel_args_copy(args);
|
669
|
+
}
|
670
|
+
// Initialize channelz.
|
671
|
+
const bool channelz_enabled = grpc_channel_args_find_bool(
|
672
|
+
args_, GRPC_ARG_ENABLE_CHANNELZ, GRPC_ENABLE_CHANNELZ_DEFAULT);
|
691
673
|
if (channelz_enabled) {
|
674
|
+
const size_t channel_tracer_max_memory =
|
675
|
+
static_cast<size_t>(grpc_channel_args_find_integer(
|
676
|
+
args_, GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE,
|
677
|
+
{GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT, 0,
|
678
|
+
INT_MAX}));
|
692
679
|
channelz_node_ = MakeRefCounted<channelz::SubchannelNode>(
|
693
|
-
|
680
|
+
grpc_sockaddr_to_uri(&key_.address()), channel_tracer_max_memory);
|
694
681
|
channelz_node_->AddTraceEvent(
|
695
682
|
channelz::ChannelTrace::Severity::Info,
|
696
683
|
grpc_slice_from_static_string("subchannel created"));
|
@@ -711,8 +698,8 @@ Subchannel::~Subchannel() {
|
|
711
698
|
|
712
699
|
RefCountedPtr<Subchannel> Subchannel::Create(
|
713
700
|
OrphanablePtr<SubchannelConnector> connector,
|
714
|
-
const grpc_channel_args* args) {
|
715
|
-
SubchannelKey key(args);
|
701
|
+
const grpc_resolved_address& address, const grpc_channel_args* args) {
|
702
|
+
SubchannelKey key(address, args);
|
716
703
|
SubchannelPoolInterface* subchannel_pool =
|
717
704
|
SubchannelPoolInterface::GetSubchannelPoolFromChannelArgs(args);
|
718
705
|
GPR_ASSERT(subchannel_pool != nullptr);
|
@@ -736,9 +723,9 @@ void Subchannel::ThrottleKeepaliveTime(int new_keepalive_time) {
|
|
736
723
|
// Only update the value if the new keepalive time is larger.
|
737
724
|
if (new_keepalive_time > keepalive_time_) {
|
738
725
|
keepalive_time_ = new_keepalive_time;
|
739
|
-
if (grpc_trace_subchannel
|
740
|
-
gpr_log(GPR_INFO, "
|
741
|
-
new_keepalive_time);
|
726
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_subchannel)) {
|
727
|
+
gpr_log(GPR_INFO, "subchannel %p %s: throttling keepalive time to %d",
|
728
|
+
this, key_.ToString().c_str(), new_keepalive_time);
|
742
729
|
}
|
743
730
|
const grpc_arg arg_to_add = grpc_channel_arg_integer_create(
|
744
731
|
const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS), new_keepalive_time);
|
@@ -750,33 +737,18 @@ void Subchannel::ThrottleKeepaliveTime(int new_keepalive_time) {
|
|
750
737
|
}
|
751
738
|
}
|
752
739
|
|
753
|
-
const char* Subchannel::GetTargetAddress() {
|
754
|
-
const grpc_arg* addr_arg =
|
755
|
-
grpc_channel_args_find(args_, GRPC_ARG_SUBCHANNEL_ADDRESS);
|
756
|
-
const char* addr_str = grpc_channel_arg_get_string(addr_arg);
|
757
|
-
GPR_ASSERT(addr_str != nullptr); // Should have been set by LB policy.
|
758
|
-
return addr_str;
|
759
|
-
}
|
760
|
-
|
761
740
|
channelz::SubchannelNode* Subchannel::channelz_node() {
|
762
741
|
return channelz_node_.get();
|
763
742
|
}
|
764
743
|
|
765
744
|
grpc_connectivity_state Subchannel::CheckConnectivityState(
|
766
|
-
const absl::optional<std::string>& health_check_service_name
|
767
|
-
RefCountedPtr<ConnectedSubchannel>* connected_subchannel) {
|
745
|
+
const absl::optional<std::string>& health_check_service_name) {
|
768
746
|
MutexLock lock(&mu_);
|
769
|
-
|
770
|
-
|
771
|
-
state = state_;
|
772
|
-
} else {
|
773
|
-
state = health_watcher_map_.CheckConnectivityStateLocked(
|
747
|
+
if (health_check_service_name.has_value()) {
|
748
|
+
return health_watcher_map_.CheckConnectivityStateLocked(
|
774
749
|
this, *health_check_service_name);
|
775
750
|
}
|
776
|
-
|
777
|
-
*connected_subchannel = connected_subchannel_;
|
778
|
-
}
|
779
|
-
return state;
|
751
|
+
return state_;
|
780
752
|
}
|
781
753
|
|
782
754
|
void Subchannel::WatchConnectivityState(
|
@@ -790,7 +762,7 @@ void Subchannel::WatchConnectivityState(
|
|
790
762
|
}
|
791
763
|
if (!health_check_service_name.has_value()) {
|
792
764
|
if (state_ != initial_state) {
|
793
|
-
new AsyncWatcherNotifierLocked(watcher,
|
765
|
+
new AsyncWatcherNotifierLocked(watcher, state_, status_);
|
794
766
|
}
|
795
767
|
watcher_list_.AddWatcherLocked(std::move(watcher));
|
796
768
|
} else {
|
@@ -848,44 +820,6 @@ void Subchannel::Orphan() {
|
|
848
820
|
health_watcher_map_.ShutdownLocked();
|
849
821
|
}
|
850
822
|
|
851
|
-
grpc_arg Subchannel::CreateSubchannelAddressArg(
|
852
|
-
const grpc_resolved_address* addr) {
|
853
|
-
return grpc_channel_arg_string_create(
|
854
|
-
const_cast<char*>(GRPC_ARG_SUBCHANNEL_ADDRESS),
|
855
|
-
gpr_strdup(addr->len > 0 ? grpc_sockaddr_to_uri(addr).c_str() : ""));
|
856
|
-
}
|
857
|
-
|
858
|
-
const char* Subchannel::GetUriFromSubchannelAddressArg(
|
859
|
-
const grpc_channel_args* args) {
|
860
|
-
const grpc_arg* addr_arg =
|
861
|
-
grpc_channel_args_find(args, GRPC_ARG_SUBCHANNEL_ADDRESS);
|
862
|
-
const char* addr_str = grpc_channel_arg_get_string(addr_arg);
|
863
|
-
GPR_ASSERT(addr_str != nullptr); // Should have been set by LB policy.
|
864
|
-
return addr_str;
|
865
|
-
}
|
866
|
-
|
867
|
-
namespace {
|
868
|
-
|
869
|
-
void UriToSockaddr(const char* uri_str, grpc_resolved_address* addr) {
|
870
|
-
absl::StatusOr<URI> uri = URI::Parse(uri_str);
|
871
|
-
if (!uri.ok()) {
|
872
|
-
gpr_log(GPR_ERROR, "%s", uri.status().ToString().c_str());
|
873
|
-
GPR_ASSERT(uri.ok());
|
874
|
-
}
|
875
|
-
if (!grpc_parse_uri(*uri, addr)) memset(addr, 0, sizeof(*addr));
|
876
|
-
}
|
877
|
-
|
878
|
-
} // namespace
|
879
|
-
|
880
|
-
void Subchannel::GetAddressFromSubchannelAddressArg(
|
881
|
-
const grpc_channel_args* args, grpc_resolved_address* addr) {
|
882
|
-
const char* addr_uri_str = GetUriFromSubchannelAddressArg(args);
|
883
|
-
memset(addr, 0, sizeof(*addr));
|
884
|
-
if (*addr_uri_str != '\0') {
|
885
|
-
UriToSockaddr(addr_uri_str, addr);
|
886
|
-
}
|
887
|
-
}
|
888
|
-
|
889
823
|
namespace {
|
890
824
|
|
891
825
|
// Returns a string indicating the subchannel's connectivity state change to
|
@@ -922,7 +856,7 @@ void Subchannel::SetConnectivityStateLocked(grpc_connectivity_state state,
|
|
922
856
|
SubchannelConnectivityStateChangeString(state)));
|
923
857
|
}
|
924
858
|
// Notify non-health watchers.
|
925
|
-
watcher_list_.NotifyLocked(
|
859
|
+
watcher_list_.NotifyLocked(state, status);
|
926
860
|
// Notify health watchers.
|
927
861
|
health_watcher_map_.NotifyLocked(state, status);
|
928
862
|
}
|
@@ -952,10 +886,11 @@ void Subchannel::MaybeStartConnectingLocked() {
|
|
952
886
|
const grpc_millis time_til_next =
|
953
887
|
next_attempt_deadline_ - ExecCtx::Get()->Now();
|
954
888
|
if (time_til_next <= 0) {
|
955
|
-
gpr_log(GPR_INFO, "
|
889
|
+
gpr_log(GPR_INFO, "subchannel %p %s: Retry immediately", this,
|
890
|
+
key_.ToString().c_str());
|
956
891
|
} else {
|
957
|
-
gpr_log(GPR_INFO, "
|
958
|
-
this, time_til_next);
|
892
|
+
gpr_log(GPR_INFO, "subchannel %p %s: Retry in %" PRId64 " milliseconds",
|
893
|
+
this, key_.ToString().c_str(), time_til_next);
|
959
894
|
}
|
960
895
|
GRPC_CLOSURE_INIT(&on_retry_alarm_, OnRetryAlarm, this,
|
961
896
|
grpc_schedule_on_exec_ctx);
|
@@ -974,10 +909,12 @@ void Subchannel::OnRetryAlarm(void* arg, grpc_error_handle error) {
|
|
974
909
|
c->retry_immediately_ = false;
|
975
910
|
error = GRPC_ERROR_NONE;
|
976
911
|
} else {
|
977
|
-
GRPC_ERROR_REF(error);
|
912
|
+
(void)GRPC_ERROR_REF(error);
|
978
913
|
}
|
979
914
|
if (error == GRPC_ERROR_NONE) {
|
980
|
-
gpr_log(GPR_INFO,
|
915
|
+
gpr_log(GPR_INFO,
|
916
|
+
"subchannel %p %s: failed to connect to channel, retrying", c.get(),
|
917
|
+
c->key_.ToString().c_str());
|
981
918
|
c->ContinueConnectingLocked();
|
982
919
|
// Still connecting, keep ref around. Note that this stolen ref won't
|
983
920
|
// be dropped without first acquiring c->mu_.
|
@@ -988,6 +925,7 @@ void Subchannel::OnRetryAlarm(void* arg, grpc_error_handle error) {
|
|
988
925
|
|
989
926
|
void Subchannel::ContinueConnectingLocked() {
|
990
927
|
SubchannelConnector::Args args;
|
928
|
+
args.address = &address_for_connect_;
|
991
929
|
args.interested_parties = pollset_set_;
|
992
930
|
const grpc_millis min_deadline =
|
993
931
|
min_connect_timeout_ms_ + ExecCtx::Get()->Now();
|
@@ -1009,8 +947,8 @@ void Subchannel::OnConnectingFinished(void* arg, grpc_error_handle error) {
|
|
1009
947
|
c->PublishTransportLocked()) {
|
1010
948
|
// Do nothing, transport was published.
|
1011
949
|
} else if (!c->disconnected_) {
|
1012
|
-
gpr_log(GPR_INFO, "
|
1013
|
-
grpc_error_std_string(error).c_str());
|
950
|
+
gpr_log(GPR_INFO, "subchannel %p %s: connect failed: %s", c.get(),
|
951
|
+
c->key_.ToString().c_str(), grpc_error_std_string(error).c_str());
|
1014
952
|
c->SetConnectivityStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE,
|
1015
953
|
grpc_error_to_absl_status(error));
|
1016
954
|
}
|
@@ -1036,7 +974,8 @@ bool Subchannel::PublishTransportLocked() {
|
|
1036
974
|
builder, connecting_result_.channel_args);
|
1037
975
|
grpc_channel_stack_builder_set_transport(builder,
|
1038
976
|
connecting_result_.transport);
|
1039
|
-
if (!
|
977
|
+
if (!CoreConfiguration::Get().channel_init().CreateStack(
|
978
|
+
builder, GRPC_CLIENT_SUBCHANNEL)) {
|
1040
979
|
grpc_channel_stack_builder_destroy(builder);
|
1041
980
|
return false;
|
1042
981
|
}
|
@@ -1046,8 +985,9 @@ bool Subchannel::PublishTransportLocked() {
|
|
1046
985
|
reinterpret_cast<void**>(&stk));
|
1047
986
|
if (error != GRPC_ERROR_NONE) {
|
1048
987
|
grpc_transport_destroy(connecting_result_.transport);
|
1049
|
-
gpr_log(GPR_ERROR,
|
1050
|
-
|
988
|
+
gpr_log(GPR_ERROR,
|
989
|
+
"subchannel %p %s: error initializing subchannel stack: %s", this,
|
990
|
+
key_.ToString().c_str(), grpc_error_std_string(error).c_str());
|
1051
991
|
GRPC_ERROR_UNREF(error);
|
1052
992
|
return false;
|
1053
993
|
}
|
@@ -1062,8 +1002,10 @@ bool Subchannel::PublishTransportLocked() {
|
|
1062
1002
|
// Publish.
|
1063
1003
|
connected_subchannel_.reset(
|
1064
1004
|
new ConnectedSubchannel(stk, args_, channelz_node_));
|
1065
|
-
|
1066
|
-
|
1005
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_subchannel)) {
|
1006
|
+
gpr_log(GPR_INFO, "subchannel %p %s: new connected subchannel at %p", this,
|
1007
|
+
key_.ToString().c_str(), connected_subchannel_.get());
|
1008
|
+
}
|
1067
1009
|
if (channelz_node_ != nullptr) {
|
1068
1010
|
channelz_node_->SetChildSocket(std::move(socket));
|
1069
1011
|
}
|
@@ -1,20 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
*
|
17
|
-
*/
|
1
|
+
//
|
2
|
+
// Copyright 2015 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
|
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_H
|
20
18
|
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_H
|
@@ -39,9 +37,6 @@
|
|
39
37
|
#include "src/core/lib/transport/connectivity_state.h"
|
40
38
|
#include "src/core/lib/transport/metadata.h"
|
41
39
|
|
42
|
-
// Channel arg containing a URI indicating the address to connect to.
|
43
|
-
#define GRPC_ARG_SUBCHANNEL_ADDRESS "grpc.subchannel_address"
|
44
|
-
|
45
40
|
namespace grpc_core {
|
46
41
|
|
47
42
|
class SubchannelCall;
|
@@ -153,7 +148,6 @@ class Subchannel : public DualRefCounted<Subchannel> {
|
|
153
148
|
struct ConnectivityStateChange {
|
154
149
|
grpc_connectivity_state state;
|
155
150
|
absl::Status status;
|
156
|
-
RefCountedPtr<ConnectedSubchannel> connected_subchannel;
|
157
151
|
};
|
158
152
|
|
159
153
|
~ConnectivityStateWatcherInterface() override = default;
|
@@ -190,10 +184,10 @@ class Subchannel : public DualRefCounted<Subchannel> {
|
|
190
184
|
ABSL_GUARDED_BY(&mu_);
|
191
185
|
};
|
192
186
|
|
193
|
-
// Creates a subchannel
|
187
|
+
// Creates a subchannel.
|
194
188
|
static RefCountedPtr<Subchannel> Create(
|
195
189
|
OrphanablePtr<SubchannelConnector> connector,
|
196
|
-
const grpc_channel_args* args);
|
190
|
+
const grpc_resolved_address& address, const grpc_channel_args* args);
|
197
191
|
|
198
192
|
// The ctor and dtor are not intended to use directly.
|
199
193
|
Subchannel(SubchannelKey key, OrphanablePtr<SubchannelConnector> connector,
|
@@ -205,10 +199,6 @@ class Subchannel : public DualRefCounted<Subchannel> {
|
|
205
199
|
// will have an affect when the subchannel creates a new ConnectedSubchannel.
|
206
200
|
void ThrottleKeepaliveTime(int new_keepalive_time) ABSL_LOCKS_EXCLUDED(mu_);
|
207
201
|
|
208
|
-
// Gets the string representing the subchannel address.
|
209
|
-
// Caller doesn't take ownership.
|
210
|
-
const char* GetTargetAddress();
|
211
|
-
|
212
202
|
const grpc_channel_args* channel_args() const { return args_; }
|
213
203
|
|
214
204
|
channelz::SubchannelNode* channelz_node();
|
@@ -217,10 +207,8 @@ class Subchannel : public DualRefCounted<Subchannel> {
|
|
217
207
|
// If health_check_service_name is non-null, the returned connectivity
|
218
208
|
// state will be based on the state reported by the backend for that
|
219
209
|
// service name.
|
220
|
-
// If the return value is GRPC_CHANNEL_READY, also sets *connected_subchannel.
|
221
210
|
grpc_connectivity_state CheckConnectivityState(
|
222
|
-
const absl::optional<std::string>& health_check_service_name
|
223
|
-
RefCountedPtr<ConnectedSubchannel>* connected_subchannel)
|
211
|
+
const absl::optional<std::string>& health_check_service_name)
|
224
212
|
ABSL_LOCKS_EXCLUDED(mu_);
|
225
213
|
|
226
214
|
// Starts watching the subchannel's connectivity state.
|
@@ -243,31 +231,21 @@ class Subchannel : public DualRefCounted<Subchannel> {
|
|
243
231
|
const absl::optional<std::string>& health_check_service_name,
|
244
232
|
ConnectivityStateWatcherInterface* watcher) ABSL_LOCKS_EXCLUDED(mu_);
|
245
233
|
|
234
|
+
RefCountedPtr<ConnectedSubchannel> connected_subchannel()
|
235
|
+
ABSL_LOCKS_EXCLUDED(mu_) {
|
236
|
+
MutexLock lock(&mu_);
|
237
|
+
return connected_subchannel_;
|
238
|
+
}
|
239
|
+
|
246
240
|
// Attempt to connect to the backend. Has no effect if already connected.
|
247
241
|
void AttemptToConnect() ABSL_LOCKS_EXCLUDED(mu_);
|
248
242
|
|
249
243
|
// Resets the connection backoff of the subchannel.
|
250
|
-
// TODO(roth): Move connection backoff out of subchannels and up into LB
|
251
|
-
// policy code (probably by adding a SubchannelGroup between
|
252
|
-
// SubchannelList and SubchannelData), at which point this method can
|
253
|
-
// go away.
|
254
244
|
void ResetBackoff() ABSL_LOCKS_EXCLUDED(mu_);
|
255
245
|
|
256
246
|
// Tears down any existing connection, and arranges for destruction
|
257
247
|
void Orphan() override ABSL_LOCKS_EXCLUDED(mu_);
|
258
248
|
|
259
|
-
// Returns a new channel arg encoding the subchannel address as a URI
|
260
|
-
// string. Caller is responsible for freeing the string.
|
261
|
-
static grpc_arg CreateSubchannelAddressArg(const grpc_resolved_address* addr);
|
262
|
-
|
263
|
-
// Returns the URI string from the subchannel address arg in \a args.
|
264
|
-
static const char* GetUriFromSubchannelAddressArg(
|
265
|
-
const grpc_channel_args* args);
|
266
|
-
|
267
|
-
// Sets \a addr from the subchannel address arg in \a args.
|
268
|
-
static void GetAddressFromSubchannelAddressArg(const grpc_channel_args* args,
|
269
|
-
grpc_resolved_address* addr);
|
270
|
-
|
271
249
|
private:
|
272
250
|
// A linked list of ConnectivityStateWatcherInterfaces that are monitoring
|
273
251
|
// the subchannel's state.
|
@@ -280,7 +258,7 @@ class Subchannel : public DualRefCounted<Subchannel> {
|
|
280
258
|
void RemoveWatcherLocked(ConnectivityStateWatcherInterface* watcher);
|
281
259
|
|
282
260
|
// Notifies all watchers in the list about a change to state.
|
283
|
-
void NotifyLocked(
|
261
|
+
void NotifyLocked(grpc_connectivity_state state,
|
284
262
|
const absl::Status& status);
|
285
263
|
|
286
264
|
void Clear() { watchers_.clear(); }
|
@@ -350,9 +328,11 @@ class Subchannel : public DualRefCounted<Subchannel> {
|
|
350
328
|
|
351
329
|
// The subchannel pool this subchannel is in.
|
352
330
|
RefCountedPtr<SubchannelPoolInterface> subchannel_pool_;
|
353
|
-
// TODO(juanlishen): Consider using args_ as key_ directly.
|
354
331
|
// Subchannel key that identifies this subchannel in the subchannel pool.
|
355
332
|
const SubchannelKey key_;
|
333
|
+
// Actual address to connect to. May be different than the address in
|
334
|
+
// key_ if overridden by proxy mapper.
|
335
|
+
grpc_resolved_address address_for_connect_;
|
356
336
|
// Channel args.
|
357
337
|
grpc_channel_args* args_;
|
358
338
|
// pollset_set tracking who's interested in a connection being setup.
|
@@ -399,4 +379,4 @@ class Subchannel : public DualRefCounted<Subchannel> {
|
|
399
379
|
|
400
380
|
} // namespace grpc_core
|
401
381
|
|
402
|
-
#endif
|
382
|
+
#endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_H
|
@@ -20,10 +20,11 @@
|
|
20
20
|
|
21
21
|
#include "src/core/ext/filters/client_channel/subchannel_pool_interface.h"
|
22
22
|
|
23
|
+
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
23
24
|
#include "src/core/lib/gpr/useful.h"
|
24
25
|
|
25
26
|
// The subchannel pool to reuse subchannels.
|
26
|
-
#define GRPC_ARG_SUBCHANNEL_POOL "grpc.subchannel_pool"
|
27
|
+
#define GRPC_ARG_SUBCHANNEL_POOL "grpc.internal.subchannel_pool"
|
27
28
|
// The subchannel key ID that is only used in test to make each key unique.
|
28
29
|
#define GRPC_ARG_SUBCHANNEL_KEY_TEST_ONLY_ID "grpc.subchannel_key_test_only_id"
|
29
30
|
|
@@ -31,8 +32,9 @@ namespace grpc_core {
|
|
31
32
|
|
32
33
|
TraceFlag grpc_subchannel_pool_trace(false, "subchannel_pool");
|
33
34
|
|
34
|
-
SubchannelKey::SubchannelKey(const
|
35
|
-
|
35
|
+
SubchannelKey::SubchannelKey(const grpc_resolved_address& address,
|
36
|
+
const grpc_channel_args* args) {
|
37
|
+
Init(address, args, grpc_channel_args_normalize);
|
36
38
|
}
|
37
39
|
|
38
40
|
SubchannelKey::~SubchannelKey() {
|
@@ -40,7 +42,7 @@ SubchannelKey::~SubchannelKey() {
|
|
40
42
|
}
|
41
43
|
|
42
44
|
SubchannelKey::SubchannelKey(const SubchannelKey& other) {
|
43
|
-
Init(other.args_, grpc_channel_args_copy);
|
45
|
+
Init(other.address_, other.args_, grpc_channel_args_copy);
|
44
46
|
}
|
45
47
|
|
46
48
|
SubchannelKey& SubchannelKey::operator=(const SubchannelKey& other) {
|
@@ -48,31 +50,44 @@ SubchannelKey& SubchannelKey::operator=(const SubchannelKey& other) {
|
|
48
50
|
return *this;
|
49
51
|
}
|
50
52
|
grpc_channel_args_destroy(const_cast<grpc_channel_args*>(args_));
|
51
|
-
Init(other.args_, grpc_channel_args_copy);
|
53
|
+
Init(other.address_, other.args_, grpc_channel_args_copy);
|
52
54
|
return *this;
|
53
55
|
}
|
54
56
|
|
55
57
|
SubchannelKey::SubchannelKey(SubchannelKey&& other) noexcept {
|
58
|
+
address_ = other.address_;
|
56
59
|
args_ = other.args_;
|
57
60
|
other.args_ = nullptr;
|
58
61
|
}
|
59
62
|
|
60
63
|
SubchannelKey& SubchannelKey::operator=(SubchannelKey&& other) noexcept {
|
64
|
+
address_ = other.address_;
|
61
65
|
args_ = other.args_;
|
62
66
|
other.args_ = nullptr;
|
63
67
|
return *this;
|
64
68
|
}
|
65
69
|
|
66
70
|
bool SubchannelKey::operator<(const SubchannelKey& other) const {
|
71
|
+
if (address_.len < other.address_.len) return true;
|
72
|
+
if (address_.len > other.address_.len) return false;
|
73
|
+
int r = memcmp(address_.addr, other.address_.addr, address_.len);
|
74
|
+
if (r < 0) return true;
|
75
|
+
if (r > 0) return false;
|
67
76
|
return grpc_channel_args_compare(args_, other.args_) < 0;
|
68
77
|
}
|
69
78
|
|
70
79
|
void SubchannelKey::Init(
|
71
|
-
const grpc_channel_args* args,
|
80
|
+
const grpc_resolved_address& address, const grpc_channel_args* args,
|
72
81
|
grpc_channel_args* (*copy_channel_args)(const grpc_channel_args* args)) {
|
82
|
+
address_ = address;
|
73
83
|
args_ = copy_channel_args(args);
|
74
84
|
}
|
75
85
|
|
86
|
+
std::string SubchannelKey::ToString() const {
|
87
|
+
return absl::StrCat("{address=", grpc_sockaddr_to_uri(&address_),
|
88
|
+
", args=", grpc_channel_args_string(args_), "}");
|
89
|
+
}
|
90
|
+
|
76
91
|
namespace {
|
77
92
|
|
78
93
|
void* arg_copy(void* p) {
|
@@ -86,7 +101,7 @@ void arg_destroy(void* p) {
|
|
86
101
|
subchannel_pool->Unref();
|
87
102
|
}
|
88
103
|
|
89
|
-
int arg_cmp(void* a, void* b) { return
|
104
|
+
int arg_cmp(void* a, void* b) { return QsortCompare(a, b); }
|
90
105
|
|
91
106
|
const grpc_arg_pointer_vtable subchannel_pool_arg_vtable = {
|
92
107
|
arg_copy, arg_destroy, arg_cmp};
|