grpc 1.73.0 → 1.75.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 +116 -53
- data/include/grpc/create_channel_from_endpoint.h +54 -0
- data/include/grpc/credentials.h +18 -6
- data/include/grpc/event_engine/event_engine.h +74 -17
- data/include/grpc/grpc_posix.h +20 -1
- data/include/grpc/impl/channel_arg_names.h +2 -4
- data/include/grpc/module.modulemap +1 -0
- data/include/grpc/support/json.h +24 -0
- data/src/core/call/client_call.cc +4 -4
- data/src/core/call/filter_fusion.h +1230 -0
- data/src/core/call/interception_chain.h +7 -11
- data/src/core/call/metadata.cc +22 -0
- data/src/core/call/metadata.h +24 -2
- data/src/core/channelz/channel_trace.cc +213 -115
- data/src/core/channelz/channel_trace.h +380 -86
- data/src/core/channelz/channelz.cc +274 -192
- data/src/core/channelz/channelz.h +224 -72
- data/src/core/channelz/channelz_registry.cc +2 -163
- data/src/core/channelz/channelz_registry.h +37 -6
- data/src/core/channelz/property_list.cc +353 -0
- data/src/core/channelz/property_list.h +204 -0
- data/src/core/channelz/v2tov1/convert.cc +683 -0
- data/src/core/channelz/v2tov1/convert.h +58 -0
- data/src/core/channelz/v2tov1/legacy_api.cc +425 -0
- data/src/core/channelz/v2tov1/legacy_api.h +32 -0
- data/src/core/channelz/v2tov1/property_list.cc +118 -0
- data/src/core/channelz/v2tov1/property_list.h +52 -0
- data/src/core/channelz/ztrace_collector.h +3 -2
- data/src/core/client_channel/backup_poller.cc +17 -2
- data/src/core/client_channel/client_channel.cc +17 -28
- data/src/core/client_channel/client_channel_filter.cc +24 -33
- data/src/core/client_channel/client_channel_filter.h +2 -2
- data/src/core/client_channel/client_channel_internal.h +2 -1
- data/src/core/client_channel/config_selector.h +8 -2
- data/src/core/client_channel/dynamic_filters.cc +5 -6
- data/src/core/client_channel/dynamic_filters.h +1 -1
- data/src/core/client_channel/global_subchannel_pool.cc +4 -1
- data/src/core/client_channel/load_balanced_call_destination.cc +6 -5
- data/src/core/client_channel/retry_filter.cc +21 -27
- data/src/core/client_channel/retry_filter.h +10 -7
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
- data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
- data/src/core/client_channel/retry_interceptor.cc +30 -44
- data/src/core/client_channel/retry_interceptor.h +18 -17
- data/src/core/client_channel/retry_throttle.cc +46 -61
- data/src/core/client_channel/retry_throttle.h +17 -39
- data/src/core/client_channel/subchannel.cc +57 -25
- data/src/core/client_channel/subchannel.h +10 -0
- data/src/core/config/config_vars.cc +2 -0
- data/src/core/config/core_configuration.cc +4 -1
- data/src/core/config/core_configuration.h +23 -0
- data/src/core/credentials/call/call_creds_registry.h +125 -0
- data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
- data/src/core/credentials/call/jwt_util.cc +70 -0
- data/src/core/credentials/call/jwt_util.h +32 -0
- data/src/core/credentials/transport/alts/alts_credentials.cc +5 -0
- data/src/core/credentials/transport/alts/check_gcp_environment_windows.cc +2 -0
- data/src/core/credentials/transport/channel_creds_registry_init.cc +4 -2
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -2
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -24
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +19 -8
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +96 -54
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +15 -2
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
- data/src/core/credentials/transport/tls/spiffe_utils.cc +371 -0
- data/src/core/credentials/transport/tls/spiffe_utils.h +171 -0
- data/src/core/credentials/transport/tls/ssl_utils.cc +11 -10
- data/src/core/credentials/transport/tls/ssl_utils.h +4 -2
- data/src/core/credentials/transport/tls/tls_credentials.cc +2 -0
- data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -26
- data/src/core/credentials/transport/tls/tls_security_connector.h +12 -12
- data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -2
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
- data/src/core/ext/filters/http/client/http_client_filter.cc +3 -6
- data/src/core/ext/filters/http/client_authority_filter.cc +3 -6
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
- data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -6
- data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
- data/src/core/ext/filters/message_size/message_size_filter.cc +4 -4
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -5
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +165 -117
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +23 -17
- data/src/core/ext/transport/chttp2/transport/frame.cc +99 -6
- data/src/core/ext/transport/chttp2/transport/frame.h +40 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +290 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1233 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +712 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +11 -38
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +65 -51
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +61 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +142 -0
- data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
- data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
- data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +121 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +76 -0
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
- data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
- data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +152 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +197 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +607 -0
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +254 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +41 -13
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +4959 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +1111 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +108 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +1072 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +230 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +716 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.h +227 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +133 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
- data/src/core/filter/auth/auth_filters.h +2 -27
- data/src/core/filter/auth/client_auth_filter.cc +0 -118
- data/src/core/filter/filter_args.h +9 -23
- data/src/core/filter/fused_filters.cc +154 -0
- data/src/core/handshaker/handshaker.cc +23 -14
- data/src/core/handshaker/handshaker.h +3 -0
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +7 -6
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +965 -0
- data/src/core/handshaker/security/secure_endpoint.cc +98 -38
- data/src/core/handshaker/security/secure_endpoint.h +8 -0
- data/src/core/handshaker/security/security_handshaker.cc +4 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
- data/src/core/lib/channel/channel_args.cc +15 -0
- data/src/core/lib/channel/channel_args.h +3 -0
- data/src/core/lib/channel/channel_stack.cc +22 -23
- data/src/core/lib/channel/channel_stack.h +9 -7
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
- data/src/core/lib/channel/promise_based_filter.cc +15 -25
- data/src/core/lib/channel/promise_based_filter.h +11 -10
- data/src/core/lib/debug/trace_impl.h +0 -1
- data/src/core/lib/event_engine/ares_resolver.cc +165 -46
- data/src/core/lib/event_engine/ares_resolver.h +51 -3
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +12 -6
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -4
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +263 -0
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.h +107 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +31 -3
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +14 -6
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
- data/src/core/lib/event_engine/event_engine.cc +7 -0
- data/src/core/lib/event_engine/extensions/channelz.h +10 -6
- data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +139 -169
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +17 -19
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +90 -131
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +13 -13
- data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -23
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +11 -23
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -2
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +30 -19
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +3 -4
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +147 -94
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +435 -229
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +78 -50
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +46 -38
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +11 -171
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
- data/src/core/lib/event_engine/shim.cc +9 -0
- data/src/core/lib/event_engine/shim.h +3 -0
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +6 -1
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
- data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
- data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
- data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
- data/src/core/lib/experiments/experiments.cc +165 -99
- data/src/core/lib/experiments/experiments.h +65 -52
- data/src/core/lib/iomgr/combiner.cc +1 -1
- data/src/core/lib/iomgr/endpoint.cc +4 -3
- data/src/core/lib/iomgr/endpoint.h +7 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
- data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
- data/src/core/lib/iomgr/exec_ctx.h +3 -9
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_posix.cc +15 -9
- data/src/core/lib/iomgr/tcp_windows.cc +3 -2
- data/src/core/lib/promise/activity.h +3 -2
- data/src/core/lib/promise/arena_promise.h +23 -7
- data/src/core/lib/promise/detail/promise_factory.h +10 -0
- data/src/core/lib/promise/detail/promise_like.h +118 -11
- data/src/core/lib/promise/detail/promise_variant.h +50 -0
- data/src/core/lib/promise/detail/seq_state.h +687 -548
- data/src/core/lib/promise/if.h +20 -0
- data/src/core/lib/promise/inter_activity_latch.h +147 -0
- data/src/core/lib/promise/inter_activity_mutex.h +547 -0
- data/src/core/lib/promise/loop.h +65 -3
- data/src/core/lib/promise/map.h +24 -0
- data/src/core/lib/promise/match_promise.h +103 -0
- data/src/core/lib/promise/mpsc.cc +425 -0
- data/src/core/lib/promise/mpsc.h +490 -0
- data/src/core/lib/promise/party.cc +55 -6
- data/src/core/lib/promise/party.h +68 -3
- data/src/core/lib/promise/poll.h +10 -0
- data/src/core/lib/promise/race.h +31 -0
- data/src/core/lib/promise/seq.h +4 -1
- data/src/core/lib/promise/status_flag.h +7 -0
- data/src/core/lib/promise/try_seq.h +4 -1
- data/src/core/lib/promise/wait_set.cc +28 -0
- data/src/core/lib/promise/wait_set.h +86 -0
- data/src/core/lib/resource_quota/arena.h +19 -0
- data/src/core/lib/resource_quota/memory_quota.cc +90 -3
- data/src/core/lib/resource_quota/memory_quota.h +20 -9
- data/src/core/lib/resource_quota/periodic_update.cc +14 -0
- data/src/core/lib/resource_quota/periodic_update.h +8 -0
- data/src/core/lib/resource_quota/resource_quota.cc +15 -4
- data/src/core/lib/resource_quota/resource_quota.h +3 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
- data/src/core/lib/slice/slice.h +5 -0
- data/src/core/lib/surface/call.cc +5 -5
- data/src/core/lib/surface/call.h +6 -5
- data/src/core/lib/surface/channel_create.cc +88 -13
- data/src/core/lib/surface/channel_create.h +4 -0
- data/src/core/lib/surface/channel_init.cc +164 -47
- data/src/core/lib/surface/channel_init.h +64 -1
- data/src/core/lib/surface/completion_queue.cc +2 -4
- data/src/core/lib/surface/filter_stack_call.cc +19 -10
- data/src/core/lib/surface/init.cc +6 -15
- data/src/core/lib/surface/legacy_channel.cc +3 -5
- data/src/core/lib/surface/legacy_channel.h +3 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.cc +110 -0
- data/src/core/lib/transport/promise_endpoint.h +307 -0
- data/src/core/load_balancing/child_policy_handler.cc +2 -4
- data/src/core/load_balancing/delegating_helper.h +2 -3
- data/src/core/load_balancing/endpoint_list.cc +29 -2
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +3 -3
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -1
- data/src/core/load_balancing/health_check_client.cc +1 -5
- data/src/core/load_balancing/lb_policy.h +1 -3
- data/src/core/load_balancing/oob_backend_metric.cc +1 -5
- data/src/core/load_balancing/pick_first/pick_first.cc +15 -5
- data/src/core/load_balancing/xds/cds.cc +10 -1
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +5 -3
- data/src/core/net/socket_mutator.cc +19 -0
- data/src/core/net/socket_mutator.h +25 -0
- data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +6 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +8 -5
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -1
- data/src/core/resolver/xds/xds_config.cc +6 -3
- data/src/core/resolver/xds/xds_config.h +9 -4
- data/src/core/resolver/xds/xds_dependency_manager.cc +22 -7
- data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
- data/src/core/resolver/xds/xds_resolver.cc +31 -11
- data/src/core/server/server.cc +84 -13
- data/src/core/server/server.h +21 -2
- data/src/core/server/server_call_tracer_filter.cc +0 -66
- data/src/core/server/server_call_tracer_filter.h +64 -0
- data/src/core/server/server_config_selector_filter.cc +1 -1
- data/src/core/server/xds_server_config_fetcher.cc +63 -25
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_channel_arg_filter.cc +3 -60
- data/src/core/service_config/service_config_channel_arg_filter.h +82 -0
- data/src/core/service_config/service_config_impl.h +1 -1
- data/src/core/telemetry/call_tracer.cc +20 -14
- data/src/core/telemetry/call_tracer.h +22 -17
- data/src/core/telemetry/context_list_entry.cc +38 -0
- data/src/core/telemetry/context_list_entry.h +42 -12
- data/src/core/telemetry/metrics.h +8 -8
- data/src/core/telemetry/stats_data.cc +369 -343
- data/src/core/telemetry/stats_data.h +341 -244
- data/src/core/telemetry/tcp_tracer.h +1 -1
- data/src/core/transport/auth_context.cc +20 -0
- data/src/core/transport/auth_context.h +4 -0
- data/src/core/transport/auth_context_comparator_registry.h +69 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
- data/src/core/tsi/fake_transport_security.cc +17 -0
- data/src/core/tsi/ssl_transport_security.cc +205 -32
- data/src/core/tsi/ssl_transport_security.h +19 -10
- data/src/core/tsi/ssl_transport_security_utils.cc +21 -0
- data/src/core/tsi/ssl_transport_security_utils.h +4 -0
- data/src/core/tsi/transport_security_grpc.cc +8 -0
- data/src/core/tsi/transport_security_grpc.h +15 -0
- data/src/core/util/backoff.cc +1 -5
- data/src/core/util/backoff.h +1 -0
- data/src/core/util/down_cast.h +1 -1
- data/src/core/util/function_signature.h +15 -1
- data/src/core/util/http_client/httpcli.cc +12 -5
- data/src/core/util/http_client/httpcli.h +4 -1
- data/src/core/util/http_client/httpcli_security_connector.cc +3 -1
- data/src/core/util/latent_see.cc +178 -146
- data/src/core/util/latent_see.h +249 -189
- data/src/core/util/log.cc +4 -0
- data/src/core/util/memory_usage.h +268 -0
- data/src/core/util/per_cpu.cc +2 -0
- data/src/core/util/per_cpu.h +7 -0
- data/src/core/util/shared_bit_gen.h +20 -0
- data/src/core/util/single_set_ptr.h +7 -4
- data/src/core/util/upb_utils.h +42 -0
- data/src/core/util/uri.cc +3 -2
- data/src/core/util/useful.h +144 -2
- data/src/core/util/wait_for_single_owner.cc +31 -0
- data/src/core/util/wait_for_single_owner.h +24 -0
- data/src/core/util/windows/directory_reader.cc +1 -0
- data/src/core/util/windows/thd.cc +1 -3
- data/src/core/util/work_serializer.cc +1 -1
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +32 -5
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +5 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
- data/src/core/xds/grpc/xds_certificate_provider.cc +5 -6
- data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
- data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
- data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
- data/src/core/xds/grpc/xds_http_filter.h +7 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
- data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
- data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
- data/src/core/xds/grpc/xds_server_grpc.h +10 -2
- data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
- data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
- data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
- data/src/core/xds/xds_client/xds_client.cc +26 -5
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -8
- data/src/ruby/ext/grpc/rb_channel.c +70 -557
- data/src/ruby/ext/grpc/rb_channel.h +0 -3
- data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
- data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
- data/src/ruby/ext/grpc/rb_grpc.c +9 -5
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
- data/src/ruby/ext/grpc/rb_loader.c +0 -4
- data/src/ruby/ext/grpc/rb_server.c +31 -50
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/core_spec.rb +22 -0
- data/src/ruby/spec/generic/active_call_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
- data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
- data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
- data/third_party/abseil-cpp/absl/base/config.h +20 -129
- data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
- data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
- data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
- data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
- data/third_party/abseil-cpp/absl/base/options.h +3 -80
- data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
- data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
- data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
- data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
- data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
- data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
- data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
- data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
- data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
- data/third_party/abseil-cpp/absl/log/check.h +2 -1
- data/third_party/abseil-cpp/absl/log/globals.h +4 -5
- data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
- data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
- data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
- data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
- data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
- data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
- data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
- data/third_party/abseil-cpp/absl/log/log.h +48 -35
- data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
- data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
- data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
- data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- data/third_party/abseil-cpp/absl/random/random.h +88 -53
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
- data/third_party/abseil-cpp/absl/status/status.cc +4 -8
- data/third_party/abseil-cpp/absl/status/status.h +8 -8
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
- data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
- data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
- data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
- data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
- data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
- data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
- data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
- data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
- data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
- data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
- data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
- data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
- data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
- data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
- data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
- data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- data/third_party/abseil-cpp/absl/time/time.h +20 -15
- data/third_party/abseil-cpp/absl/types/optional.h +7 -747
- data/third_party/abseil-cpp/absl/types/span.h +13 -11
- data/third_party/abseil-cpp/absl/types/variant.h +5 -784
- data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
- data/third_party/cares/cares/include/ares.h +925 -460
- data/third_party/cares/cares/include/ares_dns.h +86 -71
- data/third_party/cares/cares/include/ares_dns_record.h +1118 -0
- data/third_party/cares/cares/include/ares_nameser.h +215 -189
- data/third_party/cares/cares/include/ares_version.h +37 -14
- data/third_party/cares/cares/src/lib/ares_addrinfo2hostent.c +305 -0
- data/third_party/cares/cares/src/lib/ares_addrinfo_localhost.c +245 -0
- data/third_party/cares/cares/src/lib/ares_android.c +216 -164
- data/third_party/cares/cares/src/lib/ares_android.h +25 -14
- data/third_party/cares/cares/src/lib/ares_cancel.c +68 -44
- data/third_party/cares/cares/src/lib/ares_close_sockets.c +137 -0
- data/third_party/cares/cares/src/lib/ares_conn.c +511 -0
- data/third_party/cares/cares/src/lib/ares_conn.h +196 -0
- data/third_party/cares/cares/src/lib/ares_cookie.c +461 -0
- data/third_party/cares/cares/src/lib/ares_data.c +93 -181
- data/third_party/cares/cares/src/lib/ares_data.h +50 -39
- data/third_party/cares/cares/src/lib/ares_destroy.c +127 -89
- data/third_party/cares/cares/src/lib/ares_free_hostent.c +35 -24
- data/third_party/cares/cares/src/lib/ares_free_string.c +24 -16
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +45 -38
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +549 -663
- data/third_party/cares/cares/src/lib/ares_getenv.c +25 -15
- data/third_party/cares/cares/src/lib/ares_getenv.h +26 -18
- data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +163 -221
- data/third_party/cares/cares/src/lib/ares_gethostbyname.c +222 -223
- data/third_party/cares/cares/src/lib/ares_getnameinfo.c +328 -338
- data/third_party/cares/cares/src/lib/ares_hosts_file.c +952 -0
- data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -19
- data/third_party/cares/cares/src/lib/ares_init.c +425 -2091
- data/third_party/cares/cares/src/lib/ares_ipv6.h +63 -33
- data/third_party/cares/cares/src/lib/ares_library_init.c +110 -54
- data/third_party/cares/cares/src/lib/ares_metrics.c +261 -0
- data/third_party/cares/cares/src/lib/ares_options.c +418 -332
- data/third_party/cares/cares/src/lib/ares_parse_into_addrinfo.c +179 -0
- data/third_party/cares/cares/src/lib/ares_private.h +558 -356
- data/third_party/cares/cares/src/lib/ares_process.c +1224 -1369
- data/third_party/cares/cares/src/lib/ares_qcache.c +430 -0
- data/third_party/cares/cares/src/lib/ares_query.c +126 -121
- data/third_party/cares/cares/src/lib/ares_search.c +564 -262
- data/third_party/cares/cares/src/lib/ares_send.c +264 -93
- data/third_party/cares/cares/src/lib/ares_set_socket_functions.c +588 -0
- data/third_party/cares/cares/src/lib/ares_setup.h +115 -111
- data/third_party/cares/cares/src/lib/ares_socket.c +425 -0
- data/third_party/cares/cares/src/lib/ares_socket.h +163 -0
- data/third_party/cares/cares/src/lib/ares_sortaddrinfo.c +447 -0
- data/third_party/cares/cares/src/lib/ares_strerror.c +83 -48
- data/third_party/cares/cares/src/lib/ares_sysconfig.c +639 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_files.c +839 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_mac.c +373 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_win.c +621 -0
- data/third_party/cares/cares/src/lib/ares_timeout.c +136 -73
- data/third_party/cares/cares/src/lib/ares_update_servers.c +1362 -0
- data/third_party/cares/cares/src/lib/ares_version.c +29 -4
- data/third_party/cares/cares/src/lib/config-dos.h +88 -89
- data/third_party/cares/cares/src/lib/config-win32.h +122 -77
- data/third_party/cares/cares/src/lib/dsa/ares_array.c +394 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable.c +447 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable.h +174 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_asvp.c +224 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_dict.c +228 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_strvp.c +210 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_szvp.c +188 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_vpstr.c +186 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_vpvp.c +194 -0
- data/third_party/cares/cares/src/lib/dsa/ares_llist.c +382 -0
- data/third_party/cares/cares/src/lib/dsa/ares_slist.c +479 -0
- data/third_party/cares/cares/src/lib/dsa/ares_slist.h +207 -0
- data/third_party/cares/cares/src/lib/event/ares_event.h +191 -0
- data/third_party/cares/cares/src/lib/event/ares_event_configchg.c +743 -0
- data/third_party/cares/cares/src/lib/event/ares_event_epoll.c +192 -0
- data/third_party/cares/cares/src/lib/event/ares_event_kqueue.c +248 -0
- data/third_party/cares/cares/src/lib/event/ares_event_poll.c +140 -0
- data/third_party/cares/cares/src/lib/event/ares_event_select.c +159 -0
- data/third_party/cares/cares/src/lib/event/ares_event_thread.c +567 -0
- data/third_party/cares/cares/src/lib/event/ares_event_wake_pipe.c +166 -0
- data/third_party/cares/cares/src/lib/event/ares_event_win32.c +978 -0
- data/third_party/cares/cares/src/lib/event/ares_event_win32.h +161 -0
- data/third_party/cares/cares/src/lib/include/ares_array.h +276 -0
- data/third_party/cares/cares/src/lib/include/ares_buf.h +732 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_asvp.h +130 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_dict.h +123 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_strvp.h +130 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_szvp.h +118 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_vpstr.h +111 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_vpvp.h +128 -0
- data/third_party/cares/cares/src/lib/include/ares_llist.h +239 -0
- data/third_party/cares/cares/src/lib/include/ares_mem.h +38 -0
- data/third_party/cares/cares/src/lib/include/ares_str.h +244 -0
- data/third_party/cares/cares/src/lib/inet_net_pton.c +202 -157
- data/third_party/cares/cares/src/lib/inet_ntop.c +87 -69
- data/third_party/cares/cares/src/lib/legacy/ares_create_query.c +78 -0
- data/third_party/cares/cares/src/lib/legacy/ares_expand_name.c +99 -0
- data/third_party/cares/cares/src/lib/legacy/ares_expand_string.c +107 -0
- data/third_party/cares/cares/src/lib/legacy/ares_fds.c +80 -0
- data/third_party/cares/cares/src/lib/legacy/ares_getsock.c +85 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_a_reply.c +107 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_mapping.c +982 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_multistring.c +307 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_multistring.h +72 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_name.c +673 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_parse.c +1329 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_private.h +273 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_record.c +1661 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_write.c +1229 -0
- data/third_party/cares/cares/src/lib/str/ares_buf.c +1498 -0
- data/third_party/cares/cares/src/lib/str/ares_str.c +508 -0
- data/third_party/cares/cares/src/lib/str/ares_strsplit.c +90 -0
- data/third_party/cares/cares/src/lib/str/ares_strsplit.h +51 -0
- data/third_party/cares/cares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
- data/third_party/cares/cares/src/lib/util/ares_iface_ips.c +628 -0
- data/third_party/cares/cares/src/lib/util/ares_iface_ips.h +139 -0
- data/third_party/cares/cares/src/lib/util/ares_math.c +158 -0
- data/third_party/cares/cares/src/lib/util/ares_math.h +45 -0
- data/third_party/cares/cares/src/lib/util/ares_rand.c +389 -0
- data/third_party/cares/cares/src/lib/util/ares_rand.h +36 -0
- data/third_party/cares/cares/src/lib/util/ares_threads.c +614 -0
- data/third_party/cares/cares/src/lib/util/ares_threads.h +60 -0
- data/third_party/cares/cares/src/lib/util/ares_time.h +48 -0
- data/third_party/cares/cares/src/lib/util/ares_timeval.c +95 -0
- data/third_party/cares/cares/src/lib/util/ares_uri.c +1626 -0
- data/third_party/cares/cares/src/lib/util/ares_uri.h +252 -0
- data/third_party/cares/cares/src/lib/windows_port.c +16 -9
- metadata +192 -68
- data/src/core/lib/event_engine/forkable.cc +0 -105
- data/src/core/lib/event_engine/forkable.h +0 -67
- data/src/core/lib/iomgr/python_util.h +0 -46
- data/src/core/util/ring_buffer.h +0 -122
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
- data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
- data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
- data/third_party/cares/cares/include/ares_rules.h +0 -125
- data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +0 -266
- data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +0 -240
- data/third_party/cares/cares/src/lib/ares__close_sockets.c +0 -61
- data/third_party/cares/cares/src/lib/ares__get_hostent.c +0 -260
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +0 -229
- data/third_party/cares/cares/src/lib/ares__read_line.c +0 -73
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +0 -258
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +0 -507
- data/third_party/cares/cares/src/lib/ares__timeval.c +0 -111
- data/third_party/cares/cares/src/lib/ares_create_query.c +0 -197
- data/third_party/cares/cares/src/lib/ares_expand_name.c +0 -311
- data/third_party/cares/cares/src/lib/ares_expand_string.c +0 -67
- data/third_party/cares/cares/src/lib/ares_fds.c +0 -59
- data/third_party/cares/cares/src/lib/ares_getsock.c +0 -66
- data/third_party/cares/cares/src/lib/ares_iphlpapi.h +0 -221
- data/third_party/cares/cares/src/lib/ares_llist.c +0 -63
- data/third_party/cares/cares/src/lib/ares_llist.h +0 -39
- data/third_party/cares/cares/src/lib/ares_mkquery.c +0 -24
- data/third_party/cares/cares/src/lib/ares_nowarn.c +0 -260
- data/third_party/cares/cares/src/lib/ares_nowarn.h +0 -61
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +0 -90
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +0 -92
- data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +0 -199
- data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +0 -164
- data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +0 -183
- data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +0 -177
- data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +0 -228
- data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +0 -179
- data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +0 -168
- data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +0 -214
- data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +0 -184
- data/third_party/cares/cares/src/lib/ares_platform.c +0 -11042
- data/third_party/cares/cares/src/lib/ares_platform.h +0 -43
- data/third_party/cares/cares/src/lib/ares_rand.c +0 -279
- data/third_party/cares/cares/src/lib/ares_strcasecmp.c +0 -66
- data/third_party/cares/cares/src/lib/ares_strcasecmp.h +0 -30
- data/third_party/cares/cares/src/lib/ares_strdup.c +0 -42
- data/third_party/cares/cares/src/lib/ares_strdup.h +0 -24
- data/third_party/cares/cares/src/lib/ares_strsplit.c +0 -94
- data/third_party/cares/cares/src/lib/ares_strsplit.h +0 -42
- data/third_party/cares/cares/src/lib/ares_writev.c +0 -79
- data/third_party/cares/cares/src/lib/ares_writev.h +0 -36
- data/third_party/cares/cares/src/lib/bitncmp.c +0 -59
- data/third_party/cares/cares/src/lib/bitncmp.h +0 -26
- data/third_party/cares/cares/src/lib/setup_once.h +0 -554
- data/third_party/cares/cares/src/tools/ares_getopt.h +0 -53
@@ -270,6 +270,8 @@ class ChannelInit {
|
|
270
270
|
return *this;
|
271
271
|
}
|
272
272
|
|
273
|
+
const UniqueTypeName& name() { return name_; }
|
274
|
+
|
273
275
|
private:
|
274
276
|
friend class ChannelInit;
|
275
277
|
const UniqueTypeName name_;
|
@@ -322,6 +324,34 @@ class ChannelInit {
|
|
322
324
|
.SkipV3();
|
323
325
|
}
|
324
326
|
|
327
|
+
// Register a builder in the normal fused filter registration pass.
|
328
|
+
// This occurs first during channel build time.
|
329
|
+
// The FilterRegistration methods can be called to declaratively define
|
330
|
+
// properties of the filter being registered.
|
331
|
+
// TODO(ctiller): remove in favor of the version that does not mention
|
332
|
+
// grpc_channel_filter
|
333
|
+
void RegisterFusedFilter(grpc_channel_stack_type type, UniqueTypeName name,
|
334
|
+
const grpc_channel_filter* filter,
|
335
|
+
FilterAdder filter_adder = nullptr,
|
336
|
+
SourceLocation registration_source = {});
|
337
|
+
|
338
|
+
void RegisterFusedFilter(grpc_channel_stack_type type,
|
339
|
+
const grpc_channel_filter* filter,
|
340
|
+
SourceLocation registration_source = {}) {
|
341
|
+
CHECK(filter != nullptr);
|
342
|
+
RegisterFusedFilter(type, NameFromChannelFilter(filter), filter, nullptr,
|
343
|
+
registration_source);
|
344
|
+
}
|
345
|
+
|
346
|
+
template <typename Filter>
|
347
|
+
void RegisterFusedFilter(grpc_channel_stack_type type,
|
348
|
+
SourceLocation registration_source = {}) {
|
349
|
+
RegisterFusedFilter(
|
350
|
+
type, UniqueTypeNameFor<Filter>(), &Filter::kFilter,
|
351
|
+
[](InterceptionChainBuilder& builder) { builder.Add<Filter>(); },
|
352
|
+
registration_source);
|
353
|
+
}
|
354
|
+
|
325
355
|
// Register a post processor for the builder.
|
326
356
|
// These run after the main graph has been placed into the builder.
|
327
357
|
// At most one filter per slot per channel stack type can be added.
|
@@ -341,6 +371,8 @@ class ChannelInit {
|
|
341
371
|
private:
|
342
372
|
std::vector<std::unique_ptr<FilterRegistration>>
|
343
373
|
filters_[GRPC_NUM_CHANNEL_STACK_TYPES];
|
374
|
+
std::vector<std::unique_ptr<FilterRegistration>>
|
375
|
+
fused_filters_[GRPC_NUM_CHANNEL_STACK_TYPES];
|
344
376
|
PostProcessor post_processors_[GRPC_NUM_CHANNEL_STACK_TYPES]
|
345
377
|
[static_cast<int>(PostProcessorSlot::kCount)];
|
346
378
|
};
|
@@ -382,17 +414,48 @@ class ChannelInit {
|
|
382
414
|
Ordering ordering;
|
383
415
|
bool CheckPredicates(const ChannelArgs& args) const;
|
384
416
|
};
|
417
|
+
|
418
|
+
struct FilterNode {
|
419
|
+
const Filter* curr;
|
420
|
+
int next;
|
421
|
+
};
|
422
|
+
|
385
423
|
struct StackConfig {
|
386
424
|
std::vector<Filter> filters;
|
425
|
+
std::vector<Filter> fused_filters;
|
387
426
|
std::vector<Filter> terminators;
|
388
427
|
std::vector<PostProcessor> post_processors;
|
389
428
|
};
|
390
429
|
|
391
430
|
StackConfig stack_configs_[GRPC_NUM_CHANNEL_STACK_TYPES];
|
392
431
|
|
432
|
+
static std::tuple<std::vector<Filter>, std::vector<Filter>>
|
433
|
+
SortFilterRegistrationsByDependencies(
|
434
|
+
const std::vector<std::unique_ptr<FilterRegistration>>&
|
435
|
+
filter_registrations,
|
436
|
+
grpc_channel_stack_type type);
|
437
|
+
|
438
|
+
static std::vector<Filter> SortFusedFilterRegistrations(
|
439
|
+
const std::vector<std::unique_ptr<FilterRegistration>>&
|
440
|
+
filter_registrations);
|
441
|
+
|
442
|
+
template <bool is_terminal>
|
443
|
+
static std::vector<FilterNode> SelectFiltersByPredicate(
|
444
|
+
const std::vector<Filter>& filters, ChannelStackBuilder* builder);
|
445
|
+
|
446
|
+
static void MergeFilters(std::vector<FilterNode>& filter_list,
|
447
|
+
const std::vector<Filter>& fused_filters);
|
448
|
+
|
449
|
+
static void AppendFiltersToBuilder(const std::vector<FilterNode>& filter_list,
|
450
|
+
ChannelStackBuilder* builder);
|
451
|
+
|
393
452
|
static StackConfig BuildStackConfig(
|
394
|
-
const std::vector<std::unique_ptr<FilterRegistration>>&
|
453
|
+
const std::vector<std::unique_ptr<FilterRegistration>>&
|
454
|
+
filter_registrations,
|
455
|
+
const std::vector<std::unique_ptr<FilterRegistration>>&
|
456
|
+
fused_filter_registrations,
|
395
457
|
PostProcessor* post_processors, grpc_channel_stack_type type);
|
458
|
+
|
396
459
|
static void PrintChannelStackTrace(
|
397
460
|
grpc_channel_stack_type type,
|
398
461
|
const std::vector<std::unique_ptr<ChannelInit::FilterRegistration>>&
|
@@ -933,8 +933,7 @@ struct cq_is_finished_arg {
|
|
933
933
|
class ExecCtxNext : public grpc_core::ExecCtx {
|
934
934
|
public:
|
935
935
|
explicit ExecCtxNext(void* arg)
|
936
|
-
: ExecCtx(0,
|
937
|
-
check_ready_to_finish_arg_(arg) {}
|
936
|
+
: ExecCtx(0), check_ready_to_finish_arg_(arg) {}
|
938
937
|
|
939
938
|
bool CheckReadyToFinish() override {
|
940
939
|
cq_is_finished_arg* a =
|
@@ -1181,8 +1180,7 @@ static void del_plucker(grpc_completion_queue* cq, void* tag,
|
|
1181
1180
|
class ExecCtxPluck : public grpc_core::ExecCtx {
|
1182
1181
|
public:
|
1183
1182
|
explicit ExecCtxPluck(void* arg)
|
1184
|
-
: ExecCtx(0,
|
1185
|
-
check_ready_to_finish_arg_(arg) {}
|
1183
|
+
: ExecCtx(0), check_ready_to_finish_arg_(arg) {}
|
1186
1184
|
|
1187
1185
|
bool CheckReadyToFinish() override {
|
1188
1186
|
cq_is_finished_arg* a =
|
@@ -40,6 +40,7 @@
|
|
40
40
|
#include "absl/log/check.h"
|
41
41
|
#include "absl/log/log.h"
|
42
42
|
#include "absl/status/status.h"
|
43
|
+
#include "absl/strings/escaping.h"
|
43
44
|
#include "absl/strings/str_cat.h"
|
44
45
|
#include "absl/strings/string_view.h"
|
45
46
|
#include "src/core/call/metadata_batch.h"
|
@@ -398,18 +399,26 @@ bool FilterStackCall::PrepareApplicationMetadata(size_t count,
|
|
398
399
|
is_trailing ? &send_trailing_metadata_ : &send_initial_metadata_;
|
399
400
|
for (size_t i = 0; i < count; i++) {
|
400
401
|
grpc_metadata* md = &metadata[i];
|
401
|
-
if (
|
402
|
-
|
402
|
+
if (auto status = grpc_validate_header_key_is_legal(md->key);
|
403
|
+
!status.ok()) {
|
404
|
+
LOG(ERROR) << "Metadata key '"
|
405
|
+
<< absl::CEscape(StringViewFromSlice(md->key))
|
406
|
+
<< "' is invalid: " << status;
|
403
407
|
return false;
|
404
|
-
}
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
408
|
+
}
|
409
|
+
if (!grpc_is_binary_header_internal(md->key)) {
|
410
|
+
if (auto status = grpc_validate_header_nonbin_value_is_legal(md->value);
|
411
|
+
!status.ok()) {
|
412
|
+
LOG(ERROR) << "Metadata value for key " << StringViewFromSlice(md->key)
|
413
|
+
<< " is invalid: " << status;
|
414
|
+
return false;
|
415
|
+
}
|
416
|
+
}
|
417
|
+
if (GRPC_SLICE_LENGTH(md->value) >= UINT32_MAX) {
|
410
418
|
// HTTP2 hpack encoding has a maximum limit.
|
411
419
|
return false;
|
412
|
-
}
|
420
|
+
}
|
421
|
+
if (grpc_slice_str_cmp(md->key, "content-length") == 0) {
|
413
422
|
// Filter "content-length metadata"
|
414
423
|
continue;
|
415
424
|
}
|
@@ -737,7 +746,7 @@ void FilterStackCall::BatchControl::FinishBatch(grpc_error_handle error) {
|
|
737
746
|
grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
|
738
747
|
void* notify_tag,
|
739
748
|
bool is_notify_tag_closure) {
|
740
|
-
|
749
|
+
GRPC_LATENT_SEE_SCOPE("FilterStackCall::StartBatch");
|
741
750
|
|
742
751
|
size_t i;
|
743
752
|
const grpc_op* op;
|
@@ -71,21 +71,12 @@ static bool g_shutting_down ABSL_GUARDED_BY(g_init_mu) = false;
|
|
71
71
|
|
72
72
|
namespace grpc_core {
|
73
73
|
void RegisterSecurityFilters(CoreConfiguration::Builder* builder) {
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
.IfHasChannelArg(GRPC_ARG_SECURITY_CONNECTOR);
|
81
|
-
} else {
|
82
|
-
builder->channel_init()
|
83
|
-
->RegisterV2Filter<LegacyClientAuthFilter>(GRPC_CLIENT_SUBCHANNEL)
|
84
|
-
.IfHasChannelArg(GRPC_ARG_SECURITY_CONNECTOR);
|
85
|
-
builder->channel_init()
|
86
|
-
->RegisterV2Filter<LegacyClientAuthFilter>(GRPC_CLIENT_DIRECT_CHANNEL)
|
87
|
-
.IfHasChannelArg(GRPC_ARG_SECURITY_CONNECTOR);
|
88
|
-
}
|
74
|
+
builder->channel_init()
|
75
|
+
->RegisterFilter<ClientAuthFilter>(GRPC_CLIENT_SUBCHANNEL)
|
76
|
+
.IfHasChannelArg(GRPC_ARG_SECURITY_CONNECTOR);
|
77
|
+
builder->channel_init()
|
78
|
+
->RegisterFilter<ClientAuthFilter>(GRPC_CLIENT_DIRECT_CHANNEL)
|
79
|
+
.IfHasChannelArg(GRPC_ARG_SECURITY_CONNECTOR);
|
89
80
|
builder->channel_init()
|
90
81
|
->RegisterFilter<ServerAuthFilter>(GRPC_SERVER_CHANNEL)
|
91
82
|
.IfHasChannelArg(GRPC_SERVER_CREDENTIALS_ARG);
|
@@ -63,7 +63,7 @@ namespace grpc_core {
|
|
63
63
|
|
64
64
|
absl::StatusOr<RefCountedPtr<Channel>> LegacyChannel::Create(
|
65
65
|
std::string target, ChannelArgs args,
|
66
|
-
grpc_channel_stack_type channel_stack_type) {
|
66
|
+
grpc_channel_stack_type channel_stack_type, const Blackboard* blackboard) {
|
67
67
|
if (grpc_channel_stack_type_is_client(channel_stack_type)) {
|
68
68
|
auto channel_args_mutator =
|
69
69
|
grpc_channel_args_get_client_channel_creation_mutator();
|
@@ -113,6 +113,7 @@ absl::StatusOr<RefCountedPtr<Channel>> LegacyChannel::Create(
|
|
113
113
|
grpc_channel_stack_type_string(channel_stack_type), channel_stack_type,
|
114
114
|
args);
|
115
115
|
builder.SetTarget(target.c_str());
|
116
|
+
builder.SetBlackboard(blackboard);
|
116
117
|
if (!CoreConfiguration::Get().channel_init().CreateStack(&builder)) {
|
117
118
|
return nullptr;
|
118
119
|
}
|
@@ -161,10 +162,7 @@ LegacyChannel::LegacyChannel(bool is_client, std::string target,
|
|
161
162
|
node = channelz_node()->RefAsSubclass<channelz::ChannelNode>();
|
162
163
|
}
|
163
164
|
*channel_stack_->on_destroy = [node = std::move(node)]() {
|
164
|
-
|
165
|
-
node->AddTraceEvent(channelz::ChannelTrace::Severity::Info,
|
166
|
-
grpc_slice_from_static_string("Channel destroyed"));
|
167
|
-
}
|
165
|
+
GRPC_CHANNELZ_LOG(node) << "Channel destroyed";
|
168
166
|
ShutdownInternally();
|
169
167
|
};
|
170
168
|
}
|
@@ -29,6 +29,7 @@
|
|
29
29
|
#include "absl/status/statusor.h"
|
30
30
|
#include "src/core/call/call_arena_allocator.h"
|
31
31
|
#include "src/core/client_channel/client_channel_filter.h"
|
32
|
+
#include "src/core/filter/blackboard.h"
|
32
33
|
#include "src/core/lib/channel/channel_args.h"
|
33
34
|
#include "src/core/lib/channel/channel_fwd.h"
|
34
35
|
#include "src/core/lib/channel/channel_stack.h" // IWYU pragma: keep
|
@@ -47,7 +48,8 @@ class LegacyChannel final : public Channel {
|
|
47
48
|
public:
|
48
49
|
static absl::StatusOr<RefCountedPtr<Channel>> Create(
|
49
50
|
std::string target, ChannelArgs args,
|
50
|
-
grpc_channel_stack_type channel_stack_type
|
51
|
+
grpc_channel_stack_type channel_stack_type,
|
52
|
+
const Blackboard* blackboard = nullptr);
|
51
53
|
|
52
54
|
// Do not instantiate directly -- use Create() instead.
|
53
55
|
LegacyChannel(bool is_client, std::string target,
|
@@ -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 "50.0.0"; }
|
26
26
|
|
27
|
-
const char* grpc_g_stands_for(void) { return "
|
27
|
+
const char* grpc_g_stands_for(void) { return "gemini"; }
|
@@ -0,0 +1,110 @@
|
|
1
|
+
// Copyright 2023 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/transport/promise_endpoint.h"
|
16
|
+
|
17
|
+
#include <grpc/event_engine/event_engine.h>
|
18
|
+
#include <grpc/event_engine/slice_buffer.h>
|
19
|
+
#include <grpc/slice_buffer.h>
|
20
|
+
#include <grpc/support/port_platform.h>
|
21
|
+
|
22
|
+
#include <atomic>
|
23
|
+
#include <functional>
|
24
|
+
#include <memory>
|
25
|
+
#include <optional>
|
26
|
+
#include <utility>
|
27
|
+
|
28
|
+
#include "absl/log/check.h"
|
29
|
+
#include "absl/status/status.h"
|
30
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
31
|
+
#include "src/core/util/sync.h"
|
32
|
+
|
33
|
+
namespace grpc_core {
|
34
|
+
|
35
|
+
PromiseEndpoint::PromiseEndpoint(
|
36
|
+
std::unique_ptr<grpc_event_engine::experimental::EventEngine::Endpoint>
|
37
|
+
endpoint,
|
38
|
+
SliceBuffer already_received)
|
39
|
+
: endpoint_(std::move(endpoint)) {
|
40
|
+
CHECK_NE(endpoint_, nullptr);
|
41
|
+
read_state_->endpoint = endpoint_;
|
42
|
+
// TODO(ladynana): Replace this with `SliceBufferCast<>` when it is
|
43
|
+
// available.
|
44
|
+
grpc_slice_buffer_swap(read_state_->buffer.c_slice_buffer(),
|
45
|
+
already_received.c_slice_buffer());
|
46
|
+
}
|
47
|
+
|
48
|
+
const grpc_event_engine::experimental::EventEngine::ResolvedAddress&
|
49
|
+
PromiseEndpoint::GetPeerAddress() const {
|
50
|
+
return endpoint_->GetPeerAddress();
|
51
|
+
}
|
52
|
+
|
53
|
+
const grpc_event_engine::experimental::EventEngine::ResolvedAddress&
|
54
|
+
PromiseEndpoint::GetLocalAddress() const {
|
55
|
+
return endpoint_->GetLocalAddress();
|
56
|
+
}
|
57
|
+
|
58
|
+
void PromiseEndpoint::ReadState::Complete(absl::Status status,
|
59
|
+
const size_t num_bytes_requested) {
|
60
|
+
GRPC_LATENT_SEE_SCOPE("PromiseEndpoint::ReadState::Complete");
|
61
|
+
while (true) {
|
62
|
+
if (!status.ok()) {
|
63
|
+
// Invalidates all previous reads.
|
64
|
+
pending_buffer.Clear();
|
65
|
+
buffer.Clear();
|
66
|
+
result = status;
|
67
|
+
auto w = std::move(waker);
|
68
|
+
complete.store(true, std::memory_order_release);
|
69
|
+
w.Wakeup();
|
70
|
+
return;
|
71
|
+
}
|
72
|
+
// Appends `pending_buffer` to `buffer`.
|
73
|
+
pending_buffer.MoveFirstNBytesIntoSliceBuffer(pending_buffer.Length(),
|
74
|
+
buffer);
|
75
|
+
DCHECK(pending_buffer.Count() == 0u);
|
76
|
+
if (buffer.Length() < num_bytes_requested) {
|
77
|
+
GRPC_LATENT_SEE_SCOPE("PromiseEndpoint::ReadState::Continue");
|
78
|
+
// A further read is needed.
|
79
|
+
// Set read args with number of bytes needed as hint.
|
80
|
+
grpc_event_engine::experimental::EventEngine::Endpoint::ReadArgs
|
81
|
+
read_args;
|
82
|
+
read_args.set_read_hint_bytes(
|
83
|
+
static_cast<int64_t>(num_bytes_requested - buffer.Length()));
|
84
|
+
// If `Read()` returns true immediately, the callback will not be
|
85
|
+
// called. We still need to call our callback to pick up the result and
|
86
|
+
// maybe do further reads.
|
87
|
+
auto ep = endpoint.lock();
|
88
|
+
if (ep == nullptr) {
|
89
|
+
status = absl::UnavailableError("Endpoint closed during read.");
|
90
|
+
continue;
|
91
|
+
}
|
92
|
+
if (ep->Read(
|
93
|
+
[self = Ref(), num_bytes_requested](absl::Status status) {
|
94
|
+
ExecCtx exec_ctx;
|
95
|
+
self->Complete(std::move(status), num_bytes_requested);
|
96
|
+
},
|
97
|
+
&pending_buffer, std::move(read_args))) {
|
98
|
+
continue;
|
99
|
+
}
|
100
|
+
return;
|
101
|
+
}
|
102
|
+
result = status;
|
103
|
+
auto w = std::move(waker);
|
104
|
+
complete.store(true, std::memory_order_release);
|
105
|
+
w.Wakeup();
|
106
|
+
return;
|
107
|
+
}
|
108
|
+
}
|
109
|
+
|
110
|
+
} // namespace grpc_core
|
@@ -0,0 +1,307 @@
|
|
1
|
+
// Copyright 2023 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_PROMISE_ENDPOINT_H
|
16
|
+
#define GRPC_SRC_CORE_LIB_TRANSPORT_PROMISE_ENDPOINT_H
|
17
|
+
|
18
|
+
#include <grpc/event_engine/event_engine.h>
|
19
|
+
#include <grpc/event_engine/slice.h>
|
20
|
+
#include <grpc/event_engine/slice_buffer.h>
|
21
|
+
#include <grpc/slice_buffer.h>
|
22
|
+
#include <grpc/support/port_platform.h>
|
23
|
+
#include <stddef.h>
|
24
|
+
#include <stdint.h>
|
25
|
+
|
26
|
+
#include <atomic>
|
27
|
+
#include <cstring>
|
28
|
+
#include <functional>
|
29
|
+
#include <memory>
|
30
|
+
#include <optional>
|
31
|
+
#include <utility>
|
32
|
+
|
33
|
+
#include "absl/base/thread_annotations.h"
|
34
|
+
#include "absl/log/check.h"
|
35
|
+
#include "absl/status/status.h"
|
36
|
+
#include "absl/status/statusor.h"
|
37
|
+
#include "src/core/lib/event_engine/extensions/chaotic_good_extension.h"
|
38
|
+
#include "src/core/lib/event_engine/query_extensions.h"
|
39
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
40
|
+
#include "src/core/lib/promise/activity.h"
|
41
|
+
#include "src/core/lib/promise/cancel_callback.h"
|
42
|
+
#include "src/core/lib/promise/if.h"
|
43
|
+
#include "src/core/lib/promise/map.h"
|
44
|
+
#include "src/core/lib/promise/poll.h"
|
45
|
+
#include "src/core/lib/slice/slice.h"
|
46
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
47
|
+
#include "src/core/util/dump_args.h"
|
48
|
+
#include "src/core/util/sync.h"
|
49
|
+
|
50
|
+
namespace grpc_core {
|
51
|
+
|
52
|
+
// Wrapper around event engine endpoint that provides a promise like API.
|
53
|
+
class PromiseEndpoint {
|
54
|
+
public:
|
55
|
+
using WriteArgs =
|
56
|
+
grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs;
|
57
|
+
|
58
|
+
PromiseEndpoint(
|
59
|
+
std::unique_ptr<grpc_event_engine::experimental::EventEngine::Endpoint>
|
60
|
+
endpoint,
|
61
|
+
SliceBuffer already_received);
|
62
|
+
PromiseEndpoint() = default;
|
63
|
+
~PromiseEndpoint() = default;
|
64
|
+
/// Prevent copying of PromiseEndpoint; moving is fine.
|
65
|
+
PromiseEndpoint(const PromiseEndpoint&) = delete;
|
66
|
+
PromiseEndpoint& operator=(const PromiseEndpoint&) = delete;
|
67
|
+
PromiseEndpoint(PromiseEndpoint&&) = default;
|
68
|
+
PromiseEndpoint& operator=(PromiseEndpoint&&) = default;
|
69
|
+
|
70
|
+
// Returns a promise that resolves to a `absl::Status` indicating the result
|
71
|
+
// of the write operation.
|
72
|
+
//
|
73
|
+
// Concurrent writes are not supported, which means callers should not call
|
74
|
+
// `Write()` before the previous write finishes. Doing that results in
|
75
|
+
// undefined behavior.
|
76
|
+
auto Write(SliceBuffer data, WriteArgs write_args) {
|
77
|
+
GRPC_LATENT_SEE_SCOPE("GRPC:Write");
|
78
|
+
// Start write and assert previous write finishes.
|
79
|
+
auto prev = write_state_->state.exchange(WriteState::kWriting,
|
80
|
+
std::memory_order_relaxed);
|
81
|
+
CHECK(prev == WriteState::kIdle);
|
82
|
+
bool completed;
|
83
|
+
if (data.Length() == 0) {
|
84
|
+
completed = true;
|
85
|
+
} else {
|
86
|
+
// TODO(ladynana): Replace this with `SliceBufferCast<>` when it is
|
87
|
+
// available.
|
88
|
+
grpc_slice_buffer_swap(write_state_->buffer.c_slice_buffer(),
|
89
|
+
data.c_slice_buffer());
|
90
|
+
// If `Write()` returns true immediately, the callback will not be called.
|
91
|
+
// We still need to call our callback to pick up the result.
|
92
|
+
write_state_->waker = GetContext<Activity>()->MakeNonOwningWaker();
|
93
|
+
completed = endpoint_->Write(
|
94
|
+
[write_state = write_state_](absl::Status status) {
|
95
|
+
ExecCtx exec_ctx;
|
96
|
+
write_state->Complete(std::move(status));
|
97
|
+
},
|
98
|
+
&write_state_->buffer, std::move(write_args));
|
99
|
+
if (completed) write_state_->waker = Waker();
|
100
|
+
}
|
101
|
+
return If(
|
102
|
+
completed,
|
103
|
+
[this]() {
|
104
|
+
return [write_state = write_state_]() {
|
105
|
+
auto prev = write_state->state.exchange(WriteState::kIdle,
|
106
|
+
std::memory_order_relaxed);
|
107
|
+
CHECK(prev == WriteState::kWriting);
|
108
|
+
return absl::OkStatus();
|
109
|
+
};
|
110
|
+
},
|
111
|
+
GRPC_LATENT_SEE_PROMISE(
|
112
|
+
"DelayedWrite", ([this]() {
|
113
|
+
return [write_state = write_state_]() -> Poll<absl::Status> {
|
114
|
+
// If current write isn't finished return `Pending()`, else
|
115
|
+
// return write result.
|
116
|
+
WriteState::State expected = WriteState::kWritten;
|
117
|
+
if (write_state->state.compare_exchange_strong(
|
118
|
+
expected, WriteState::kIdle, std::memory_order_acquire,
|
119
|
+
std::memory_order_relaxed)) {
|
120
|
+
// State was Written, and we changed it to Idle. We can return
|
121
|
+
// the result.
|
122
|
+
return std::move(write_state->result);
|
123
|
+
}
|
124
|
+
// State was not Written; since we're polling it must be
|
125
|
+
// Writing. Assert that and return Pending.
|
126
|
+
CHECK(expected == WriteState::kWriting);
|
127
|
+
return Pending();
|
128
|
+
};
|
129
|
+
})));
|
130
|
+
}
|
131
|
+
|
132
|
+
// Returns a promise that resolves to `SliceBuffer` with
|
133
|
+
// `num_bytes` bytes.
|
134
|
+
//
|
135
|
+
// Concurrent reads are not supported, which means callers should not call
|
136
|
+
// `Read()` before the previous read finishes. Doing that results in
|
137
|
+
// undefined behavior.
|
138
|
+
auto Read(size_t num_bytes) {
|
139
|
+
GRPC_LATENT_SEE_SCOPE("GRPC:Read");
|
140
|
+
// Assert previous read finishes.
|
141
|
+
CHECK(!read_state_->complete.load(std::memory_order_relaxed));
|
142
|
+
// Should not have pending reads.
|
143
|
+
CHECK_EQ(read_state_->pending_buffer.Count(), 0u);
|
144
|
+
bool complete = true;
|
145
|
+
while (read_state_->buffer.Length() < num_bytes) {
|
146
|
+
GRPC_LATENT_SEE_SCOPE("GRPC:Read:Loop");
|
147
|
+
// Set read args with hinted bytes.
|
148
|
+
grpc_event_engine::experimental::EventEngine::Endpoint::ReadArgs
|
149
|
+
read_args;
|
150
|
+
read_args.set_read_hint_bytes(
|
151
|
+
static_cast<int64_t>(num_bytes - read_state_->buffer.Length()));
|
152
|
+
// If `Read()` returns true immediately, the callback will not be
|
153
|
+
// called.
|
154
|
+
read_state_->waker = GetContext<Activity>()->MakeNonOwningWaker();
|
155
|
+
if (endpoint_->Read(
|
156
|
+
[read_state = read_state_, num_bytes](absl::Status status) {
|
157
|
+
ExecCtx exec_ctx;
|
158
|
+
read_state->Complete(std::move(status), num_bytes);
|
159
|
+
},
|
160
|
+
&read_state_->pending_buffer, std::move(read_args))) {
|
161
|
+
read_state_->waker = Waker();
|
162
|
+
read_state_->pending_buffer.MoveFirstNBytesIntoSliceBuffer(
|
163
|
+
read_state_->pending_buffer.Length(), read_state_->buffer);
|
164
|
+
DCHECK_EQ(read_state_->pending_buffer.Count(), 0u);
|
165
|
+
} else {
|
166
|
+
complete = false;
|
167
|
+
break;
|
168
|
+
}
|
169
|
+
}
|
170
|
+
return If(
|
171
|
+
complete,
|
172
|
+
[this, num_bytes]() {
|
173
|
+
SliceBuffer ret;
|
174
|
+
grpc_slice_buffer_move_first_no_inline(
|
175
|
+
read_state_->buffer.c_slice_buffer(), num_bytes,
|
176
|
+
ret.c_slice_buffer());
|
177
|
+
return [ret = std::move(
|
178
|
+
ret)]() mutable -> Poll<absl::StatusOr<SliceBuffer>> {
|
179
|
+
return std::move(ret);
|
180
|
+
};
|
181
|
+
},
|
182
|
+
GRPC_LATENT_SEE_PROMISE(
|
183
|
+
"DelayedRead", ([this, num_bytes]() {
|
184
|
+
return [read_state = read_state_,
|
185
|
+
num_bytes]() -> Poll<absl::StatusOr<SliceBuffer>> {
|
186
|
+
if (!read_state->complete.load(std::memory_order_acquire)) {
|
187
|
+
return Pending();
|
188
|
+
}
|
189
|
+
// If read succeeds, return `SliceBuffer` with `num_bytes`
|
190
|
+
// bytes.
|
191
|
+
if (read_state->result.ok()) {
|
192
|
+
SliceBuffer ret;
|
193
|
+
grpc_slice_buffer_move_first_no_inline(
|
194
|
+
read_state->buffer.c_slice_buffer(), num_bytes,
|
195
|
+
ret.c_slice_buffer());
|
196
|
+
read_state->complete.store(false, std::memory_order_relaxed);
|
197
|
+
return std::move(ret);
|
198
|
+
}
|
199
|
+
read_state->complete.store(false, std::memory_order_relaxed);
|
200
|
+
return std::move(read_state->result);
|
201
|
+
};
|
202
|
+
})));
|
203
|
+
}
|
204
|
+
|
205
|
+
// Returns a promise that resolves to `Slice` with at least
|
206
|
+
// `num_bytes` bytes which should be less than INT64_MAX bytes.
|
207
|
+
//
|
208
|
+
// Concurrent reads are not supported, which means callers should not call
|
209
|
+
// `ReadSlice()` before the previous read finishes. Doing that results in
|
210
|
+
// undefined behavior.
|
211
|
+
auto ReadSlice(size_t num_bytes) {
|
212
|
+
return Map(Read(num_bytes),
|
213
|
+
[](absl::StatusOr<SliceBuffer> buffer) -> absl::StatusOr<Slice> {
|
214
|
+
if (!buffer.ok()) return buffer.status();
|
215
|
+
return buffer->JoinIntoSlice();
|
216
|
+
});
|
217
|
+
}
|
218
|
+
|
219
|
+
// Returns a promise that resolves to a byte with type `uint8_t`.
|
220
|
+
auto ReadByte() {
|
221
|
+
return Map(ReadSlice(1),
|
222
|
+
[](absl::StatusOr<Slice> slice) -> absl::StatusOr<uint8_t> {
|
223
|
+
if (!slice.ok()) return slice.status();
|
224
|
+
return (*slice)[0];
|
225
|
+
});
|
226
|
+
}
|
227
|
+
|
228
|
+
// Enables RPC receive coalescing and alignment of memory holding received
|
229
|
+
// RPCs.
|
230
|
+
void EnforceRxMemoryAlignmentAndCoalescing() {
|
231
|
+
auto* chaotic_good_ext = grpc_event_engine::experimental::QueryExtension<
|
232
|
+
grpc_event_engine::experimental::ChaoticGoodExtension>(endpoint_.get());
|
233
|
+
if (chaotic_good_ext != nullptr) {
|
234
|
+
chaotic_good_ext->EnforceRxMemoryAlignment();
|
235
|
+
chaotic_good_ext->EnableRpcReceiveCoalescing();
|
236
|
+
}
|
237
|
+
}
|
238
|
+
|
239
|
+
const grpc_event_engine::experimental::EventEngine::ResolvedAddress&
|
240
|
+
GetPeerAddress() const;
|
241
|
+
const grpc_event_engine::experimental::EventEngine::ResolvedAddress&
|
242
|
+
GetLocalAddress() const;
|
243
|
+
|
244
|
+
std::shared_ptr<grpc_event_engine::experimental::EventEngine::Endpoint>
|
245
|
+
GetEventEngineEndpoint() const {
|
246
|
+
return endpoint_;
|
247
|
+
}
|
248
|
+
|
249
|
+
private:
|
250
|
+
std::shared_ptr<grpc_event_engine::experimental::EventEngine::Endpoint>
|
251
|
+
endpoint_;
|
252
|
+
|
253
|
+
struct ReadState : public RefCounted<ReadState> {
|
254
|
+
std::atomic<bool> complete{false};
|
255
|
+
// Read buffer used for storing successful reads given by
|
256
|
+
// `EventEngine::Endpoint` but not yet requested by the caller.
|
257
|
+
grpc_event_engine::experimental::SliceBuffer buffer;
|
258
|
+
// Buffer used to accept data from `EventEngine::Endpoint`.
|
259
|
+
// Every time after a successful read from `EventEngine::Endpoint`, the data
|
260
|
+
// in this buffer should be appended to `buffer`.
|
261
|
+
grpc_event_engine::experimental::SliceBuffer pending_buffer;
|
262
|
+
// Used for store the result from `EventEngine::Endpoint::Read()`.
|
263
|
+
absl::Status result;
|
264
|
+
Waker waker;
|
265
|
+
// Backing endpoint: we keep this on ReadState as reads will need to
|
266
|
+
// repeatedly read until the target size is hit, and we don't want to access
|
267
|
+
// the main object during this dance (indeed the main object may be
|
268
|
+
// deleted).
|
269
|
+
std::weak_ptr<grpc_event_engine::experimental::EventEngine::Endpoint>
|
270
|
+
endpoint;
|
271
|
+
|
272
|
+
void Complete(absl::Status status, size_t num_bytes_requested);
|
273
|
+
};
|
274
|
+
|
275
|
+
struct WriteState : public RefCounted<WriteState> {
|
276
|
+
enum State : uint8_t {
|
277
|
+
kIdle, // Not writing.
|
278
|
+
kWriting, // Write started, but not completed.
|
279
|
+
kWritten, // Write completed.
|
280
|
+
};
|
281
|
+
|
282
|
+
std::atomic<State> state{kIdle};
|
283
|
+
// Write buffer used for `EventEngine::Endpoint::Write()` to ensure the
|
284
|
+
// memory behind the buffer is not lost.
|
285
|
+
grpc_event_engine::experimental::SliceBuffer buffer;
|
286
|
+
// Used for store the result from `EventEngine::Endpoint::Write()`.
|
287
|
+
absl::Status result;
|
288
|
+
Waker waker;
|
289
|
+
|
290
|
+
void Complete(absl::Status status) {
|
291
|
+
result = std::move(status);
|
292
|
+
auto w = std::move(waker);
|
293
|
+
auto prev = state.exchange(kWritten, std::memory_order_release);
|
294
|
+
// Previous state should be Writing. If we got anything else we've entered
|
295
|
+
// the callback path twice.
|
296
|
+
CHECK(prev == kWriting);
|
297
|
+
w.Wakeup();
|
298
|
+
}
|
299
|
+
};
|
300
|
+
|
301
|
+
RefCountedPtr<WriteState> write_state_ = MakeRefCounted<WriteState>();
|
302
|
+
RefCountedPtr<ReadState> read_state_ = MakeRefCounted<ReadState>();
|
303
|
+
};
|
304
|
+
|
305
|
+
} // namespace grpc_core
|
306
|
+
|
307
|
+
#endif // GRPC_SRC_CORE_LIB_TRANSPORT_PROMISE_ENDPOINT_H
|