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/lib/surface/call.h
CHANGED
@@ -36,9 +36,7 @@
|
|
36
36
|
|
37
37
|
#include "src/core/lib/channel/channel_fwd.h"
|
38
38
|
#include "src/core/lib/channel/channel_stack.h"
|
39
|
-
#include "src/core/lib/channel/context.h"
|
40
39
|
#include "src/core/lib/debug/trace.h"
|
41
|
-
#include "src/core/lib/gpr/time_precise.h"
|
42
40
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
43
41
|
#include "src/core/lib/gprpp/time.h"
|
44
42
|
#include "src/core/lib/iomgr/closure.h"
|
@@ -52,6 +50,7 @@
|
|
52
50
|
#include "src/core/lib/surface/channel.h"
|
53
51
|
#include "src/core/lib/transport/transport.h"
|
54
52
|
#include "src/core/server/server_interface.h"
|
53
|
+
#include "src/core/util/time_precise.h"
|
55
54
|
|
56
55
|
typedef void (*grpc_ioreq_completion_func)(grpc_call* call, int success,
|
57
56
|
void* user_data);
|
@@ -78,21 +77,23 @@ typedef struct grpc_call_create_args {
|
|
78
77
|
|
79
78
|
namespace grpc_core {
|
80
79
|
|
80
|
+
template <>
|
81
|
+
struct ArenaContextType<census_context> {
|
82
|
+
static void Destroy(census_context*) {}
|
83
|
+
};
|
84
|
+
|
81
85
|
class Call : public CppImplOf<Call, grpc_call>,
|
82
86
|
public grpc_event_engine::experimental::EventEngine::
|
83
87
|
Closure /* for deadlines */ {
|
84
88
|
public:
|
85
|
-
Arena* arena() { return arena_; }
|
89
|
+
Arena* arena() { return arena_.get(); }
|
86
90
|
bool is_client() const { return is_client_; }
|
87
91
|
|
88
|
-
virtual void ContextSet(grpc_context_index elem, void* value,
|
89
|
-
void (*destroy)(void* value)) = 0;
|
90
|
-
virtual void* ContextGet(grpc_context_index elem) const = 0;
|
91
92
|
virtual bool Completed() = 0;
|
92
93
|
void CancelWithStatus(grpc_status_code status, const char* description);
|
93
94
|
virtual void CancelWithError(grpc_error_handle error) = 0;
|
94
95
|
virtual void SetCompletionQueue(grpc_completion_queue* cq) = 0;
|
95
|
-
char* GetPeer();
|
96
|
+
virtual char* GetPeer() = 0;
|
96
97
|
virtual grpc_call_error StartBatch(const grpc_op* ops, size_t nops,
|
97
98
|
void* notify_tag,
|
98
99
|
bool is_notify_tag_closure) = 0;
|
@@ -111,10 +112,7 @@ class Call : public CppImplOf<Call, grpc_call>,
|
|
111
112
|
return deadline_;
|
112
113
|
}
|
113
114
|
|
114
|
-
|
115
|
-
return incoming_compression_algorithm_;
|
116
|
-
}
|
117
|
-
uint32_t test_only_message_flags() { return test_only_last_message_flags_; }
|
115
|
+
virtual uint32_t test_only_message_flags() = 0;
|
118
116
|
CompressionAlgorithmSet encodings_accepted_by_peer() {
|
119
117
|
return encodings_accepted_by_peer_;
|
120
118
|
}
|
@@ -124,12 +122,20 @@ class Call : public CppImplOf<Call, grpc_call>,
|
|
124
122
|
virtual grpc_call_stack* call_stack() = 0;
|
125
123
|
|
126
124
|
// Return the EventEngine used for this call's async execution.
|
127
|
-
|
128
|
-
|
125
|
+
grpc_event_engine::experimental::EventEngine* event_engine() const {
|
126
|
+
return event_engine_;
|
127
|
+
}
|
129
128
|
|
130
129
|
// Implementation of EventEngine::Closure, called when deadline expires
|
131
130
|
void Run() final;
|
132
131
|
|
132
|
+
gpr_cycle_counter start_time() const { return start_time_; }
|
133
|
+
|
134
|
+
void set_traced(bool traced) { traced_ = traced; }
|
135
|
+
bool traced() const { return traced_; }
|
136
|
+
|
137
|
+
virtual grpc_compression_algorithm incoming_compression_algorithm() = 0;
|
138
|
+
|
133
139
|
protected:
|
134
140
|
// The maximum number of concurrent batches possible.
|
135
141
|
// Based upon the maximum number of individually queueable ops in the batch
|
@@ -157,25 +163,12 @@ class Call : public CppImplOf<Call, grpc_call>,
|
|
157
163
|
Call* sibling_prev = nullptr;
|
158
164
|
};
|
159
165
|
|
160
|
-
Call(
|
161
|
-
|
162
|
-
: channel_(std::move(channel)),
|
163
|
-
arena_(arena),
|
164
|
-
send_deadline_(send_deadline),
|
165
|
-
is_client_(is_client) {
|
166
|
-
DCHECK_NE(arena_, nullptr);
|
167
|
-
DCHECK(channel_ != nullptr);
|
168
|
-
}
|
166
|
+
Call(bool is_client, Timestamp send_deadline, RefCountedPtr<Arena> arena,
|
167
|
+
grpc_event_engine::experimental::EventEngine* event_engine);
|
169
168
|
~Call() override = default;
|
170
169
|
|
171
|
-
void DeleteThis();
|
172
|
-
|
173
170
|
ParentCall* GetOrCreateParentCall();
|
174
171
|
ParentCall* parent_call();
|
175
|
-
Channel* channel() const {
|
176
|
-
DCHECK(channel_ != nullptr);
|
177
|
-
return channel_.get();
|
178
|
-
}
|
179
172
|
|
180
173
|
absl::Status InitParent(Call* parent, uint32_t propagation_mask);
|
181
174
|
void PublishToParent(Call* parent);
|
@@ -207,36 +200,30 @@ class Call : public CppImplOf<Call, grpc_call>,
|
|
207
200
|
// internal headers against external modification.
|
208
201
|
void PrepareOutgoingInitialMetadata(const grpc_op& op,
|
209
202
|
grpc_metadata_batch& md);
|
210
|
-
void NoteLastMessageFlags(uint32_t flags) {
|
211
|
-
test_only_last_message_flags_ = flags;
|
212
|
-
}
|
213
|
-
grpc_compression_algorithm incoming_compression_algorithm() const {
|
214
|
-
return incoming_compression_algorithm_;
|
215
|
-
}
|
216
203
|
|
217
204
|
void HandleCompressionAlgorithmDisabled(
|
218
205
|
grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE;
|
219
206
|
void HandleCompressionAlgorithmNotAccepted(
|
220
207
|
grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE;
|
221
208
|
|
222
|
-
|
209
|
+
virtual grpc_compression_options compression_options() = 0;
|
210
|
+
|
211
|
+
virtual void SetIncomingCompressionAlgorithm(
|
212
|
+
grpc_compression_algorithm algorithm) = 0;
|
223
213
|
|
224
214
|
private:
|
225
|
-
RefCountedPtr<
|
226
|
-
Arena* const arena_;
|
215
|
+
const RefCountedPtr<Arena> arena_;
|
227
216
|
std::atomic<ParentCall*> parent_call_{nullptr};
|
228
217
|
ChildCall* child_ = nullptr;
|
229
218
|
Timestamp send_deadline_;
|
230
219
|
const bool is_client_;
|
231
220
|
// flag indicating that cancellation is inherited
|
232
221
|
bool cancellation_is_inherited_ = false;
|
233
|
-
//
|
234
|
-
|
235
|
-
GRPC_COMPRESS_NONE;
|
222
|
+
// Is this call traced?
|
223
|
+
bool traced_ = false;
|
236
224
|
// Supported encodings (compression algorithms), a bitset.
|
237
225
|
// Always support no compression.
|
238
226
|
CompressionAlgorithmSet encodings_accepted_by_peer_{GRPC_COMPRESS_NONE};
|
239
|
-
uint32_t test_only_last_message_flags_ = 0;
|
240
227
|
// Peer name is protected by a mutex because it can be accessed by the
|
241
228
|
// application at the same moment as it is being set by the completion
|
242
229
|
// of the recv_initial_metadata op. The mutex should be mostly uncontended.
|
@@ -247,91 +234,14 @@ class Call : public CppImplOf<Call, grpc_call>,
|
|
247
234
|
Timestamp deadline_ ABSL_GUARDED_BY(deadline_mu_) = Timestamp::InfFuture();
|
248
235
|
grpc_event_engine::experimental::EventEngine::TaskHandle ABSL_GUARDED_BY(
|
249
236
|
deadline_mu_) deadline_task_;
|
237
|
+
grpc_event_engine::experimental::EventEngine* const event_engine_;
|
250
238
|
gpr_cycle_counter start_time_ = gpr_get_cycle_counter();
|
251
239
|
};
|
252
240
|
|
253
|
-
class BasicPromiseBasedCall;
|
254
|
-
class ServerPromiseBasedCall;
|
255
|
-
|
256
|
-
class ServerCallContext {
|
257
|
-
public:
|
258
|
-
virtual void PublishInitialMetadata(
|
259
|
-
ClientMetadataHandle metadata,
|
260
|
-
grpc_metadata_array* publish_initial_metadata) = 0;
|
261
|
-
|
262
|
-
// Construct the top of the server call promise for the v2 filter stack.
|
263
|
-
// TODO(ctiller): delete when v3 is available.
|
264
|
-
virtual ArenaPromise<ServerMetadataHandle> MakeTopOfServerCallPromise(
|
265
|
-
CallArgs call_args, grpc_completion_queue* cq,
|
266
|
-
absl::FunctionRef<void(grpc_call* call)> publish) = 0;
|
267
|
-
|
268
|
-
// Server stream data as supplied by the transport (so we can link the
|
269
|
-
// transport stream up with the call again).
|
270
|
-
// TODO(ctiller): legacy API - once we move transports to promises we'll
|
271
|
-
// create the promise directly and not need to pass around this token.
|
272
|
-
virtual const void* server_stream_data() = 0;
|
273
|
-
|
274
|
-
protected:
|
275
|
-
~ServerCallContext() = default;
|
276
|
-
};
|
277
|
-
|
278
|
-
// TODO(ctiller): move more call things into this type
|
279
|
-
class CallContext {
|
280
|
-
public:
|
281
|
-
explicit CallContext(BasicPromiseBasedCall* call) : call_(call) {}
|
282
|
-
|
283
|
-
// Run some action in the call activity context. This is needed to adapt some
|
284
|
-
// legacy systems to promises, and will likely disappear once that conversion
|
285
|
-
// is complete.
|
286
|
-
void RunInContext(absl::AnyInvocable<void()> fn);
|
287
|
-
|
288
|
-
// TODO(ctiller): remove this once transport APIs are promise based
|
289
|
-
void IncrementRefCount(const char* reason = "call_context");
|
290
|
-
|
291
|
-
// TODO(ctiller): remove this once transport APIs are promise based
|
292
|
-
void Unref(const char* reason = "call_context");
|
293
|
-
|
294
|
-
RefCountedPtr<CallContext> Ref() {
|
295
|
-
IncrementRefCount();
|
296
|
-
return RefCountedPtr<CallContext>(this);
|
297
|
-
}
|
298
|
-
|
299
|
-
grpc_call_stats* call_stats() { return &call_stats_; }
|
300
|
-
gpr_atm* peer_string_atm_ptr();
|
301
|
-
gpr_cycle_counter call_start_time() { return start_time_; }
|
302
|
-
|
303
|
-
ServerCallContext* server_call_context();
|
304
|
-
|
305
|
-
void set_traced(bool traced) { traced_ = traced; }
|
306
|
-
bool traced() const { return traced_; }
|
307
|
-
|
308
|
-
// TEMPORARY HACK
|
309
|
-
// Create a call spine object for this call.
|
310
|
-
// Said object should only be created once.
|
311
|
-
// Allows interop between the v2 call stack and the v3 (which is required by
|
312
|
-
// transports).
|
313
|
-
RefCountedPtr<CallSpineInterface> MakeCallSpine(CallArgs call_args);
|
314
|
-
grpc_call* c_call();
|
315
|
-
|
316
|
-
private:
|
317
|
-
friend class PromiseBasedCall;
|
318
|
-
// Call final info.
|
319
|
-
grpc_call_stats call_stats_;
|
320
|
-
// TODO(ctiller): remove this once transport APIs are promise based and we
|
321
|
-
// don't need refcounting here.
|
322
|
-
BasicPromiseBasedCall* const call_;
|
323
|
-
gpr_cycle_counter start_time_ = gpr_get_cycle_counter();
|
324
|
-
// Is this call traced?
|
325
|
-
bool traced_ = false;
|
326
|
-
};
|
327
|
-
|
328
241
|
template <>
|
329
|
-
struct
|
330
|
-
|
331
|
-
|
332
|
-
RefCountedPtr<CallSpineInterface> MakeServerCall(
|
333
|
-
ClientMetadataHandle client_initial_metadata, ServerInterface* server,
|
334
|
-
Channel* channel, Arena* arena);
|
242
|
+
struct ArenaContextType<Call> {
|
243
|
+
static void Destroy(Call*) {}
|
244
|
+
};
|
335
245
|
|
336
246
|
} // namespace grpc_core
|
337
247
|
|
@@ -362,28 +272,19 @@ grpc_call* grpc_call_from_top_element(grpc_call_element* surface_element);
|
|
362
272
|
void grpc_call_log_batch(const char* file, int line, gpr_log_severity severity,
|
363
273
|
const grpc_op* ops, size_t nops);
|
364
274
|
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
do { \
|
375
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_api_trace)) { \
|
376
|
-
grpc_call_log_batch(sev, ops, nops); \
|
377
|
-
} \
|
275
|
+
void grpc_call_tracer_set(grpc_call* call, grpc_core::ClientCallTracer* tracer);
|
276
|
+
|
277
|
+
void* grpc_call_tracer_get(grpc_call* call);
|
278
|
+
|
279
|
+
#define GRPC_CALL_LOG_BATCH(sev, ops, nops) \
|
280
|
+
do { \
|
281
|
+
if (GRPC_TRACE_FLAG_ENABLED(api)) { \
|
282
|
+
grpc_call_log_batch(sev, ops, nops); \
|
283
|
+
} \
|
378
284
|
} while (0)
|
379
285
|
|
380
286
|
uint8_t grpc_call_is_client(grpc_call* call);
|
381
287
|
|
382
|
-
// Get the estimated memory size for a call BESIDES the call stack. Combined
|
383
|
-
// with the size of the call stack, it helps estimate the arena size for the
|
384
|
-
// initial call.
|
385
|
-
size_t grpc_call_get_initial_size_estimate();
|
386
|
-
|
387
288
|
// Return an appropriate compression algorithm for the requested compression \a
|
388
289
|
// level in the context of \a call.
|
389
290
|
grpc_compression_algorithm grpc_call_compression_for_level(
|
@@ -397,7 +298,4 @@ bool grpc_call_is_trailers_only(const grpc_call* call);
|
|
397
298
|
// Returns the authority for the call, as seen on the server side.
|
398
299
|
absl::string_view grpc_call_server_authority(const grpc_call* call);
|
399
300
|
|
400
|
-
extern grpc_core::TraceFlag grpc_call_error_trace;
|
401
|
-
extern grpc_core::TraceFlag grpc_compression_trace;
|
402
|
-
|
403
301
|
#endif // GRPC_SRC_CORE_LIB_SURFACE_CALL_H
|
@@ -31,10 +31,10 @@
|
|
31
31
|
#include <grpc/support/log.h>
|
32
32
|
#include <grpc/support/port_platform.h>
|
33
33
|
|
34
|
-
#include "src/core/lib/gpr/string.h"
|
35
34
|
#include "src/core/lib/slice/slice_internal.h"
|
36
35
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
37
36
|
#include "src/core/lib/surface/call.h"
|
37
|
+
#include "src/core/util/string.h"
|
38
38
|
|
39
39
|
static void add_metadata(const grpc_metadata* md, size_t count,
|
40
40
|
std::vector<std::string>* b) {
|
@@ -0,0 +1,276 @@
|
|
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/call_utils.h"
|
16
|
+
|
17
|
+
#include <inttypes.h>
|
18
|
+
#include <limits.h>
|
19
|
+
#include <stdlib.h>
|
20
|
+
#include <string.h>
|
21
|
+
|
22
|
+
#include <algorithm>
|
23
|
+
#include <atomic>
|
24
|
+
#include <cstdint>
|
25
|
+
#include <memory>
|
26
|
+
#include <string>
|
27
|
+
#include <type_traits>
|
28
|
+
#include <utility>
|
29
|
+
|
30
|
+
#include "absl/log/check.h"
|
31
|
+
#include "absl/status/status.h"
|
32
|
+
#include "absl/strings/str_cat.h"
|
33
|
+
#include "absl/strings/str_format.h"
|
34
|
+
#include "absl/strings/string_view.h"
|
35
|
+
|
36
|
+
#include <grpc/byte_buffer.h>
|
37
|
+
#include <grpc/compression.h>
|
38
|
+
#include <grpc/event_engine/event_engine.h>
|
39
|
+
#include <grpc/grpc.h>
|
40
|
+
#include <grpc/impl/call.h>
|
41
|
+
#include <grpc/impl/propagation_bits.h>
|
42
|
+
#include <grpc/slice.h>
|
43
|
+
#include <grpc/slice_buffer.h>
|
44
|
+
#include <grpc/status.h>
|
45
|
+
#include <grpc/support/alloc.h>
|
46
|
+
#include <grpc/support/atm.h>
|
47
|
+
#include <grpc/support/log.h>
|
48
|
+
#include <grpc/support/port_platform.h>
|
49
|
+
#include <grpc/support/string_util.h>
|
50
|
+
|
51
|
+
#include "src/core/lib/channel/status_util.h"
|
52
|
+
#include "src/core/lib/gprpp/crash.h"
|
53
|
+
#include "src/core/lib/gprpp/debug_location.h"
|
54
|
+
#include "src/core/lib/gprpp/match.h"
|
55
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
56
|
+
#include "src/core/lib/promise/activity.h"
|
57
|
+
#include "src/core/lib/promise/context.h"
|
58
|
+
#include "src/core/lib/promise/poll.h"
|
59
|
+
#include "src/core/lib/promise/status_flag.h"
|
60
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
61
|
+
#include "src/core/lib/slice/slice_internal.h"
|
62
|
+
#include "src/core/lib/surface/completion_queue.h"
|
63
|
+
#include "src/core/lib/surface/validate_metadata.h"
|
64
|
+
#include "src/core/lib/transport/metadata.h"
|
65
|
+
#include "src/core/lib/transport/metadata_batch.h"
|
66
|
+
|
67
|
+
namespace grpc_core {
|
68
|
+
|
69
|
+
void PublishMetadataArray(grpc_metadata_batch* md, grpc_metadata_array* array,
|
70
|
+
bool is_client) {
|
71
|
+
const auto md_count = md->count();
|
72
|
+
if (md_count > array->capacity) {
|
73
|
+
array->capacity =
|
74
|
+
std::max(array->capacity + md->count(), array->capacity * 3 / 2);
|
75
|
+
array->metadata = static_cast<grpc_metadata*>(
|
76
|
+
gpr_realloc(array->metadata, sizeof(grpc_metadata) * array->capacity));
|
77
|
+
}
|
78
|
+
PublishToAppEncoder encoder(array, md, is_client);
|
79
|
+
md->Encode(&encoder);
|
80
|
+
}
|
81
|
+
|
82
|
+
void CToMetadata(grpc_metadata* metadata, size_t count,
|
83
|
+
grpc_metadata_batch* b) {
|
84
|
+
for (size_t i = 0; i < count; i++) {
|
85
|
+
grpc_metadata* md = &metadata[i];
|
86
|
+
auto key = StringViewFromSlice(md->key);
|
87
|
+
// Filter "content-length metadata"
|
88
|
+
if (key == "content-length") continue;
|
89
|
+
b->Append(key, Slice(CSliceRef(md->value)),
|
90
|
+
[md](absl::string_view error, const Slice& value) {
|
91
|
+
gpr_log(GPR_DEBUG, "Append error: %s",
|
92
|
+
absl::StrCat("key=", StringViewFromSlice(md->key),
|
93
|
+
" error=", error,
|
94
|
+
" value=", value.as_string_view())
|
95
|
+
.c_str());
|
96
|
+
});
|
97
|
+
}
|
98
|
+
}
|
99
|
+
|
100
|
+
const char* GrpcOpTypeName(grpc_op_type op) {
|
101
|
+
switch (op) {
|
102
|
+
case GRPC_OP_SEND_INITIAL_METADATA:
|
103
|
+
return "SendInitialMetadata";
|
104
|
+
case GRPC_OP_SEND_MESSAGE:
|
105
|
+
return "SendMessage";
|
106
|
+
case GRPC_OP_SEND_STATUS_FROM_SERVER:
|
107
|
+
return "SendStatusFromServer";
|
108
|
+
case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
|
109
|
+
return "SendCloseFromClient";
|
110
|
+
case GRPC_OP_RECV_MESSAGE:
|
111
|
+
return "RecvMessage";
|
112
|
+
case GRPC_OP_RECV_CLOSE_ON_SERVER:
|
113
|
+
return "RecvCloseOnServer";
|
114
|
+
case GRPC_OP_RECV_INITIAL_METADATA:
|
115
|
+
return "RecvInitialMetadata";
|
116
|
+
case GRPC_OP_RECV_STATUS_ON_CLIENT:
|
117
|
+
return "RecvStatusOnClient";
|
118
|
+
}
|
119
|
+
Crash("Unreachable");
|
120
|
+
}
|
121
|
+
|
122
|
+
////////////////////////////////////////////////////////////////////////
|
123
|
+
// WaitForCqEndOp
|
124
|
+
|
125
|
+
Poll<Empty> WaitForCqEndOp::operator()() {
|
126
|
+
GRPC_TRACE_LOG(promise_primitives, INFO)
|
127
|
+
<< Activity::current()->DebugTag() << "WaitForCqEndOp[" << this << "] "
|
128
|
+
<< StateString(state_);
|
129
|
+
if (auto* n = absl::get_if<NotStarted>(&state_)) {
|
130
|
+
if (n->is_closure) {
|
131
|
+
ExecCtx::Run(DEBUG_LOCATION, static_cast<grpc_closure*>(n->tag),
|
132
|
+
std::move(n->error));
|
133
|
+
return Empty{};
|
134
|
+
} else {
|
135
|
+
auto not_started = std::move(*n);
|
136
|
+
auto& started =
|
137
|
+
state_.emplace<Started>(GetContext<Activity>()->MakeOwningWaker());
|
138
|
+
grpc_cq_end_op(
|
139
|
+
not_started.cq, not_started.tag, std::move(not_started.error),
|
140
|
+
[](void* p, grpc_cq_completion*) {
|
141
|
+
auto started = static_cast<Started*>(p);
|
142
|
+
auto wakeup = std::move(started->waker);
|
143
|
+
started->done.store(true, std::memory_order_release);
|
144
|
+
wakeup.Wakeup();
|
145
|
+
},
|
146
|
+
&started, &started.completion);
|
147
|
+
}
|
148
|
+
}
|
149
|
+
auto& started = absl::get<Started>(state_);
|
150
|
+
if (started.done.load(std::memory_order_acquire)) {
|
151
|
+
return Empty{};
|
152
|
+
} else {
|
153
|
+
return Pending{};
|
154
|
+
}
|
155
|
+
}
|
156
|
+
|
157
|
+
std::string WaitForCqEndOp::StateString(const State& state) {
|
158
|
+
return Match(
|
159
|
+
state,
|
160
|
+
[](const NotStarted& x) {
|
161
|
+
return absl::StrFormat(
|
162
|
+
"NotStarted{is_closure=%s, tag=%p, error=%s, cq=%p}",
|
163
|
+
x.is_closure ? "true" : "false", x.tag, x.error.ToString(), x.cq);
|
164
|
+
},
|
165
|
+
[](const Started& x) {
|
166
|
+
return absl::StrFormat(
|
167
|
+
"Started{completion=%p, done=%s}", &x.completion,
|
168
|
+
x.done.load(std::memory_order_relaxed) ? "true" : "false");
|
169
|
+
},
|
170
|
+
[](const Invalid&) -> std::string { return "Invalid{}"; });
|
171
|
+
}
|
172
|
+
|
173
|
+
////////////////////////////////////////////////////////////////////////
|
174
|
+
// MessageReceiver
|
175
|
+
|
176
|
+
StatusFlag MessageReceiver::FinishRecvMessage(
|
177
|
+
ValueOrFailure<absl::optional<MessageHandle>> result) {
|
178
|
+
if (!result.ok()) {
|
179
|
+
GRPC_TRACE_LOG(call, INFO) << Activity::current()->DebugTag()
|
180
|
+
<< "[call] RecvMessage: outstanding_recv "
|
181
|
+
"finishes: received end-of-stream with error";
|
182
|
+
*recv_message_ = nullptr;
|
183
|
+
recv_message_ = nullptr;
|
184
|
+
return Failure{};
|
185
|
+
}
|
186
|
+
if (!result->has_value()) {
|
187
|
+
GRPC_TRACE_LOG(call, INFO) << Activity::current()->DebugTag()
|
188
|
+
<< "[call] RecvMessage: outstanding_recv "
|
189
|
+
"finishes: received end-of-stream";
|
190
|
+
*recv_message_ = nullptr;
|
191
|
+
recv_message_ = nullptr;
|
192
|
+
return Success{};
|
193
|
+
}
|
194
|
+
MessageHandle& message = **result;
|
195
|
+
test_only_last_message_flags_ = message->flags();
|
196
|
+
if ((message->flags() & GRPC_WRITE_INTERNAL_COMPRESS) &&
|
197
|
+
(incoming_compression_algorithm_ != GRPC_COMPRESS_NONE)) {
|
198
|
+
*recv_message_ = grpc_raw_compressed_byte_buffer_create(
|
199
|
+
nullptr, 0, incoming_compression_algorithm_);
|
200
|
+
} else {
|
201
|
+
*recv_message_ = grpc_raw_byte_buffer_create(nullptr, 0);
|
202
|
+
}
|
203
|
+
grpc_slice_buffer_move_into(message->payload()->c_slice_buffer(),
|
204
|
+
&(*recv_message_)->data.raw.slice_buffer);
|
205
|
+
GRPC_TRACE_LOG(call, INFO)
|
206
|
+
<< Activity::current()->DebugTag()
|
207
|
+
<< "[call] RecvMessage: outstanding_recv "
|
208
|
+
"finishes: received "
|
209
|
+
<< (*recv_message_)->data.raw.slice_buffer.length << " byte message";
|
210
|
+
recv_message_ = nullptr;
|
211
|
+
return Success{};
|
212
|
+
}
|
213
|
+
|
214
|
+
////////////////////////////////////////////////////////////////////////
|
215
|
+
// MakeErrorString
|
216
|
+
|
217
|
+
std::string MakeErrorString(const ServerMetadata* trailing_metadata) {
|
218
|
+
std::string out = absl::StrCat(
|
219
|
+
trailing_metadata->get(GrpcStatusFromWire()).value_or(false)
|
220
|
+
? "Error received from peer"
|
221
|
+
: "Error generated by client",
|
222
|
+
"grpc_status: ",
|
223
|
+
grpc_status_code_to_string(trailing_metadata->get(GrpcStatusMetadata())
|
224
|
+
.value_or(GRPC_STATUS_UNKNOWN)));
|
225
|
+
if (const Slice* message =
|
226
|
+
trailing_metadata->get_pointer(GrpcMessageMetadata())) {
|
227
|
+
absl::StrAppend(&out, "\ngrpc_message: ", message->as_string_view());
|
228
|
+
}
|
229
|
+
if (auto annotations = trailing_metadata->get_pointer(GrpcStatusContext())) {
|
230
|
+
absl::StrAppend(&out, "\nStatus Context:");
|
231
|
+
for (const std::string& annotation : *annotations) {
|
232
|
+
absl::StrAppend(&out, "\n ", annotation);
|
233
|
+
}
|
234
|
+
}
|
235
|
+
return out;
|
236
|
+
}
|
237
|
+
|
238
|
+
bool ValidateMetadata(size_t count, grpc_metadata* metadata) {
|
239
|
+
if (count > INT_MAX) {
|
240
|
+
return false;
|
241
|
+
}
|
242
|
+
for (size_t i = 0; i < count; i++) {
|
243
|
+
grpc_metadata* md = &metadata[i];
|
244
|
+
if (!GRPC_LOG_IF_ERROR("validate_metadata",
|
245
|
+
grpc_validate_header_key_is_legal(md->key))) {
|
246
|
+
return false;
|
247
|
+
} else if (!grpc_is_binary_header_internal(md->key) &&
|
248
|
+
!GRPC_LOG_IF_ERROR(
|
249
|
+
"validate_metadata",
|
250
|
+
grpc_validate_header_nonbin_value_is_legal(md->value))) {
|
251
|
+
return false;
|
252
|
+
} else if (GRPC_SLICE_LENGTH(md->value) >= UINT32_MAX) {
|
253
|
+
// HTTP2 hpack encoding has a maximum limit.
|
254
|
+
return false;
|
255
|
+
}
|
256
|
+
}
|
257
|
+
return true;
|
258
|
+
}
|
259
|
+
|
260
|
+
void EndOpImmediately(grpc_completion_queue* cq, void* notify_tag,
|
261
|
+
bool is_notify_tag_closure) {
|
262
|
+
if (!is_notify_tag_closure) {
|
263
|
+
CHECK(grpc_cq_begin_op(cq, notify_tag));
|
264
|
+
grpc_cq_end_op(
|
265
|
+
cq, notify_tag, absl::OkStatus(),
|
266
|
+
[](void*, grpc_cq_completion* completion) { gpr_free(completion); },
|
267
|
+
nullptr,
|
268
|
+
static_cast<grpc_cq_completion*>(
|
269
|
+
gpr_malloc(sizeof(grpc_cq_completion))));
|
270
|
+
} else {
|
271
|
+
Closure::Run(DEBUG_LOCATION, static_cast<grpc_closure*>(notify_tag),
|
272
|
+
absl::OkStatus());
|
273
|
+
}
|
274
|
+
}
|
275
|
+
|
276
|
+
} // namespace grpc_core
|