grpc 1.64.3 → 1.65.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +57 -58
- data/include/grpc/event_engine/event_engine.h +13 -6
- data/include/grpc/impl/channel_arg_names.h +7 -3
- data/include/grpc/module.modulemap +1 -0
- data/include/grpc/passive_listener.h +62 -0
- data/include/grpc/support/log.h +7 -17
- data/include/grpc/support/port_platform.h +3 -0
- data/src/core/channelz/channel_trace.cc +1 -1
- data/src/core/channelz/channel_trace.h +1 -1
- data/src/core/channelz/channelz.cc +3 -3
- data/src/core/channelz/channelz.h +7 -7
- data/src/core/channelz/channelz_registry.cc +4 -3
- data/src/core/client_channel/backup_poller.cc +4 -5
- data/src/core/client_channel/client_channel.cc +1324 -0
- data/src/core/client_channel/client_channel.h +243 -0
- data/src/core/client_channel/client_channel_filter.cc +266 -709
- data/src/core/client_channel/client_channel_filter.h +11 -64
- data/src/core/client_channel/client_channel_internal.h +16 -5
- data/src/core/client_channel/client_channel_plugin.cc +1 -14
- data/src/core/client_channel/client_channel_service_config.h +3 -3
- data/src/core/client_channel/config_selector.cc +1 -1
- data/src/core/client_channel/config_selector.h +1 -1
- data/src/core/client_channel/dynamic_filters.cc +3 -3
- data/src/core/client_channel/dynamic_filters.h +1 -3
- data/src/core/client_channel/load_balanced_call_destination.cc +336 -0
- data/src/core/client_channel/load_balanced_call_destination.h +49 -0
- data/src/core/client_channel/retry_filter.cc +2 -9
- data/src/core/client_channel/retry_filter.h +2 -7
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +65 -72
- data/src/core/client_channel/retry_filter_legacy_call_data.h +0 -2
- data/src/core/client_channel/retry_service_config.cc +4 -5
- data/src/core/client_channel/retry_service_config.h +3 -3
- data/src/core/client_channel/subchannel.cc +220 -112
- data/src/core/client_channel/subchannel.h +31 -18
- data/src/core/client_channel/subchannel_pool_interface.cc +0 -2
- data/src/core/client_channel/subchannel_pool_interface.h +2 -4
- data/src/core/client_channel/subchannel_stream_client.cc +36 -49
- data/src/core/client_channel/subchannel_stream_client.h +2 -4
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +7 -10
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +1 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +7 -0
- data/src/core/ext/filters/census/grpc_context.cc +2 -4
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +8 -15
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +3 -7
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +1 -0
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +3 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +1 -0
- data/src/core/ext/filters/http/client/http_client_filter.h +1 -0
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -0
- data/src/core/ext/filters/http/client_authority_filter.h +1 -0
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +10 -15
- data/src/core/ext/filters/http/message_compress/compression_filter.h +2 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +2 -2
- data/src/core/ext/filters/http/server/http_server_filter.h +1 -0
- data/src/core/ext/filters/message_size/message_size_filter.cc +6 -9
- data/src/core/ext/filters/message_size/message_size_filter.h +6 -6
- data/src/core/ext/filters/rbac/rbac_filter.cc +2 -5
- data/src/core/ext/filters/rbac/rbac_filter.h +1 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +2 -6
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +1 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +3 -3
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +8 -25
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -5
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +223 -148
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +33 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +131 -107
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +8 -8
- data/src/core/ext/transport/chttp2/transport/context_list_entry.h +1 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -2
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -2
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +9 -5
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +9 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +32 -43
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +3 -8
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +1 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +29 -19
- data/src/core/ext/transport/chttp2/transport/parsing.cc +15 -25
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +0 -2
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +0 -2
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +29 -13
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +5 -4
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -5
- data/src/core/ext/transport/chttp2/transport/writing.cc +24 -25
- data/src/core/ext/transport/inproc/inproc_transport.cc +56 -32
- data/src/core/ext/transport/inproc/inproc_transport.h +1 -3
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +13 -15
- data/src/core/ext/transport/inproc/legacy_inproc_transport.h +0 -2
- data/src/core/handshaker/handshaker.cc +6 -14
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +9 -17
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +3 -2
- data/src/core/handshaker/security/secure_endpoint.cc +38 -32
- data/src/core/handshaker/security/secure_endpoint.h +0 -2
- data/src/core/handshaker/security/security_handshaker.cc +25 -37
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +2 -1
- data/src/core/lib/address_utils/parse_address.cc +27 -39
- data/src/core/lib/address_utils/sockaddr_utils.cc +5 -6
- data/src/core/lib/avl/avl.h +1 -1
- data/src/core/lib/channel/channel_args.cc +13 -17
- data/src/core/lib/channel/channel_args.h +19 -8
- data/src/core/lib/channel/channel_stack.cc +5 -63
- data/src/core/lib/channel/channel_stack.h +13 -37
- data/src/core/lib/channel/channel_stack_builder.h +0 -5
- data/src/core/lib/channel/channel_stack_builder_impl.cc +0 -142
- data/src/core/lib/channel/channel_stack_builder_impl.h +0 -2
- data/src/core/lib/channel/connected_channel.cc +37 -676
- data/src/core/lib/channel/promise_based_filter.cc +41 -47
- data/src/core/lib/channel/promise_based_filter.h +124 -477
- data/src/core/lib/channel/status_util.cc +1 -1
- data/src/core/lib/compression/compression.cc +1 -1
- data/src/core/lib/compression/message_compress.cc +6 -6
- data/src/core/lib/config/config_vars.cc +3 -8
- data/src/core/lib/config/config_vars.h +1 -5
- data/src/core/lib/debug/event_log.h +1 -1
- data/src/core/lib/debug/trace.cc +43 -59
- data/src/core/lib/debug/trace.h +2 -97
- data/src/core/lib/debug/trace_flags.cc +255 -0
- data/src/core/lib/debug/trace_flags.h +133 -0
- data/src/core/lib/debug/trace_impl.h +115 -0
- data/src/core/lib/event_engine/ares_resolver.cc +5 -7
- data/src/core/lib/event_engine/ares_resolver.h +1 -3
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +1 -1
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +17 -22
- data/src/core/lib/event_engine/event_engine.cc +29 -4
- data/src/core/lib/event_engine/extensions/supports_fd.h +7 -0
- data/src/core/lib/event_engine/extensions/tcp_trace.h +43 -0
- data/src/core/lib/event_engine/forkable.cc +4 -5
- data/src/core/lib/event_engine/forkable.h +0 -11
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +10 -11
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +4 -3
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +19 -33
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +3 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +24 -7
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +2 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +14 -16
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +18 -22
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +13 -17
- data/src/core/lib/event_engine/posix_engine/timer.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +4 -6
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -1
- data/src/core/lib/event_engine/shim.cc +1 -1
- data/src/core/lib/event_engine/tcp_socket_utils.cc +6 -8
- data/src/core/lib/event_engine/thread_local.h +1 -1
- data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +19 -21
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -6
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +14 -13
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +4 -3
- data/src/core/lib/event_engine/trace.h +6 -17
- data/src/core/lib/event_engine/windows/iocp.h +1 -1
- data/src/core/lib/event_engine/windows/win_socket.cc +23 -17
- data/src/core/lib/event_engine/windows/win_socket.h +4 -5
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +6 -9
- data/src/core/lib/event_engine/windows/windows_engine.cc +201 -87
- data/src/core/lib/event_engine/windows/windows_engine.h +136 -25
- data/src/core/lib/event_engine/windows/windows_listener.cc +12 -23
- data/src/core/lib/experiments/experiments.cc +35 -151
- data/src/core/lib/experiments/experiments.h +12 -45
- data/src/core/lib/gprpp/bitset.h +1 -1
- data/src/core/lib/gprpp/crash.cc +2 -3
- data/src/core/lib/gprpp/dual_ref_counted.h +45 -33
- data/src/core/lib/gprpp/dump_args.cc +54 -0
- data/src/core/lib/gprpp/dump_args.h +69 -0
- data/src/core/lib/gprpp/glob.cc +70 -0
- data/src/core/lib/gprpp/glob.h +29 -0
- data/src/core/lib/gprpp/per_cpu.cc +1 -1
- data/src/core/lib/gprpp/posix/stat.cc +3 -4
- data/src/core/lib/gprpp/posix/thd.cc +8 -9
- data/src/core/lib/gprpp/ref_counted.h +30 -22
- data/src/core/lib/gprpp/single_set_ptr.h +5 -3
- data/src/core/lib/gprpp/status_helper.cc +11 -30
- data/src/core/lib/gprpp/status_helper.h +3 -31
- data/src/core/lib/gprpp/time.cc +3 -4
- data/src/core/lib/gprpp/time.h +3 -2
- data/src/core/lib/gprpp/unique_type_name.h +1 -1
- data/src/core/lib/gprpp/validation_errors.cc +10 -1
- data/src/core/lib/gprpp/validation_errors.h +11 -0
- data/src/core/lib/gprpp/windows/stat.cc +3 -4
- data/src/core/lib/gprpp/windows/thd.cc +3 -2
- data/src/core/lib/gprpp/work_serializer.cc +48 -57
- data/src/core/lib/iomgr/buffer_list.cc +4 -2
- data/src/core/lib/iomgr/call_combiner.cc +18 -27
- data/src/core/lib/iomgr/call_combiner.h +1 -3
- data/src/core/lib/iomgr/cfstream_handle.cc +4 -6
- data/src/core/lib/iomgr/closure.h +2 -4
- data/src/core/lib/iomgr/combiner.cc +6 -8
- data/src/core/lib/iomgr/combiner.h +0 -2
- data/src/core/lib/iomgr/endpoint.cc +0 -6
- data/src/core/lib/iomgr/endpoint.h +0 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +19 -41
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +1 -1
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -6
- data/src/core/lib/iomgr/error.cc +13 -21
- data/src/core/lib/iomgr/error.h +1 -1
- data/src/core/lib/iomgr/ev_apple.cc +3 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +43 -42
- data/src/core/lib/iomgr/ev_poll_posix.cc +38 -29
- data/src/core/lib/iomgr/ev_posix.cc +8 -9
- data/src/core/lib/iomgr/ev_posix.h +10 -7
- data/src/core/lib/iomgr/event_engine_shims/closure.cc +2 -2
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +14 -28
- data/src/core/lib/iomgr/exec_ctx.cc +2 -2
- data/src/core/lib/iomgr/exec_ctx.h +1 -1
- data/src/core/lib/iomgr/executor.cc +6 -15
- data/src/core/lib/iomgr/executor.h +1 -1
- data/src/core/lib/iomgr/fork_posix.cc +8 -10
- data/src/core/lib/iomgr/fork_windows.cc +3 -1
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -3
- data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +3 -5
- data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
- data/src/core/lib/iomgr/iocp_windows.cc +4 -3
- data/src/core/lib/iomgr/iomgr.cc +13 -17
- data/src/core/lib/iomgr/lockfree_event.cc +3 -5
- data/src/core/lib/iomgr/pollset.h +0 -2
- data/src/core/lib/iomgr/pollset_windows.cc +0 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +7 -14
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +11 -17
- data/src/core/lib/iomgr/socket_windows.cc +4 -6
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +3 -5
- data/src/core/lib/iomgr/tcp_client_posix.cc +9 -15
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -4
- data/src/core/lib/iomgr/tcp_posix.cc +57 -84
- data/src/core/lib/iomgr/tcp_posix.h +0 -2
- data/src/core/lib/iomgr/tcp_server_posix.cc +3 -3
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +4 -6
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_windows.cc +10 -16
- data/src/core/lib/iomgr/tcp_windows.cc +25 -41
- data/src/core/lib/iomgr/timer_generic.cc +17 -20
- data/src/core/lib/iomgr/timer_heap.cc +1 -1
- data/src/core/lib/iomgr/timer_manager.cc +17 -30
- data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
- data/src/core/lib/iomgr/vsock.cc +1 -1
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +3 -3
- data/src/core/lib/promise/activity.h +27 -4
- data/src/core/lib/promise/cancel_callback.h +24 -0
- data/src/core/lib/promise/context.h +11 -0
- data/src/core/lib/promise/detail/basic_seq.h +1 -2
- data/src/core/lib/promise/detail/join_state.h +354 -398
- data/src/core/lib/promise/detail/promise_like.h +6 -5
- data/src/core/lib/promise/detail/seq_state.h +1178 -1178
- data/src/core/lib/promise/for_each.h +6 -6
- data/src/core/lib/promise/interceptor_list.h +6 -7
- data/src/core/lib/promise/latch.h +9 -9
- data/src/core/lib/promise/map.h +17 -0
- data/src/core/lib/promise/observable.h +182 -0
- data/src/core/lib/promise/party.cc +7 -8
- data/src/core/lib/promise/party.h +10 -8
- data/src/core/lib/promise/pipe.h +16 -35
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/status_flag.h +2 -0
- data/src/core/lib/resource_quota/arena.cc +56 -79
- data/src/core/lib/resource_quota/arena.h +118 -209
- data/src/core/lib/resource_quota/memory_quota.cc +12 -13
- data/src/core/lib/resource_quota/memory_quota.h +2 -3
- data/src/core/lib/resource_quota/periodic_update.cc +1 -1
- data/src/core/lib/resource_quota/resource_quota.h +1 -1
- 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 +6 -8
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +5 -6
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -0
- data/src/core/lib/security/authorization/matchers.cc +3 -3
- data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +2 -2
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +2 -3
- data/src/core/lib/security/context/security_context.cc +12 -13
- data/src/core/lib/security/context/security_context.h +31 -8
- data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +3 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +5 -5
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +3 -3
- data/src/core/lib/security/credentials/call_creds_util.cc +2 -1
- data/src/core/lib/security/credentials/channel_creds_registry.h +2 -2
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +5 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.h +1 -1
- data/src/core/lib/security/credentials/credentials.cc +6 -6
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -4
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +2 -2
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +9 -11
- data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -3
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +2 -2
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +1 -1
- data/src/core/lib/security/credentials/fake/fake_credentials.h +1 -1
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +3 -3
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +11 -11
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.h +1 -1
- data/src/core/lib/security/credentials/jwt/json_token.cc +14 -15
- data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +6 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +50 -54
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
- data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +12 -11
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -3
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +15 -21
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +21 -30
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +3 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +14 -16
- data/src/core/lib/security/credentials/tls/tls_utils.cc +4 -4
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -1
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -16
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +15 -12
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +6 -6
- data/src/core/lib/security/security_connector/load_system_roots_windows.cc +1 -1
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +8 -12
- data/src/core/lib/security/security_connector/security_connector.cc +1 -4
- data/src/core/lib/security/security_connector/security_connector.h +1 -3
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +17 -19
- data/src/core/lib/security/security_connector/ssl_utils.cc +19 -21
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +29 -40
- data/src/core/lib/security/transport/auth_filters.h +1 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +7 -13
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -8
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/slice/slice.h +1 -1
- data/src/core/lib/slice/slice_refcount.h +2 -4
- data/src/core/lib/slice/slice_string_helpers.cc +1 -1
- data/src/core/lib/surface/api_trace.h +1 -3
- data/src/core/lib/surface/call.cc +64 -3738
- data/src/core/lib/surface/call.h +41 -143
- data/src/core/lib/surface/call_log_batch.cc +1 -1
- data/src/core/lib/surface/call_utils.cc +276 -0
- data/src/core/lib/surface/call_utils.h +449 -0
- data/src/core/lib/surface/channel.cc +8 -3
- data/src/core/lib/surface/channel.h +10 -7
- data/src/core/lib/surface/channel_create.cc +14 -6
- data/src/core/lib/surface/channel_create.h +3 -2
- data/src/core/lib/surface/channel_init.cc +21 -77
- data/src/core/lib/surface/channel_init.h +19 -97
- data/src/core/lib/surface/client_call.cc +419 -0
- data/src/core/lib/surface/client_call.h +180 -0
- data/src/core/lib/surface/completion_queue.cc +28 -33
- data/src/core/lib/surface/completion_queue.h +0 -8
- data/src/core/lib/surface/filter_stack_call.cc +1157 -0
- data/src/core/lib/surface/filter_stack_call.h +369 -0
- data/src/core/lib/surface/init.cc +7 -6
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/legacy_channel.cc +40 -27
- data/src/core/lib/surface/legacy_channel.h +9 -18
- data/src/core/lib/surface/server_call.cc +222 -0
- data/src/core/lib/surface/server_call.h +167 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +3 -5
- data/src/core/lib/transport/bdp_estimator.h +2 -4
- data/src/core/lib/transport/call_arena_allocator.h +9 -7
- data/src/core/lib/transport/call_destination.h +76 -0
- data/src/core/lib/transport/call_filters.cc +28 -10
- data/src/core/lib/transport/call_filters.h +128 -22
- data/src/core/lib/transport/call_spine.cc +5 -6
- data/src/core/lib/transport/call_spine.h +159 -334
- data/src/core/lib/transport/connectivity_state.cc +8 -10
- data/src/core/lib/transport/connectivity_state.h +0 -2
- data/src/core/lib/transport/interception_chain.cc +155 -0
- data/src/core/lib/transport/interception_chain.h +236 -0
- data/src/core/lib/transport/metadata_batch.h +10 -1
- data/src/core/lib/transport/metadata_info.h +1 -1
- data/src/core/lib/transport/transport.cc +3 -6
- data/src/core/lib/transport/transport.h +43 -40
- data/src/core/load_balancing/child_policy_handler.cc +8 -8
- data/src/core/load_balancing/endpoint_list.cc +5 -5
- data/src/core/load_balancing/endpoint_list.h +1 -1
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +1 -0
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/load_balancing/grpclb/grpclb.cc +25 -29
- data/src/core/load_balancing/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/load_balancing/grpclb/load_balancer_api.cc +3 -4
- data/src/core/load_balancing/health_check_client.cc +10 -13
- data/src/core/load_balancing/lb_policy.cc +5 -8
- data/src/core/load_balancing/lb_policy.h +19 -3
- data/src/core/load_balancing/lb_policy_factory.h +1 -1
- data/src/core/load_balancing/lb_policy_registry.cc +2 -3
- data/src/core/load_balancing/lb_policy_registry.h +1 -1
- data/src/core/load_balancing/oob_backend_metric.cc +2 -4
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +33 -35
- data/src/core/load_balancing/outlier_detection/outlier_detection.h +3 -3
- data/src/core/load_balancing/pick_first/pick_first.cc +65 -65
- data/src/core/load_balancing/priority/priority.cc +26 -28
- data/src/core/load_balancing/ring_hash/ring_hash.cc +11 -13
- data/src/core/load_balancing/ring_hash/ring_hash.h +3 -3
- data/src/core/load_balancing/rls/rls.cc +82 -82
- data/src/core/load_balancing/round_robin/round_robin.cc +17 -20
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +54 -43
- data/src/core/load_balancing/weighted_target/weighted_target.cc +21 -24
- data/src/core/load_balancing/xds/cds.cc +14 -16
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +16 -18
- data/src/core/load_balancing/xds/xds_cluster_manager.cc +15 -17
- data/src/core/load_balancing/xds/xds_override_host.cc +40 -41
- data/src/core/load_balancing/xds/xds_override_host.h +3 -3
- data/src/core/load_balancing/xds/xds_wrr_locality.cc +10 -12
- data/src/core/plugin_registry/grpc_plugin_registry.cc +5 -1
- data/src/core/resolver/binder/binder_resolver.cc +3 -2
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +3 -2
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +7 -14
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -5
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/resolver/dns/dns_resolver_plugin.cc +6 -5
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +4 -9
- data/src/core/resolver/dns/event_engine/service_config_helper.cc +5 -5
- data/src/core/resolver/dns/native/dns_resolver.cc +8 -9
- data/src/core/resolver/endpoint_addresses.cc +1 -1
- data/src/core/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/resolver/fake/fake_resolver.h +1 -1
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +13 -14
- data/src/core/resolver/polling_resolver.cc +30 -35
- data/src/core/resolver/resolver.cc +2 -6
- data/src/core/resolver/resolver.h +0 -2
- data/src/core/resolver/resolver_registry.cc +6 -8
- data/src/core/resolver/sockaddr/sockaddr_resolver.cc +3 -3
- data/src/core/resolver/xds/xds_dependency_manager.cc +22 -23
- data/src/core/resolver/xds/xds_resolver.cc +13 -15
- data/src/core/server/server.cc +269 -389
- data/src/core/server/server.h +37 -19
- data/src/core/server/server_call_tracer_filter.cc +7 -14
- data/src/core/server/server_config_selector.h +1 -1
- data/src/core/server/server_config_selector_filter.cc +3 -3
- data/src/core/server/server_interface.h +2 -0
- data/src/core/server/xds_channel_stack_modifier.cc +1 -1
- data/src/core/server/xds_channel_stack_modifier.h +1 -1
- data/src/core/server/xds_server_config_fetcher.cc +1 -4
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_call_data.h +13 -11
- data/src/core/service_config/service_config_channel_arg_filter.cc +6 -4
- data/src/core/service_config/service_config_impl.cc +5 -5
- data/src/core/service_config/service_config_impl.h +1 -1
- data/src/core/service_config/service_config_parser.cc +3 -6
- data/src/core/service_config/service_config_parser.h +1 -1
- data/src/core/{lib/channel → telemetry}/call_tracer.cc +20 -30
- data/src/core/{lib/channel → telemetry}/call_tracer.h +32 -9
- data/src/core/{lib/debug → telemetry}/histogram_view.cc +1 -1
- data/src/core/{lib/debug → telemetry}/histogram_view.h +3 -3
- data/src/core/telemetry/metrics.cc +178 -0
- data/src/core/telemetry/metrics.h +562 -0
- data/src/core/{lib/debug → telemetry}/stats.cc +1 -1
- data/src/core/{lib/debug → telemetry}/stats.h +5 -5
- data/src/core/{lib/debug → telemetry}/stats_data.cc +1 -1
- data/src/core/{lib/debug → telemetry}/stats_data.h +4 -4
- data/src/core/{lib/channel → telemetry}/tcp_tracer.h +3 -3
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +12 -13
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +25 -27
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -33
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +5 -4
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +5 -3
- 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 +4 -3
- data/src/core/tsi/fake_transport_security.cc +14 -17
- data/src/core/tsi/local_transport_security.cc +6 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +4 -4
- data/src/core/tsi/ssl_transport_security.cc +76 -81
- data/src/core/tsi/ssl_transport_security_utils.cc +74 -18
- data/src/core/tsi/ssl_transport_security_utils.h +11 -0
- data/src/core/tsi/transport_security.cc +0 -4
- data/src/core/tsi/transport_security.h +0 -2
- data/src/core/tsi/transport_security_interface.h +0 -4
- data/src/core/{lib/gpr → util}/alloc.h +3 -3
- data/src/core/{lib/gpr → util}/android/log.cc +0 -19
- data/src/core/{lib/gpr → util}/atm.cc +1 -1
- data/src/core/{ext/gcp/metadata_query.cc → util/gcp_metadata_query.cc} +25 -26
- data/src/core/{ext/gcp/metadata_query.h → util/gcp_metadata_query.h} +11 -11
- data/src/core/{lib/http → util/http_client}/format_request.cc +4 -3
- data/src/core/{lib/http → util/http_client}/format_request.h +6 -5
- data/src/core/{lib/http → util/http_client}/httpcli.cc +9 -10
- data/src/core/{lib/http → util/http_client}/httpcli.h +6 -5
- data/src/core/{lib/http → util/http_client}/httpcli_security_connector.cc +9 -9
- data/src/core/{lib/http → util/http_client}/httpcli_ssl_credentials.h +5 -4
- data/src/core/{lib/http → util/http_client}/parser.cc +4 -5
- data/src/core/{lib/http → util/http_client}/parser.h +5 -6
- data/src/core/{lib → util}/json/json.h +5 -4
- data/src/core/{lib → util}/json/json_args.h +5 -5
- data/src/core/{lib → util}/json/json_channel_args.h +6 -6
- data/src/core/{lib → util}/json/json_object_loader.cc +3 -2
- data/src/core/{lib → util}/json/json_object_loader.h +7 -7
- data/src/core/{lib → util}/json/json_reader.cc +3 -2
- data/src/core/{lib → util}/json/json_reader.h +6 -6
- data/src/core/{lib → util}/json/json_util.cc +4 -4
- data/src/core/{lib → util}/json/json_util.h +6 -6
- data/src/core/{lib → util}/json/json_writer.cc +3 -3
- data/src/core/{lib → util}/json/json_writer.h +6 -6
- data/src/core/{lib/gpr → util}/linux/log.cc +0 -45
- data/src/core/util/log.cc +165 -0
- data/src/core/{lib/gpr → util}/msys/tmpfile.cc +2 -2
- data/src/core/{lib/gpr → util}/posix/cpu.cc +1 -1
- data/src/core/{lib/gpr → util}/posix/log.cc +0 -42
- data/src/core/{lib/gpr → util}/posix/time.cc +1 -1
- data/src/core/{lib/gpr → util}/posix/tmpfile.cc +2 -2
- data/src/core/{lib/gpr → util}/spinlock.h +3 -3
- data/src/core/{lib/gpr → util}/string.cc +2 -2
- data/src/core/{lib/gpr → util}/string.h +3 -3
- data/src/core/{lib/gpr → util}/time_precise.cc +1 -1
- data/src/core/{lib/gpr → util}/time_precise.h +3 -3
- data/src/core/{lib/gpr → util}/tmpfile.h +3 -3
- data/src/core/{lib/gpr → util}/useful.h +3 -3
- data/src/core/{lib/gpr → util}/windows/log.cc +1 -44
- data/src/core/{lib/gpr → util}/windows/string.cc +1 -1
- data/src/core/{lib/gpr → util}/windows/string_util.cc +1 -1
- data/src/core/{lib/gpr → util}/windows/time.cc +1 -1
- data/src/core/{lib/gpr → util}/windows/tmpfile.cc +1 -1
- data/src/core/xds/grpc/certificate_provider_store.cc +3 -3
- data/src/core/xds/grpc/certificate_provider_store.h +4 -4
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +3 -3
- data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +5 -5
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +3 -3
- data/src/core/xds/grpc/xds_certificate_provider.h +1 -1
- data/src/core/xds/grpc/xds_client_grpc.cc +27 -23
- data/src/core/xds/grpc/xds_client_grpc.h +2 -2
- data/src/core/xds/grpc/xds_cluster.cc +4 -5
- data/src/core/xds/grpc/xds_cluster.h +1 -1
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
- data/src/core/xds/grpc/xds_common_types.cc +1 -1
- data/src/core/xds/grpc/xds_common_types.h +1 -1
- data/src/core/xds/grpc/xds_endpoint.cc +4 -5
- data/src/core/xds/grpc/xds_http_fault_filter.cc +2 -2
- data/src/core/xds/grpc/xds_http_filters.h +2 -2
- data/src/core/xds/grpc/xds_http_rbac_filter.cc +3 -3
- data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +2 -2
- data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
- data/src/core/xds/grpc/xds_listener.cc +4 -6
- data/src/core/xds/grpc/xds_route_config.cc +7 -8
- data/src/core/xds/grpc/xds_transport_grpc.cc +2 -2
- data/src/core/xds/grpc/xds_transport_grpc.h +1 -1
- data/src/core/xds/xds_client/xds_api.cc +5 -9
- data/src/core/xds/xds_client/xds_bootstrap.cc +1 -1
- data/src/core/xds/xds_client/xds_bootstrap.h +1 -1
- data/src/core/xds/xds_client/xds_client.cc +39 -45
- data/src/core/xds/xds_client/xds_client.h +0 -3
- data/src/core/xds/xds_client/xds_client_stats.cc +6 -6
- data/src/core/xds/xds_client/xds_client_stats.h +2 -2
- data/src/ruby/bin/math_pb.rb +1 -22
- data/src/ruby/ext/grpc/rb_call.c +8 -1
- data/src/ruby/ext/grpc/rb_completion_queue.c +15 -32
- data/src/ruby/ext/grpc/rb_completion_queue.h +7 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
- data/src/ruby/ext/grpc/rb_server.c +39 -22
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +1 -22
- data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +5 -5
- data/src/ruby/pb/grpc/testing/metrics_pb.rb +10 -19
- data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +5 -5
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +1 -22
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +1 -22
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -22
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +12 -12
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +66 -41
- data/third_party/boringssl-with-bazel/src/crypto/dilithium/dilithium.c +1497 -0
- data/third_party/boringssl-with-bazel/src/crypto/dilithium/internal.h +58 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -3
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +45 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +33 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +3 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +6 -0
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/v3_utl.c +49 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -10
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +7 -17
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +8 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +3 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/experimental/dilithium.h +125 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +0 -23
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -10
- metadata +103 -93
- data/src/core/ext/transport/chttp2/transport/http_trace.cc +0 -19
- data/src/core/ext/transport/chttp2/transport/http_trace.h +0 -24
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -23
- data/src/core/handshaker/security/tsi_error.cc +0 -31
- data/src/core/handshaker/security/tsi_error.h +0 -30
- data/src/core/lib/channel/channel_stack_trace.cc +0 -19
- data/src/core/lib/channel/channel_stack_trace.h +0 -24
- data/src/core/lib/channel/context.h +0 -105
- data/src/core/lib/channel/metrics.cc +0 -334
- data/src/core/lib/channel/metrics.h +0 -365
- data/src/core/lib/event_engine/trace.cc +0 -25
- data/src/core/lib/gpr/log.cc +0 -166
- data/src/core/lib/iomgr/ev_windows.cc +0 -30
- data/src/core/lib/promise/trace.cc +0 -20
- data/src/core/lib/promise/trace.h +0 -24
- data/src/core/lib/resource_quota/trace.cc +0 -19
- data/src/core/lib/resource_quota/trace.h +0 -24
- data/src/core/lib/slice/slice_refcount.cc +0 -20
- data/src/core/lib/surface/api_trace.cc +0 -25
- data/src/core/lib/surface/call_trace.h +0 -24
- data/src/core/lib/surface/wait_for_cq_end_op.cc +0 -75
- data/src/core/lib/surface/wait_for_cq_end_op.h +0 -72
- data/src/core/lib/transport/batch_builder.cc +0 -172
- data/src/core/lib/transport/batch_builder.h +0 -474
- data/src/core/resolver/xds/xds_resolver_trace.cc +0 -25
- data/src/core/resolver/xds/xds_resolver_trace.h +0 -30
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -122
- /data/src/core/{lib/gpr → util}/alloc.cc +0 -0
- /data/src/core/{lib/gpr → util}/iphone/cpu.cc +0 -0
- /data/src/core/{lib/gpr → util}/linux/cpu.cc +0 -0
- /data/src/core/{lib/gpr → util}/posix/string.cc +0 -0
- /data/src/core/{lib/gpr → util}/posix/sync.cc +0 -0
- /data/src/core/{lib/gpr → util}/sync.cc +0 -0
- /data/src/core/{lib/gpr → util}/sync_abseil.cc +0 -0
- /data/src/core/{lib/gpr → util}/time.cc +0 -0
- /data/src/core/{lib/gpr → util}/windows/cpu.cc +0 -0
- /data/src/core/{lib/gpr → util}/windows/sync.cc +0 -0
@@ -30,6 +30,7 @@
|
|
30
30
|
|
31
31
|
#include "absl/base/thread_annotations.h"
|
32
32
|
#include "absl/log/check.h"
|
33
|
+
#include "absl/log/log.h"
|
33
34
|
#include "absl/status/status.h"
|
34
35
|
#include "absl/status/statusor.h"
|
35
36
|
#include "absl/strings/str_cat.h"
|
@@ -42,9 +43,9 @@
|
|
42
43
|
#include <grpc/grpc.h>
|
43
44
|
#include <grpc/grpc_posix.h>
|
44
45
|
#include <grpc/impl/channel_arg_names.h>
|
46
|
+
#include <grpc/passive_listener.h>
|
45
47
|
#include <grpc/slice_buffer.h>
|
46
48
|
#include <grpc/support/alloc.h>
|
47
|
-
#include <grpc/support/log.h>
|
48
49
|
#include <grpc/support/port_platform.h>
|
49
50
|
|
50
51
|
#include "src/core/channelz/channelz.h"
|
@@ -58,6 +59,8 @@
|
|
58
59
|
#include "src/core/lib/config/core_configuration.h"
|
59
60
|
#include "src/core/lib/debug/trace.h"
|
60
61
|
#include "src/core/lib/event_engine/channel_args_endpoint_config.h"
|
62
|
+
#include "src/core/lib/event_engine/extensions/supports_fd.h"
|
63
|
+
#include "src/core/lib/event_engine/query_extensions.h"
|
61
64
|
#include "src/core/lib/gprpp/debug_location.h"
|
62
65
|
#include "src/core/lib/gprpp/orphanable.h"
|
63
66
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
@@ -67,6 +70,7 @@
|
|
67
70
|
#include "src/core/lib/gprpp/unique_type_name.h"
|
68
71
|
#include "src/core/lib/iomgr/closure.h"
|
69
72
|
#include "src/core/lib/iomgr/endpoint.h"
|
73
|
+
#include "src/core/lib/iomgr/event_engine_shims/endpoint.h"
|
70
74
|
#include "src/core/lib/iomgr/iomgr_fwd.h"
|
71
75
|
#include "src/core/lib/iomgr/pollset_set.h"
|
72
76
|
#include "src/core/lib/iomgr/resolve_address.h"
|
@@ -93,9 +97,11 @@
|
|
93
97
|
#endif // GPR_SUPPORT_CHANNELS_FROM_FD
|
94
98
|
|
95
99
|
namespace grpc_core {
|
96
|
-
namespace {
|
97
100
|
|
98
|
-
using
|
101
|
+
using grpc_event_engine::experimental::ChannelArgsEndpointConfig;
|
102
|
+
using grpc_event_engine::experimental::EventEngine;
|
103
|
+
using grpc_event_engine::experimental::EventEngineSupportsFdExtension;
|
104
|
+
using grpc_event_engine::experimental::QueryExtension;
|
99
105
|
|
100
106
|
const char kUnixUriPrefix[] = "unix:";
|
101
107
|
const char kUnixAbstractUriPrefix[] = "unix-abstract:";
|
@@ -112,14 +118,23 @@ class Chttp2ServerListener : public Server::ListenerInterface {
|
|
112
118
|
Server* server, const char* name, const ChannelArgs& args,
|
113
119
|
Chttp2ServerArgsModifier args_modifier);
|
114
120
|
|
121
|
+
static Chttp2ServerListener* CreateForPassiveListener(
|
122
|
+
Server* server, const ChannelArgs& args,
|
123
|
+
std::shared_ptr<experimental::PassiveListenerImpl> passive_listener);
|
124
|
+
|
115
125
|
// Do not instantiate directly. Use one of the factory methods above.
|
116
126
|
Chttp2ServerListener(Server* server, const ChannelArgs& args,
|
117
|
-
Chttp2ServerArgsModifier args_modifier
|
127
|
+
Chttp2ServerArgsModifier args_modifier,
|
128
|
+
grpc_server_config_fetcher* config_fetcher,
|
129
|
+
std::shared_ptr<experimental::PassiveListenerImpl>
|
130
|
+
passive_listener = nullptr);
|
118
131
|
~Chttp2ServerListener() override;
|
119
132
|
|
120
133
|
void Start(Server* server,
|
121
134
|
const std::vector<grpc_pollset*>* pollsets) override;
|
122
135
|
|
136
|
+
void AcceptConnectedEndpoint(std::unique_ptr<EventEngine::Endpoint> endpoint);
|
137
|
+
|
123
138
|
channelz::ListenSocketNode* channelz_listen_socket_node() const override {
|
124
139
|
return channelz_listen_socket_.get();
|
125
140
|
}
|
@@ -129,6 +144,8 @@ class Chttp2ServerListener : public Server::ListenerInterface {
|
|
129
144
|
void Orphan() override;
|
130
145
|
|
131
146
|
private:
|
147
|
+
friend class experimental::PassiveListenerImpl;
|
148
|
+
|
132
149
|
class ConfigFetcherWatcher
|
133
150
|
: public grpc_server_config_fetcher::WatcherInterface {
|
134
151
|
public:
|
@@ -235,34 +252,8 @@ class Chttp2ServerListener : public Server::ListenerInterface {
|
|
235
252
|
static void DestroyListener(Server* /*server*/, void* arg,
|
236
253
|
grpc_closure* destroy_done);
|
237
254
|
|
238
|
-
|
239
|
-
|
240
|
-
// needs tcp_server_ to exist for the lifetime of the handshake since it's
|
241
|
-
// needed by acceptor. Sharing refs between the listener and tcp_server_ is
|
242
|
-
// just an optimization to avoid taking additional refs on the listener,
|
243
|
-
// since TcpServerShutdownComplete already holds a ref to the listener.
|
244
|
-
void IncrementRefCount() { grpc_tcp_server_ref(tcp_server_); }
|
245
|
-
void IncrementRefCount(const DebugLocation& /* location */,
|
246
|
-
const char* /* reason */) {
|
247
|
-
IncrementRefCount();
|
248
|
-
}
|
249
|
-
|
250
|
-
GRPC_MUST_USE_RESULT RefCountedPtr<Chttp2ServerListener> Ref() {
|
251
|
-
IncrementRefCount();
|
252
|
-
return RefCountedPtr<Chttp2ServerListener>(this);
|
253
|
-
}
|
254
|
-
GRPC_MUST_USE_RESULT RefCountedPtr<Chttp2ServerListener> Ref(
|
255
|
-
const DebugLocation& /* location */, const char* /* reason */) {
|
256
|
-
return Ref();
|
257
|
-
}
|
258
|
-
|
259
|
-
void Unref() { grpc_tcp_server_unref(tcp_server_); }
|
260
|
-
void Unref(const DebugLocation& /* location */, const char* /* reason */) {
|
261
|
-
Unref();
|
262
|
-
}
|
263
|
-
|
264
|
-
Server* const server_;
|
265
|
-
grpc_tcp_server* tcp_server_;
|
255
|
+
Server* const server_ = nullptr;
|
256
|
+
grpc_tcp_server* tcp_server_ = nullptr;
|
266
257
|
grpc_resolved_address resolved_address_;
|
267
258
|
Chttp2ServerArgsModifier const args_modifier_;
|
268
259
|
ConfigFetcherWatcher* config_fetcher_watcher_ = nullptr;
|
@@ -285,6 +276,10 @@ class Chttp2ServerListener : public Server::ListenerInterface {
|
|
285
276
|
RefCountedPtr<channelz::ListenSocketNode> channelz_listen_socket_;
|
286
277
|
MemoryQuotaRefPtr memory_quota_;
|
287
278
|
ConnectionQuotaRefPtr connection_quota_;
|
279
|
+
grpc_server_config_fetcher* config_fetcher_ = nullptr;
|
280
|
+
// TODO(yashykt): consider using absl::variant<> to minimize memory usage for
|
281
|
+
// disjoint cases where different fields are used.
|
282
|
+
std::shared_ptr<experimental::PassiveListenerImpl> passive_listener_;
|
288
283
|
};
|
289
284
|
|
290
285
|
//
|
@@ -331,8 +326,7 @@ void Chttp2ServerListener::ConfigFetcherWatcher::UpdateConnectionManager(
|
|
331
326
|
grpc_error_handle error = grpc_tcp_server_add_port(
|
332
327
|
listener_->tcp_server_, &listener_->resolved_address_, &port_temp);
|
333
328
|
if (!error.ok()) {
|
334
|
-
|
335
|
-
StatusToString(error).c_str());
|
329
|
+
LOG(ERROR) << "Error adding port to server: " << StatusToString(error);
|
336
330
|
// TODO(yashykt): We wouldn't need to assert here if we bound to the
|
337
331
|
// port earlier during AddPort.
|
338
332
|
CHECK(0);
|
@@ -381,13 +375,17 @@ Chttp2ServerListener::ActiveConnection::HandshakingState::HandshakingState(
|
|
381
375
|
handshake_mgr_(MakeRefCounted<HandshakeManager>()),
|
382
376
|
deadline_(GetConnectionDeadline(args)),
|
383
377
|
interested_parties_(grpc_pollset_set_create()) {
|
384
|
-
|
378
|
+
if (accepting_pollset != nullptr) {
|
379
|
+
grpc_pollset_set_add_pollset(interested_parties_, accepting_pollset_);
|
380
|
+
}
|
385
381
|
CoreConfiguration::Get().handshaker_registry().AddHandshakers(
|
386
382
|
HANDSHAKER_SERVER, args, interested_parties_, handshake_mgr_.get());
|
387
383
|
}
|
388
384
|
|
389
385
|
Chttp2ServerListener::ActiveConnection::HandshakingState::~HandshakingState() {
|
390
|
-
|
386
|
+
if (accepting_pollset_ != nullptr) {
|
387
|
+
grpc_pollset_set_del_pollset(interested_parties_, accepting_pollset_);
|
388
|
+
}
|
391
389
|
grpc_pollset_set_destroy(interested_parties_);
|
392
390
|
gpr_free(acceptor_);
|
393
391
|
}
|
@@ -462,11 +460,6 @@ void Chttp2ServerListener::ActiveConnection::HandshakingState::OnHandshakeDone(
|
|
462
460
|
if (error.ok() && args->endpoint != nullptr) {
|
463
461
|
// We were shut down or stopped serving after handshaking completed
|
464
462
|
// successfully, so destroy the endpoint here.
|
465
|
-
// TODO(ctiller): It is currently necessary to shutdown endpoints
|
466
|
-
// before destroying them, even if we know that there are no
|
467
|
-
// pending read/write callbacks. This should be fixed, at which
|
468
|
-
// point this can be removed.
|
469
|
-
grpc_endpoint_shutdown(args->endpoint, absl::OkStatus());
|
470
463
|
grpc_endpoint_destroy(args->endpoint);
|
471
464
|
grpc_slice_buffer_destroy(args->read_buffer);
|
472
465
|
gpr_free(args->read_buffer);
|
@@ -476,23 +469,18 @@ void Chttp2ServerListener::ActiveConnection::HandshakingState::OnHandshakeDone(
|
|
476
469
|
// handshaker may have handed off the connection to some external
|
477
470
|
// code, so we can just clean up here without creating a transport.
|
478
471
|
if (args->endpoint != nullptr) {
|
479
|
-
Transport
|
480
|
-
grpc_create_chttp2_transport(args->args, args->endpoint, false)
|
472
|
+
RefCountedPtr<Transport> transport =
|
473
|
+
grpc_create_chttp2_transport(args->args, args->endpoint, false)
|
474
|
+
->Ref();
|
481
475
|
grpc_error_handle channel_init_err =
|
482
476
|
self->connection_->listener_->server_->SetupTransport(
|
483
|
-
transport, self->accepting_pollset_, args->args,
|
484
|
-
grpc_chttp2_transport_get_socket_node(transport));
|
477
|
+
transport.get(), self->accepting_pollset_, args->args,
|
478
|
+
grpc_chttp2_transport_get_socket_node(transport.get()));
|
485
479
|
if (channel_init_err.ok()) {
|
486
480
|
// Use notify_on_receive_settings callback to enforce the
|
487
481
|
// handshake deadline.
|
488
|
-
// Note: The reinterpret_cast<>s here are safe, because
|
489
|
-
// grpc_chttp2_transport is a C-style extension of
|
490
|
-
// Transport, so this is morally equivalent of a
|
491
|
-
// static_cast<> to a derived class.
|
492
|
-
// TODO(roth): Change to static_cast<> when we C++-ify the
|
493
|
-
// transport API.
|
494
482
|
self->connection_->transport_ =
|
495
|
-
|
483
|
+
DownCast<grpc_chttp2_transport*>(transport.get())->Ref();
|
496
484
|
self->Ref().release(); // Held by OnReceiveSettings().
|
497
485
|
GRPC_CLOSURE_INIT(&self->on_receive_settings_, OnReceiveSettings,
|
498
486
|
self, grpc_schedule_on_exec_ctx);
|
@@ -522,9 +510,9 @@ void Chttp2ServerListener::ActiveConnection::HandshakingState::OnHandshakeDone(
|
|
522
510
|
grpc_schedule_on_exec_ctx_);
|
523
511
|
cleanup_connection = true;
|
524
512
|
}
|
525
|
-
grpc_chttp2_transport_start_reading(
|
526
|
-
|
527
|
-
|
513
|
+
grpc_chttp2_transport_start_reading(
|
514
|
+
transport.get(), args->read_buffer, &self->on_receive_settings_,
|
515
|
+
nullptr, on_close);
|
528
516
|
self->timer_handle_ = self->connection_->event_engine_->RunAfter(
|
529
517
|
self->deadline_ - Timestamp::Now(),
|
530
518
|
[self = self->Ref()]() mutable {
|
@@ -536,8 +524,8 @@ void Chttp2ServerListener::ActiveConnection::HandshakingState::OnHandshakeDone(
|
|
536
524
|
});
|
537
525
|
} else {
|
538
526
|
// Failed to create channel from transport. Clean up.
|
539
|
-
|
540
|
-
|
527
|
+
LOG(ERROR) << "Failed to create channel: "
|
528
|
+
<< StatusToString(channel_init_err);
|
541
529
|
transport->Orphan();
|
542
530
|
grpc_slice_buffer_destroy(args->read_buffer);
|
543
531
|
gpr_free(args->read_buffer);
|
@@ -589,7 +577,11 @@ Chttp2ServerListener::ActiveConnection::ActiveConnection(
|
|
589
577
|
grpc_schedule_on_exec_ctx);
|
590
578
|
}
|
591
579
|
|
592
|
-
Chttp2ServerListener::ActiveConnection::~ActiveConnection() {
|
580
|
+
Chttp2ServerListener::ActiveConnection::~ActiveConnection() {
|
581
|
+
if (listener_ != nullptr && listener_->tcp_server_ != nullptr) {
|
582
|
+
grpc_tcp_server_unref(listener_->tcp_server_);
|
583
|
+
}
|
584
|
+
}
|
593
585
|
|
594
586
|
void Chttp2ServerListener::ActiveConnection::Orphan() {
|
595
587
|
OrphanablePtr<HandshakingState> handshaking_state;
|
@@ -637,6 +629,9 @@ void Chttp2ServerListener::ActiveConnection::Start(
|
|
637
629
|
const ChannelArgs& args) {
|
638
630
|
RefCountedPtr<HandshakingState> handshaking_state_ref;
|
639
631
|
listener_ = std::move(listener);
|
632
|
+
if (listener_->tcp_server_ != nullptr) {
|
633
|
+
grpc_tcp_server_ref(listener_->tcp_server_);
|
634
|
+
}
|
640
635
|
{
|
641
636
|
ReleasableMutexLock lock(&mu_);
|
642
637
|
if (shutdown_) {
|
@@ -645,7 +640,6 @@ void Chttp2ServerListener::ActiveConnection::Start(
|
|
645
640
|
// owning Chttp2ServerListener and all associated ActiveConnections have
|
646
641
|
// been orphaned. The generated endpoints need to be shutdown here to
|
647
642
|
// ensure the tcp connections are closed appropriately.
|
648
|
-
grpc_endpoint_shutdown(endpoint, absl::OkStatus());
|
649
643
|
grpc_endpoint_destroy(endpoint);
|
650
644
|
return;
|
651
645
|
}
|
@@ -709,83 +703,82 @@ void Chttp2ServerListener::ActiveConnection::OnDrainGraceTimeExpiry() {
|
|
709
703
|
grpc_error_handle Chttp2ServerListener::Create(
|
710
704
|
Server* server, grpc_resolved_address* addr, const ChannelArgs& args,
|
711
705
|
Chttp2ServerArgsModifier args_modifier, int* port_num) {
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
706
|
+
// Create Chttp2ServerListener.
|
707
|
+
OrphanablePtr<Chttp2ServerListener> listener =
|
708
|
+
MakeOrphanable<Chttp2ServerListener>(server, args, args_modifier,
|
709
|
+
server->config_fetcher());
|
710
|
+
// The tcp_server will be unreffed when the listener is orphaned, which could
|
711
|
+
// be at the end of this function if the listener was not added to the
|
712
|
+
// server's set of listeners.
|
713
|
+
grpc_error_handle error = grpc_tcp_server_create(
|
714
|
+
&listener->tcp_server_shutdown_complete_, ChannelArgsEndpointConfig(args),
|
715
|
+
OnAccept, listener.get(), &listener->tcp_server_);
|
716
|
+
if (!error.ok()) return error;
|
717
|
+
if (listener->config_fetcher_ != nullptr) {
|
718
|
+
listener->resolved_address_ = *addr;
|
719
|
+
// TODO(yashykt): Consider binding so as to be able to return the port
|
720
|
+
// number.
|
721
|
+
} else {
|
722
|
+
error = grpc_tcp_server_add_port(listener->tcp_server_, addr, port_num);
|
723
723
|
if (!error.ok()) return error;
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
}
|
732
|
-
// Create channelz node.
|
733
|
-
if (args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
|
734
|
-
.value_or(GRPC_ENABLE_CHANNELZ_DEFAULT)) {
|
735
|
-
auto string_address = grpc_sockaddr_to_uri(addr);
|
736
|
-
if (!string_address.ok()) {
|
737
|
-
return GRPC_ERROR_CREATE(string_address.status().ToString());
|
738
|
-
}
|
739
|
-
listener->channelz_listen_socket_ =
|
740
|
-
MakeRefCounted<channelz::ListenSocketNode>(
|
741
|
-
*string_address,
|
742
|
-
absl::StrCat("chttp2 listener ", *string_address));
|
743
|
-
}
|
744
|
-
// Register with the server only upon success
|
745
|
-
server->AddListener(OrphanablePtr<Server::ListenerInterface>(listener));
|
746
|
-
return absl::OkStatus();
|
747
|
-
}();
|
748
|
-
if (!error.ok()) {
|
749
|
-
if (listener != nullptr) {
|
750
|
-
if (listener->tcp_server_ != nullptr) {
|
751
|
-
// listener is deleted when tcp_server_ is shutdown.
|
752
|
-
grpc_tcp_server_unref(listener->tcp_server_);
|
753
|
-
} else {
|
754
|
-
delete listener;
|
755
|
-
}
|
724
|
+
}
|
725
|
+
// Create channelz node.
|
726
|
+
if (args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
|
727
|
+
.value_or(GRPC_ENABLE_CHANNELZ_DEFAULT)) {
|
728
|
+
auto string_address = grpc_sockaddr_to_uri(addr);
|
729
|
+
if (!string_address.ok()) {
|
730
|
+
return GRPC_ERROR_CREATE(string_address.status().ToString());
|
756
731
|
}
|
732
|
+
listener->channelz_listen_socket_ =
|
733
|
+
MakeRefCounted<channelz::ListenSocketNode>(
|
734
|
+
*string_address, absl::StrCat("chttp2 listener ", *string_address));
|
757
735
|
}
|
758
|
-
|
736
|
+
// Register with the server only upon success
|
737
|
+
server->AddListener(std::move(listener));
|
738
|
+
return absl::OkStatus();
|
759
739
|
}
|
760
740
|
|
761
741
|
grpc_error_handle Chttp2ServerListener::CreateWithAcceptor(
|
762
742
|
Server* server, const char* name, const ChannelArgs& args,
|
763
743
|
Chttp2ServerArgsModifier args_modifier) {
|
764
|
-
|
765
|
-
|
744
|
+
auto listener = MakeOrphanable<Chttp2ServerListener>(
|
745
|
+
server, args, args_modifier, server->config_fetcher());
|
766
746
|
grpc_error_handle error = grpc_tcp_server_create(
|
767
|
-
&listener->tcp_server_shutdown_complete_,
|
768
|
-
|
769
|
-
|
770
|
-
if (!error.ok()) {
|
771
|
-
delete listener;
|
772
|
-
return error;
|
773
|
-
}
|
747
|
+
&listener->tcp_server_shutdown_complete_, ChannelArgsEndpointConfig(args),
|
748
|
+
OnAccept, listener.get(), &listener->tcp_server_);
|
749
|
+
if (!error.ok()) return error;
|
774
750
|
// TODO(yangg) channelz
|
775
751
|
TcpServerFdHandler** arg_val = args.GetPointer<TcpServerFdHandler*>(name);
|
776
752
|
*arg_val = grpc_tcp_server_create_fd_handler(listener->tcp_server_);
|
777
|
-
server->AddListener(
|
753
|
+
server->AddListener(std::move(listener));
|
778
754
|
return absl::OkStatus();
|
779
755
|
}
|
780
756
|
|
757
|
+
Chttp2ServerListener* Chttp2ServerListener::CreateForPassiveListener(
|
758
|
+
Server* server, const ChannelArgs& args,
|
759
|
+
std::shared_ptr<experimental::PassiveListenerImpl> passive_listener) {
|
760
|
+
// TODO(hork): figure out how to handle channelz in this case
|
761
|
+
auto listener = MakeOrphanable<Chttp2ServerListener>(
|
762
|
+
server, args, /*args_modifier=*/
|
763
|
+
[](const ChannelArgs& args, grpc_error_handle*) { return args; }, nullptr,
|
764
|
+
std::move(passive_listener));
|
765
|
+
auto listener_ptr = listener.get();
|
766
|
+
server->AddListener(std::move(listener));
|
767
|
+
return listener_ptr;
|
768
|
+
}
|
769
|
+
|
781
770
|
Chttp2ServerListener::Chttp2ServerListener(
|
782
771
|
Server* server, const ChannelArgs& args,
|
783
|
-
Chttp2ServerArgsModifier args_modifier
|
772
|
+
Chttp2ServerArgsModifier args_modifier,
|
773
|
+
grpc_server_config_fetcher* config_fetcher,
|
774
|
+
std::shared_ptr<experimental::PassiveListenerImpl> passive_listener)
|
784
775
|
: server_(server),
|
785
776
|
args_modifier_(args_modifier),
|
786
777
|
args_(args),
|
787
778
|
memory_quota_(args.GetObject<ResourceQuota>()->memory_quota()),
|
788
|
-
connection_quota_(MakeRefCounted<ConnectionQuota>())
|
779
|
+
connection_quota_(MakeRefCounted<ConnectionQuota>()),
|
780
|
+
config_fetcher_(config_fetcher),
|
781
|
+
passive_listener_(std::move(passive_listener)) {
|
789
782
|
auto max_allowed_incoming_connections =
|
790
783
|
args.GetInt(GRPC_ARG_MAX_ALLOWED_INCOMING_CONNECTIONS);
|
791
784
|
if (max_allowed_incoming_connections.has_value()) {
|
@@ -800,6 +793,9 @@ Chttp2ServerListener::~Chttp2ServerListener() {
|
|
800
793
|
// Flush queued work before destroying handshaker factory, since that
|
801
794
|
// may do a synchronous unref.
|
802
795
|
ExecCtx::Get()->Flush();
|
796
|
+
if (passive_listener_ != nullptr) {
|
797
|
+
passive_listener_->ListenerDestroyed();
|
798
|
+
}
|
803
799
|
if (on_destroy_done_ != nullptr) {
|
804
800
|
ExecCtx::Run(DEBUG_LOCATION, on_destroy_done_, absl::OkStatus());
|
805
801
|
ExecCtx::Get()->Flush();
|
@@ -809,10 +805,11 @@ Chttp2ServerListener::~Chttp2ServerListener() {
|
|
809
805
|
// Server callback: start listening on our ports
|
810
806
|
void Chttp2ServerListener::Start(
|
811
807
|
Server* /*server*/, const std::vector<grpc_pollset*>* /* pollsets */) {
|
812
|
-
if (
|
813
|
-
auto watcher = std::make_unique<ConfigFetcherWatcher>(
|
808
|
+
if (config_fetcher_ != nullptr) {
|
809
|
+
auto watcher = std::make_unique<ConfigFetcherWatcher>(
|
810
|
+
RefAsSubclass<Chttp2ServerListener>());
|
814
811
|
config_fetcher_watcher_ = watcher.get();
|
815
|
-
|
812
|
+
config_fetcher_->StartWatch(
|
816
813
|
grpc_sockaddr_to_string(&resolved_address_, false).value(),
|
817
814
|
std::move(watcher));
|
818
815
|
} else {
|
@@ -826,7 +823,9 @@ void Chttp2ServerListener::Start(
|
|
826
823
|
}
|
827
824
|
|
828
825
|
void Chttp2ServerListener::StartListening() {
|
829
|
-
|
826
|
+
if (tcp_server_ != nullptr) {
|
827
|
+
grpc_tcp_server_start(tcp_server_, &server_->pollsets());
|
828
|
+
}
|
830
829
|
}
|
831
830
|
|
832
831
|
void Chttp2ServerListener::SetOnDestroyDone(grpc_closure* on_destroy_done) {
|
@@ -834,6 +833,12 @@ void Chttp2ServerListener::SetOnDestroyDone(grpc_closure* on_destroy_done) {
|
|
834
833
|
on_destroy_done_ = on_destroy_done;
|
835
834
|
}
|
836
835
|
|
836
|
+
void Chttp2ServerListener::AcceptConnectedEndpoint(
|
837
|
+
std::unique_ptr<EventEngine::Endpoint> endpoint) {
|
838
|
+
OnAccept(this, grpc_event_engine_endpoint_create(std::move(endpoint)),
|
839
|
+
/*accepting_pollset=*/nullptr, /*acceptor=*/nullptr);
|
840
|
+
}
|
841
|
+
|
837
842
|
void Chttp2ServerListener::OnAccept(void* arg, grpc_endpoint* tcp,
|
838
843
|
grpc_pollset* accepting_pollset,
|
839
844
|
grpc_tcp_server_acceptor* acceptor) {
|
@@ -845,36 +850,30 @@ void Chttp2ServerListener::OnAccept(void* arg, grpc_endpoint* tcp,
|
|
845
850
|
MutexLock lock(&self->mu_);
|
846
851
|
connection_manager = self->connection_manager_;
|
847
852
|
}
|
848
|
-
auto endpoint_cleanup = [&](
|
849
|
-
grpc_endpoint_shutdown(tcp, error);
|
853
|
+
auto endpoint_cleanup = [&]() {
|
850
854
|
grpc_endpoint_destroy(tcp);
|
851
855
|
gpr_free(acceptor);
|
852
856
|
};
|
853
857
|
if (!self->connection_quota_->AllowIncomingConnection(
|
854
858
|
self->memory_quota_, grpc_endpoint_get_peer(tcp))) {
|
855
|
-
|
856
|
-
"Rejected incoming connection because configured connection quota "
|
857
|
-
"limits have been exceeded.");
|
858
|
-
endpoint_cleanup(error);
|
859
|
+
endpoint_cleanup();
|
859
860
|
return;
|
860
861
|
}
|
861
|
-
if (self->
|
862
|
+
if (self->config_fetcher_ != nullptr) {
|
862
863
|
if (connection_manager == nullptr) {
|
863
|
-
|
864
|
-
"No ConnectionManager configured. Closing connection.");
|
865
|
-
endpoint_cleanup(error);
|
864
|
+
endpoint_cleanup();
|
866
865
|
return;
|
867
866
|
}
|
868
867
|
absl::StatusOr<ChannelArgs> args_result =
|
869
868
|
connection_manager->UpdateChannelArgsForConnection(args, tcp);
|
870
869
|
if (!args_result.ok()) {
|
871
|
-
endpoint_cleanup(
|
870
|
+
endpoint_cleanup();
|
872
871
|
return;
|
873
872
|
}
|
874
873
|
grpc_error_handle error;
|
875
874
|
args = self->args_modifier_(*args_result, &error);
|
876
875
|
if (!error.ok()) {
|
877
|
-
endpoint_cleanup(
|
876
|
+
endpoint_cleanup();
|
878
877
|
return;
|
879
878
|
}
|
880
879
|
}
|
@@ -899,12 +898,12 @@ void Chttp2ServerListener::OnAccept(void* arg, grpc_endpoint* tcp,
|
|
899
898
|
// heap-use-after-free issues where `Ref()` is invoked when the ref of
|
900
899
|
// tcp_server_ has already reached 0. (Ref() implementation of
|
901
900
|
// Chttp2ServerListener is grpc_tcp_server_ref().)
|
902
|
-
listener_ref = self->
|
901
|
+
listener_ref = self->RefAsSubclass<Chttp2ServerListener>();
|
903
902
|
self->connections_.emplace(connection.get(), std::move(connection));
|
904
903
|
}
|
905
904
|
}
|
906
905
|
if (connection != nullptr) {
|
907
|
-
endpoint_cleanup(
|
906
|
+
endpoint_cleanup();
|
908
907
|
} else {
|
909
908
|
connection_ref->Start(std::move(listener_ref), tcp, args);
|
910
909
|
}
|
@@ -914,7 +913,7 @@ void Chttp2ServerListener::TcpServerShutdownComplete(
|
|
914
913
|
void* arg, grpc_error_handle /*error*/) {
|
915
914
|
Chttp2ServerListener* self = static_cast<Chttp2ServerListener*>(arg);
|
916
915
|
self->channelz_listen_socket_.reset();
|
917
|
-
|
916
|
+
self->Unref();
|
918
917
|
}
|
919
918
|
|
920
919
|
// Server callback: destroy the tcp listener (so we don't generate further
|
@@ -923,7 +922,8 @@ void Chttp2ServerListener::Orphan() {
|
|
923
922
|
// Cancel the watch before shutting down so as to avoid holding a ref to the
|
924
923
|
// listener in the watcher.
|
925
924
|
if (config_fetcher_watcher_ != nullptr) {
|
926
|
-
|
925
|
+
CHECK_NE(config_fetcher_, nullptr);
|
926
|
+
config_fetcher_->CancelWatch(config_fetcher_watcher_);
|
927
927
|
}
|
928
928
|
std::map<ActiveConnection*, OrphanablePtr<ActiveConnection>> connections;
|
929
929
|
grpc_tcp_server* tcp_server;
|
@@ -941,12 +941,14 @@ void Chttp2ServerListener::Orphan() {
|
|
941
941
|
}
|
942
942
|
tcp_server = tcp_server_;
|
943
943
|
}
|
944
|
-
|
945
|
-
|
944
|
+
if (tcp_server != nullptr) {
|
945
|
+
grpc_tcp_server_shutdown_listeners(tcp_server);
|
946
|
+
grpc_tcp_server_unref(tcp_server);
|
947
|
+
} else {
|
948
|
+
Unref();
|
949
|
+
}
|
946
950
|
}
|
947
951
|
|
948
|
-
} // namespace
|
949
|
-
|
950
952
|
//
|
951
953
|
// Chttp2ServerAddPort()
|
952
954
|
//
|
@@ -1018,7 +1020,7 @@ grpc_error_handle Chttp2ServerAddPort(Server* server, const char* addr,
|
|
1018
1020
|
resolved_or->size() - error_list.size(), resolved_or->size());
|
1019
1021
|
error = GRPC_ERROR_CREATE_REFERENCING(msg.c_str(), error_list.data(),
|
1020
1022
|
error_list.size());
|
1021
|
-
|
1023
|
+
LOG(INFO) << "WARNING: " << StatusToString(error);
|
1022
1024
|
// we managed to bind some addresses: continue without error
|
1023
1025
|
}
|
1024
1026
|
return absl::OkStatus();
|
@@ -1047,6 +1049,50 @@ ChannelArgs ModifyArgsForConnection(const ChannelArgs& args,
|
|
1047
1049
|
}
|
1048
1050
|
|
1049
1051
|
} // namespace
|
1052
|
+
|
1053
|
+
namespace experimental {
|
1054
|
+
|
1055
|
+
absl::Status PassiveListenerImpl::AcceptConnectedEndpoint(
|
1056
|
+
std::unique_ptr<EventEngine::Endpoint> endpoint) {
|
1057
|
+
CHECK_NE(server_.get(), nullptr);
|
1058
|
+
RefCountedPtr<Chttp2ServerListener> listener;
|
1059
|
+
{
|
1060
|
+
MutexLock lock(&mu_);
|
1061
|
+
if (listener_ != nullptr) {
|
1062
|
+
listener =
|
1063
|
+
listener_->RefIfNonZero().TakeAsSubclass<Chttp2ServerListener>();
|
1064
|
+
}
|
1065
|
+
}
|
1066
|
+
if (listener == nullptr) {
|
1067
|
+
return absl::UnavailableError("passive listener already shut down");
|
1068
|
+
}
|
1069
|
+
ExecCtx exec_ctx;
|
1070
|
+
listener->AcceptConnectedEndpoint(std::move(endpoint));
|
1071
|
+
return absl::OkStatus();
|
1072
|
+
}
|
1073
|
+
|
1074
|
+
absl::Status PassiveListenerImpl::AcceptConnectedFd(int fd) {
|
1075
|
+
CHECK_NE(server_.get(), nullptr);
|
1076
|
+
ExecCtx exec_ctx;
|
1077
|
+
auto& args = server_->channel_args();
|
1078
|
+
auto* supports_fd = QueryExtension<EventEngineSupportsFdExtension>(
|
1079
|
+
/*engine=*/args.GetObjectRef<EventEngine>().get());
|
1080
|
+
if (supports_fd == nullptr) {
|
1081
|
+
return absl::UnimplementedError(
|
1082
|
+
"The server's EventEngine does not support adding endpoints from "
|
1083
|
+
"connected file descriptors.");
|
1084
|
+
}
|
1085
|
+
auto endpoint =
|
1086
|
+
supports_fd->CreateEndpointFromFd(fd, ChannelArgsEndpointConfig(args));
|
1087
|
+
return AcceptConnectedEndpoint(std::move(endpoint));
|
1088
|
+
}
|
1089
|
+
|
1090
|
+
void PassiveListenerImpl::ListenerDestroyed() {
|
1091
|
+
MutexLock lock(&mu_);
|
1092
|
+
listener_ = nullptr;
|
1093
|
+
}
|
1094
|
+
|
1095
|
+
} // namespace experimental
|
1050
1096
|
} // namespace grpc_core
|
1051
1097
|
|
1052
1098
|
int grpc_server_add_http2_port(grpc_server* server, const char* addr,
|
@@ -1094,7 +1140,7 @@ int grpc_server_add_http2_port(grpc_server* server, const char* addr,
|
|
1094
1140
|
done:
|
1095
1141
|
sc.reset(DEBUG_LOCATION, "server");
|
1096
1142
|
if (!err.ok()) {
|
1097
|
-
|
1143
|
+
LOG(ERROR) << grpc_core::StatusToString(err);
|
1098
1144
|
}
|
1099
1145
|
return port_num;
|
1100
1146
|
}
|
@@ -1105,7 +1151,7 @@ void grpc_server_add_channel_from_fd(grpc_server* server, int fd,
|
|
1105
1151
|
// For now, we only support insecure server credentials
|
1106
1152
|
if (creds == nullptr ||
|
1107
1153
|
creds->type() != grpc_core::InsecureServerCredentials::Type()) {
|
1108
|
-
|
1154
|
+
LOG(ERROR) << "Failed to create channel due to invalid creds";
|
1109
1155
|
return;
|
1110
1156
|
}
|
1111
1157
|
grpc_core::ExecCtx exec_ctx;
|
@@ -1119,19 +1165,20 @@ void grpc_server_add_channel_from_fd(grpc_server* server, int fd,
|
|
1119
1165
|
grpc_fd_create(fd, name.c_str(), true),
|
1120
1166
|
grpc_event_engine::experimental::ChannelArgsEndpointConfig(server_args),
|
1121
1167
|
name);
|
1168
|
+
for (grpc_pollset* pollset : core_server->pollsets()) {
|
1169
|
+
grpc_endpoint_add_to_pollset(server_endpoint, pollset);
|
1170
|
+
}
|
1122
1171
|
grpc_core::Transport* transport = grpc_create_chttp2_transport(
|
1123
1172
|
server_args, server_endpoint, false // is_client
|
1124
1173
|
);
|
1125
1174
|
grpc_error_handle error =
|
1126
1175
|
core_server->SetupTransport(transport, nullptr, server_args, nullptr);
|
1127
1176
|
if (error.ok()) {
|
1128
|
-
|
1129
|
-
|
1130
|
-
}
|
1131
|
-
grpc_chttp2_transport_start_reading(transport, nullptr, nullptr, nullptr);
|
1177
|
+
grpc_chttp2_transport_start_reading(transport, nullptr, nullptr, nullptr,
|
1178
|
+
nullptr);
|
1132
1179
|
} else {
|
1133
|
-
|
1134
|
-
|
1180
|
+
LOG(ERROR) << "Failed to create channel: "
|
1181
|
+
<< grpc_core::StatusToString(error);
|
1135
1182
|
transport->Orphan();
|
1136
1183
|
}
|
1137
1184
|
}
|
@@ -1144,3 +1191,31 @@ void grpc_server_add_channel_from_fd(grpc_server* /* server */, int /* fd */,
|
|
1144
1191
|
}
|
1145
1192
|
|
1146
1193
|
#endif // GPR_SUPPORT_CHANNELS_FROM_FD
|
1194
|
+
|
1195
|
+
absl::Status grpc_server_add_passive_listener(
|
1196
|
+
grpc_core::Server* server, grpc_server_credentials* credentials,
|
1197
|
+
std::shared_ptr<grpc_core::experimental::PassiveListenerImpl>
|
1198
|
+
passive_listener) {
|
1199
|
+
grpc_core::ExecCtx exec_ctx;
|
1200
|
+
GRPC_API_TRACE("grpc_server_add_passive_listener(server=%p, credentials=%p)",
|
1201
|
+
2, (server, credentials));
|
1202
|
+
// Create security context.
|
1203
|
+
if (credentials == nullptr) {
|
1204
|
+
return absl::UnavailableError(
|
1205
|
+
"No credentials specified for passive listener");
|
1206
|
+
}
|
1207
|
+
auto sc = credentials->create_security_connector(grpc_core::ChannelArgs());
|
1208
|
+
if (sc == nullptr) {
|
1209
|
+
return absl::UnavailableError(
|
1210
|
+
absl::StrCat("Unable to create secure server with credentials of type ",
|
1211
|
+
credentials->type().name()));
|
1212
|
+
}
|
1213
|
+
auto args = server->channel_args()
|
1214
|
+
.SetObject(credentials->Ref())
|
1215
|
+
.SetObject(std::move(sc));
|
1216
|
+
passive_listener->listener_ =
|
1217
|
+
grpc_core::Chttp2ServerListener::CreateForPassiveListener(
|
1218
|
+
server, args, passive_listener);
|
1219
|
+
passive_listener->server_ = server->Ref();
|
1220
|
+
return absl::OkStatus();
|
1221
|
+
}
|