grpc 1.73.0 → 1.74.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 +38 -17
- data/include/grpc/create_channel_from_endpoint.h +54 -0
- data/include/grpc/credentials.h +11 -5
- 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/interception_chain.h +7 -11
- data/src/core/channelz/channel_trace.cc +213 -115
- data/src/core/channelz/channel_trace.h +380 -86
- data/src/core/channelz/channelz.cc +270 -181
- data/src/core/channelz/channelz.h +168 -55
- data/src/core/channelz/channelz_registry.cc +2 -1
- data/src/core/channelz/channelz_registry.h +24 -0
- data/src/core/channelz/property_list.cc +357 -0
- data/src/core/channelz/property_list.h +202 -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 +19 -29
- 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/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 +43 -19
- data/src/core/client_channel/subchannel.h +8 -0
- data/src/core/config/config_vars.cc +2 -0
- data/src/core/config/core_configuration.cc +1 -0
- data/src/core/config/core_configuration.h +11 -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/channel_creds_registry_init.cc +1 -1
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +0 -1
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
- data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
- 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_authority_filter.cc +2 -4
- data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
- data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
- 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 +162 -115
- 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.h +22 -17
- data/src/core/ext/transport/chttp2/transport/frame.cc +10 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +2 -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 +299 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -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 +1017 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +593 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +19 -22
- 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 +43 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +65 -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 +2 -4
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +151 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +180 -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_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/writing.cc +37 -11
- 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 +984 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +226 -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/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 +135 -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 +0 -25
- data/src/core/filter/auth/client_auth_filter.cc +0 -118
- data/src/core/filter/filter_args.h +9 -23
- 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 +6 -5
- data/src/core/handshaker/security/secure_endpoint.cc +70 -25
- 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.h +5 -5
- 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 +48 -2
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -4
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -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 +130 -162
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +11 -15
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +75 -117
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -9
- data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -15
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +0 -18
- 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 +29 -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/posix_endpoint.cc +145 -92
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +333 -116
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +61 -18
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +45 -37
- 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 +10 -170
- 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 +4 -0
- 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 +45 -93
- data/src/core/lib/experiments/experiments.h +21 -51
- 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/tcp_posix.cc +12 -6
- data/src/core/lib/iomgr/tcp_windows.cc +3 -2
- data/src/core/lib/promise/activity.h +1 -0
- 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 +50 -1
- data/src/core/lib/promise/party.h +66 -1
- 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/slice/slice.h +5 -0
- 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/filter_stack_call.cc +18 -9
- 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/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 +3 -0
- data/src/core/load_balancing/xds/cds.cc +10 -1
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- 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 +21 -6
- 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 +83 -12
- data/src/core/server/server.h +21 -2
- 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_impl.h +1 -1
- data/src/core/telemetry/context_list_entry.cc +38 -0
- data/src/core/telemetry/context_list_entry.h +42 -12
- data/src/core/telemetry/stats_data.cc +233 -207
- data/src/core/telemetry/stats_data.h +250 -153
- data/src/core/telemetry/tcp_tracer.h +1 -1
- 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 +2 -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/latent_see.h +8 -5
- 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 +2 -2
- data/src/core/util/upb_utils.h +42 -0
- data/src/core/util/uri.cc +3 -2
- data/src/core/util/useful.h +53 -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/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_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 +72 -568
- 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 +1 -1
- 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
- metadata +72 -20
- 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/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
@@ -29,7 +29,6 @@
|
|
29
29
|
#include <memory>
|
30
30
|
#include <optional>
|
31
31
|
#include <string>
|
32
|
-
#include <type_traits>
|
33
32
|
|
34
33
|
#include "absl/functional/any_invocable.h"
|
35
34
|
#include "absl/log/check.h"
|
@@ -40,8 +39,7 @@
|
|
40
39
|
#include "src/core/lib/debug/trace.h"
|
41
40
|
#include "src/core/lib/event_engine/posix_engine/event_poller.h"
|
42
41
|
#include "src/core/lib/event_engine/posix_engine/internal_errqueue.h"
|
43
|
-
#include "src/core/lib/event_engine/posix_engine/
|
44
|
-
#include "src/core/lib/event_engine/tcp_socket_utils.h"
|
42
|
+
#include "src/core/lib/event_engine/posix_engine/posix_interface.h"
|
45
43
|
#include "src/core/lib/experiments/experiments.h"
|
46
44
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
47
45
|
#include "src/core/lib/resource_quota/resource_quota.h"
|
@@ -53,7 +51,6 @@
|
|
53
51
|
#include "src/core/util/status_helper.h"
|
54
52
|
#include "src/core/util/strerror.h"
|
55
53
|
#include "src/core/util/sync.h"
|
56
|
-
#include "src/core/util/time.h"
|
57
54
|
|
58
55
|
#ifdef GRPC_POSIX_SOCKET_TCP
|
59
56
|
#ifdef GRPC_LINUX_ERRQUEUE
|
@@ -98,15 +95,19 @@ namespace {
|
|
98
95
|
|
99
96
|
// A wrapper around sendmsg. It sends \a msg over \a fd and returns the number
|
100
97
|
// of bytes sent.
|
101
|
-
|
102
|
-
|
98
|
+
PosixErrorOr<int64_t> TcpSend(EventEnginePosixInterface* posix_interface,
|
99
|
+
const FileDescriptor& fd,
|
100
|
+
const struct msghdr* msg, int* saved_errno,
|
101
|
+
int additional_flags = 0) {
|
103
102
|
GRPC_LATENT_SEE_PARENT_SCOPE("TcpSend");
|
104
|
-
|
103
|
+
PosixErrorOr<int64_t> send_result;
|
105
104
|
do {
|
106
105
|
grpc_core::global_stats().IncrementSyscallWrite();
|
107
|
-
|
108
|
-
|
109
|
-
|
106
|
+
send_result =
|
107
|
+
posix_interface->SendMsg(fd, msg, SENDMSG_FLAGS | additional_flags);
|
108
|
+
*saved_errno = send_result.errno_value().value_or(0);
|
109
|
+
} while (send_result.IsPosixError(EINTR));
|
110
|
+
return send_result;
|
110
111
|
}
|
111
112
|
|
112
113
|
#ifdef GRPC_LINUX_ERRQUEUE
|
@@ -211,9 +212,14 @@ bool CmsgIsZeroCopy(const cmsghdr& cmsg) {
|
|
211
212
|
}
|
212
213
|
#endif // GRPC_LINUX_ERRQUEUE
|
213
214
|
|
214
|
-
absl::Status PosixOSError(
|
215
|
-
|
216
|
-
|
215
|
+
absl::Status PosixOSError(const PosixErrorOr<int64_t>& error_no,
|
216
|
+
absl::string_view call_name) {
|
217
|
+
if (error_no.IsPosixError()) {
|
218
|
+
return absl::UnknownError(
|
219
|
+
absl::StrCat(call_name, ": ", error_no.StrError()));
|
220
|
+
}
|
221
|
+
return absl::UnknownError(
|
222
|
+
absl::StrCat(call_name, ": Wrong file descriptor generation"));
|
217
223
|
}
|
218
224
|
|
219
225
|
} // namespace
|
@@ -288,7 +294,6 @@ bool PosixEndpointImpl::TcpDoRead(absl::Status& status) {
|
|
288
294
|
|
289
295
|
struct msghdr msg;
|
290
296
|
struct iovec iov[MAX_READ_IOVEC];
|
291
|
-
ssize_t read_bytes;
|
292
297
|
size_t total_read_bytes = 0;
|
293
298
|
size_t iov_len = std::min<size_t>(MAX_READ_IOVEC, incoming_buffer_->Count());
|
294
299
|
#ifdef GRPC_LINUX_ERRQUEUE
|
@@ -330,12 +335,14 @@ bool PosixEndpointImpl::TcpDoRead(absl::Status& status) {
|
|
330
335
|
grpc_core::global_stats().IncrementTcpReadOffer(incoming_buffer_->Length());
|
331
336
|
grpc_core::global_stats().IncrementTcpReadOfferIovSize(
|
332
337
|
incoming_buffer_->Count());
|
338
|
+
PosixErrorOr<int64_t> res;
|
339
|
+
EventEnginePosixInterface& posix_interface = poller_->posix_interface();
|
333
340
|
do {
|
334
341
|
grpc_core::global_stats().IncrementSyscallRead();
|
335
|
-
|
336
|
-
} while (
|
342
|
+
res = posix_interface.RecvMsg(handle_->WrappedFd(), &msg, 0);
|
343
|
+
} while (res.IsPosixError(EINTR));
|
337
344
|
|
338
|
-
if (
|
345
|
+
if (res.IsPosixError(EAGAIN)) {
|
339
346
|
// NB: After calling call_read_cb a parallel call of the read handler may
|
340
347
|
// be running.
|
341
348
|
if (total_read_bytes > 0) {
|
@@ -345,7 +352,7 @@ bool PosixEndpointImpl::TcpDoRead(absl::Status& status) {
|
|
345
352
|
inq_ = 0;
|
346
353
|
return false;
|
347
354
|
}
|
348
|
-
|
355
|
+
ssize_t read_bytes = res.value_or(-1);
|
349
356
|
// We have read something in previous reads. We need to deliver those bytes
|
350
357
|
// to the upper layer.
|
351
358
|
if (read_bytes <= 0 && total_read_bytes >= 1) {
|
@@ -355,7 +362,12 @@ bool PosixEndpointImpl::TcpDoRead(absl::Status& status) {
|
|
355
362
|
if (read_bytes <= 0) {
|
356
363
|
// 0 read size ==> end of stream
|
357
364
|
incoming_buffer_->Clear();
|
358
|
-
if (
|
365
|
+
if (res.IsWrongGenerationError()) {
|
366
|
+
status = absl::CancelledError("Closed on fork");
|
367
|
+
grpc_core::StatusSetInt(&status,
|
368
|
+
grpc_core::StatusIntProperty::kRpcStatus,
|
369
|
+
GRPC_STATUS_CANCELLED);
|
370
|
+
} else if (read_bytes == 0) {
|
359
371
|
status = TcpAnnotateError(absl::InternalError("Socket closed"));
|
360
372
|
} else {
|
361
373
|
status = TcpAnnotateError(absl::InternalError(
|
@@ -363,7 +375,6 @@ bool PosixEndpointImpl::TcpDoRead(absl::Status& status) {
|
|
363
375
|
}
|
364
376
|
return true;
|
365
377
|
}
|
366
|
-
|
367
378
|
grpc_core::global_stats().IncrementTcpReadSize(read_bytes);
|
368
379
|
AddToEstimate(static_cast<size_t>(read_bytes));
|
369
380
|
DCHECK((size_t)read_bytes <= incoming_buffer_->Length() - total_read_bytes);
|
@@ -508,11 +519,16 @@ void PosixEndpointImpl::UpdateRcvLowat() {
|
|
508
519
|
if (set_rcvlowat_ == remaining) {
|
509
520
|
return;
|
510
521
|
}
|
511
|
-
|
522
|
+
// Instruct the kernel to wait for specified number of bytes to be received on
|
523
|
+
// the socket before generating an interrupt for packet receive. If the call
|
524
|
+
// succeeds, it returns the number of bytes (wait threshold) that was actually
|
525
|
+
// set.
|
526
|
+
auto result = poller_->posix_interface().SetSockOpt(
|
527
|
+
handle_->WrappedFd(), SOL_SOCKET, SO_RCVLOWAT, remaining);
|
512
528
|
if (result.ok()) {
|
513
529
|
set_rcvlowat_ = *result;
|
514
530
|
} else {
|
515
|
-
LOG(ERROR) << "ERROR in SO_RCVLOWAT: " << result.
|
531
|
+
LOG(ERROR) << "ERROR in SO_RCVLOWAT: " << result.StrError();
|
516
532
|
}
|
517
533
|
}
|
518
534
|
|
@@ -705,17 +721,17 @@ bool PosixEndpointImpl::ProcessErrors() {
|
|
705
721
|
struct cmsghdr align;
|
706
722
|
} aligned_buf;
|
707
723
|
msg.msg_control = aligned_buf.rbuf;
|
708
|
-
|
724
|
+
PosixErrorOr<int64_t> r;
|
725
|
+
EventEnginePosixInterface& posix_interface = poller_->posix_interface();
|
709
726
|
while (true) {
|
710
727
|
msg.msg_controllen = sizeof(aligned_buf.rbuf);
|
711
728
|
do {
|
712
|
-
r =
|
713
|
-
|
714
|
-
} while (r < 0 && saved_errno == EINTR);
|
729
|
+
r = posix_interface.RecvMsg(handle_->WrappedFd(), &msg, MSG_ERRQUEUE);
|
730
|
+
} while (r.IsPosixError(EINTR));
|
715
731
|
|
716
|
-
if (r
|
732
|
+
if (r.IsPosixError(EAGAIN)) {
|
717
733
|
return processed_err; // No more errors to process
|
718
|
-
} else if (r
|
734
|
+
} else if (!r.ok()) {
|
719
735
|
return processed_err;
|
720
736
|
}
|
721
737
|
if (GPR_UNLIKELY((msg.msg_flags & MSG_CTRUNC) != 0)) {
|
@@ -842,13 +858,15 @@ void PosixEndpointImpl::HandleError(absl::Status status) {
|
|
842
858
|
|
843
859
|
bool PosixEndpointImpl::WriteWithTimestamps(struct msghdr* msg,
|
844
860
|
size_t sending_length,
|
845
|
-
|
861
|
+
PosixErrorOr<int64_t>* sent_length,
|
846
862
|
int* saved_errno,
|
847
863
|
int additional_flags) {
|
864
|
+
auto& posix_interface = poller_->posix_interface();
|
848
865
|
if (!socket_ts_enabled_) {
|
849
|
-
|
850
|
-
|
851
|
-
|
866
|
+
if (!posix_interface
|
867
|
+
.SetSockOpt(handle_->WrappedFd(), SOL_SOCKET, SO_TIMESTAMPING,
|
868
|
+
kTimestampingSocketOptions)
|
869
|
+
.ok()) {
|
852
870
|
return false;
|
853
871
|
}
|
854
872
|
bytes_counter_ = -1;
|
@@ -867,16 +885,23 @@ bool PosixEndpointImpl::WriteWithTimestamps(struct msghdr* msg,
|
|
867
885
|
msg->msg_control = u.cmsg_buf;
|
868
886
|
msg->msg_controllen = CMSG_SPACE(sizeof(uint32_t));
|
869
887
|
|
888
|
+
// Add traced buffer before we write to avoid race conditions with getting the
|
889
|
+
// timestamps from the error queue. If sending fails, we simply shutdown the
|
890
|
+
// traced buffer list.
|
891
|
+
traced_buffers_.AddNewEntry(
|
892
|
+
static_cast<uint32_t>(bytes_counter_ + sending_length),
|
893
|
+
&poller_->posix_interface(), handle_->WrappedFd(),
|
894
|
+
std::move(outgoing_buffer_write_event_sink_).value());
|
895
|
+
outgoing_buffer_write_event_sink_.reset();
|
896
|
+
|
870
897
|
// If there was an error on sendmsg the logic in tcp_flush will handle it.
|
871
898
|
grpc_core::global_stats().IncrementTcpWriteSize(sending_length);
|
872
|
-
|
873
|
-
|
874
|
-
|
875
|
-
|
876
|
-
traced_buffers_.AddNewEntry(static_cast<uint32_t>(bytes_counter_ + length),
|
877
|
-
fd_, outgoing_buffer_arg_);
|
878
|
-
outgoing_buffer_arg_ = nullptr;
|
899
|
+
PosixErrorOr<int64_t> length = TcpSend(&posix_interface, handle_->WrappedFd(),
|
900
|
+
msg, saved_errno, additional_flags);
|
901
|
+
if (!length.ok()) {
|
902
|
+
return false;
|
879
903
|
}
|
904
|
+
*sent_length = length;
|
880
905
|
return true;
|
881
906
|
}
|
882
907
|
|
@@ -892,11 +917,10 @@ void PosixEndpointImpl::HandleError(absl::Status /*status*/) {
|
|
892
917
|
|
893
918
|
void PosixEndpointImpl::ZerocopyDisableAndWaitForRemaining() {}
|
894
919
|
|
895
|
-
bool PosixEndpointImpl::WriteWithTimestamps(
|
896
|
-
|
897
|
-
|
898
|
-
|
899
|
-
int /*additional_flags*/) {
|
920
|
+
bool PosixEndpointImpl::WriteWithTimestamps(
|
921
|
+
struct msghdr* /*msg*/, size_t /*sending_length*/,
|
922
|
+
PosixErrorOr<int64_t>* /*sent_length*/, int* /*saved_errno*/,
|
923
|
+
int /*additional_flags*/) {
|
900
924
|
grpc_core::Crash("Write with timestamps not supported for this platform");
|
901
925
|
}
|
902
926
|
#endif // GRPC_LINUX_ERRQUEUE
|
@@ -909,12 +933,12 @@ void PosixEndpointImpl::UnrefMaybePutZerocopySendRecord(
|
|
909
933
|
}
|
910
934
|
|
911
935
|
// If outgoing_buffer_arg is filled, shuts down the list early, so that any
|
912
|
-
// release operations needed can be performed on the arg.
|
936
|
+
// release operations needed can be performed on the arg. Should be used when we
|
937
|
+
// know that there are not gonna be any write timestamps returned on the error
|
938
|
+
// queue, for example, if the socket is not capable of reporting timestamps.
|
913
939
|
void PosixEndpointImpl::TcpShutdownTracedBufferList() {
|
914
|
-
if (
|
915
|
-
traced_buffers_.Shutdown(
|
916
|
-
absl::InternalError("TracedBuffer list shutdown"));
|
917
|
-
outgoing_buffer_arg_ = nullptr;
|
940
|
+
if (outgoing_buffer_write_event_sink_.has_value()) {
|
941
|
+
traced_buffers_.Shutdown(std::move(outgoing_buffer_write_event_sink_));
|
918
942
|
}
|
919
943
|
}
|
920
944
|
|
@@ -922,7 +946,6 @@ void PosixEndpointImpl::TcpShutdownTracedBufferList() {
|
|
922
946
|
bool PosixEndpointImpl::DoFlushZerocopy(TcpZerocopySendRecord* record,
|
923
947
|
absl::Status& status) {
|
924
948
|
msg_iovlen_type iov_size;
|
925
|
-
ssize_t sent_length = 0;
|
926
949
|
size_t sending_length;
|
927
950
|
size_t unwind_slice_idx;
|
928
951
|
size_t unwind_byte_idx;
|
@@ -936,6 +959,7 @@ bool PosixEndpointImpl::DoFlushZerocopy(TcpZerocopySendRecord* record,
|
|
936
959
|
// being populated in most cases.
|
937
960
|
iovec iov[MAX_WRITE_IOVEC];
|
938
961
|
while (true) {
|
962
|
+
PosixErrorOr<int64_t> send_status;
|
939
963
|
sending_length = 0;
|
940
964
|
iov_size = record->PopulateIovs(&unwind_slice_idx, &unwind_byte_idx,
|
941
965
|
&sending_length, iov);
|
@@ -950,9 +974,9 @@ bool PosixEndpointImpl::DoFlushZerocopy(TcpZerocopySendRecord* record,
|
|
950
974
|
// take a single ref on the zerocopy send record.
|
951
975
|
tcp_zerocopy_send_ctx_->NoteSend(record);
|
952
976
|
saved_errno = 0;
|
953
|
-
if (
|
977
|
+
if (outgoing_buffer_write_event_sink_.has_value()) {
|
954
978
|
if (!ts_capable_ ||
|
955
|
-
!WriteWithTimestamps(&msg, sending_length, &
|
979
|
+
!WriteWithTimestamps(&msg, sending_length, &send_status, &saved_errno,
|
956
980
|
MSG_ZEROCOPY)) {
|
957
981
|
// We could not set socket options to collect Fathom timestamps.
|
958
982
|
// Fallback on writing without timestamps.
|
@@ -967,7 +991,8 @@ bool PosixEndpointImpl::DoFlushZerocopy(TcpZerocopySendRecord* record,
|
|
967
991
|
msg.msg_controllen = 0;
|
968
992
|
grpc_core::global_stats().IncrementTcpWriteSize(sending_length);
|
969
993
|
grpc_core::global_stats().IncrementTcpWriteIovSize(iov_size);
|
970
|
-
|
994
|
+
send_status = TcpSend(&poller_->posix_interface(), handle_->WrappedFd(),
|
995
|
+
&msg, &saved_errno, MSG_ZEROCOPY);
|
971
996
|
}
|
972
997
|
if (tcp_zerocopy_send_ctx_->UpdateZeroCopyOptMemStateAfterSend(
|
973
998
|
saved_errno == ENOBUFS, constrained) ||
|
@@ -997,21 +1022,21 @@ bool PosixEndpointImpl::DoFlushZerocopy(TcpZerocopySendRecord* record,
|
|
997
1022
|
#endif
|
998
1023
|
}
|
999
1024
|
}
|
1000
|
-
if (
|
1025
|
+
if (!send_status.ok()) {
|
1001
1026
|
// If this particular send failed, drop ref taken earlier in this method.
|
1002
1027
|
tcp_zerocopy_send_ctx_->UndoSend();
|
1003
|
-
if (
|
1028
|
+
if (send_status.IsPosixError(EAGAIN) ||
|
1029
|
+
send_status.IsPosixError(ENOBUFS)) {
|
1004
1030
|
record->UnwindIfThrottled(unwind_slice_idx, unwind_byte_idx);
|
1005
1031
|
return false;
|
1006
1032
|
} else {
|
1007
|
-
status = TcpAnnotateError(PosixOSError(
|
1008
|
-
TcpShutdownTracedBufferList();
|
1033
|
+
status = TcpAnnotateError(PosixOSError(send_status, "sendmsg"));
|
1009
1034
|
return true;
|
1010
1035
|
}
|
1011
1036
|
}
|
1012
|
-
bytes_counter_ +=
|
1037
|
+
bytes_counter_ += *send_status;
|
1013
1038
|
record->UpdateOffsetForBytesSent(sending_length,
|
1014
|
-
static_cast<size_t>(
|
1039
|
+
static_cast<size_t>(*send_status));
|
1015
1040
|
if (record->AllSlicesSent()) {
|
1016
1041
|
return true;
|
1017
1042
|
}
|
@@ -1033,7 +1058,6 @@ bool PosixEndpointImpl::TcpFlush(absl::Status& status) {
|
|
1033
1058
|
struct msghdr msg;
|
1034
1059
|
struct iovec iov[MAX_WRITE_IOVEC];
|
1035
1060
|
msg_iovlen_type iov_size;
|
1036
|
-
ssize_t sent_length = 0;
|
1037
1061
|
size_t sending_length;
|
1038
1062
|
size_t trailing;
|
1039
1063
|
size_t unwind_slice_idx;
|
@@ -1046,6 +1070,7 @@ bool PosixEndpointImpl::TcpFlush(absl::Status& status) {
|
|
1046
1070
|
size_t outgoing_slice_idx = 0;
|
1047
1071
|
|
1048
1072
|
while (true) {
|
1073
|
+
PosixErrorOr<int64_t> send_result;
|
1049
1074
|
sending_length = 0;
|
1050
1075
|
unwind_slice_idx = outgoing_slice_idx;
|
1051
1076
|
unwind_byte_idx = outgoing_byte_idx_;
|
@@ -1070,9 +1095,9 @@ bool PosixEndpointImpl::TcpFlush(absl::Status& status) {
|
|
1070
1095
|
msg.msg_flags = 0;
|
1071
1096
|
bool tried_sending_message = false;
|
1072
1097
|
saved_errno = 0;
|
1073
|
-
if (
|
1098
|
+
if (outgoing_buffer_write_event_sink_.has_value()) {
|
1074
1099
|
if (!ts_capable_ || !WriteWithTimestamps(&msg, sending_length,
|
1075
|
-
&
|
1100
|
+
&send_result, &saved_errno, 0)) {
|
1076
1101
|
// We could not set socket options to collect Fathom timestamps.
|
1077
1102
|
// Fallback on writing without timestamps.
|
1078
1103
|
ts_capable_ = false;
|
@@ -1086,11 +1111,13 @@ bool PosixEndpointImpl::TcpFlush(absl::Status& status) {
|
|
1086
1111
|
msg.msg_controllen = 0;
|
1087
1112
|
grpc_core::global_stats().IncrementTcpWriteSize(sending_length);
|
1088
1113
|
grpc_core::global_stats().IncrementTcpWriteIovSize(iov_size);
|
1089
|
-
|
1114
|
+
send_result = TcpSend(&poller_->posix_interface(), handle_->WrappedFd(),
|
1115
|
+
&msg, &saved_errno);
|
1090
1116
|
}
|
1091
1117
|
|
1092
|
-
if (
|
1093
|
-
if (
|
1118
|
+
if (!send_result.ok()) {
|
1119
|
+
if (send_result.IsPosixError(EAGAIN) ||
|
1120
|
+
send_result.IsPosixError(ENOBUFS)) {
|
1094
1121
|
outgoing_byte_idx_ = unwind_byte_idx;
|
1095
1122
|
// unref all and forget about all slices that have been written to this
|
1096
1123
|
// point
|
@@ -1099,16 +1126,15 @@ bool PosixEndpointImpl::TcpFlush(absl::Status& status) {
|
|
1099
1126
|
}
|
1100
1127
|
return false;
|
1101
1128
|
} else {
|
1102
|
-
status = TcpAnnotateError(PosixOSError(
|
1129
|
+
status = TcpAnnotateError(PosixOSError(send_result, "sendmsg"));
|
1103
1130
|
outgoing_buffer_->Clear();
|
1104
|
-
TcpShutdownTracedBufferList();
|
1105
1131
|
return true;
|
1106
1132
|
}
|
1107
1133
|
}
|
1108
1134
|
|
1109
1135
|
CHECK_EQ(outgoing_byte_idx_, 0u);
|
1110
|
-
bytes_counter_ +=
|
1111
|
-
trailing = sending_length - static_cast<size_t>(
|
1136
|
+
bytes_counter_ += *send_result;
|
1137
|
+
trailing = sending_length - static_cast<size_t>(*send_result);
|
1112
1138
|
while (trailing > 0) {
|
1113
1139
|
size_t slice_length;
|
1114
1140
|
outgoing_slice_idx--;
|
@@ -1172,7 +1198,8 @@ bool PosixEndpointImpl::Write(
|
|
1172
1198
|
<< "Endpoint[" << this << "]: Write " << data->Length() << " bytes";
|
1173
1199
|
|
1174
1200
|
if (data->Length() == 0) {
|
1175
|
-
|
1201
|
+
GRPC_TRACE_LOG(event_engine_endpoint, INFO)
|
1202
|
+
<< "Endpoint[" << this << "]: Write skipped";
|
1176
1203
|
if (handle_->IsHandleShutdown()) {
|
1177
1204
|
status = TcpAnnotateError(absl::InternalError("EOF"));
|
1178
1205
|
engine_->Run(
|
@@ -1183,8 +1210,6 @@ bool PosixEndpointImpl::Write(
|
|
1183
1210
|
});
|
1184
1211
|
return false;
|
1185
1212
|
}
|
1186
|
-
GRPC_TRACE_LOG(event_engine_endpoint, INFO)
|
1187
|
-
<< "Endpoint[" << this << "]: Write skipped";
|
1188
1213
|
return true;
|
1189
1214
|
}
|
1190
1215
|
|
@@ -1194,10 +1219,8 @@ bool PosixEndpointImpl::Write(
|
|
1194
1219
|
outgoing_buffer_ = data;
|
1195
1220
|
outgoing_byte_idx_ = 0;
|
1196
1221
|
}
|
1197
|
-
|
1198
|
-
|
1199
|
-
if (outgoing_buffer_arg_) {
|
1200
|
-
CHECK(poller_->CanTrackErrors());
|
1222
|
+
if (args.has_metrics_sink() && poller_->CanTrackErrors()) {
|
1223
|
+
outgoing_buffer_write_event_sink_ = args.TakeMetricsSink();
|
1201
1224
|
}
|
1202
1225
|
|
1203
1226
|
bool flush_result = zerocopy_send_record != nullptr
|
@@ -1247,12 +1270,12 @@ void PosixEndpointImpl::MaybeShutdown(
|
|
1247
1270
|
}
|
1248
1271
|
|
1249
1272
|
PosixEndpointImpl ::~PosixEndpointImpl() {
|
1250
|
-
|
1273
|
+
FileDescriptor release_fd;
|
1251
1274
|
handle_->OrphanHandle(on_done_,
|
1252
1275
|
on_release_fd_ == nullptr ? nullptr : &release_fd, "");
|
1253
1276
|
if (on_release_fd_ != nullptr) {
|
1254
1277
|
engine_->Run([on_release_fd = std::move(on_release_fd_),
|
1255
|
-
release_fd]() mutable { on_release_fd(release_fd); });
|
1278
|
+
release_fd]() mutable { on_release_fd(release_fd.fd()); });
|
1256
1279
|
}
|
1257
1280
|
delete on_read_;
|
1258
1281
|
delete on_write_;
|
@@ -1264,24 +1287,23 @@ PosixEndpointImpl::PosixEndpointImpl(EventHandle* handle,
|
|
1264
1287
|
std::shared_ptr<EventEngine> engine,
|
1265
1288
|
MemoryAllocator&& /*allocator*/,
|
1266
1289
|
const PosixTcpOptions& options)
|
1267
|
-
:
|
1268
|
-
on_done_(on_done),
|
1290
|
+
: on_done_(on_done),
|
1269
1291
|
traced_buffers_(),
|
1270
1292
|
handle_(handle),
|
1271
1293
|
poller_(handle->Poller()),
|
1272
1294
|
engine_(engine) {
|
1273
|
-
|
1274
|
-
fd_ = handle_->WrappedFd();
|
1295
|
+
FileDescriptor fd = handle_->WrappedFd();
|
1275
1296
|
CHECK(options.resource_quota != nullptr);
|
1276
|
-
auto
|
1297
|
+
auto& posix_interface = poller_->posix_interface();
|
1298
|
+
auto peer_addr_string = posix_interface.PeerAddressString(fd);
|
1277
1299
|
mem_quota_ = options.resource_quota->memory_quota();
|
1278
1300
|
memory_owner_ = mem_quota_->CreateMemoryOwner();
|
1279
1301
|
self_reservation_ = memory_owner_.MakeReservation(sizeof(PosixEndpointImpl));
|
1280
|
-
auto local_address =
|
1302
|
+
auto local_address = posix_interface.LocalAddress(fd);
|
1281
1303
|
if (local_address.ok()) {
|
1282
1304
|
local_address_ = *local_address;
|
1283
1305
|
}
|
1284
|
-
auto peer_address =
|
1306
|
+
auto peer_address = posix_interface.PeerAddress(fd);
|
1285
1307
|
if (peer_address.ok()) {
|
1286
1308
|
peer_address_ = *peer_address;
|
1287
1309
|
}
|
@@ -1304,14 +1326,11 @@ PosixEndpointImpl::PosixEndpointImpl(EventHandle* handle,
|
|
1304
1326
|
<< "ulimit value is not set. Use ulimit -l <value> to set its "
|
1305
1327
|
<< "value.";
|
1306
1328
|
} else {
|
1307
|
-
|
1308
|
-
if (setsockopt(fd_, SOL_SOCKET, SO_ZEROCOPY, &enable, sizeof(enable)) !=
|
1309
|
-
0) {
|
1329
|
+
if (posix_interface.SetSockOpt(fd, SOL_SOCKET, SO_ZEROCOPY, 1).ok()) {
|
1310
1330
|
zerocopy_enabled = false;
|
1311
1331
|
LOG(ERROR) << "Failed to set zerocopy options on the socket.";
|
1312
1332
|
}
|
1313
1333
|
}
|
1314
|
-
|
1315
1334
|
if (zerocopy_enabled) {
|
1316
1335
|
VLOG(2) << "Tx-zero copy enabled for gRPC sends. RLIMIT_MEMLOCK value "
|
1317
1336
|
<< "=" << GetRLimitMemLockMax()
|
@@ -1323,11 +1342,11 @@ PosixEndpointImpl::PosixEndpointImpl(EventHandle* handle,
|
|
1323
1342
|
zerocopy_enabled, options.tcp_tx_zerocopy_max_simultaneous_sends,
|
1324
1343
|
options.tcp_tx_zerocopy_send_bytes_threshold);
|
1325
1344
|
#ifdef GRPC_HAVE_TCP_INQ
|
1326
|
-
|
1327
|
-
if (
|
1345
|
+
auto result = posix_interface.SetSockOpt(fd, SOL_TCP, TCP_INQ, 1);
|
1346
|
+
if (result.ok()) {
|
1328
1347
|
inq_capable_ = true;
|
1329
1348
|
} else {
|
1330
|
-
VLOG(2) << "cannot set inq fd=" <<
|
1349
|
+
VLOG(2) << "cannot set inq fd=" << fd << " error=" << result.StrError();
|
1331
1350
|
inq_capable_ = false;
|
1332
1351
|
}
|
1333
1352
|
#else
|
@@ -1348,6 +1367,40 @@ PosixEndpointImpl::PosixEndpointImpl(EventHandle* handle,
|
|
1348
1367
|
}
|
1349
1368
|
}
|
1350
1369
|
|
1370
|
+
namespace {
|
1371
|
+
class PosixEndpointTelemetryInfo : public EventEngine::Endpoint::TelemetryInfo {
|
1372
|
+
public:
|
1373
|
+
std::vector<size_t> AllWriteMetrics() const override {
|
1374
|
+
return PosixWriteEventSink::AllWriteMetrics();
|
1375
|
+
}
|
1376
|
+
|
1377
|
+
std::optional<absl::string_view> GetMetricName(size_t key) const override {
|
1378
|
+
return PosixWriteEventSink::GetMetricName(key);
|
1379
|
+
}
|
1380
|
+
|
1381
|
+
std::optional<size_t> GetMetricKey(absl::string_view name) const override {
|
1382
|
+
return PosixWriteEventSink::GetMetricKey(name);
|
1383
|
+
}
|
1384
|
+
|
1385
|
+
std::shared_ptr<EventEngine::Endpoint::MetricsSet> GetMetricsSet(
|
1386
|
+
absl::Span<const size_t> keys) const override {
|
1387
|
+
return PosixWriteEventSink::GetMetricsSet(keys);
|
1388
|
+
}
|
1389
|
+
|
1390
|
+
std::shared_ptr<EventEngine::Endpoint::MetricsSet> GetFullMetricsSet()
|
1391
|
+
const override {
|
1392
|
+
return PosixWriteEventSink::GetFullMetricsSet();
|
1393
|
+
}
|
1394
|
+
};
|
1395
|
+
} // namespace
|
1396
|
+
|
1397
|
+
std::shared_ptr<EventEngine::Endpoint::TelemetryInfo>
|
1398
|
+
PosixEndpoint::GetTelemetryInfo() const {
|
1399
|
+
static absl::NoDestructor<std::shared_ptr<PosixEndpointTelemetryInfo>>
|
1400
|
+
telemetry_info(std::make_shared<PosixEndpointTelemetryInfo>());
|
1401
|
+
return *telemetry_info;
|
1402
|
+
}
|
1403
|
+
|
1351
1404
|
std::unique_ptr<PosixEndpoint> CreatePosixEndpoint(
|
1352
1405
|
EventHandle* handle, PosixEngineClosure* on_shutdown,
|
1353
1406
|
std::shared_ptr<EventEngine> engine, MemoryAllocator&& allocator,
|
@@ -27,19 +27,15 @@
|
|
27
27
|
#include <atomic>
|
28
28
|
#include <cstdint>
|
29
29
|
#include <memory>
|
30
|
-
#include <new>
|
31
|
-
#include <optional>
|
32
30
|
#include <utility>
|
33
31
|
|
34
32
|
#include "absl/base/thread_annotations.h"
|
35
33
|
#include "absl/container/flat_hash_map.h"
|
36
34
|
#include "absl/functional/any_invocable.h"
|
37
|
-
#include "absl/hash/hash.h"
|
38
35
|
#include "absl/log/check.h"
|
39
36
|
#include "absl/log/log.h"
|
40
37
|
#include "absl/status/status.h"
|
41
38
|
#include "absl/status/statusor.h"
|
42
|
-
#include "src/core/lib/event_engine/extensions/supports_fd.h"
|
43
39
|
#include "src/core/lib/event_engine/posix.h"
|
44
40
|
#include "src/core/lib/event_engine/posix_engine/event_poller.h"
|
45
41
|
#include "src/core/lib/event_engine/posix_engine/posix_engine_closure.h"
|
@@ -488,7 +484,7 @@ class PosixEndpointImpl : public grpc_core::RefCounted<PosixEndpointImpl> {
|
|
488
484
|
return local_address_;
|
489
485
|
}
|
490
486
|
|
491
|
-
|
487
|
+
FileDescriptor GetWrappedFd() { return handle_->WrappedFd(); }
|
492
488
|
|
493
489
|
bool CanTrackErrors() const { return poller_->CanTrackErrors(); }
|
494
490
|
|
@@ -519,7 +515,7 @@ class PosixEndpointImpl : public grpc_core::RefCounted<PosixEndpointImpl> {
|
|
519
515
|
void UnrefMaybePutZerocopySendRecord(TcpZerocopySendRecord* record);
|
520
516
|
void ZerocopyDisableAndWaitForRemaining();
|
521
517
|
bool WriteWithTimestamps(struct msghdr* msg, size_t sending_length,
|
522
|
-
|
518
|
+
PosixErrorOr<int64_t>* sent_length, int* saved_errno,
|
523
519
|
int additional_flags);
|
524
520
|
absl::Status TcpAnnotateError(absl::Status src_error) const;
|
525
521
|
#ifdef GRPC_LINUX_ERRQUEUE
|
@@ -530,16 +526,13 @@ class PosixEndpointImpl : public grpc_core::RefCounted<PosixEndpointImpl> {
|
|
530
526
|
struct cmsghdr* ProcessTimestamp(msghdr* msg, struct cmsghdr* cmsg);
|
531
527
|
#endif // GRPC_LINUX_ERRQUEUE
|
532
528
|
grpc_core::Mutex read_mu_;
|
533
|
-
PosixSocketWrapper sock_;
|
534
|
-
int fd_;
|
535
529
|
bool is_first_read_ = true;
|
536
530
|
bool has_posted_reclaimer_ ABSL_GUARDED_BY(read_mu_) = false;
|
537
531
|
double target_length_;
|
538
532
|
int min_read_chunk_size_;
|
539
533
|
int max_read_chunk_size_;
|
540
|
-
|
534
|
+
int64_t set_rcvlowat_ = 0;
|
541
535
|
double bytes_read_this_round_ = 0;
|
542
|
-
std::atomic<int> ref_count_{1};
|
543
536
|
|
544
537
|
// garbage after the last read.
|
545
538
|
grpc_event_engine::experimental::SliceBuffer last_read_buffer_;
|
@@ -571,7 +564,9 @@ class PosixEndpointImpl : public grpc_core::RefCounted<PosixEndpointImpl> {
|
|
571
564
|
grpc_core::MemoryOwner memory_owner_;
|
572
565
|
grpc_core::MemoryAllocator::Reservation self_reservation_;
|
573
566
|
|
574
|
-
|
567
|
+
std::optional<
|
568
|
+
grpc_event_engine::experimental::EventEngine::Endpoint::WriteEventSink>
|
569
|
+
outgoing_buffer_write_event_sink_;
|
575
570
|
|
576
571
|
absl::AnyInvocable<void(absl::StatusOr<int>)> on_release_fd_ = nullptr;
|
577
572
|
|
@@ -623,13 +618,8 @@ class PosixEndpoint : public PosixEndpointWithFdSupport {
|
|
623
618
|
return impl_->Write(std::move(on_writable), data, std::move(args));
|
624
619
|
}
|
625
620
|
|
626
|
-
std::
|
627
|
-
|
628
|
-
return std::nullopt;
|
629
|
-
}
|
630
|
-
std::optional<size_t> GetMetricKey(absl::string_view) override {
|
631
|
-
return std::nullopt;
|
632
|
-
}
|
621
|
+
std::shared_ptr<EventEngine::Endpoint::TelemetryInfo> GetTelemetryInfo()
|
622
|
+
const override;
|
633
623
|
|
634
624
|
const grpc_event_engine::experimental::EventEngine::ResolvedAddress&
|
635
625
|
GetPeerAddress() const override {
|
@@ -640,7 +630,7 @@ class PosixEndpoint : public PosixEndpointWithFdSupport {
|
|
640
630
|
return impl_->GetLocalAddress();
|
641
631
|
}
|
642
632
|
|
643
|
-
int GetWrappedFd() override { return impl_->GetWrappedFd(); }
|
633
|
+
int GetWrappedFd() override { return impl_->GetWrappedFd().fd(); }
|
644
634
|
|
645
635
|
bool CanTrackErrors() override { return impl_->CanTrackErrors(); }
|
646
636
|
|