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
data/src/core/server/server.cc
CHANGED
@@ -33,6 +33,7 @@
|
|
33
33
|
#include "absl/cleanup/cleanup.h"
|
34
34
|
#include "absl/container/flat_hash_map.h"
|
35
35
|
#include "absl/log/check.h"
|
36
|
+
#include "absl/log/log.h"
|
36
37
|
#include "absl/status/status.h"
|
37
38
|
#include "absl/types/optional.h"
|
38
39
|
|
@@ -51,12 +52,11 @@
|
|
51
52
|
#include "src/core/lib/channel/channel_args.h"
|
52
53
|
#include "src/core/lib/channel/channel_args_preconditioning.h"
|
53
54
|
#include "src/core/lib/config/core_configuration.h"
|
54
|
-
#include "src/core/lib/debug/stats.h"
|
55
55
|
#include "src/core/lib/experiments/experiments.h"
|
56
|
-
#include "src/core/lib/gpr/useful.h"
|
57
56
|
#include "src/core/lib/gprpp/crash.h"
|
58
57
|
#include "src/core/lib/gprpp/debug_location.h"
|
59
58
|
#include "src/core/lib/gprpp/mpscq.h"
|
59
|
+
#include "src/core/lib/gprpp/orphanable.h"
|
60
60
|
#include "src/core/lib/gprpp/status_helper.h"
|
61
61
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
62
62
|
#include "src/core/lib/iomgr/pollset_set.h"
|
@@ -74,18 +74,20 @@
|
|
74
74
|
#include "src/core/lib/slice/slice_internal.h"
|
75
75
|
#include "src/core/lib/surface/api_trace.h"
|
76
76
|
#include "src/core/lib/surface/call.h"
|
77
|
+
#include "src/core/lib/surface/call_utils.h"
|
77
78
|
#include "src/core/lib/surface/channel.h"
|
78
79
|
#include "src/core/lib/surface/channel_stack_type.h"
|
79
80
|
#include "src/core/lib/surface/completion_queue.h"
|
80
81
|
#include "src/core/lib/surface/legacy_channel.h"
|
81
|
-
#include "src/core/lib/surface/
|
82
|
+
#include "src/core/lib/surface/server_call.h"
|
82
83
|
#include "src/core/lib/transport/connectivity_state.h"
|
83
84
|
#include "src/core/lib/transport/error_utils.h"
|
85
|
+
#include "src/core/lib/transport/interception_chain.h"
|
86
|
+
#include "src/core/telemetry/stats.h"
|
87
|
+
#include "src/core/util/useful.h"
|
84
88
|
|
85
89
|
namespace grpc_core {
|
86
90
|
|
87
|
-
TraceFlag grpc_server_channel_trace(false, "server_channel");
|
88
|
-
|
89
91
|
//
|
90
92
|
// Server::RegisteredMethod
|
91
93
|
//
|
@@ -235,7 +237,8 @@ struct Server::RequestedCall {
|
|
235
237
|
|
236
238
|
template <typename OptionalPayload>
|
237
239
|
void Complete(OptionalPayload payload, ClientMetadata& md) {
|
238
|
-
Timestamp deadline =
|
240
|
+
Timestamp deadline =
|
241
|
+
md.get(GrpcTimeoutMetadata()).value_or(Timestamp::InfFuture());
|
239
242
|
switch (type) {
|
240
243
|
case RequestedCall::Type::BATCH_CALL:
|
241
244
|
CHECK(!payload.has_value());
|
@@ -288,23 +291,29 @@ struct Server::RequestedCall {
|
|
288
291
|
// application to explicitly request RPCs and then matching those to incoming
|
289
292
|
// RPCs, along with a slow path by which incoming RPCs are put on a locked
|
290
293
|
// pending list if they aren't able to be matched to an application request.
|
291
|
-
class Server::
|
294
|
+
class Server::RealRequestMatcher : public RequestMatcherInterface {
|
292
295
|
public:
|
293
|
-
explicit
|
296
|
+
explicit RealRequestMatcher(Server* server)
|
294
297
|
: server_(server), requests_per_cq_(server->cqs_.size()) {}
|
295
298
|
|
296
|
-
~
|
299
|
+
~RealRequestMatcher() override {
|
297
300
|
for (LockedMultiProducerSingleConsumerQueue& queue : requests_per_cq_) {
|
298
301
|
CHECK_EQ(queue.Pop(), nullptr);
|
299
302
|
}
|
300
|
-
CHECK(
|
303
|
+
CHECK(pending_filter_stack_.empty());
|
304
|
+
CHECK(pending_promises_.empty());
|
301
305
|
}
|
302
306
|
|
303
307
|
void ZombifyPending() override {
|
304
|
-
while (!
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
+
while (!pending_filter_stack_.empty()) {
|
309
|
+
pending_filter_stack_.front().calld->SetState(
|
310
|
+
CallData::CallState::ZOMBIED);
|
311
|
+
pending_filter_stack_.front().calld->KillZombie();
|
312
|
+
pending_filter_stack_.pop();
|
313
|
+
}
|
314
|
+
while (!pending_promises_.empty()) {
|
315
|
+
pending_promises_.front()->Finish(absl::InternalError("Server closed"));
|
316
|
+
pending_promises_.pop();
|
308
317
|
}
|
309
318
|
}
|
310
319
|
|
@@ -329,35 +338,56 @@ class Server::RealRequestMatcherFilterStack : public RequestMatcherInterface {
|
|
329
338
|
// matching calls
|
330
339
|
struct NextPendingCall {
|
331
340
|
RequestedCall* rc = nullptr;
|
332
|
-
CallData*
|
341
|
+
CallData* pending_filter_stack = nullptr;
|
342
|
+
PendingCallPromises pending_promise;
|
333
343
|
};
|
334
344
|
while (true) {
|
335
345
|
NextPendingCall pending_call;
|
336
346
|
{
|
337
347
|
MutexLock lock(&server_->mu_call_);
|
338
|
-
while (!
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
348
|
+
while (!pending_filter_stack_.empty() &&
|
349
|
+
pending_filter_stack_.front().Age() >
|
350
|
+
server_->max_time_in_pending_queue_) {
|
351
|
+
pending_filter_stack_.front().calld->SetState(
|
352
|
+
CallData::CallState::ZOMBIED);
|
353
|
+
pending_filter_stack_.front().calld->KillZombie();
|
354
|
+
pending_filter_stack_.pop();
|
343
355
|
}
|
344
|
-
if (!
|
356
|
+
if (!pending_promises_.empty()) {
|
345
357
|
pending_call.rc = reinterpret_cast<RequestedCall*>(
|
346
358
|
requests_per_cq_[request_queue_index].Pop());
|
347
359
|
if (pending_call.rc != nullptr) {
|
348
|
-
pending_call.
|
349
|
-
|
360
|
+
pending_call.pending_promise =
|
361
|
+
std::move(pending_promises_.front());
|
362
|
+
pending_promises_.pop();
|
363
|
+
}
|
364
|
+
} else if (!pending_filter_stack_.empty()) {
|
365
|
+
pending_call.rc = reinterpret_cast<RequestedCall*>(
|
366
|
+
requests_per_cq_[request_queue_index].Pop());
|
367
|
+
if (pending_call.rc != nullptr) {
|
368
|
+
pending_call.pending_filter_stack =
|
369
|
+
pending_filter_stack_.front().calld;
|
370
|
+
pending_filter_stack_.pop();
|
350
371
|
}
|
351
372
|
}
|
352
373
|
}
|
353
374
|
if (pending_call.rc == nullptr) break;
|
354
|
-
if (
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
375
|
+
if (pending_call.pending_filter_stack != nullptr) {
|
376
|
+
if (!pending_call.pending_filter_stack->MaybeActivate()) {
|
377
|
+
// Zombied Call
|
378
|
+
pending_call.pending_filter_stack->KillZombie();
|
379
|
+
requests_per_cq_[request_queue_index].Push(
|
380
|
+
&pending_call.rc->mpscq_node);
|
381
|
+
} else {
|
382
|
+
pending_call.pending_filter_stack->Publish(request_queue_index,
|
383
|
+
pending_call.rc);
|
384
|
+
}
|
359
385
|
} else {
|
360
|
-
pending_call.
|
386
|
+
if (!pending_call.pending_promise->Finish(
|
387
|
+
server(), request_queue_index, pending_call.rc)) {
|
388
|
+
requests_per_cq_[request_queue_index].Push(
|
389
|
+
&pending_call.rc->mpscq_node);
|
390
|
+
}
|
361
391
|
}
|
362
392
|
}
|
363
393
|
}
|
@@ -395,7 +425,7 @@ class Server::RealRequestMatcherFilterStack : public RequestMatcherInterface {
|
|
395
425
|
}
|
396
426
|
if (rc == nullptr) {
|
397
427
|
calld->SetState(CallData::CallState::PENDING);
|
398
|
-
|
428
|
+
pending_filter_stack_.push(PendingCallFilterStack{calld});
|
399
429
|
return;
|
400
430
|
}
|
401
431
|
}
|
@@ -403,91 +433,6 @@ class Server::RealRequestMatcherFilterStack : public RequestMatcherInterface {
|
|
403
433
|
calld->Publish(cq_idx, rc);
|
404
434
|
}
|
405
435
|
|
406
|
-
ArenaPromise<absl::StatusOr<MatchResult>> MatchRequest(size_t) override {
|
407
|
-
Crash("not implemented for filter stack request matcher");
|
408
|
-
}
|
409
|
-
|
410
|
-
Server* server() const final { return server_; }
|
411
|
-
|
412
|
-
private:
|
413
|
-
Server* const server_;
|
414
|
-
struct PendingCall {
|
415
|
-
CallData* calld;
|
416
|
-
Timestamp created = Timestamp::Now();
|
417
|
-
Duration Age() { return Timestamp::Now() - created; }
|
418
|
-
};
|
419
|
-
std::queue<PendingCall> pending_;
|
420
|
-
std::vector<LockedMultiProducerSingleConsumerQueue> requests_per_cq_;
|
421
|
-
};
|
422
|
-
|
423
|
-
class Server::RealRequestMatcherPromises : public RequestMatcherInterface {
|
424
|
-
public:
|
425
|
-
explicit RealRequestMatcherPromises(Server* server)
|
426
|
-
: server_(server), requests_per_cq_(server->cqs_.size()) {}
|
427
|
-
|
428
|
-
~RealRequestMatcherPromises() override {
|
429
|
-
for (LockedMultiProducerSingleConsumerQueue& queue : requests_per_cq_) {
|
430
|
-
CHECK_EQ(queue.Pop(), nullptr);
|
431
|
-
}
|
432
|
-
}
|
433
|
-
|
434
|
-
void ZombifyPending() override {
|
435
|
-
while (!pending_.empty()) {
|
436
|
-
pending_.front()->Finish(absl::InternalError("Server closed"));
|
437
|
-
pending_.pop();
|
438
|
-
}
|
439
|
-
}
|
440
|
-
|
441
|
-
void KillRequests(grpc_error_handle error) override {
|
442
|
-
for (size_t i = 0; i < requests_per_cq_.size(); i++) {
|
443
|
-
RequestedCall* rc;
|
444
|
-
while ((rc = reinterpret_cast<RequestedCall*>(
|
445
|
-
requests_per_cq_[i].Pop())) != nullptr) {
|
446
|
-
server_->FailCall(i, rc, error);
|
447
|
-
}
|
448
|
-
}
|
449
|
-
}
|
450
|
-
|
451
|
-
size_t request_queue_count() const override {
|
452
|
-
return requests_per_cq_.size();
|
453
|
-
}
|
454
|
-
|
455
|
-
void RequestCallWithPossiblePublish(size_t request_queue_index,
|
456
|
-
RequestedCall* call) override {
|
457
|
-
if (requests_per_cq_[request_queue_index].Push(&call->mpscq_node)) {
|
458
|
-
// this was the first queued request: we need to lock and start
|
459
|
-
// matching calls
|
460
|
-
struct NextPendingCall {
|
461
|
-
RequestedCall* rc = nullptr;
|
462
|
-
PendingCall pending;
|
463
|
-
};
|
464
|
-
while (true) {
|
465
|
-
NextPendingCall pending_call;
|
466
|
-
{
|
467
|
-
MutexLock lock(&server_->mu_call_);
|
468
|
-
if (!pending_.empty()) {
|
469
|
-
pending_call.rc = reinterpret_cast<RequestedCall*>(
|
470
|
-
requests_per_cq_[request_queue_index].Pop());
|
471
|
-
if (pending_call.rc != nullptr) {
|
472
|
-
pending_call.pending = std::move(pending_.front());
|
473
|
-
pending_.pop();
|
474
|
-
}
|
475
|
-
}
|
476
|
-
}
|
477
|
-
if (pending_call.rc == nullptr) break;
|
478
|
-
if (!pending_call.pending->Finish(server(), request_queue_index,
|
479
|
-
pending_call.rc)) {
|
480
|
-
requests_per_cq_[request_queue_index].Push(
|
481
|
-
&pending_call.rc->mpscq_node);
|
482
|
-
}
|
483
|
-
}
|
484
|
-
}
|
485
|
-
}
|
486
|
-
|
487
|
-
void MatchOrQueue(size_t, CallData*) override {
|
488
|
-
Crash("not implemented for promises");
|
489
|
-
}
|
490
|
-
|
491
436
|
ArenaPromise<absl::StatusOr<MatchResult>> MatchRequest(
|
492
437
|
size_t start_request_queue_index) override {
|
493
438
|
for (size_t i = 0; i < requests_per_cq_.size(); i++) {
|
@@ -509,10 +454,11 @@ class Server::RealRequestMatcherPromises : public RequestMatcherInterface {
|
|
509
454
|
{
|
510
455
|
std::vector<std::shared_ptr<ActivityWaiter>> removed_pending;
|
511
456
|
MutexLock lock(&server_->mu_call_);
|
512
|
-
while (!
|
513
|
-
|
514
|
-
|
515
|
-
|
457
|
+
while (!pending_promises_.empty() &&
|
458
|
+
pending_promises_.front()->Age() >
|
459
|
+
server_->max_time_in_pending_queue_) {
|
460
|
+
removed_pending.push_back(std::move(pending_promises_.front()));
|
461
|
+
pending_promises_.pop();
|
516
462
|
}
|
517
463
|
for (loop_count = 0; loop_count < requests_per_cq_.size(); loop_count++) {
|
518
464
|
cq_idx =
|
@@ -521,14 +467,14 @@ class Server::RealRequestMatcherPromises : public RequestMatcherInterface {
|
|
521
467
|
if (rc != nullptr) break;
|
522
468
|
}
|
523
469
|
if (rc == nullptr) {
|
524
|
-
if (server_->pending_backlog_protector_.Reject(
|
470
|
+
if (server_->pending_backlog_protector_.Reject(pending_promises_.size(),
|
525
471
|
server_->bitgen_)) {
|
526
472
|
return Immediate(absl::ResourceExhaustedError(
|
527
473
|
"Too many pending requests for this server"));
|
528
474
|
}
|
529
475
|
auto w = std::make_shared<ActivityWaiter>(
|
530
476
|
GetContext<Activity>()->MakeOwningWaker());
|
531
|
-
|
477
|
+
pending_promises_.push(w);
|
532
478
|
return OnCancel(
|
533
479
|
[w]() -> Poll<absl::StatusOr<MatchResult>> {
|
534
480
|
std::unique_ptr<absl::StatusOr<MatchResult>> r(
|
@@ -546,6 +492,11 @@ class Server::RealRequestMatcherPromises : public RequestMatcherInterface {
|
|
546
492
|
|
547
493
|
private:
|
548
494
|
Server* const server_;
|
495
|
+
struct PendingCallFilterStack {
|
496
|
+
CallData* calld;
|
497
|
+
Timestamp created = Timestamp::Now();
|
498
|
+
Duration Age() { return Timestamp::Now() - created; }
|
499
|
+
};
|
549
500
|
struct ActivityWaiter {
|
550
501
|
using ResultType = absl::StatusOr<MatchResult>;
|
551
502
|
explicit ActivityWaiter(Waker waker) : waker(std::move(waker)) {}
|
@@ -580,8 +531,9 @@ class Server::RealRequestMatcherPromises : public RequestMatcherInterface {
|
|
580
531
|
std::atomic<ResultType*> result{nullptr};
|
581
532
|
const Timestamp created = Timestamp::Now();
|
582
533
|
};
|
583
|
-
using
|
584
|
-
std::queue<
|
534
|
+
using PendingCallPromises = std::shared_ptr<ActivityWaiter>;
|
535
|
+
std::queue<PendingCallFilterStack> pending_filter_stack_;
|
536
|
+
std::queue<PendingCallPromises> pending_promises_;
|
585
537
|
std::vector<LockedMultiProducerSingleConsumerQueue> requests_per_cq_;
|
586
538
|
};
|
587
539
|
|
@@ -784,16 +736,39 @@ class ChannelBroadcaster {
|
|
784
736
|
|
785
737
|
} // namespace
|
786
738
|
|
739
|
+
//
|
740
|
+
// Server::TransportConnectivityWatcher
|
741
|
+
//
|
742
|
+
|
743
|
+
class Server::TransportConnectivityWatcher
|
744
|
+
: public AsyncConnectivityStateWatcherInterface {
|
745
|
+
public:
|
746
|
+
TransportConnectivityWatcher(RefCountedPtr<ServerTransport> transport,
|
747
|
+
RefCountedPtr<Server> server)
|
748
|
+
: transport_(std::move(transport)), server_(std::move(server)) {}
|
749
|
+
|
750
|
+
private:
|
751
|
+
void OnConnectivityStateChange(grpc_connectivity_state new_state,
|
752
|
+
const absl::Status& /*status*/) override {
|
753
|
+
// Don't do anything until we are being shut down.
|
754
|
+
if (new_state != GRPC_CHANNEL_SHUTDOWN) return;
|
755
|
+
// Shut down channel.
|
756
|
+
MutexLock lock(&server_->mu_global_);
|
757
|
+
server_->connections_.erase(transport_.get());
|
758
|
+
--server_->connections_open_;
|
759
|
+
server_->MaybeFinishShutdown();
|
760
|
+
}
|
761
|
+
|
762
|
+
RefCountedPtr<ServerTransport> transport_;
|
763
|
+
RefCountedPtr<Server> server_;
|
764
|
+
};
|
765
|
+
|
787
766
|
//
|
788
767
|
// Server
|
789
768
|
//
|
790
769
|
|
791
770
|
const grpc_channel_filter Server::kServerTopFilter = {
|
792
771
|
Server::CallData::StartTransportStreamOpBatch,
|
793
|
-
Server::ChannelData::MakeCallPromise,
|
794
|
-
[](grpc_channel_element*, CallSpineInterface*) {
|
795
|
-
// TODO(ctiller): remove the server filter when call-v3 is finalized
|
796
|
-
},
|
797
772
|
grpc_channel_next_op,
|
798
773
|
sizeof(Server::CallData),
|
799
774
|
Server::CallData::InitCallElement,
|
@@ -826,12 +801,91 @@ RefCountedPtr<channelz::ServerNode> CreateChannelzNode(
|
|
826
801
|
return channelz_node;
|
827
802
|
}
|
828
803
|
|
804
|
+
absl::StatusOr<ClientMetadataHandle> CheckClientMetadata(
|
805
|
+
ValueOrFailure<ClientMetadataHandle> md) {
|
806
|
+
if (!md.ok()) {
|
807
|
+
return absl::InternalError("Error reading metadata");
|
808
|
+
}
|
809
|
+
if (!md.value()->get_pointer(HttpPathMetadata())) {
|
810
|
+
return absl::InternalError("Missing :path header");
|
811
|
+
}
|
812
|
+
if (!md.value()->get_pointer(HttpAuthorityMetadata())) {
|
813
|
+
return absl::InternalError("Missing :authority header");
|
814
|
+
}
|
815
|
+
return std::move(*md);
|
816
|
+
}
|
829
817
|
} // namespace
|
830
818
|
|
819
|
+
auto Server::MatchAndPublishCall(CallHandler call_handler) {
|
820
|
+
call_handler.SpawnGuarded("request_matcher", [this, call_handler]() mutable {
|
821
|
+
return TrySeq(
|
822
|
+
// Wait for initial metadata to pass through all filters
|
823
|
+
Map(call_handler.PullClientInitialMetadata(), CheckClientMetadata),
|
824
|
+
// Match request with requested call
|
825
|
+
[this, call_handler](ClientMetadataHandle md) mutable {
|
826
|
+
auto* registered_method = static_cast<RegisteredMethod*>(
|
827
|
+
md->get(GrpcRegisteredMethod()).value_or(nullptr));
|
828
|
+
RequestMatcherInterface* rm;
|
829
|
+
grpc_server_register_method_payload_handling payload_handling =
|
830
|
+
GRPC_SRM_PAYLOAD_NONE;
|
831
|
+
if (registered_method == nullptr) {
|
832
|
+
rm = unregistered_request_matcher_.get();
|
833
|
+
} else {
|
834
|
+
payload_handling = registered_method->payload_handling;
|
835
|
+
rm = registered_method->matcher.get();
|
836
|
+
}
|
837
|
+
auto maybe_read_first_message = If(
|
838
|
+
payload_handling == GRPC_SRM_PAYLOAD_READ_INITIAL_BYTE_BUFFER,
|
839
|
+
[call_handler]() mutable { return call_handler.PullMessage(); },
|
840
|
+
[]() -> ValueOrFailure<absl::optional<MessageHandle>> {
|
841
|
+
return ValueOrFailure<absl::optional<MessageHandle>>(
|
842
|
+
absl::nullopt);
|
843
|
+
});
|
844
|
+
return TryJoin<absl::StatusOr>(
|
845
|
+
std::move(maybe_read_first_message), rm->MatchRequest(0),
|
846
|
+
[md = std::move(md)]() mutable {
|
847
|
+
return ValueOrFailure<ClientMetadataHandle>(std::move(md));
|
848
|
+
});
|
849
|
+
},
|
850
|
+
// Publish call to cq
|
851
|
+
[call_handler, this](std::tuple<absl::optional<MessageHandle>,
|
852
|
+
RequestMatcherInterface::MatchResult,
|
853
|
+
ClientMetadataHandle>
|
854
|
+
r) {
|
855
|
+
RequestMatcherInterface::MatchResult& mr = std::get<1>(r);
|
856
|
+
auto md = std::move(std::get<2>(r));
|
857
|
+
auto* rc = mr.TakeCall();
|
858
|
+
rc->Complete(std::move(std::get<0>(r)), *md);
|
859
|
+
grpc_call* call =
|
860
|
+
MakeServerCall(call_handler, std::move(md), this,
|
861
|
+
rc->cq_bound_to_call, rc->initial_metadata);
|
862
|
+
*rc->call = call;
|
863
|
+
return Map(WaitForCqEndOp(false, rc->tag, absl::OkStatus(), mr.cq()),
|
864
|
+
[rc = std::unique_ptr<RequestedCall>(rc)](Empty) {
|
865
|
+
return absl::OkStatus();
|
866
|
+
});
|
867
|
+
});
|
868
|
+
});
|
869
|
+
}
|
870
|
+
|
871
|
+
absl::StatusOr<RefCountedPtr<UnstartedCallDestination>>
|
872
|
+
Server::MakeCallDestination(const ChannelArgs& args) {
|
873
|
+
InterceptionChainBuilder builder(args);
|
874
|
+
builder.AddOnClientInitialMetadata(
|
875
|
+
[this](ClientMetadata& md) { SetRegisteredMethodOnMetadata(md); });
|
876
|
+
CoreConfiguration::Get().channel_init().AddToInterceptionChainBuilder(
|
877
|
+
GRPC_SERVER_CHANNEL, builder);
|
878
|
+
return builder.Build(
|
879
|
+
MakeCallDestinationFromHandlerFunction([this](CallHandler handler) {
|
880
|
+
return MatchAndPublishCall(std::move(handler));
|
881
|
+
}));
|
882
|
+
}
|
883
|
+
|
831
884
|
Server::Server(const ChannelArgs& args)
|
832
885
|
: channel_args_(args),
|
833
886
|
channelz_node_(CreateChannelzNode(args)),
|
834
887
|
server_call_tracer_factory_(ServerCallTracerFactory::Get(args)),
|
888
|
+
compression_options_(CompressionOptionsFromChannelArgs(args)),
|
835
889
|
max_time_in_pending_queue_(Duration::Seconds(
|
836
890
|
channel_args_
|
837
891
|
.GetInt(GRPC_ARG_SERVER_MAX_UNREQUESTED_TIME_IN_SERVER_SECONDS)
|
@@ -862,15 +916,6 @@ void Server::AddListener(OrphanablePtr<ListenerInterface> listener) {
|
|
862
916
|
}
|
863
917
|
|
864
918
|
void Server::Start() {
|
865
|
-
auto make_real_request_matcher =
|
866
|
-
[this]() -> std::unique_ptr<RequestMatcherInterface> {
|
867
|
-
if (IsPromiseBasedServerCallEnabled()) {
|
868
|
-
return std::make_unique<RealRequestMatcherPromises>(this);
|
869
|
-
} else {
|
870
|
-
return std::make_unique<RealRequestMatcherFilterStack>(this);
|
871
|
-
}
|
872
|
-
};
|
873
|
-
|
874
919
|
started_ = true;
|
875
920
|
for (grpc_completion_queue* cq : cqs_) {
|
876
921
|
if (grpc_cq_can_listen(cq)) {
|
@@ -878,11 +923,11 @@ void Server::Start() {
|
|
878
923
|
}
|
879
924
|
}
|
880
925
|
if (unregistered_request_matcher_ == nullptr) {
|
881
|
-
unregistered_request_matcher_ =
|
926
|
+
unregistered_request_matcher_ = std::make_unique<RealRequestMatcher>(this);
|
882
927
|
}
|
883
928
|
for (auto& rm : registered_methods_) {
|
884
929
|
if (rm.second->matcher == nullptr) {
|
885
|
-
rm.second->matcher =
|
930
|
+
rm.second->matcher = std::make_unique<RealRequestMatcher>(this);
|
886
931
|
}
|
887
932
|
}
|
888
933
|
{
|
@@ -913,37 +958,63 @@ grpc_error_handle Server::SetupTransport(
|
|
913
958
|
const RefCountedPtr<channelz::SocketNode>& socket_node) {
|
914
959
|
// Create channel.
|
915
960
|
global_stats().IncrementServerChannelsCreated();
|
916
|
-
absl::StatusOr<OrphanablePtr<Channel>> channel =
|
917
|
-
LegacyChannel::Create("", args.SetObject(transport), GRPC_SERVER_CHANNEL);
|
918
|
-
if (!channel.ok()) {
|
919
|
-
return absl_status_to_grpc_error(channel.status());
|
920
|
-
}
|
921
|
-
ChannelData* chand = static_cast<ChannelData*>(
|
922
|
-
grpc_channel_stack_element((*channel)->channel_stack(), 0)->channel_data);
|
923
|
-
// Set up CQs.
|
924
|
-
size_t cq_idx;
|
925
|
-
for (cq_idx = 0; cq_idx < cqs_.size(); cq_idx++) {
|
926
|
-
if (grpc_cq_pollset(cqs_[cq_idx]) == accepting_pollset) break;
|
927
|
-
}
|
928
|
-
if (cq_idx == cqs_.size()) {
|
929
|
-
// Completion queue not found. Pick a random one to publish new calls to.
|
930
|
-
cq_idx = static_cast<size_t>(rand()) % std::max<size_t>(1, cqs_.size());
|
931
|
-
}
|
932
961
|
// Set up channelz node.
|
933
|
-
|
934
|
-
|
935
|
-
|
936
|
-
|
937
|
-
|
938
|
-
|
939
|
-
|
940
|
-
|
962
|
+
if (transport->server_transport() != nullptr) {
|
963
|
+
// Take ownership
|
964
|
+
// TODO(ctiller): post-v3-transition make this method take an
|
965
|
+
// OrphanablePtr<ServerTransport> directly.
|
966
|
+
OrphanablePtr<ServerTransport> t(transport->server_transport());
|
967
|
+
auto destination = MakeCallDestination(args.SetObject(transport));
|
968
|
+
if (!destination.ok()) {
|
969
|
+
return absl_status_to_grpc_error(destination.status());
|
970
|
+
}
|
971
|
+
// TODO(ctiller): add channelz node
|
972
|
+
t->SetCallDestination(std::move(*destination));
|
973
|
+
MutexLock lock(&mu_global_);
|
974
|
+
if (ShutdownCalled()) {
|
975
|
+
t->DisconnectWithError(GRPC_ERROR_CREATE("Server shutdown"));
|
976
|
+
}
|
977
|
+
t->StartConnectivityWatch(MakeOrphanable<TransportConnectivityWatcher>(
|
978
|
+
t->RefAsSubclass<ServerTransport>(), Ref()));
|
979
|
+
LOG(INFO) << "Adding connection";
|
980
|
+
connections_.emplace(std::move(t));
|
981
|
+
++connections_open_;
|
982
|
+
} else {
|
983
|
+
CHECK(transport->filter_stack_transport() != nullptr);
|
984
|
+
absl::StatusOr<RefCountedPtr<Channel>> channel = LegacyChannel::Create(
|
985
|
+
"", args.SetObject(transport), GRPC_SERVER_CHANNEL);
|
986
|
+
if (!channel.ok()) {
|
987
|
+
return absl_status_to_grpc_error(channel.status());
|
988
|
+
}
|
989
|
+
CHECK(*channel != nullptr);
|
990
|
+
auto* channel_stack = (*channel)->channel_stack();
|
991
|
+
CHECK(channel_stack != nullptr);
|
992
|
+
ChannelData* chand = static_cast<ChannelData*>(
|
993
|
+
grpc_channel_stack_element(channel_stack, 0)->channel_data);
|
994
|
+
// Set up CQs.
|
995
|
+
size_t cq_idx;
|
996
|
+
for (cq_idx = 0; cq_idx < cqs_.size(); cq_idx++) {
|
997
|
+
if (grpc_cq_pollset(cqs_[cq_idx]) == accepting_pollset) break;
|
998
|
+
}
|
999
|
+
if (cq_idx == cqs_.size()) {
|
1000
|
+
// Completion queue not found. Pick a random one to publish new calls to.
|
1001
|
+
cq_idx = static_cast<size_t>(rand()) % std::max<size_t>(1, cqs_.size());
|
1002
|
+
}
|
1003
|
+
intptr_t channelz_socket_uuid = 0;
|
1004
|
+
if (socket_node != nullptr) {
|
1005
|
+
channelz_socket_uuid = socket_node->uuid();
|
1006
|
+
channelz_node_->AddChildSocket(socket_node);
|
1007
|
+
}
|
1008
|
+
// Initialize chand.
|
1009
|
+
chand->InitTransport(Ref(), std::move(*channel), cq_idx, transport,
|
1010
|
+
channelz_socket_uuid);
|
1011
|
+
}
|
941
1012
|
return absl::OkStatus();
|
942
1013
|
}
|
943
1014
|
|
944
1015
|
bool Server::HasOpenConnections() {
|
945
1016
|
MutexLock lock(&mu_global_);
|
946
|
-
return !channels_.empty();
|
1017
|
+
return !channels_.empty() || !connections_.empty();
|
947
1018
|
}
|
948
1019
|
|
949
1020
|
void Server::SetRegisteredMethodAllocator(
|
@@ -1023,16 +1094,18 @@ void Server::MaybeFinishShutdown() {
|
|
1023
1094
|
MutexLock lock(&mu_call_);
|
1024
1095
|
KillPendingWorkLocked(GRPC_ERROR_CREATE("Server Shutdown"));
|
1025
1096
|
}
|
1026
|
-
if (!channels_.empty() ||
|
1097
|
+
if (!channels_.empty() || connections_open_ > 0 ||
|
1098
|
+
listeners_destroyed_ < listeners_.size()) {
|
1027
1099
|
if (gpr_time_cmp(gpr_time_sub(gpr_now(GPR_CLOCK_REALTIME),
|
1028
1100
|
last_shutdown_message_time_),
|
1029
1101
|
gpr_time_from_seconds(1, GPR_TIMESPAN)) >= 0) {
|
1030
1102
|
last_shutdown_message_time_ = gpr_now(GPR_CLOCK_REALTIME);
|
1031
1103
|
gpr_log(GPR_DEBUG,
|
1032
|
-
"Waiting for %" PRIuPTR " channels
|
1104
|
+
"Waiting for %" PRIuPTR " channels %" PRIuPTR
|
1105
|
+
" connections and %" PRIuPTR "/%" PRIuPTR
|
1033
1106
|
" listeners to be destroyed before shutting down server",
|
1034
|
-
channels_.size(),
|
1035
|
-
listeners_.size());
|
1107
|
+
channels_.size(), connections_open_,
|
1108
|
+
listeners_.size() - listeners_destroyed_, listeners_.size());
|
1036
1109
|
}
|
1037
1110
|
return;
|
1038
1111
|
}
|
@@ -1059,7 +1132,7 @@ std::vector<RefCountedPtr<Channel>> Server::GetChannelsLocked() const {
|
|
1059
1132
|
std::vector<RefCountedPtr<Channel>> channels;
|
1060
1133
|
channels.reserve(channels_.size());
|
1061
1134
|
for (const ChannelData* chand : channels_) {
|
1062
|
-
channels.push_back(chand->channel()->
|
1135
|
+
channels.push_back(chand->channel()->RefAsSubclass<Channel>());
|
1063
1136
|
}
|
1064
1137
|
return channels;
|
1065
1138
|
}
|
@@ -1095,6 +1168,7 @@ void DonePublishedShutdown(void* /*done_arg*/, grpc_cq_completion* storage) {
|
|
1095
1168
|
// -- Once there are no more calls in progress, the channel is closed.
|
1096
1169
|
void Server::ShutdownAndNotify(grpc_completion_queue* cq, void* tag) {
|
1097
1170
|
ChannelBroadcaster broadcaster;
|
1171
|
+
absl::flat_hash_set<OrphanablePtr<ServerTransport>> removing_connections;
|
1098
1172
|
{
|
1099
1173
|
// Wait for startup to be finished. Locks mu_global.
|
1100
1174
|
MutexLock lock(&mu_global_);
|
@@ -1114,6 +1188,7 @@ void Server::ShutdownAndNotify(grpc_completion_queue* cq, void* tag) {
|
|
1114
1188
|
}
|
1115
1189
|
last_shutdown_message_time_ = gpr_now(GPR_CLOCK_REALTIME);
|
1116
1190
|
broadcaster.FillChannelsLocked(GetChannelsLocked());
|
1191
|
+
removing_connections.swap(connections_);
|
1117
1192
|
// Collect all unregistered then registered calls.
|
1118
1193
|
{
|
1119
1194
|
MutexLock lock(&mu_call_);
|
@@ -1264,7 +1339,7 @@ class Server::ChannelData::ConnectivityWatcher
|
|
1264
1339
|
: public AsyncConnectivityStateWatcherInterface {
|
1265
1340
|
public:
|
1266
1341
|
explicit ConnectivityWatcher(ChannelData* chand)
|
1267
|
-
: chand_(chand), channel_(chand_->channel_->
|
1342
|
+
: chand_(chand), channel_(chand_->channel_->RefAsSubclass<Channel>()) {}
|
1268
1343
|
|
1269
1344
|
private:
|
1270
1345
|
void OnConnectivityStateChange(grpc_connectivity_state new_state,
|
@@ -1300,19 +1375,8 @@ Server::ChannelData::~ChannelData() {
|
|
1300
1375
|
}
|
1301
1376
|
}
|
1302
1377
|
|
1303
|
-
Arena* Server::ChannelData::CreateArena() { return channel_->CreateArena(); }
|
1304
|
-
|
1305
|
-
absl::StatusOr<CallInitiator> Server::ChannelData::CreateCall(
|
1306
|
-
ClientMetadataHandle client_initial_metadata, Arena* arena) {
|
1307
|
-
SetRegisteredMethodOnMetadata(*client_initial_metadata);
|
1308
|
-
auto call = MakeServerCall(std::move(client_initial_metadata), server_.get(),
|
1309
|
-
channel_.get(), arena);
|
1310
|
-
InitCall(call);
|
1311
|
-
return CallInitiator(std::move(call));
|
1312
|
-
}
|
1313
|
-
|
1314
1378
|
void Server::ChannelData::InitTransport(RefCountedPtr<Server> server,
|
1315
|
-
|
1379
|
+
RefCountedPtr<Channel> channel,
|
1316
1380
|
size_t cq_idx, Transport* transport,
|
1317
1381
|
intptr_t channelz_socket_uuid) {
|
1318
1382
|
server_ = std::move(server);
|
@@ -1327,22 +1391,15 @@ void Server::ChannelData::InitTransport(RefCountedPtr<Server> server,
|
|
1327
1391
|
}
|
1328
1392
|
// Start accept_stream transport op.
|
1329
1393
|
grpc_transport_op* op = grpc_make_transport_op(nullptr);
|
1330
|
-
|
1331
|
-
|
1332
|
-
|
1333
|
-
|
1334
|
-
|
1335
|
-
|
1336
|
-
|
1337
|
-
|
1338
|
-
|
1339
|
-
op->set_accept_stream_user_data = this;
|
1340
|
-
}
|
1341
|
-
if (transport->server_transport() != nullptr) {
|
1342
|
-
++accept_stream_types;
|
1343
|
-
transport->server_transport()->SetAcceptor(this);
|
1344
|
-
}
|
1345
|
-
CHECK_EQ(accept_stream_types, 1);
|
1394
|
+
CHECK(transport->filter_stack_transport() != nullptr);
|
1395
|
+
op->set_accept_stream = true;
|
1396
|
+
op->set_accept_stream_fn = AcceptStream;
|
1397
|
+
op->set_registered_method_matcher_fn = [](void* arg,
|
1398
|
+
ClientMetadata* metadata) {
|
1399
|
+
static_cast<ChannelData*>(arg)->server_->SetRegisteredMethodOnMetadata(
|
1400
|
+
*metadata);
|
1401
|
+
};
|
1402
|
+
op->set_accept_stream_user_data = this;
|
1346
1403
|
op->start_connectivity_watch = MakeOrphanable<ConnectivityWatcher>(this);
|
1347
1404
|
if (server_->ShutdownCalled()) {
|
1348
1405
|
op->disconnect_with_error = GRPC_ERROR_CREATE("Server shutdown");
|
@@ -1350,24 +1407,23 @@ void Server::ChannelData::InitTransport(RefCountedPtr<Server> server,
|
|
1350
1407
|
transport->PerformOp(op);
|
1351
1408
|
}
|
1352
1409
|
|
1353
|
-
Server::RegisteredMethod* Server::
|
1410
|
+
Server::RegisteredMethod* Server::GetRegisteredMethod(
|
1354
1411
|
const absl::string_view& host, const absl::string_view& path) {
|
1355
|
-
if (
|
1412
|
+
if (registered_methods_.empty()) return nullptr;
|
1356
1413
|
// check for an exact match with host
|
1357
|
-
auto it =
|
1358
|
-
if (it !=
|
1414
|
+
auto it = registered_methods_.find(std::make_pair(host, path));
|
1415
|
+
if (it != registered_methods_.end()) {
|
1359
1416
|
return it->second.get();
|
1360
1417
|
}
|
1361
1418
|
// check for wildcard method definition (no host set)
|
1362
|
-
it =
|
1363
|
-
if (it !=
|
1419
|
+
it = registered_methods_.find(std::make_pair("", path));
|
1420
|
+
if (it != registered_methods_.end()) {
|
1364
1421
|
return it->second.get();
|
1365
1422
|
}
|
1366
1423
|
return nullptr;
|
1367
1424
|
}
|
1368
1425
|
|
1369
|
-
void Server::
|
1370
|
-
ClientMetadata& metadata) {
|
1426
|
+
void Server::SetRegisteredMethodOnMetadata(ClientMetadata& metadata) {
|
1371
1427
|
auto* authority = metadata.get_pointer(HttpAuthorityMetadata());
|
1372
1428
|
if (authority == nullptr) {
|
1373
1429
|
authority = metadata.get_pointer(HostMetadata());
|
@@ -1392,7 +1448,7 @@ void Server::ChannelData::AcceptStream(void* arg, Transport* /*transport*/,
|
|
1392
1448
|
auto* chand = static_cast<Server::ChannelData*>(arg);
|
1393
1449
|
// create a call
|
1394
1450
|
grpc_call_create_args args;
|
1395
|
-
args.channel = chand->channel_->
|
1451
|
+
args.channel = chand->channel_->RefAsSubclass<Channel>();
|
1396
1452
|
args.server = chand->server_.get();
|
1397
1453
|
args.parent = nullptr;
|
1398
1454
|
args.propagation_mask = 0;
|
@@ -1403,188 +1459,14 @@ void Server::ChannelData::AcceptStream(void* arg, Transport* /*transport*/,
|
|
1403
1459
|
grpc_call* call;
|
1404
1460
|
grpc_error_handle error = grpc_call_create(&args, &call);
|
1405
1461
|
grpc_call_stack* call_stack = grpc_call_get_call_stack(call);
|
1406
|
-
|
1407
|
-
|
1408
|
-
|
1462
|
+
CHECK_NE(call_stack, nullptr);
|
1463
|
+
grpc_call_element* elem = grpc_call_stack_element(call_stack, 0);
|
1464
|
+
auto* calld = static_cast<Server::CallData*>(elem->call_data);
|
1465
|
+
if (!error.ok()) {
|
1466
|
+
calld->FailCallCreation();
|
1409
1467
|
return;
|
1410
|
-
} else {
|
1411
|
-
grpc_call_element* elem = grpc_call_stack_element(call_stack, 0);
|
1412
|
-
auto* calld = static_cast<Server::CallData*>(elem->call_data);
|
1413
|
-
if (!error.ok()) {
|
1414
|
-
calld->FailCallCreation();
|
1415
|
-
return;
|
1416
|
-
}
|
1417
|
-
calld->Start(elem);
|
1418
1468
|
}
|
1419
|
-
|
1420
|
-
|
1421
|
-
namespace {
|
1422
|
-
auto CancelledDueToServerShutdown() {
|
1423
|
-
return [] {
|
1424
|
-
return ServerMetadataFromStatus(absl::CancelledError("Server shutdown"));
|
1425
|
-
};
|
1426
|
-
}
|
1427
|
-
} // namespace
|
1428
|
-
|
1429
|
-
void Server::ChannelData::InitCall(RefCountedPtr<CallSpineInterface> call) {
|
1430
|
-
call->SpawnGuarded("request_matcher", [this, call]() {
|
1431
|
-
return TrySeq(
|
1432
|
-
// Wait for initial metadata to pass through all filters
|
1433
|
-
Map(call->PullClientInitialMetadata(),
|
1434
|
-
[](ValueOrFailure<ClientMetadataHandle> md)
|
1435
|
-
-> absl::StatusOr<ClientMetadataHandle> {
|
1436
|
-
if (!md.ok()) {
|
1437
|
-
return absl::InternalError("Missing metadata");
|
1438
|
-
}
|
1439
|
-
if (!md.value()->get_pointer(HttpPathMetadata())) {
|
1440
|
-
return absl::InternalError("Missing :path header");
|
1441
|
-
}
|
1442
|
-
if (!md.value()->get_pointer(HttpAuthorityMetadata())) {
|
1443
|
-
return absl::InternalError("Missing :authority header");
|
1444
|
-
}
|
1445
|
-
return std::move(*md);
|
1446
|
-
}),
|
1447
|
-
// Match request with requested call
|
1448
|
-
[this, call](ClientMetadataHandle md) {
|
1449
|
-
auto* registered_method = static_cast<RegisteredMethod*>(
|
1450
|
-
md->get(GrpcRegisteredMethod()).value_or(nullptr));
|
1451
|
-
RequestMatcherInterface* rm;
|
1452
|
-
grpc_server_register_method_payload_handling payload_handling =
|
1453
|
-
GRPC_SRM_PAYLOAD_NONE;
|
1454
|
-
if (registered_method == nullptr) {
|
1455
|
-
rm = server_->unregistered_request_matcher_.get();
|
1456
|
-
} else {
|
1457
|
-
payload_handling = registered_method->payload_handling;
|
1458
|
-
rm = registered_method->matcher.get();
|
1459
|
-
}
|
1460
|
-
auto maybe_read_first_message = If(
|
1461
|
-
payload_handling == GRPC_SRM_PAYLOAD_READ_INITIAL_BYTE_BUFFER,
|
1462
|
-
[call]() { return call->PullClientToServerMessage(); },
|
1463
|
-
[]() -> ValueOrFailure<absl::optional<MessageHandle>> {
|
1464
|
-
return ValueOrFailure<absl::optional<MessageHandle>>(
|
1465
|
-
absl::nullopt);
|
1466
|
-
});
|
1467
|
-
return TryJoin<absl::StatusOr>(
|
1468
|
-
std::move(maybe_read_first_message), rm->MatchRequest(cq_idx()),
|
1469
|
-
[md = std::move(md)]() mutable {
|
1470
|
-
return ValueOrFailure<ClientMetadataHandle>(std::move(md));
|
1471
|
-
});
|
1472
|
-
},
|
1473
|
-
// Publish call to cq
|
1474
|
-
[](std::tuple<absl::optional<MessageHandle>,
|
1475
|
-
RequestMatcherInterface::MatchResult,
|
1476
|
-
ClientMetadataHandle>
|
1477
|
-
r) {
|
1478
|
-
RequestMatcherInterface::MatchResult& mr = std::get<1>(r);
|
1479
|
-
auto md = std::move(std::get<2>(r));
|
1480
|
-
auto* rc = mr.TakeCall();
|
1481
|
-
rc->Complete(std::move(std::get<0>(r)), *md);
|
1482
|
-
auto* call_context = GetContext<CallContext>();
|
1483
|
-
const auto* deadline = md->get_pointer(GrpcTimeoutMetadata());
|
1484
|
-
if (deadline != nullptr) {
|
1485
|
-
GetContext<Call>()->UpdateDeadline(*deadline);
|
1486
|
-
}
|
1487
|
-
*rc->call = call_context->c_call();
|
1488
|
-
grpc_call_ref(*rc->call);
|
1489
|
-
grpc_call_set_completion_queue(call_context->c_call(),
|
1490
|
-
rc->cq_bound_to_call);
|
1491
|
-
call_context->server_call_context()->PublishInitialMetadata(
|
1492
|
-
std::move(md), rc->initial_metadata);
|
1493
|
-
// TODO(ctiller): publish metadata
|
1494
|
-
return Map(WaitForCqEndOp(false, rc->tag, absl::OkStatus(), mr.cq()),
|
1495
|
-
[rc = std::unique_ptr<RequestedCall>(rc)](Empty) {
|
1496
|
-
return absl::OkStatus();
|
1497
|
-
});
|
1498
|
-
});
|
1499
|
-
});
|
1500
|
-
}
|
1501
|
-
|
1502
|
-
ArenaPromise<ServerMetadataHandle> Server::ChannelData::MakeCallPromise(
|
1503
|
-
grpc_channel_element* elem, CallArgs call_args, NextPromiseFactory) {
|
1504
|
-
auto* chand = static_cast<Server::ChannelData*>(elem->channel_data);
|
1505
|
-
auto* server = chand->server_.get();
|
1506
|
-
if (server->ShutdownCalled()) return CancelledDueToServerShutdown();
|
1507
|
-
auto cleanup_ref =
|
1508
|
-
absl::MakeCleanup([server] { server->ShutdownUnrefOnRequest(); });
|
1509
|
-
if (!server->ShutdownRefOnRequest()) return CancelledDueToServerShutdown();
|
1510
|
-
auto path_ptr =
|
1511
|
-
call_args.client_initial_metadata->get_pointer(HttpPathMetadata());
|
1512
|
-
if (path_ptr == nullptr) {
|
1513
|
-
return [] {
|
1514
|
-
return ServerMetadataFromStatus(
|
1515
|
-
absl::InternalError("Missing :path header"));
|
1516
|
-
};
|
1517
|
-
}
|
1518
|
-
auto host_ptr =
|
1519
|
-
call_args.client_initial_metadata->get_pointer(HttpAuthorityMetadata());
|
1520
|
-
if (host_ptr == nullptr) {
|
1521
|
-
return [] {
|
1522
|
-
return ServerMetadataFromStatus(
|
1523
|
-
absl::InternalError("Missing :authority header"));
|
1524
|
-
};
|
1525
|
-
}
|
1526
|
-
// Find request matcher.
|
1527
|
-
RequestMatcherInterface* matcher;
|
1528
|
-
RegisteredMethod* rm = static_cast<RegisteredMethod*>(
|
1529
|
-
call_args.client_initial_metadata->get(GrpcRegisteredMethod())
|
1530
|
-
.value_or(nullptr));
|
1531
|
-
ArenaPromise<absl::StatusOr<NextResult<MessageHandle>>>
|
1532
|
-
maybe_read_first_message([] { return NextResult<MessageHandle>(); });
|
1533
|
-
if (rm != nullptr) {
|
1534
|
-
matcher = rm->matcher.get();
|
1535
|
-
switch (rm->payload_handling) {
|
1536
|
-
case GRPC_SRM_PAYLOAD_NONE:
|
1537
|
-
break;
|
1538
|
-
case GRPC_SRM_PAYLOAD_READ_INITIAL_BYTE_BUFFER:
|
1539
|
-
maybe_read_first_message =
|
1540
|
-
Map(call_args.client_to_server_messages->Next(),
|
1541
|
-
[](NextResult<MessageHandle> msg)
|
1542
|
-
-> absl::StatusOr<NextResult<MessageHandle>> {
|
1543
|
-
return std::move(msg);
|
1544
|
-
});
|
1545
|
-
}
|
1546
|
-
} else {
|
1547
|
-
matcher = server->unregistered_request_matcher_.get();
|
1548
|
-
}
|
1549
|
-
return TrySeq(
|
1550
|
-
std::move(maybe_read_first_message),
|
1551
|
-
[cleanup_ref = std::move(cleanup_ref), matcher,
|
1552
|
-
chand](NextResult<MessageHandle> payload) mutable {
|
1553
|
-
return Map(
|
1554
|
-
[cleanup_ref = std::move(cleanup_ref),
|
1555
|
-
mr = matcher->MatchRequest(chand->cq_idx())]() mutable {
|
1556
|
-
return mr();
|
1557
|
-
},
|
1558
|
-
[payload = std::move(payload)](
|
1559
|
-
absl::StatusOr<RequestMatcherInterface::MatchResult> mr) mutable
|
1560
|
-
-> absl::StatusOr<std::pair<RequestMatcherInterface::MatchResult,
|
1561
|
-
NextResult<MessageHandle>>> {
|
1562
|
-
if (!mr.ok()) return mr.status();
|
1563
|
-
return std::make_pair(std::move(*mr), std::move(payload));
|
1564
|
-
});
|
1565
|
-
},
|
1566
|
-
[call_args =
|
1567
|
-
std::move(call_args)](std::pair<RequestMatcherInterface::MatchResult,
|
1568
|
-
NextResult<MessageHandle>>
|
1569
|
-
r) mutable {
|
1570
|
-
auto& mr = r.first;
|
1571
|
-
auto& payload = r.second;
|
1572
|
-
auto* rc = mr.TakeCall();
|
1573
|
-
auto* cq_for_new_request = mr.cq();
|
1574
|
-
auto* server_call_context =
|
1575
|
-
GetContext<CallContext>()->server_call_context();
|
1576
|
-
rc->Complete(std::move(payload), *call_args.client_initial_metadata);
|
1577
|
-
server_call_context->PublishInitialMetadata(
|
1578
|
-
std::move(call_args.client_initial_metadata), rc->initial_metadata);
|
1579
|
-
return server_call_context->MakeTopOfServerCallPromise(
|
1580
|
-
std::move(call_args), rc->cq_bound_to_call,
|
1581
|
-
[rc, cq_for_new_request](grpc_call* call) {
|
1582
|
-
*rc->call = call;
|
1583
|
-
grpc_cq_end_op(cq_for_new_request, rc->tag, absl::OkStatus(),
|
1584
|
-
Server::DoneRequestEvent, rc, &rc->completion,
|
1585
|
-
true);
|
1586
|
-
});
|
1587
|
-
});
|
1469
|
+
calld->Start(elem);
|
1588
1470
|
}
|
1589
1471
|
|
1590
1472
|
void Server::ChannelData::FinishDestroy(void* arg,
|
@@ -1609,9 +1491,7 @@ void Server::ChannelData::Destroy() {
|
|
1609
1491
|
"Server::ChannelData::Destroy");
|
1610
1492
|
GRPC_CLOSURE_INIT(&finish_destroy_channel_closure_, FinishDestroy, this,
|
1611
1493
|
grpc_schedule_on_exec_ctx);
|
1612
|
-
|
1613
|
-
gpr_log(GPR_INFO, "Disconnected client");
|
1614
|
-
}
|
1494
|
+
GRPC_TRACE_LOG(server_channel, INFO) << "Disconnected client";
|
1615
1495
|
grpc_transport_op* op =
|
1616
1496
|
grpc_make_transport_op(&finish_destroy_channel_closure_);
|
1617
1497
|
op->set_accept_stream = true;
|