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
@@ -25,7 +25,9 @@
|
|
25
25
|
|
26
26
|
#include "absl/functional/any_invocable.h"
|
27
27
|
#include "absl/log/log.h"
|
28
|
+
#include "src/core/lib/event_engine/posix_engine/posix_interface.h"
|
28
29
|
#include "src/core/lib/iomgr/port.h"
|
30
|
+
#include "src/core/util/crash.h"
|
29
31
|
#include "src/core/util/sync.h"
|
30
32
|
|
31
33
|
#ifdef GRPC_LINUX_ERRQUEUE
|
@@ -36,25 +38,6 @@
|
|
36
38
|
namespace grpc_event_engine::experimental {
|
37
39
|
|
38
40
|
namespace {
|
39
|
-
// Fills gpr_timespec gts based on values from timespec ts.
|
40
|
-
void FillGprFromTimestamp(gpr_timespec* gts, const struct timespec* ts) {
|
41
|
-
gts->tv_sec = ts->tv_sec;
|
42
|
-
gts->tv_nsec = static_cast<int32_t>(ts->tv_nsec);
|
43
|
-
gts->clock_type = GPR_CLOCK_REALTIME;
|
44
|
-
}
|
45
|
-
|
46
|
-
void DefaultTimestampsCallback(void* /*arg*/, Timestamps* /*ts*/,
|
47
|
-
absl::Status /*shutdown_err*/) {
|
48
|
-
VLOG(2) << "Timestamps callback has not been registered";
|
49
|
-
}
|
50
|
-
|
51
|
-
// The saved callback function that will be invoked when we get all the
|
52
|
-
// timestamps that we are going to get for a TracedBuffer.
|
53
|
-
absl::AnyInvocable<void(void*, Timestamps*, absl::Status)>
|
54
|
-
g_timestamps_callback =
|
55
|
-
[]() -> absl::AnyInvocable<void(void*, Timestamps*, absl::Status)> {
|
56
|
-
return DefaultTimestampsCallback;
|
57
|
-
}();
|
58
41
|
|
59
42
|
// Used to extract individual opt stats from cmsg, so as to avoid troubles with
|
60
43
|
// unaligned reads.
|
@@ -66,260 +49,243 @@ T ReadUnaligned(const void* ptr) {
|
|
66
49
|
}
|
67
50
|
|
68
51
|
// Extracts opt stats from the tcp_info struct \a info to \a metrics
|
69
|
-
|
70
|
-
|
52
|
+
PosixWriteEventSink::ConnectionMetrics ExtractOptStatsFromTcpInfo(
|
53
|
+
const tcp_info* info) {
|
54
|
+
PosixWriteEventSink::ConnectionMetrics metrics;
|
71
55
|
if (info == nullptr) {
|
72
|
-
return;
|
56
|
+
return metrics;
|
73
57
|
}
|
74
58
|
if (info->length > offsetof(tcp_info, tcpi_sndbuf_limited)) {
|
75
|
-
metrics
|
76
|
-
metrics
|
77
|
-
|
78
|
-
metrics
|
79
|
-
metrics
|
80
|
-
metrics
|
81
|
-
metrics
|
82
|
-
metrics->data_notsent = info->tcpi_notsent_bytes;
|
59
|
+
metrics.recurring_retrans = info->tcpi_retransmits;
|
60
|
+
metrics.is_delivery_rate_app_limited = info->tcpi_delivery_rate_app_limited;
|
61
|
+
metrics.congestion_window = info->tcpi_snd_cwnd;
|
62
|
+
metrics.reordering = info->tcpi_reordering;
|
63
|
+
metrics.packet_retx = info->tcpi_total_retrans;
|
64
|
+
metrics.pacing_rate = info->tcpi_pacing_rate;
|
65
|
+
metrics.data_notsent = info->tcpi_notsent_bytes;
|
83
66
|
if (info->tcpi_min_rtt != UINT32_MAX) {
|
84
|
-
metrics
|
67
|
+
metrics.min_rtt = info->tcpi_min_rtt;
|
85
68
|
}
|
86
|
-
metrics
|
87
|
-
metrics
|
88
|
-
metrics
|
89
|
-
metrics
|
90
|
-
metrics
|
69
|
+
metrics.packet_sent = info->tcpi_data_segs_out;
|
70
|
+
metrics.delivery_rate = info->tcpi_delivery_rate;
|
71
|
+
metrics.busy_usec = info->tcpi_busy_time;
|
72
|
+
metrics.rwnd_limited_usec = info->tcpi_rwnd_limited;
|
73
|
+
metrics.sndbuf_limited_usec = info->tcpi_sndbuf_limited;
|
91
74
|
}
|
92
75
|
if (info->length > offsetof(tcp_info, tcpi_dsack_dups)) {
|
93
|
-
metrics
|
94
|
-
metrics
|
95
|
-
metrics
|
76
|
+
metrics.data_sent = info->tcpi_bytes_sent;
|
77
|
+
metrics.data_retx = info->tcpi_bytes_retrans;
|
78
|
+
metrics.packet_spurious_retx = info->tcpi_dsack_dups;
|
96
79
|
}
|
80
|
+
return metrics;
|
97
81
|
}
|
98
82
|
|
99
83
|
// Extracts opt stats from the given control message \a opt_stats to the
|
100
84
|
// connection metrics \a metrics.
|
101
|
-
|
102
|
-
|
85
|
+
PosixWriteEventSink::ConnectionMetrics ExtractOptStatsFromCmsg(
|
86
|
+
const cmsghdr* opt_stats) {
|
87
|
+
PosixWriteEventSink::ConnectionMetrics metrics;
|
103
88
|
if (opt_stats == nullptr) {
|
104
|
-
return;
|
89
|
+
return metrics;
|
105
90
|
}
|
106
91
|
const auto* data = CMSG_DATA(opt_stats);
|
107
92
|
constexpr int64_t cmsg_hdr_len = CMSG_ALIGN(sizeof(struct cmsghdr));
|
108
93
|
const int64_t len = opt_stats->cmsg_len - cmsg_hdr_len;
|
109
94
|
int64_t offset = 0;
|
110
|
-
|
111
95
|
while (offset < len) {
|
112
96
|
const auto* attr = reinterpret_cast<const nlattr*>(data + offset);
|
113
97
|
const void* val = data + offset + NLA_HDRLEN;
|
114
98
|
switch (attr->nla_type) {
|
115
99
|
case TCP_NLA_BUSY: {
|
116
|
-
metrics
|
100
|
+
metrics.busy_usec = ReadUnaligned<uint64_t>(val);
|
117
101
|
break;
|
118
102
|
}
|
119
103
|
case TCP_NLA_RWND_LIMITED: {
|
120
|
-
metrics
|
104
|
+
metrics.rwnd_limited_usec = ReadUnaligned<uint64_t>(val);
|
121
105
|
break;
|
122
106
|
}
|
123
107
|
case TCP_NLA_SNDBUF_LIMITED: {
|
124
|
-
metrics
|
108
|
+
metrics.sndbuf_limited_usec = ReadUnaligned<uint64_t>(val);
|
125
109
|
break;
|
126
110
|
}
|
127
111
|
case TCP_NLA_PACING_RATE: {
|
128
|
-
metrics
|
112
|
+
metrics.pacing_rate = ReadUnaligned<uint64_t>(val);
|
129
113
|
break;
|
130
114
|
}
|
131
115
|
case TCP_NLA_DELIVERY_RATE: {
|
132
|
-
metrics
|
116
|
+
metrics.delivery_rate = ReadUnaligned<uint64_t>(val);
|
133
117
|
break;
|
134
118
|
}
|
135
119
|
case TCP_NLA_DELIVERY_RATE_APP_LMT: {
|
136
|
-
metrics
|
120
|
+
metrics.is_delivery_rate_app_limited = ReadUnaligned<uint8_t>(val);
|
137
121
|
break;
|
138
122
|
}
|
139
123
|
case TCP_NLA_SND_CWND: {
|
140
|
-
metrics
|
124
|
+
metrics.congestion_window = ReadUnaligned<uint32_t>(val);
|
141
125
|
break;
|
142
126
|
}
|
143
127
|
case TCP_NLA_MIN_RTT: {
|
144
|
-
metrics
|
128
|
+
metrics.min_rtt = ReadUnaligned<uint32_t>(val);
|
145
129
|
break;
|
146
130
|
}
|
147
131
|
case TCP_NLA_SRTT: {
|
148
|
-
metrics
|
132
|
+
metrics.srtt = ReadUnaligned<uint32_t>(val);
|
149
133
|
break;
|
150
134
|
}
|
151
135
|
case TCP_NLA_RECUR_RETRANS: {
|
152
|
-
metrics
|
136
|
+
metrics.recurring_retrans = ReadUnaligned<uint8_t>(val);
|
153
137
|
break;
|
154
138
|
}
|
155
139
|
case TCP_NLA_BYTES_SENT: {
|
156
|
-
metrics
|
140
|
+
metrics.data_sent = ReadUnaligned<uint64_t>(val);
|
157
141
|
break;
|
158
142
|
}
|
159
143
|
case TCP_NLA_DATA_SEGS_OUT: {
|
160
|
-
metrics
|
144
|
+
metrics.packet_sent = ReadUnaligned<uint64_t>(val);
|
161
145
|
break;
|
162
146
|
}
|
163
147
|
case TCP_NLA_TOTAL_RETRANS: {
|
164
|
-
metrics
|
148
|
+
metrics.packet_retx = ReadUnaligned<uint64_t>(val);
|
165
149
|
break;
|
166
150
|
}
|
167
151
|
case TCP_NLA_DELIVERED: {
|
168
|
-
metrics
|
152
|
+
metrics.packet_delivered = ReadUnaligned<uint32_t>(val);
|
169
153
|
break;
|
170
154
|
}
|
171
155
|
case TCP_NLA_DELIVERED_CE: {
|
172
|
-
metrics
|
156
|
+
metrics.packet_delivered_ce = ReadUnaligned<uint32_t>(val);
|
173
157
|
break;
|
174
158
|
}
|
175
159
|
case TCP_NLA_BYTES_RETRANS: {
|
176
|
-
metrics
|
160
|
+
metrics.data_retx = ReadUnaligned<uint64_t>(val);
|
177
161
|
break;
|
178
162
|
}
|
179
163
|
case TCP_NLA_DSACK_DUPS: {
|
180
|
-
metrics
|
164
|
+
metrics.packet_spurious_retx = ReadUnaligned<uint32_t>(val);
|
181
165
|
break;
|
182
166
|
}
|
183
167
|
case TCP_NLA_REORDERING: {
|
184
|
-
metrics
|
168
|
+
metrics.reordering = ReadUnaligned<uint32_t>(val);
|
185
169
|
break;
|
186
170
|
}
|
187
171
|
case TCP_NLA_SND_SSTHRESH: {
|
188
|
-
metrics
|
172
|
+
metrics.snd_ssthresh = ReadUnaligned<uint32_t>(val);
|
173
|
+
break;
|
174
|
+
}
|
175
|
+
case TCP_NLA_BYTES_NOTSENT: {
|
176
|
+
metrics.data_notsent = ReadUnaligned<uint16_t>(val);
|
189
177
|
break;
|
190
178
|
}
|
191
179
|
}
|
192
180
|
offset += NLA_ALIGN(attr->nla_len);
|
193
181
|
}
|
182
|
+
return metrics;
|
194
183
|
}
|
184
|
+
|
185
|
+
grpc_core::Duration g_max_pending_ack_time = grpc_core::Duration::Seconds(10);
|
186
|
+
|
195
187
|
} // namespace.
|
196
188
|
|
197
|
-
bool TracedBufferList::TracedBuffer::
|
198
|
-
|
199
|
-
return gpr_time_to_millis(gpr_time_sub(ts, last_timestamp_)) >
|
200
|
-
kGrpcMaxPendingAckTimeMillis;
|
189
|
+
bool TracedBufferList::TracedBuffer::TimedOut(grpc_core::Timestamp now) {
|
190
|
+
return last_timestamp_ + g_max_pending_ack_time < now;
|
201
191
|
}
|
202
192
|
|
203
|
-
void TracedBufferList::AddNewEntry(int32_t seq_no,
|
204
|
-
|
193
|
+
void TracedBufferList::AddNewEntry(int32_t seq_no,
|
194
|
+
EventEnginePosixInterface* posix_interface,
|
195
|
+
const FileDescriptor& fd,
|
196
|
+
EventEngine::Endpoint::WriteEventSink sink) {
|
197
|
+
TracedBuffer new_elem(seq_no, std::move(sink));
|
205
198
|
// Store the current time as the sendmsg time.
|
206
|
-
new_elem
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
&
|
213
|
-
}
|
214
|
-
new_elem->last_timestamp_ = new_elem->ts_.sendmsg_time.time;
|
215
|
-
grpc_core::MutexLock lock(&mu_);
|
216
|
-
if (!head_) {
|
217
|
-
head_ = tail_ = new_elem;
|
199
|
+
// new_elem.ts_.sendmsg_time.time = gpr_now(GPR_CLOCK_REALTIME);
|
200
|
+
auto curr_time = absl::Now();
|
201
|
+
struct tcp_info info;
|
202
|
+
if (posix_interface != nullptr &&
|
203
|
+
GetSocketTcpInfo(&info, posix_interface, fd).ok()) {
|
204
|
+
new_elem.sink_.RecordEvent(EventEngine::Endpoint::WriteEvent::kSendMsg,
|
205
|
+
curr_time, ExtractOptStatsFromTcpInfo(&info));
|
218
206
|
} else {
|
219
|
-
|
220
|
-
|
207
|
+
new_elem.sink_.RecordEvent(EventEngine::Endpoint::WriteEvent::kSendMsg,
|
208
|
+
curr_time,
|
209
|
+
PosixWriteEventSink::ConnectionMetrics());
|
221
210
|
}
|
211
|
+
new_elem.last_timestamp_ = grpc_core::Timestamp::Now();
|
212
|
+
// new_elem.last_timestamp_ = new_elem.ts_.sendmsg_time.time;
|
213
|
+
grpc_core::MutexLock lock(&mu_);
|
214
|
+
list_.push_back(std::move(new_elem));
|
222
215
|
}
|
223
216
|
|
224
217
|
void TracedBufferList::ProcessTimestamp(struct sock_extended_err* serr,
|
225
218
|
struct cmsghdr* opt_stats,
|
226
219
|
struct scm_timestamping* tss) {
|
220
|
+
absl::Time timestamp = absl::TimeFromTimespec(tss->ts[0]);
|
221
|
+
grpc_core::Timestamp core_timestamp = grpc_core::Timestamp::Now();
|
222
|
+
auto metrics = ExtractOptStatsFromCmsg(opt_stats);
|
227
223
|
grpc_core::MutexLock lock(&mu_);
|
228
|
-
|
229
|
-
|
230
|
-
while (elem != nullptr) {
|
224
|
+
auto it = list_.begin();
|
225
|
+
while (it != list_.end()) {
|
231
226
|
// The byte number refers to the sequence number of the last byte which this
|
232
227
|
// timestamp relates to.
|
233
|
-
if (serr->ee_data >=
|
228
|
+
if (serr->ee_data >= it->seq_no_) {
|
234
229
|
switch (serr->ee_info) {
|
235
230
|
case SCM_TSTAMP_SCHED:
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
elem = elem->next_;
|
231
|
+
it->sink_.RecordEvent(EventEngine::Endpoint::WriteEvent::kScheduled,
|
232
|
+
timestamp, metrics);
|
233
|
+
it->last_timestamp_ = core_timestamp;
|
234
|
+
++it;
|
241
235
|
break;
|
242
236
|
case SCM_TSTAMP_SND:
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
237
|
+
it->sink_.RecordEvent(EventEngine::Endpoint::WriteEvent::kSent,
|
238
|
+
timestamp, metrics);
|
239
|
+
it->last_timestamp_ = core_timestamp;
|
240
|
+
++it;
|
247
241
|
break;
|
248
242
|
case SCM_TSTAMP_ACK:
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
// thing below can be passed by value if we don't want the restriction
|
253
|
-
// on the lifetime.
|
254
|
-
g_timestamps_callback(elem->arg_, &(elem->ts_), absl::OkStatus());
|
255
|
-
// Safe to update head_ to elem->next_ because the list is ordered by
|
256
|
-
// seq_no. Thus if elem is to be deleted, it has to be the first
|
257
|
-
// element in the list.
|
258
|
-
head_ = elem->next_;
|
259
|
-
delete elem;
|
260
|
-
elem = head_;
|
243
|
+
it->sink_.RecordEvent(EventEngine::Endpoint::WriteEvent::kAcked,
|
244
|
+
timestamp, metrics);
|
245
|
+
it = list_.erase(it);
|
261
246
|
break;
|
262
247
|
default:
|
263
|
-
|
248
|
+
grpc_core::Crash(
|
249
|
+
absl::StrCat("Unknown timestamp type %d", serr->ee_info));
|
264
250
|
}
|
265
251
|
} else {
|
266
252
|
break;
|
267
253
|
}
|
268
254
|
}
|
269
255
|
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
prev = elem;
|
275
|
-
elem = elem->next_;
|
256
|
+
it = list_.begin();
|
257
|
+
while (it != list_.end()) {
|
258
|
+
if (!it->TimedOut(core_timestamp)) {
|
259
|
+
++it;
|
276
260
|
continue;
|
277
|
-
}
|
278
|
-
g_timestamps_callback(elem->arg_, &(elem->ts_),
|
279
|
-
absl::DeadlineExceededError("Ack timed out"));
|
280
|
-
if (prev != nullptr) {
|
281
|
-
prev->next_ = elem->next_;
|
282
|
-
delete elem;
|
283
|
-
elem = prev->next_;
|
284
261
|
} else {
|
285
|
-
|
286
|
-
|
287
|
-
|
262
|
+
LOG(ERROR) << "No timestamp received for TracedBuffer in "
|
263
|
+
<< g_max_pending_ack_time << ". Removing.";
|
264
|
+
it = list_.erase(it);
|
288
265
|
}
|
289
266
|
}
|
290
|
-
tail_ = (head_ == nullptr) ? head_ : prev;
|
291
267
|
}
|
292
268
|
|
293
|
-
void TracedBufferList::Shutdown(
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
delete elem;
|
269
|
+
void TracedBufferList::Shutdown(
|
270
|
+
std::optional<EventEngine::Endpoint::WriteEventSink> remaining) {
|
271
|
+
if (remaining.has_value()) {
|
272
|
+
PosixWriteEventSink sink(std::move(remaining).value());
|
273
|
+
sink.RecordEvent(EventEngine::Endpoint::WriteEvent::kClosed, absl::Now(),
|
274
|
+
PosixWriteEventSink::ConnectionMetrics());
|
300
275
|
}
|
301
|
-
|
302
|
-
|
276
|
+
grpc_core::MutexLock lock(&mu_);
|
277
|
+
if (list_.empty()) return;
|
278
|
+
auto curr_time = absl::Now();
|
279
|
+
for (auto it = list_.begin(); it != list_.end(); ++it) {
|
280
|
+
it->sink_.RecordEvent(EventEngine::Endpoint::WriteEvent::kClosed, curr_time,
|
281
|
+
PosixWriteEventSink::ConnectionMetrics());
|
303
282
|
}
|
304
|
-
|
283
|
+
list_.clear();
|
305
284
|
}
|
306
285
|
|
307
|
-
void
|
308
|
-
|
309
|
-
|
310
|
-
}
|
311
|
-
|
312
|
-
} // namespace grpc_event_engine::experimental
|
313
|
-
|
314
|
-
#else // GRPC_LINUX_ERRQUEUE
|
315
|
-
|
316
|
-
#include "src/core/util/crash.h"
|
317
|
-
|
318
|
-
namespace grpc_event_engine::experimental {
|
319
|
-
|
320
|
-
void TcpSetWriteTimestampsCallback(
|
321
|
-
absl::AnyInvocable<void(void*, Timestamps*, absl::Status)> /*fn*/) {
|
322
|
-
grpc_core::Crash("Timestamps callback is not enabled for this platform");
|
286
|
+
void TracedBufferList::TestOnlySetMaxPendingAckTime(
|
287
|
+
grpc_core::Duration duration) {
|
288
|
+
g_max_pending_ack_time = duration;
|
323
289
|
}
|
324
290
|
|
325
291
|
} // namespace grpc_event_engine::experimental
|
@@ -15,6 +15,7 @@
|
|
15
15
|
#ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_TRACED_BUFFER_LIST_H
|
16
16
|
#define GRPC_SRC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_TRACED_BUFFER_LIST_H
|
17
17
|
|
18
|
+
#include <grpc/event_engine/event_engine.h>
|
18
19
|
#include <grpc/support/port_platform.h>
|
19
20
|
#include <grpc/support/time.h>
|
20
21
|
#include <stdint.h>
|
@@ -24,78 +25,13 @@
|
|
24
25
|
#include "absl/functional/any_invocable.h"
|
25
26
|
#include "absl/status/status.h"
|
26
27
|
#include "src/core/lib/event_engine/posix_engine/internal_errqueue.h"
|
28
|
+
#include "src/core/lib/event_engine/posix_engine/posix_interface.h"
|
29
|
+
#include "src/core/lib/event_engine/posix_engine/posix_write_event_sink.h"
|
27
30
|
#include "src/core/lib/iomgr/port.h"
|
28
31
|
#include "src/core/util/sync.h"
|
29
32
|
|
30
33
|
namespace grpc_event_engine::experimental {
|
31
34
|
|
32
|
-
struct ConnectionMetrics { // Delivery rate in Bytes/s.
|
33
|
-
std::optional<uint64_t> delivery_rate;
|
34
|
-
// If the delivery rate is limited by the application, this is set to true.
|
35
|
-
std::optional<bool> is_delivery_rate_app_limited;
|
36
|
-
// Total packets retransmitted.
|
37
|
-
std::optional<uint32_t> packet_retx;
|
38
|
-
// Total packets retransmitted spuriously. This metric is smaller than or
|
39
|
-
// equal to packet_retx.
|
40
|
-
std::optional<uint32_t> packet_spurious_retx;
|
41
|
-
// Total packets sent.
|
42
|
-
std::optional<uint32_t> packet_sent;
|
43
|
-
// Total packets delivered.
|
44
|
-
std::optional<uint32_t> packet_delivered;
|
45
|
-
// Total packets delivered with ECE marked. This metric is smaller than or
|
46
|
-
// equal to packet_delivered.
|
47
|
-
std::optional<uint32_t> packet_delivered_ce;
|
48
|
-
// Total bytes lost so far.
|
49
|
-
std::optional<uint64_t> data_retx;
|
50
|
-
// Total bytes sent so far.
|
51
|
-
std::optional<uint64_t> data_sent;
|
52
|
-
// Total bytes in write queue but not sent.
|
53
|
-
std::optional<uint64_t> data_notsent;
|
54
|
-
// Pacing rate of the connection in Bps
|
55
|
-
std::optional<uint64_t> pacing_rate;
|
56
|
-
// Minimum RTT observed in usec.
|
57
|
-
std::optional<uint32_t> min_rtt;
|
58
|
-
// Smoothed RTT in usec
|
59
|
-
std::optional<uint32_t> srtt;
|
60
|
-
// Send congestion window.
|
61
|
-
std::optional<uint32_t> congestion_window;
|
62
|
-
// Slow start threshold in packets.
|
63
|
-
std::optional<uint32_t> snd_ssthresh;
|
64
|
-
// Maximum degree of reordering (i.e., maximum number of packets reodered)
|
65
|
-
// on the connection.
|
66
|
-
std::optional<uint32_t> reordering;
|
67
|
-
// Represents the number of recurring retransmissions of the first sequence
|
68
|
-
// that is not acknowledged yet.
|
69
|
-
std::optional<uint8_t> recurring_retrans;
|
70
|
-
// The cumulative time (in usec) that the transport protocol was busy
|
71
|
-
// sending data.
|
72
|
-
std::optional<uint64_t> busy_usec;
|
73
|
-
// The cumulative time (in usec) that the transport protocol was limited by
|
74
|
-
// the receive window size.
|
75
|
-
std::optional<uint64_t> rwnd_limited_usec;
|
76
|
-
// The cumulative time (in usec) that the transport protocol was limited by
|
77
|
-
// the send buffer size.
|
78
|
-
std::optional<uint64_t> sndbuf_limited_usec;
|
79
|
-
};
|
80
|
-
|
81
|
-
struct BufferTimestamp {
|
82
|
-
gpr_timespec time;
|
83
|
-
ConnectionMetrics metrics; // Metrics collected with this timestamp
|
84
|
-
};
|
85
|
-
|
86
|
-
struct Timestamps {
|
87
|
-
BufferTimestamp sendmsg_time;
|
88
|
-
BufferTimestamp scheduled_time;
|
89
|
-
BufferTimestamp sent_time;
|
90
|
-
BufferTimestamp acked_time;
|
91
|
-
|
92
|
-
uint32_t byte_offset; // byte offset relative to the start of the RPC
|
93
|
-
|
94
|
-
#ifdef GRPC_LINUX_ERRQUEUE
|
95
|
-
tcp_info info; // tcp_info collected on sendmsg
|
96
|
-
#endif // GRPC_LINUX_ERRQUEUE
|
97
|
-
};
|
98
|
-
|
99
35
|
// TracedBuffer is a class to keep track of timestamps for a specific buffer in
|
100
36
|
// the TCP layer. We are only tracking timestamps for Linux kernels and hence
|
101
37
|
// this class would only be used by Linux platforms. For all other platforms,
|
@@ -108,10 +44,13 @@ struct Timestamps {
|
|
108
44
|
class TracedBufferList {
|
109
45
|
public:
|
110
46
|
TracedBufferList() = default;
|
111
|
-
~TracedBufferList()
|
47
|
+
~TracedBufferList() { Shutdown(std::nullopt); }
|
48
|
+
|
112
49
|
// Add a new entry in the TracedBuffer list pointed to by head. Also saves
|
113
50
|
// sendmsg_time with the current timestamp.
|
114
|
-
void AddNewEntry(int32_t seq_no,
|
51
|
+
void AddNewEntry(int32_t seq_no, EventEnginePosixInterface* posix_interface,
|
52
|
+
const FileDescriptor& fd,
|
53
|
+
EventEngine::Endpoint::WriteEventSink sink);
|
115
54
|
// Processes a received timestamp based on sock_extended_err and
|
116
55
|
// scm_timestamping structures. It will invoke the timestamps callback if the
|
117
56
|
// timestamp type is SCM_TSTAMP_ACK.
|
@@ -121,41 +60,37 @@ class TracedBufferList {
|
|
121
60
|
// The Size() operation is slow and is used only in tests.
|
122
61
|
int Size() {
|
123
62
|
grpc_core::MutexLock lock(&mu_);
|
124
|
-
|
125
|
-
TracedBuffer* curr = head_;
|
126
|
-
while (curr) {
|
127
|
-
++size;
|
128
|
-
curr = curr->next_;
|
129
|
-
}
|
130
|
-
return size;
|
63
|
+
return list_.size();
|
131
64
|
}
|
132
65
|
// Cleans the list by calling the callback for each traced buffer in the list
|
133
66
|
// with timestamps that it has.
|
134
|
-
void Shutdown(
|
67
|
+
void Shutdown(std::optional<EventEngine::Endpoint::WriteEventSink> remaining);
|
68
|
+
|
69
|
+
// Sets the maximum time we wait for a traced buffer to be Acked. Counted from
|
70
|
+
// the previous received event for the traced buffer.
|
71
|
+
static void TestOnlySetMaxPendingAckTime(grpc_core::Duration duration);
|
135
72
|
|
136
73
|
private:
|
74
|
+
class Metrics {};
|
75
|
+
|
137
76
|
class TracedBuffer {
|
138
77
|
public:
|
139
|
-
TracedBuffer(uint32_t seq_no,
|
78
|
+
TracedBuffer(uint32_t seq_no, EventEngine::Endpoint::WriteEventSink sink)
|
79
|
+
: seq_no_(seq_no), sink_(std::move(sink)) {}
|
140
80
|
// Returns true if the TracedBuffer is considered stale at the given
|
141
81
|
// timestamp.
|
142
|
-
bool
|
82
|
+
bool TimedOut(grpc_core::Timestamp now);
|
143
83
|
|
144
84
|
private:
|
145
85
|
friend class TracedBufferList;
|
146
|
-
|
147
|
-
TracedBuffer* next_ = nullptr;
|
86
|
+
grpc_core::Timestamp last_timestamp_;
|
148
87
|
uint32_t seq_no_; // The sequence number for the last byte in the buffer
|
149
|
-
|
150
|
-
Timestamps ts_; // The timestamps corresponding to this buffer
|
88
|
+
PosixWriteEventSink sink_;
|
151
89
|
};
|
152
90
|
grpc_core::Mutex mu_;
|
153
91
|
// TracedBuffers are ordered by sequence number and would need to be processed
|
154
|
-
// in a FIFO order starting with the smallest sequence number.
|
155
|
-
|
156
|
-
// easy appends and forward iteration operations.
|
157
|
-
TracedBuffer* head_ = nullptr;
|
158
|
-
TracedBuffer* tail_ = nullptr;
|
92
|
+
// in a FIFO order starting with the smallest sequence number.
|
93
|
+
std::list<TracedBuffer> list_ ABSL_GUARDED_BY(mu_);
|
159
94
|
};
|
160
95
|
|
161
96
|
#else // GRPC_LINUX_ERRQUEUE
|
@@ -167,15 +102,12 @@ class TracedBufferList {
|
|
167
102
|
struct cmsghdr* /*opt_stats*/,
|
168
103
|
struct scm_timestamping* /*tss*/) {}
|
169
104
|
int Size() { return 0; }
|
170
|
-
void Shutdown(
|
105
|
+
void Shutdown(
|
106
|
+
std::optional<EventEngine::Endpoint::WriteEventSink> /*remaining*/) {}
|
107
|
+
static void TestOnlySetMaxPendingAckTime(grpc_core::Duration /*duration*/);
|
171
108
|
};
|
172
109
|
#endif // GRPC_LINUX_ERRQUEUE
|
173
110
|
|
174
|
-
// Sets the callback function to call when timestamps for a write are collected.
|
175
|
-
// This is expected to be called atmost once.
|
176
|
-
void TcpSetWriteTimestampsCallback(
|
177
|
-
absl::AnyInvocable<void(void*, Timestamps*, absl::Status)>);
|
178
|
-
|
179
111
|
} // namespace grpc_event_engine::experimental
|
180
112
|
|
181
113
|
#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_TRACED_BUFFER_LIST_H
|