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
@@ -0,0 +1,222 @@
|
|
1
|
+
// Copyright 2024 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#include "src/core/lib/surface/server_call.h"
|
16
|
+
|
17
|
+
#include <inttypes.h>
|
18
|
+
#include <limits.h>
|
19
|
+
#include <stdlib.h>
|
20
|
+
#include <string.h>
|
21
|
+
|
22
|
+
#include <memory>
|
23
|
+
#include <string>
|
24
|
+
#include <utility>
|
25
|
+
|
26
|
+
#include "absl/log/check.h"
|
27
|
+
#include "absl/strings/string_view.h"
|
28
|
+
|
29
|
+
#include <grpc/byte_buffer.h>
|
30
|
+
#include <grpc/compression.h>
|
31
|
+
#include <grpc/event_engine/event_engine.h>
|
32
|
+
#include <grpc/grpc.h>
|
33
|
+
#include <grpc/impl/call.h>
|
34
|
+
#include <grpc/impl/propagation_bits.h>
|
35
|
+
#include <grpc/slice.h>
|
36
|
+
#include <grpc/slice_buffer.h>
|
37
|
+
#include <grpc/status.h>
|
38
|
+
#include <grpc/support/alloc.h>
|
39
|
+
#include <grpc/support/atm.h>
|
40
|
+
#include <grpc/support/log.h>
|
41
|
+
#include <grpc/support/port_platform.h>
|
42
|
+
#include <grpc/support/string_util.h>
|
43
|
+
|
44
|
+
#include "src/core/lib/gprpp/bitset.h"
|
45
|
+
#include "src/core/lib/promise/all_ok.h"
|
46
|
+
#include "src/core/lib/promise/map.h"
|
47
|
+
#include "src/core/lib/promise/poll.h"
|
48
|
+
#include "src/core/lib/promise/status_flag.h"
|
49
|
+
#include "src/core/lib/promise/try_seq.h"
|
50
|
+
#include "src/core/lib/resource_quota/arena.h"
|
51
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
52
|
+
#include "src/core/lib/surface/completion_queue.h"
|
53
|
+
#include "src/core/lib/transport/metadata.h"
|
54
|
+
#include "src/core/lib/transport/metadata_batch.h"
|
55
|
+
#include "src/core/server/server_interface.h"
|
56
|
+
|
57
|
+
namespace grpc_core {
|
58
|
+
|
59
|
+
namespace {
|
60
|
+
|
61
|
+
grpc_call_error ValidateServerBatch(const grpc_op* ops, size_t nops) {
|
62
|
+
BitSet<8> got_ops;
|
63
|
+
for (size_t op_idx = 0; op_idx < nops; op_idx++) {
|
64
|
+
const grpc_op& op = ops[op_idx];
|
65
|
+
switch (op.op) {
|
66
|
+
case GRPC_OP_SEND_INITIAL_METADATA:
|
67
|
+
if (!AreInitialMetadataFlagsValid(op.flags)) {
|
68
|
+
return GRPC_CALL_ERROR_INVALID_FLAGS;
|
69
|
+
}
|
70
|
+
if (!ValidateMetadata(op.data.send_initial_metadata.count,
|
71
|
+
op.data.send_initial_metadata.metadata)) {
|
72
|
+
return GRPC_CALL_ERROR_INVALID_METADATA;
|
73
|
+
}
|
74
|
+
break;
|
75
|
+
case GRPC_OP_SEND_MESSAGE:
|
76
|
+
if (!AreWriteFlagsValid(op.flags)) {
|
77
|
+
return GRPC_CALL_ERROR_INVALID_FLAGS;
|
78
|
+
}
|
79
|
+
break;
|
80
|
+
case GRPC_OP_SEND_STATUS_FROM_SERVER:
|
81
|
+
if (op.flags != 0) return GRPC_CALL_ERROR_INVALID_FLAGS;
|
82
|
+
if (!ValidateMetadata(
|
83
|
+
op.data.send_status_from_server.trailing_metadata_count,
|
84
|
+
op.data.send_status_from_server.trailing_metadata)) {
|
85
|
+
return GRPC_CALL_ERROR_INVALID_METADATA;
|
86
|
+
}
|
87
|
+
break;
|
88
|
+
case GRPC_OP_RECV_MESSAGE:
|
89
|
+
case GRPC_OP_RECV_CLOSE_ON_SERVER:
|
90
|
+
if (op.flags != 0) return GRPC_CALL_ERROR_INVALID_FLAGS;
|
91
|
+
break;
|
92
|
+
case GRPC_OP_RECV_INITIAL_METADATA:
|
93
|
+
case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
|
94
|
+
case GRPC_OP_RECV_STATUS_ON_CLIENT:
|
95
|
+
return GRPC_CALL_ERROR_NOT_ON_SERVER;
|
96
|
+
}
|
97
|
+
if (got_ops.is_set(op.op)) return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
|
98
|
+
got_ops.set(op.op);
|
99
|
+
}
|
100
|
+
return GRPC_CALL_OK;
|
101
|
+
}
|
102
|
+
|
103
|
+
} // namespace
|
104
|
+
|
105
|
+
grpc_call_error ServerCall::StartBatch(const grpc_op* ops, size_t nops,
|
106
|
+
void* notify_tag,
|
107
|
+
bool is_notify_tag_closure) {
|
108
|
+
if (nops == 0) {
|
109
|
+
EndOpImmediately(cq_, notify_tag, is_notify_tag_closure);
|
110
|
+
return GRPC_CALL_OK;
|
111
|
+
}
|
112
|
+
const grpc_call_error validation_result = ValidateServerBatch(ops, nops);
|
113
|
+
if (validation_result != GRPC_CALL_OK) {
|
114
|
+
return validation_result;
|
115
|
+
}
|
116
|
+
CommitBatch(ops, nops, notify_tag, is_notify_tag_closure);
|
117
|
+
return GRPC_CALL_OK;
|
118
|
+
}
|
119
|
+
|
120
|
+
void ServerCall::CommitBatch(const grpc_op* ops, size_t nops, void* notify_tag,
|
121
|
+
bool is_notify_tag_closure) {
|
122
|
+
BatchOpIndex op_index(ops, nops);
|
123
|
+
if (!is_notify_tag_closure) grpc_cq_begin_op(cq_, notify_tag);
|
124
|
+
auto send_initial_metadata =
|
125
|
+
op_index.OpHandler<GRPC_OP_SEND_INITIAL_METADATA>([this](
|
126
|
+
const grpc_op& op) {
|
127
|
+
auto metadata = arena()->MakePooled<ServerMetadata>();
|
128
|
+
PrepareOutgoingInitialMetadata(op, *metadata);
|
129
|
+
CToMetadata(op.data.send_initial_metadata.metadata,
|
130
|
+
op.data.send_initial_metadata.count, metadata.get());
|
131
|
+
GRPC_TRACE_LOG(call, INFO)
|
132
|
+
<< DebugTag() << "[call] Send initial metadata";
|
133
|
+
return [this, metadata = std::move(metadata)]() mutable {
|
134
|
+
return call_handler_.PushServerInitialMetadata(std::move(metadata));
|
135
|
+
};
|
136
|
+
});
|
137
|
+
auto send_message =
|
138
|
+
op_index.OpHandler<GRPC_OP_SEND_MESSAGE>([this](const grpc_op& op) {
|
139
|
+
SliceBuffer send;
|
140
|
+
grpc_slice_buffer_swap(
|
141
|
+
&op.data.send_message.send_message->data.raw.slice_buffer,
|
142
|
+
send.c_slice_buffer());
|
143
|
+
auto msg = arena()->MakePooled<Message>(std::move(send), op.flags);
|
144
|
+
return [this, msg = std::move(msg)]() mutable {
|
145
|
+
return call_handler_.PushMessage(std::move(msg));
|
146
|
+
};
|
147
|
+
});
|
148
|
+
auto send_trailing_metadata =
|
149
|
+
op_index.OpHandler<GRPC_OP_SEND_STATUS_FROM_SERVER>(
|
150
|
+
[this](const grpc_op& op) {
|
151
|
+
auto metadata = arena()->MakePooled<ServerMetadata>();
|
152
|
+
CToMetadata(op.data.send_status_from_server.trailing_metadata,
|
153
|
+
op.data.send_status_from_server.trailing_metadata_count,
|
154
|
+
metadata.get());
|
155
|
+
metadata->Set(GrpcStatusMetadata(),
|
156
|
+
op.data.send_status_from_server.status);
|
157
|
+
if (auto* details =
|
158
|
+
op.data.send_status_from_server.status_details) {
|
159
|
+
// TODO(ctiller): this should not be a copy, but we have
|
160
|
+
// callers that allocate and pass in a slice created with
|
161
|
+
// grpc_slice_from_static_string and then delete the string
|
162
|
+
// after passing it in, which shouldn't be a supported API.
|
163
|
+
metadata->Set(GrpcMessageMetadata(),
|
164
|
+
Slice(grpc_slice_copy(*details)));
|
165
|
+
}
|
166
|
+
CHECK(metadata != nullptr);
|
167
|
+
return [this, metadata = std::move(metadata)]() mutable {
|
168
|
+
CHECK(metadata != nullptr);
|
169
|
+
return [this, metadata = std::move(
|
170
|
+
metadata)]() mutable -> Poll<Success> {
|
171
|
+
CHECK(metadata != nullptr);
|
172
|
+
call_handler_.PushServerTrailingMetadata(std::move(metadata));
|
173
|
+
return Success{};
|
174
|
+
};
|
175
|
+
};
|
176
|
+
});
|
177
|
+
auto recv_message =
|
178
|
+
op_index.OpHandler<GRPC_OP_RECV_MESSAGE>([this](const grpc_op& op) {
|
179
|
+
return message_receiver_.MakeBatchOp(op, &call_handler_);
|
180
|
+
});
|
181
|
+
auto primary_ops = AllOk<StatusFlag>(
|
182
|
+
TrySeq(AllOk<StatusFlag>(std::move(send_initial_metadata),
|
183
|
+
std::move(send_message)),
|
184
|
+
std::move(send_trailing_metadata)),
|
185
|
+
std::move(recv_message));
|
186
|
+
if (auto* op = op_index.op(GRPC_OP_RECV_CLOSE_ON_SERVER)) {
|
187
|
+
auto recv_trailing_metadata = OpHandler<GRPC_OP_RECV_CLOSE_ON_SERVER>(
|
188
|
+
[this, cancelled = op->data.recv_close_on_server.cancelled]() {
|
189
|
+
return Map(call_handler_.WasCancelled(),
|
190
|
+
[cancelled, this](bool result) -> Success {
|
191
|
+
ResetDeadline();
|
192
|
+
*cancelled = result ? 1 : 0;
|
193
|
+
return Success{};
|
194
|
+
});
|
195
|
+
});
|
196
|
+
call_handler_.SpawnInfallible(
|
197
|
+
"final-batch", InfallibleBatch(std::move(primary_ops),
|
198
|
+
std::move(recv_trailing_metadata),
|
199
|
+
is_notify_tag_closure, notify_tag, cq_));
|
200
|
+
} else {
|
201
|
+
call_handler_.SpawnInfallible(
|
202
|
+
"batch", FallibleBatch(std::move(primary_ops), is_notify_tag_closure,
|
203
|
+
notify_tag, cq_));
|
204
|
+
}
|
205
|
+
}
|
206
|
+
|
207
|
+
grpc_call* MakeServerCall(CallHandler call_handler,
|
208
|
+
ClientMetadataHandle client_initial_metadata,
|
209
|
+
ServerInterface* server, grpc_completion_queue* cq,
|
210
|
+
grpc_metadata_array* publish_initial_metadata) {
|
211
|
+
PublishMetadataArray(client_initial_metadata.get(), publish_initial_metadata,
|
212
|
+
false);
|
213
|
+
// TODO(ctiller): ideally we'd put this in the arena with the CallHandler,
|
214
|
+
// but there's an ownership problem: CallHandler owns the arena, and so would
|
215
|
+
// get destroyed before the base class Call destructor runs, leading to
|
216
|
+
// UB/crash. Investigate another path.
|
217
|
+
return (new ServerCall(std::move(client_initial_metadata),
|
218
|
+
std::move(call_handler), server, cq))
|
219
|
+
->c_ptr();
|
220
|
+
}
|
221
|
+
|
222
|
+
} // namespace grpc_core
|
@@ -0,0 +1,167 @@
|
|
1
|
+
// Copyright 2024 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef GRPC_SRC_CORE_LIB_SURFACE_SERVER_CALL_H
|
16
|
+
#define GRPC_SRC_CORE_LIB_SURFACE_SERVER_CALL_H
|
17
|
+
|
18
|
+
#include <inttypes.h>
|
19
|
+
#include <limits.h>
|
20
|
+
#include <stdlib.h>
|
21
|
+
#include <string.h>
|
22
|
+
|
23
|
+
#include <cstdint>
|
24
|
+
#include <memory>
|
25
|
+
#include <string>
|
26
|
+
#include <utility>
|
27
|
+
|
28
|
+
#include "absl/log/check.h"
|
29
|
+
#include "absl/status/status.h"
|
30
|
+
#include "absl/strings/str_format.h"
|
31
|
+
#include "absl/strings/string_view.h"
|
32
|
+
|
33
|
+
#include <grpc/byte_buffer.h>
|
34
|
+
#include <grpc/compression.h>
|
35
|
+
#include <grpc/event_engine/event_engine.h>
|
36
|
+
#include <grpc/grpc.h>
|
37
|
+
#include <grpc/impl/call.h>
|
38
|
+
#include <grpc/impl/propagation_bits.h>
|
39
|
+
#include <grpc/slice.h>
|
40
|
+
#include <grpc/slice_buffer.h>
|
41
|
+
#include <grpc/status.h>
|
42
|
+
#include <grpc/support/alloc.h>
|
43
|
+
#include <grpc/support/atm.h>
|
44
|
+
#include <grpc/support/log.h>
|
45
|
+
#include <grpc/support/port_platform.h>
|
46
|
+
#include <grpc/support/string_util.h>
|
47
|
+
|
48
|
+
#include "src/core/lib/gprpp/crash.h"
|
49
|
+
#include "src/core/lib/gprpp/ref_counted.h"
|
50
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
51
|
+
#include "src/core/lib/promise/poll.h"
|
52
|
+
#include "src/core/lib/resource_quota/arena.h"
|
53
|
+
#include "src/core/lib/surface/call.h"
|
54
|
+
#include "src/core/lib/surface/call_utils.h"
|
55
|
+
#include "src/core/lib/transport/metadata.h"
|
56
|
+
#include "src/core/lib/transport/metadata_batch.h"
|
57
|
+
#include "src/core/server/server_interface.h"
|
58
|
+
#include "src/core/telemetry/stats.h"
|
59
|
+
#include "src/core/telemetry/stats_data.h"
|
60
|
+
|
61
|
+
namespace grpc_core {
|
62
|
+
|
63
|
+
class ServerCall final : public Call, public DualRefCounted<ServerCall> {
|
64
|
+
public:
|
65
|
+
ServerCall(ClientMetadataHandle client_initial_metadata,
|
66
|
+
CallHandler call_handler, ServerInterface* server,
|
67
|
+
grpc_completion_queue* cq)
|
68
|
+
: Call(false,
|
69
|
+
client_initial_metadata->get(GrpcTimeoutMetadata())
|
70
|
+
.value_or(Timestamp::InfFuture()),
|
71
|
+
call_handler.arena()->Ref(), call_handler.event_engine()),
|
72
|
+
call_handler_(std::move(call_handler)),
|
73
|
+
client_initial_metadata_stored_(std::move(client_initial_metadata)),
|
74
|
+
cq_(cq),
|
75
|
+
server_(server) {
|
76
|
+
global_stats().IncrementServerCallsCreated();
|
77
|
+
}
|
78
|
+
|
79
|
+
void CancelWithError(grpc_error_handle error) override {
|
80
|
+
call_handler_.SpawnInfallible(
|
81
|
+
"CancelWithError",
|
82
|
+
[self = WeakRefAsSubclass<ServerCall>(), error = std::move(error)] {
|
83
|
+
auto status = ServerMetadataFromStatus(error);
|
84
|
+
status->Set(GrpcCallWasCancelled(), true);
|
85
|
+
self->call_handler_.PushServerTrailingMetadata(std::move(status));
|
86
|
+
return Empty{};
|
87
|
+
});
|
88
|
+
}
|
89
|
+
bool is_trailers_only() const override {
|
90
|
+
Crash("is_trailers_only not implemented for server calls");
|
91
|
+
}
|
92
|
+
absl::string_view GetServerAuthority() const override {
|
93
|
+
Crash("unimplemented");
|
94
|
+
}
|
95
|
+
grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
|
96
|
+
bool is_notify_tag_closure) override;
|
97
|
+
|
98
|
+
void ExternalRef() override { Ref().release(); }
|
99
|
+
void ExternalUnref() override { Unref(); }
|
100
|
+
void InternalRef(const char*) override { WeakRef().release(); }
|
101
|
+
void InternalUnref(const char*) override { WeakUnref(); }
|
102
|
+
|
103
|
+
void Orphaned() override {
|
104
|
+
// TODO(ctiller): only when we're not already finished
|
105
|
+
CancelWithError(absl::CancelledError());
|
106
|
+
}
|
107
|
+
|
108
|
+
void SetCompletionQueue(grpc_completion_queue*) override {
|
109
|
+
Crash("unimplemented");
|
110
|
+
}
|
111
|
+
|
112
|
+
grpc_compression_options compression_options() override {
|
113
|
+
return server_->compression_options();
|
114
|
+
}
|
115
|
+
|
116
|
+
grpc_call_stack* call_stack() override { return nullptr; }
|
117
|
+
|
118
|
+
char* GetPeer() override {
|
119
|
+
Slice peer_slice = GetPeerString();
|
120
|
+
if (!peer_slice.empty()) {
|
121
|
+
absl::string_view peer_string_view = peer_slice.as_string_view();
|
122
|
+
char* peer_string =
|
123
|
+
static_cast<char*>(gpr_malloc(peer_string_view.size() + 1));
|
124
|
+
memcpy(peer_string, peer_string_view.data(), peer_string_view.size());
|
125
|
+
peer_string[peer_string_view.size()] = '\0';
|
126
|
+
return peer_string;
|
127
|
+
}
|
128
|
+
return gpr_strdup("unknown");
|
129
|
+
}
|
130
|
+
|
131
|
+
bool Completed() final { Crash("unimplemented"); }
|
132
|
+
bool failed_before_recv_message() const final { Crash("unimplemented"); }
|
133
|
+
|
134
|
+
uint32_t test_only_message_flags() override {
|
135
|
+
return message_receiver_.last_message_flags();
|
136
|
+
}
|
137
|
+
|
138
|
+
grpc_compression_algorithm incoming_compression_algorithm() override {
|
139
|
+
return message_receiver_.incoming_compression_algorithm();
|
140
|
+
}
|
141
|
+
|
142
|
+
void SetIncomingCompressionAlgorithm(
|
143
|
+
grpc_compression_algorithm algorithm) override {
|
144
|
+
message_receiver_.SetIncomingCompressionAlgorithm(algorithm);
|
145
|
+
}
|
146
|
+
|
147
|
+
private:
|
148
|
+
void CommitBatch(const grpc_op* ops, size_t nops, void* notify_tag,
|
149
|
+
bool is_notify_tag_closure);
|
150
|
+
|
151
|
+
std::string DebugTag() { return absl::StrFormat("SERVER_CALL[%p]: ", this); }
|
152
|
+
|
153
|
+
CallHandler call_handler_;
|
154
|
+
MessageReceiver message_receiver_;
|
155
|
+
ClientMetadataHandle client_initial_metadata_stored_;
|
156
|
+
grpc_completion_queue* const cq_;
|
157
|
+
ServerInterface* const server_;
|
158
|
+
};
|
159
|
+
|
160
|
+
grpc_call* MakeServerCall(CallHandler call_handler,
|
161
|
+
ClientMetadataHandle client_initial_metadata,
|
162
|
+
ServerInterface* server, grpc_completion_queue* cq,
|
163
|
+
grpc_metadata_array* publish_initial_metadata);
|
164
|
+
|
165
|
+
} // namespace grpc_core
|
166
|
+
|
167
|
+
#endif // GRPC_SRC_CORE_LIB_SURFACE_SERVER_CALL_H
|
@@ -22,6 +22,6 @@
|
|
22
22
|
#include <grpc/grpc.h>
|
23
23
|
#include <grpc/support/port_platform.h>
|
24
24
|
|
25
|
-
const char* grpc_version_string(void) { return "
|
25
|
+
const char* grpc_version_string(void) { return "42.0.0"; }
|
26
26
|
|
27
|
-
const char* grpc_g_stands_for(void) { return "
|
27
|
+
const char* grpc_g_stands_for(void) { return "gnarly"; }
|
@@ -27,8 +27,6 @@
|
|
27
27
|
|
28
28
|
#include <grpc/support/port_platform.h>
|
29
29
|
|
30
|
-
grpc_core::TraceFlag grpc_bdp_estimator_trace(false, "bdp_estimator");
|
31
|
-
|
32
30
|
namespace grpc_core {
|
33
31
|
|
34
32
|
BdpEstimator::BdpEstimator(absl::string_view name)
|
@@ -48,7 +46,7 @@ Timestamp BdpEstimator::CompletePing() {
|
|
48
46
|
1e-9 * static_cast<double>(dt_ts.tv_nsec);
|
49
47
|
double bw = dt > 0 ? (static_cast<double>(accumulator_) / dt) : 0;
|
50
48
|
Duration start_inter_ping_delay = inter_ping_delay_;
|
51
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
49
|
+
if (GRPC_TRACE_FLAG_ENABLED(bdp_estimator)) {
|
52
50
|
gpr_log(GPR_INFO,
|
53
51
|
"bdp[%s]:complete acc=%" PRId64 " est=%" PRId64
|
54
52
|
" dt=%lf bw=%lfMbs bw_est=%lfMbs",
|
@@ -59,7 +57,7 @@ Timestamp BdpEstimator::CompletePing() {
|
|
59
57
|
if (accumulator_ > 2 * estimate_ / 3 && bw > bw_est_) {
|
60
58
|
estimate_ = std::max(accumulator_, estimate_ * 2);
|
61
59
|
bw_est_ = bw;
|
62
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
60
|
+
if (GRPC_TRACE_FLAG_ENABLED(bdp_estimator)) {
|
63
61
|
gpr_log(GPR_INFO, "bdp[%s]: estimate increased to %" PRId64,
|
64
62
|
std::string(name_).c_str(), estimate_);
|
65
63
|
}
|
@@ -75,7 +73,7 @@ Timestamp BdpEstimator::CompletePing() {
|
|
75
73
|
}
|
76
74
|
if (start_inter_ping_delay != inter_ping_delay_) {
|
77
75
|
stable_estimate_count_ = 0;
|
78
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
76
|
+
if (GRPC_TRACE_FLAG_ENABLED(bdp_estimator)) {
|
79
77
|
gpr_log(GPR_INFO, "bdp[%s]:update_inter_time to %" PRId64 "ms",
|
80
78
|
std::string(name_).c_str(), inter_ping_delay_.millis());
|
81
79
|
}
|
@@ -33,8 +33,6 @@
|
|
33
33
|
#include "src/core/lib/debug/trace.h"
|
34
34
|
#include "src/core/lib/gprpp/time.h"
|
35
35
|
|
36
|
-
extern grpc_core::TraceFlag grpc_bdp_estimator_trace;
|
37
|
-
|
38
36
|
namespace grpc_core {
|
39
37
|
|
40
38
|
class BdpEstimator {
|
@@ -51,7 +49,7 @@ class BdpEstimator {
|
|
51
49
|
// grpc_bdp_estimator_add_incoming_bytes once a ping has been scheduled by a
|
52
50
|
// transport (but not necessarily started)
|
53
51
|
void SchedulePing() {
|
54
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
52
|
+
if (GRPC_TRACE_FLAG_ENABLED(bdp_estimator)) {
|
55
53
|
gpr_log(GPR_INFO, "bdp[%s]:sched acc=%" PRId64 " est=%" PRId64,
|
56
54
|
std::string(name_).c_str(), accumulator_, estimate_);
|
57
55
|
}
|
@@ -64,7 +62,7 @@ class BdpEstimator {
|
|
64
62
|
// once
|
65
63
|
// the ping is on the wire
|
66
64
|
void StartPing() {
|
67
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
65
|
+
if (GRPC_TRACE_FLAG_ENABLED(bdp_estimator)) {
|
68
66
|
gpr_log(GPR_INFO, "bdp[%s]:start acc=%" PRId64 " est=%" PRId64,
|
69
67
|
std::string(name_).c_str(), accumulator_, estimate_);
|
70
68
|
}
|
@@ -28,7 +28,7 @@
|
|
28
28
|
|
29
29
|
namespace grpc_core {
|
30
30
|
|
31
|
-
class CallSizeEstimator {
|
31
|
+
class CallSizeEstimator final {
|
32
32
|
public:
|
33
33
|
explicit CallSizeEstimator(size_t initial_estimate)
|
34
34
|
: call_size_estimate_(initial_estimate) {}
|
@@ -52,19 +52,21 @@ class CallSizeEstimator {
|
|
52
52
|
std::atomic<size_t> call_size_estimate_;
|
53
53
|
};
|
54
54
|
|
55
|
-
class CallArenaAllocator : public
|
55
|
+
class CallArenaAllocator final : public ArenaFactory {
|
56
56
|
public:
|
57
57
|
CallArenaAllocator(MemoryAllocator allocator, size_t initial_size)
|
58
|
-
:
|
58
|
+
: ArenaFactory(std::move(allocator)),
|
59
|
+
call_size_estimator_(initial_size) {}
|
59
60
|
|
60
|
-
Arena
|
61
|
-
return Arena::Create(call_size_estimator_.CallSizeEstimate(),
|
61
|
+
RefCountedPtr<Arena> MakeArena() override {
|
62
|
+
return Arena::Create(call_size_estimator_.CallSizeEstimate(), Ref());
|
62
63
|
}
|
63
64
|
|
64
|
-
void
|
65
|
+
void FinalizeArena(Arena* arena) override {
|
66
|
+
call_size_estimator_.UpdateCallSizeEstimate(arena->TotalUsedBytes());
|
67
|
+
}
|
65
68
|
|
66
69
|
private:
|
67
|
-
MemoryAllocator allocator_;
|
68
70
|
CallSizeEstimator call_size_estimator_;
|
69
71
|
};
|
70
72
|
|
@@ -0,0 +1,76 @@
|
|
1
|
+
// Copyright 2024 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef GRPC_SRC_CORE_LIB_TRANSPORT_CALL_DESTINATION_H
|
16
|
+
#define GRPC_SRC_CORE_LIB_TRANSPORT_CALL_DESTINATION_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include "src/core/lib/gprpp/orphanable.h"
|
21
|
+
#include "src/core/lib/transport/call_spine.h"
|
22
|
+
|
23
|
+
namespace grpc_core {
|
24
|
+
|
25
|
+
// UnstartedCallDestination is responsible for starting an UnstartedCallHandler
|
26
|
+
// and then processing operations on the resulting CallHandler.
|
27
|
+
//
|
28
|
+
// Examples of UnstartedCallDestinations include:
|
29
|
+
// - a load-balanced call in the client channel
|
30
|
+
// - a hijacking filter (see Interceptor)
|
31
|
+
class UnstartedCallDestination
|
32
|
+
: public DualRefCounted<UnstartedCallDestination> {
|
33
|
+
public:
|
34
|
+
using DualRefCounted::DualRefCounted;
|
35
|
+
|
36
|
+
~UnstartedCallDestination() override = default;
|
37
|
+
// Start a call. The UnstartedCallHandler will be consumed by the Destination
|
38
|
+
// and started.
|
39
|
+
// Must be called from the party owned by the call, eg the following must
|
40
|
+
// hold:
|
41
|
+
// CHECK(GetContext<Activity>() == unstarted_call_handler.party());
|
42
|
+
virtual void StartCall(UnstartedCallHandler unstarted_call_handler) = 0;
|
43
|
+
};
|
44
|
+
|
45
|
+
// CallDestination is responsible for handling processing of an already started
|
46
|
+
// call.
|
47
|
+
//
|
48
|
+
// Examples of CallDestinations include:
|
49
|
+
// - a client transport
|
50
|
+
// - the server API
|
51
|
+
class CallDestination : public DualRefCounted<CallDestination> {
|
52
|
+
public:
|
53
|
+
virtual void HandleCall(CallHandler unstarted_call_handler) = 0;
|
54
|
+
};
|
55
|
+
|
56
|
+
template <typename HC>
|
57
|
+
auto MakeCallDestinationFromHandlerFunction(HC handle_call) {
|
58
|
+
class Impl : public CallDestination {
|
59
|
+
public:
|
60
|
+
explicit Impl(HC handle_call) : handle_call_(std::move(handle_call)) {}
|
61
|
+
|
62
|
+
void Orphaned() override {}
|
63
|
+
|
64
|
+
void HandleCall(CallHandler call_handler) override {
|
65
|
+
handle_call_(std::move(call_handler));
|
66
|
+
}
|
67
|
+
|
68
|
+
private:
|
69
|
+
HC handle_call_;
|
70
|
+
};
|
71
|
+
return MakeRefCounted<Impl>(std::move(handle_call));
|
72
|
+
}
|
73
|
+
|
74
|
+
} // namespace grpc_core
|
75
|
+
|
76
|
+
#endif // GRPC_SRC_CORE_LIB_TRANSPORT_CALL_DESTINATION_H
|
@@ -29,6 +29,12 @@ void* Offset(void* base, size_t amt) { return static_cast<char*>(base) + amt; }
|
|
29
29
|
|
30
30
|
namespace filters_detail {
|
31
31
|
|
32
|
+
void RunHalfClose(absl::Span<const HalfCloseOperator> ops, void* call_data) {
|
33
|
+
for (const auto& op : ops) {
|
34
|
+
op.half_close(Offset(call_data, op.call_offset), op.channel_data);
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
32
38
|
template <typename T>
|
33
39
|
OperationExecutor<T>::~OperationExecutor() {
|
34
40
|
if (promise_data_ != nullptr) {
|
@@ -164,8 +170,15 @@ Poll<T> InfallibleOperationExecutor<T>::ContinueStep(void* call_data) {
|
|
164
170
|
template class OperationExecutor<ClientMetadataHandle>;
|
165
171
|
template class OperationExecutor<MessageHandle>;
|
166
172
|
template class InfallibleOperationExecutor<ServerMetadataHandle>;
|
173
|
+
|
167
174
|
} // namespace filters_detail
|
168
175
|
|
176
|
+
namespace {
|
177
|
+
// Call data for those calls that don't have any call data
|
178
|
+
// (we form pointers to this that aren't allowed to be nullptr)
|
179
|
+
char g_empty_call_data;
|
180
|
+
} // namespace
|
181
|
+
|
169
182
|
///////////////////////////////////////////////////////////////////////////////
|
170
183
|
// CallFilters
|
171
184
|
|
@@ -175,7 +188,7 @@ CallFilters::CallFilters(ClientMetadataHandle client_initial_metadata)
|
|
175
188
|
client_initial_metadata_(std::move(client_initial_metadata)) {}
|
176
189
|
|
177
190
|
CallFilters::~CallFilters() {
|
178
|
-
if (call_data_ != nullptr) {
|
191
|
+
if (call_data_ != nullptr && call_data_ != &g_empty_call_data) {
|
179
192
|
for (const auto& destructor : stack_->data_.filter_destructor) {
|
180
193
|
destructor.call_destroy(Offset(call_data_, destructor.call_offset));
|
181
194
|
}
|
@@ -186,8 +199,12 @@ CallFilters::~CallFilters() {
|
|
186
199
|
void CallFilters::SetStack(RefCountedPtr<Stack> stack) {
|
187
200
|
CHECK_EQ(call_data_, nullptr);
|
188
201
|
stack_ = std::move(stack);
|
189
|
-
|
190
|
-
|
202
|
+
if (stack_->data_.call_data_size != 0) {
|
203
|
+
call_data_ = gpr_malloc_aligned(stack_->data_.call_data_size,
|
204
|
+
stack_->data_.call_data_alignment);
|
205
|
+
} else {
|
206
|
+
call_data_ = &g_empty_call_data;
|
207
|
+
}
|
191
208
|
for (const auto& constructor : stack_->data_.filter_constructor) {
|
192
209
|
constructor.call_init(Offset(call_data_, constructor.call_offset),
|
193
210
|
constructor.channel_data);
|
@@ -208,25 +225,26 @@ void CallFilters::Finalize(const grpc_call_final_info* final_info) {
|
|
208
225
|
void CallFilters::CancelDueToFailedPipeOperation(SourceLocation but_where) {
|
209
226
|
// We expect something cancelled before now
|
210
227
|
if (server_trailing_metadata_ == nullptr) return;
|
211
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
228
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
212
229
|
gpr_log(but_where.file(), but_where.line(), GPR_LOG_SEVERITY_DEBUG,
|
213
230
|
"Cancelling due to failed pipe operation: %s",
|
214
231
|
DebugString().c_str());
|
215
232
|
}
|
216
|
-
|
217
|
-
ServerMetadataFromStatus(absl::CancelledError("Failed pipe operation"));
|
233
|
+
PushServerTrailingMetadata(
|
234
|
+
ServerMetadataFromStatus(absl::CancelledError("Failed pipe operation")));
|
218
235
|
server_trailing_metadata_waiter_.Wake();
|
219
236
|
}
|
220
237
|
|
221
238
|
void CallFilters::PushServerTrailingMetadata(ServerMetadataHandle md) {
|
222
239
|
CHECK(md != nullptr);
|
223
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
240
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
224
241
|
gpr_log(GPR_INFO, "%s PushServerTrailingMetadata[%p]: %s into %s",
|
225
242
|
GetContext<Activity>()->DebugTag().c_str(), this,
|
226
243
|
md->DebugString().c_str(), DebugString().c_str());
|
227
244
|
}
|
228
245
|
CHECK(md != nullptr);
|
229
|
-
if (
|
246
|
+
if (cancelled_.is_set()) return;
|
247
|
+
cancelled_.Set(md->get(GrpcCallWasCancelled()).value_or(false));
|
230
248
|
server_trailing_metadata_ = std::move(md);
|
231
249
|
client_initial_metadata_state_.CloseWithError();
|
232
250
|
server_initial_metadata_state_.CloseSending();
|
@@ -362,7 +380,7 @@ void filters_detail::PipeState::DropPush() {
|
|
362
380
|
case ValueState::kReady:
|
363
381
|
case ValueState::kProcessing:
|
364
382
|
case ValueState::kWaiting:
|
365
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
383
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
366
384
|
gpr_log(GPR_INFO, "%p drop push in state %s", this,
|
367
385
|
DebugString().c_str());
|
368
386
|
}
|
@@ -382,7 +400,7 @@ void filters_detail::PipeState::DropPull() {
|
|
382
400
|
case ValueState::kReady:
|
383
401
|
case ValueState::kProcessing:
|
384
402
|
case ValueState::kWaiting:
|
385
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
403
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
386
404
|
gpr_log(GPR_INFO, "%p drop pull in state %s", this,
|
387
405
|
DebugString().c_str());
|
388
406
|
}
|