grpc 1.73.0 → 1.75.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +116 -53
- data/include/grpc/create_channel_from_endpoint.h +54 -0
- data/include/grpc/credentials.h +18 -6
- data/include/grpc/event_engine/event_engine.h +74 -17
- data/include/grpc/grpc_posix.h +20 -1
- data/include/grpc/impl/channel_arg_names.h +2 -4
- data/include/grpc/module.modulemap +1 -0
- data/include/grpc/support/json.h +24 -0
- data/src/core/call/client_call.cc +4 -4
- data/src/core/call/filter_fusion.h +1230 -0
- data/src/core/call/interception_chain.h +7 -11
- data/src/core/call/metadata.cc +22 -0
- data/src/core/call/metadata.h +24 -2
- data/src/core/channelz/channel_trace.cc +213 -115
- data/src/core/channelz/channel_trace.h +380 -86
- data/src/core/channelz/channelz.cc +274 -192
- data/src/core/channelz/channelz.h +224 -72
- data/src/core/channelz/channelz_registry.cc +2 -163
- data/src/core/channelz/channelz_registry.h +37 -6
- data/src/core/channelz/property_list.cc +353 -0
- data/src/core/channelz/property_list.h +204 -0
- data/src/core/channelz/v2tov1/convert.cc +683 -0
- data/src/core/channelz/v2tov1/convert.h +58 -0
- data/src/core/channelz/v2tov1/legacy_api.cc +425 -0
- data/src/core/channelz/v2tov1/legacy_api.h +32 -0
- data/src/core/channelz/v2tov1/property_list.cc +118 -0
- data/src/core/channelz/v2tov1/property_list.h +52 -0
- data/src/core/channelz/ztrace_collector.h +3 -2
- data/src/core/client_channel/backup_poller.cc +17 -2
- data/src/core/client_channel/client_channel.cc +17 -28
- data/src/core/client_channel/client_channel_filter.cc +24 -33
- data/src/core/client_channel/client_channel_filter.h +2 -2
- data/src/core/client_channel/client_channel_internal.h +2 -1
- data/src/core/client_channel/config_selector.h +8 -2
- data/src/core/client_channel/dynamic_filters.cc +5 -6
- data/src/core/client_channel/dynamic_filters.h +1 -1
- data/src/core/client_channel/global_subchannel_pool.cc +4 -1
- data/src/core/client_channel/load_balanced_call_destination.cc +6 -5
- data/src/core/client_channel/retry_filter.cc +21 -27
- data/src/core/client_channel/retry_filter.h +10 -7
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
- data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
- data/src/core/client_channel/retry_interceptor.cc +30 -44
- data/src/core/client_channel/retry_interceptor.h +18 -17
- data/src/core/client_channel/retry_throttle.cc +46 -61
- data/src/core/client_channel/retry_throttle.h +17 -39
- data/src/core/client_channel/subchannel.cc +57 -25
- data/src/core/client_channel/subchannel.h +10 -0
- data/src/core/config/config_vars.cc +2 -0
- data/src/core/config/core_configuration.cc +4 -1
- data/src/core/config/core_configuration.h +23 -0
- data/src/core/credentials/call/call_creds_registry.h +125 -0
- data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
- data/src/core/credentials/call/jwt_util.cc +70 -0
- data/src/core/credentials/call/jwt_util.h +32 -0
- data/src/core/credentials/transport/alts/alts_credentials.cc +5 -0
- data/src/core/credentials/transport/alts/check_gcp_environment_windows.cc +2 -0
- data/src/core/credentials/transport/channel_creds_registry_init.cc +4 -2
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -2
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -24
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +19 -8
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +96 -54
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +15 -2
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
- data/src/core/credentials/transport/tls/spiffe_utils.cc +371 -0
- data/src/core/credentials/transport/tls/spiffe_utils.h +171 -0
- data/src/core/credentials/transport/tls/ssl_utils.cc +11 -10
- data/src/core/credentials/transport/tls/ssl_utils.h +4 -2
- data/src/core/credentials/transport/tls/tls_credentials.cc +2 -0
- data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -26
- data/src/core/credentials/transport/tls/tls_security_connector.h +12 -12
- data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -2
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
- data/src/core/ext/filters/http/client/http_client_filter.cc +3 -6
- data/src/core/ext/filters/http/client_authority_filter.cc +3 -6
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
- data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -6
- data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
- data/src/core/ext/filters/message_size/message_size_filter.cc +4 -4
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -5
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +165 -117
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +23 -17
- data/src/core/ext/transport/chttp2/transport/frame.cc +99 -6
- data/src/core/ext/transport/chttp2/transport/frame.h +40 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +290 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1233 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +712 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +11 -38
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +65 -51
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +61 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +142 -0
- data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
- data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
- data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +121 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +76 -0
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
- data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
- data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +152 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +197 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +607 -0
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +254 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +41 -13
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +4959 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +1111 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +108 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +1072 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +230 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +716 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.h +227 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +133 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
- data/src/core/filter/auth/auth_filters.h +2 -27
- data/src/core/filter/auth/client_auth_filter.cc +0 -118
- data/src/core/filter/filter_args.h +9 -23
- data/src/core/filter/fused_filters.cc +154 -0
- data/src/core/handshaker/handshaker.cc +23 -14
- data/src/core/handshaker/handshaker.h +3 -0
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +7 -6
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +965 -0
- data/src/core/handshaker/security/secure_endpoint.cc +98 -38
- data/src/core/handshaker/security/secure_endpoint.h +8 -0
- data/src/core/handshaker/security/security_handshaker.cc +4 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
- data/src/core/lib/channel/channel_args.cc +15 -0
- data/src/core/lib/channel/channel_args.h +3 -0
- data/src/core/lib/channel/channel_stack.cc +22 -23
- data/src/core/lib/channel/channel_stack.h +9 -7
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
- data/src/core/lib/channel/promise_based_filter.cc +15 -25
- data/src/core/lib/channel/promise_based_filter.h +11 -10
- data/src/core/lib/debug/trace_impl.h +0 -1
- data/src/core/lib/event_engine/ares_resolver.cc +165 -46
- data/src/core/lib/event_engine/ares_resolver.h +51 -3
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +12 -6
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -4
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +263 -0
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.h +107 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +31 -3
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +14 -6
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
- data/src/core/lib/event_engine/event_engine.cc +7 -0
- data/src/core/lib/event_engine/extensions/channelz.h +10 -6
- data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +139 -169
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +17 -19
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +90 -131
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +13 -13
- data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -23
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +11 -23
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -2
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +30 -19
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +3 -4
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +147 -94
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +435 -229
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +78 -50
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +46 -38
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +11 -171
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
- data/src/core/lib/event_engine/shim.cc +9 -0
- data/src/core/lib/event_engine/shim.h +3 -0
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +6 -1
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
- data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
- data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
- data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
- data/src/core/lib/experiments/experiments.cc +165 -99
- data/src/core/lib/experiments/experiments.h +65 -52
- data/src/core/lib/iomgr/combiner.cc +1 -1
- data/src/core/lib/iomgr/endpoint.cc +4 -3
- data/src/core/lib/iomgr/endpoint.h +7 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
- data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
- data/src/core/lib/iomgr/exec_ctx.h +3 -9
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_posix.cc +15 -9
- data/src/core/lib/iomgr/tcp_windows.cc +3 -2
- data/src/core/lib/promise/activity.h +3 -2
- data/src/core/lib/promise/arena_promise.h +23 -7
- data/src/core/lib/promise/detail/promise_factory.h +10 -0
- data/src/core/lib/promise/detail/promise_like.h +118 -11
- data/src/core/lib/promise/detail/promise_variant.h +50 -0
- data/src/core/lib/promise/detail/seq_state.h +687 -548
- data/src/core/lib/promise/if.h +20 -0
- data/src/core/lib/promise/inter_activity_latch.h +147 -0
- data/src/core/lib/promise/inter_activity_mutex.h +547 -0
- data/src/core/lib/promise/loop.h +65 -3
- data/src/core/lib/promise/map.h +24 -0
- data/src/core/lib/promise/match_promise.h +103 -0
- data/src/core/lib/promise/mpsc.cc +425 -0
- data/src/core/lib/promise/mpsc.h +490 -0
- data/src/core/lib/promise/party.cc +55 -6
- data/src/core/lib/promise/party.h +68 -3
- data/src/core/lib/promise/poll.h +10 -0
- data/src/core/lib/promise/race.h +31 -0
- data/src/core/lib/promise/seq.h +4 -1
- data/src/core/lib/promise/status_flag.h +7 -0
- data/src/core/lib/promise/try_seq.h +4 -1
- data/src/core/lib/promise/wait_set.cc +28 -0
- data/src/core/lib/promise/wait_set.h +86 -0
- data/src/core/lib/resource_quota/arena.h +19 -0
- data/src/core/lib/resource_quota/memory_quota.cc +90 -3
- data/src/core/lib/resource_quota/memory_quota.h +20 -9
- data/src/core/lib/resource_quota/periodic_update.cc +14 -0
- data/src/core/lib/resource_quota/periodic_update.h +8 -0
- data/src/core/lib/resource_quota/resource_quota.cc +15 -4
- data/src/core/lib/resource_quota/resource_quota.h +3 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
- data/src/core/lib/slice/slice.h +5 -0
- data/src/core/lib/surface/call.cc +5 -5
- data/src/core/lib/surface/call.h +6 -5
- data/src/core/lib/surface/channel_create.cc +88 -13
- data/src/core/lib/surface/channel_create.h +4 -0
- data/src/core/lib/surface/channel_init.cc +164 -47
- data/src/core/lib/surface/channel_init.h +64 -1
- data/src/core/lib/surface/completion_queue.cc +2 -4
- data/src/core/lib/surface/filter_stack_call.cc +19 -10
- data/src/core/lib/surface/init.cc +6 -15
- data/src/core/lib/surface/legacy_channel.cc +3 -5
- data/src/core/lib/surface/legacy_channel.h +3 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.cc +110 -0
- data/src/core/lib/transport/promise_endpoint.h +307 -0
- data/src/core/load_balancing/child_policy_handler.cc +2 -4
- data/src/core/load_balancing/delegating_helper.h +2 -3
- data/src/core/load_balancing/endpoint_list.cc +29 -2
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +3 -3
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -1
- data/src/core/load_balancing/health_check_client.cc +1 -5
- data/src/core/load_balancing/lb_policy.h +1 -3
- data/src/core/load_balancing/oob_backend_metric.cc +1 -5
- data/src/core/load_balancing/pick_first/pick_first.cc +15 -5
- data/src/core/load_balancing/xds/cds.cc +10 -1
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +5 -3
- data/src/core/net/socket_mutator.cc +19 -0
- data/src/core/net/socket_mutator.h +25 -0
- data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +6 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +8 -5
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -1
- data/src/core/resolver/xds/xds_config.cc +6 -3
- data/src/core/resolver/xds/xds_config.h +9 -4
- data/src/core/resolver/xds/xds_dependency_manager.cc +22 -7
- data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
- data/src/core/resolver/xds/xds_resolver.cc +31 -11
- data/src/core/server/server.cc +84 -13
- data/src/core/server/server.h +21 -2
- data/src/core/server/server_call_tracer_filter.cc +0 -66
- data/src/core/server/server_call_tracer_filter.h +64 -0
- data/src/core/server/server_config_selector_filter.cc +1 -1
- data/src/core/server/xds_server_config_fetcher.cc +63 -25
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_channel_arg_filter.cc +3 -60
- data/src/core/service_config/service_config_channel_arg_filter.h +82 -0
- data/src/core/service_config/service_config_impl.h +1 -1
- data/src/core/telemetry/call_tracer.cc +20 -14
- data/src/core/telemetry/call_tracer.h +22 -17
- data/src/core/telemetry/context_list_entry.cc +38 -0
- data/src/core/telemetry/context_list_entry.h +42 -12
- data/src/core/telemetry/metrics.h +8 -8
- data/src/core/telemetry/stats_data.cc +369 -343
- data/src/core/telemetry/stats_data.h +341 -244
- data/src/core/telemetry/tcp_tracer.h +1 -1
- data/src/core/transport/auth_context.cc +20 -0
- data/src/core/transport/auth_context.h +4 -0
- data/src/core/transport/auth_context_comparator_registry.h +69 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
- data/src/core/tsi/fake_transport_security.cc +17 -0
- data/src/core/tsi/ssl_transport_security.cc +205 -32
- data/src/core/tsi/ssl_transport_security.h +19 -10
- data/src/core/tsi/ssl_transport_security_utils.cc +21 -0
- data/src/core/tsi/ssl_transport_security_utils.h +4 -0
- data/src/core/tsi/transport_security_grpc.cc +8 -0
- data/src/core/tsi/transport_security_grpc.h +15 -0
- data/src/core/util/backoff.cc +1 -5
- data/src/core/util/backoff.h +1 -0
- data/src/core/util/down_cast.h +1 -1
- data/src/core/util/function_signature.h +15 -1
- data/src/core/util/http_client/httpcli.cc +12 -5
- data/src/core/util/http_client/httpcli.h +4 -1
- data/src/core/util/http_client/httpcli_security_connector.cc +3 -1
- data/src/core/util/latent_see.cc +178 -146
- data/src/core/util/latent_see.h +249 -189
- data/src/core/util/log.cc +4 -0
- data/src/core/util/memory_usage.h +268 -0
- data/src/core/util/per_cpu.cc +2 -0
- data/src/core/util/per_cpu.h +7 -0
- data/src/core/util/shared_bit_gen.h +20 -0
- data/src/core/util/single_set_ptr.h +7 -4
- data/src/core/util/upb_utils.h +42 -0
- data/src/core/util/uri.cc +3 -2
- data/src/core/util/useful.h +144 -2
- data/src/core/util/wait_for_single_owner.cc +31 -0
- data/src/core/util/wait_for_single_owner.h +24 -0
- data/src/core/util/windows/directory_reader.cc +1 -0
- data/src/core/util/windows/thd.cc +1 -3
- data/src/core/util/work_serializer.cc +1 -1
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +32 -5
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +5 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
- data/src/core/xds/grpc/xds_certificate_provider.cc +5 -6
- data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
- data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
- data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
- data/src/core/xds/grpc/xds_http_filter.h +7 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
- data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
- data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
- data/src/core/xds/grpc/xds_server_grpc.h +10 -2
- data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
- data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
- data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
- data/src/core/xds/xds_client/xds_client.cc +26 -5
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -8
- data/src/ruby/ext/grpc/rb_channel.c +70 -557
- data/src/ruby/ext/grpc/rb_channel.h +0 -3
- data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
- data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
- data/src/ruby/ext/grpc/rb_grpc.c +9 -5
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
- data/src/ruby/ext/grpc/rb_loader.c +0 -4
- data/src/ruby/ext/grpc/rb_server.c +31 -50
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/core_spec.rb +22 -0
- data/src/ruby/spec/generic/active_call_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
- data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
- data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
- data/third_party/abseil-cpp/absl/base/config.h +20 -129
- data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
- data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
- data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
- data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
- data/third_party/abseil-cpp/absl/base/options.h +3 -80
- data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
- data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
- data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
- data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
- data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
- data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
- data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
- data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
- data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
- data/third_party/abseil-cpp/absl/log/check.h +2 -1
- data/third_party/abseil-cpp/absl/log/globals.h +4 -5
- data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
- data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
- data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
- data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
- data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
- data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
- data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
- data/third_party/abseil-cpp/absl/log/log.h +48 -35
- data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
- data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
- data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
- data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- data/third_party/abseil-cpp/absl/random/random.h +88 -53
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
- data/third_party/abseil-cpp/absl/status/status.cc +4 -8
- data/third_party/abseil-cpp/absl/status/status.h +8 -8
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
- data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
- data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
- data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
- data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
- data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
- data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
- data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
- data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
- data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
- data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
- data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
- data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
- data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
- data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
- data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
- data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- data/third_party/abseil-cpp/absl/time/time.h +20 -15
- data/third_party/abseil-cpp/absl/types/optional.h +7 -747
- data/third_party/abseil-cpp/absl/types/span.h +13 -11
- data/third_party/abseil-cpp/absl/types/variant.h +5 -784
- data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
- data/third_party/cares/cares/include/ares.h +925 -460
- data/third_party/cares/cares/include/ares_dns.h +86 -71
- data/third_party/cares/cares/include/ares_dns_record.h +1118 -0
- data/third_party/cares/cares/include/ares_nameser.h +215 -189
- data/third_party/cares/cares/include/ares_version.h +37 -14
- data/third_party/cares/cares/src/lib/ares_addrinfo2hostent.c +305 -0
- data/third_party/cares/cares/src/lib/ares_addrinfo_localhost.c +245 -0
- data/third_party/cares/cares/src/lib/ares_android.c +216 -164
- data/third_party/cares/cares/src/lib/ares_android.h +25 -14
- data/third_party/cares/cares/src/lib/ares_cancel.c +68 -44
- data/third_party/cares/cares/src/lib/ares_close_sockets.c +137 -0
- data/third_party/cares/cares/src/lib/ares_conn.c +511 -0
- data/third_party/cares/cares/src/lib/ares_conn.h +196 -0
- data/third_party/cares/cares/src/lib/ares_cookie.c +461 -0
- data/third_party/cares/cares/src/lib/ares_data.c +93 -181
- data/third_party/cares/cares/src/lib/ares_data.h +50 -39
- data/third_party/cares/cares/src/lib/ares_destroy.c +127 -89
- data/third_party/cares/cares/src/lib/ares_free_hostent.c +35 -24
- data/third_party/cares/cares/src/lib/ares_free_string.c +24 -16
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +45 -38
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +549 -663
- data/third_party/cares/cares/src/lib/ares_getenv.c +25 -15
- data/third_party/cares/cares/src/lib/ares_getenv.h +26 -18
- data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +163 -221
- data/third_party/cares/cares/src/lib/ares_gethostbyname.c +222 -223
- data/third_party/cares/cares/src/lib/ares_getnameinfo.c +328 -338
- data/third_party/cares/cares/src/lib/ares_hosts_file.c +952 -0
- data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -19
- data/third_party/cares/cares/src/lib/ares_init.c +425 -2091
- data/third_party/cares/cares/src/lib/ares_ipv6.h +63 -33
- data/third_party/cares/cares/src/lib/ares_library_init.c +110 -54
- data/third_party/cares/cares/src/lib/ares_metrics.c +261 -0
- data/third_party/cares/cares/src/lib/ares_options.c +418 -332
- data/third_party/cares/cares/src/lib/ares_parse_into_addrinfo.c +179 -0
- data/third_party/cares/cares/src/lib/ares_private.h +558 -356
- data/third_party/cares/cares/src/lib/ares_process.c +1224 -1369
- data/third_party/cares/cares/src/lib/ares_qcache.c +430 -0
- data/third_party/cares/cares/src/lib/ares_query.c +126 -121
- data/third_party/cares/cares/src/lib/ares_search.c +564 -262
- data/third_party/cares/cares/src/lib/ares_send.c +264 -93
- data/third_party/cares/cares/src/lib/ares_set_socket_functions.c +588 -0
- data/third_party/cares/cares/src/lib/ares_setup.h +115 -111
- data/third_party/cares/cares/src/lib/ares_socket.c +425 -0
- data/third_party/cares/cares/src/lib/ares_socket.h +163 -0
- data/third_party/cares/cares/src/lib/ares_sortaddrinfo.c +447 -0
- data/third_party/cares/cares/src/lib/ares_strerror.c +83 -48
- data/third_party/cares/cares/src/lib/ares_sysconfig.c +639 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_files.c +839 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_mac.c +373 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_win.c +621 -0
- data/third_party/cares/cares/src/lib/ares_timeout.c +136 -73
- data/third_party/cares/cares/src/lib/ares_update_servers.c +1362 -0
- data/third_party/cares/cares/src/lib/ares_version.c +29 -4
- data/third_party/cares/cares/src/lib/config-dos.h +88 -89
- data/third_party/cares/cares/src/lib/config-win32.h +122 -77
- data/third_party/cares/cares/src/lib/dsa/ares_array.c +394 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable.c +447 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable.h +174 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_asvp.c +224 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_dict.c +228 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_strvp.c +210 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_szvp.c +188 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_vpstr.c +186 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_vpvp.c +194 -0
- data/third_party/cares/cares/src/lib/dsa/ares_llist.c +382 -0
- data/third_party/cares/cares/src/lib/dsa/ares_slist.c +479 -0
- data/third_party/cares/cares/src/lib/dsa/ares_slist.h +207 -0
- data/third_party/cares/cares/src/lib/event/ares_event.h +191 -0
- data/third_party/cares/cares/src/lib/event/ares_event_configchg.c +743 -0
- data/third_party/cares/cares/src/lib/event/ares_event_epoll.c +192 -0
- data/third_party/cares/cares/src/lib/event/ares_event_kqueue.c +248 -0
- data/third_party/cares/cares/src/lib/event/ares_event_poll.c +140 -0
- data/third_party/cares/cares/src/lib/event/ares_event_select.c +159 -0
- data/third_party/cares/cares/src/lib/event/ares_event_thread.c +567 -0
- data/third_party/cares/cares/src/lib/event/ares_event_wake_pipe.c +166 -0
- data/third_party/cares/cares/src/lib/event/ares_event_win32.c +978 -0
- data/third_party/cares/cares/src/lib/event/ares_event_win32.h +161 -0
- data/third_party/cares/cares/src/lib/include/ares_array.h +276 -0
- data/third_party/cares/cares/src/lib/include/ares_buf.h +732 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_asvp.h +130 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_dict.h +123 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_strvp.h +130 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_szvp.h +118 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_vpstr.h +111 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_vpvp.h +128 -0
- data/third_party/cares/cares/src/lib/include/ares_llist.h +239 -0
- data/third_party/cares/cares/src/lib/include/ares_mem.h +38 -0
- data/third_party/cares/cares/src/lib/include/ares_str.h +244 -0
- data/third_party/cares/cares/src/lib/inet_net_pton.c +202 -157
- data/third_party/cares/cares/src/lib/inet_ntop.c +87 -69
- data/third_party/cares/cares/src/lib/legacy/ares_create_query.c +78 -0
- data/third_party/cares/cares/src/lib/legacy/ares_expand_name.c +99 -0
- data/third_party/cares/cares/src/lib/legacy/ares_expand_string.c +107 -0
- data/third_party/cares/cares/src/lib/legacy/ares_fds.c +80 -0
- data/third_party/cares/cares/src/lib/legacy/ares_getsock.c +85 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_a_reply.c +107 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_mapping.c +982 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_multistring.c +307 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_multistring.h +72 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_name.c +673 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_parse.c +1329 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_private.h +273 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_record.c +1661 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_write.c +1229 -0
- data/third_party/cares/cares/src/lib/str/ares_buf.c +1498 -0
- data/third_party/cares/cares/src/lib/str/ares_str.c +508 -0
- data/third_party/cares/cares/src/lib/str/ares_strsplit.c +90 -0
- data/third_party/cares/cares/src/lib/str/ares_strsplit.h +51 -0
- data/third_party/cares/cares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
- data/third_party/cares/cares/src/lib/util/ares_iface_ips.c +628 -0
- data/third_party/cares/cares/src/lib/util/ares_iface_ips.h +139 -0
- data/third_party/cares/cares/src/lib/util/ares_math.c +158 -0
- data/third_party/cares/cares/src/lib/util/ares_math.h +45 -0
- data/third_party/cares/cares/src/lib/util/ares_rand.c +389 -0
- data/third_party/cares/cares/src/lib/util/ares_rand.h +36 -0
- data/third_party/cares/cares/src/lib/util/ares_threads.c +614 -0
- data/third_party/cares/cares/src/lib/util/ares_threads.h +60 -0
- data/third_party/cares/cares/src/lib/util/ares_time.h +48 -0
- data/third_party/cares/cares/src/lib/util/ares_timeval.c +95 -0
- data/third_party/cares/cares/src/lib/util/ares_uri.c +1626 -0
- data/third_party/cares/cares/src/lib/util/ares_uri.h +252 -0
- data/third_party/cares/cares/src/lib/windows_port.c +16 -9
- metadata +192 -68
- data/src/core/lib/event_engine/forkable.cc +0 -105
- data/src/core/lib/event_engine/forkable.h +0 -67
- data/src/core/lib/iomgr/python_util.h +0 -46
- data/src/core/util/ring_buffer.h +0 -122
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
- data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
- data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
- data/third_party/cares/cares/include/ares_rules.h +0 -125
- data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +0 -266
- data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +0 -240
- data/third_party/cares/cares/src/lib/ares__close_sockets.c +0 -61
- data/third_party/cares/cares/src/lib/ares__get_hostent.c +0 -260
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +0 -229
- data/third_party/cares/cares/src/lib/ares__read_line.c +0 -73
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +0 -258
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +0 -507
- data/third_party/cares/cares/src/lib/ares__timeval.c +0 -111
- data/third_party/cares/cares/src/lib/ares_create_query.c +0 -197
- data/third_party/cares/cares/src/lib/ares_expand_name.c +0 -311
- data/third_party/cares/cares/src/lib/ares_expand_string.c +0 -67
- data/third_party/cares/cares/src/lib/ares_fds.c +0 -59
- data/third_party/cares/cares/src/lib/ares_getsock.c +0 -66
- data/third_party/cares/cares/src/lib/ares_iphlpapi.h +0 -221
- data/third_party/cares/cares/src/lib/ares_llist.c +0 -63
- data/third_party/cares/cares/src/lib/ares_llist.h +0 -39
- data/third_party/cares/cares/src/lib/ares_mkquery.c +0 -24
- data/third_party/cares/cares/src/lib/ares_nowarn.c +0 -260
- data/third_party/cares/cares/src/lib/ares_nowarn.h +0 -61
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +0 -90
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +0 -92
- data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +0 -199
- data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +0 -164
- data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +0 -183
- data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +0 -177
- data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +0 -228
- data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +0 -179
- data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +0 -168
- data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +0 -214
- data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +0 -184
- data/third_party/cares/cares/src/lib/ares_platform.c +0 -11042
- data/third_party/cares/cares/src/lib/ares_platform.h +0 -43
- data/third_party/cares/cares/src/lib/ares_rand.c +0 -279
- data/third_party/cares/cares/src/lib/ares_strcasecmp.c +0 -66
- data/third_party/cares/cares/src/lib/ares_strcasecmp.h +0 -30
- data/third_party/cares/cares/src/lib/ares_strdup.c +0 -42
- data/third_party/cares/cares/src/lib/ares_strdup.h +0 -24
- data/third_party/cares/cares/src/lib/ares_strsplit.c +0 -94
- data/third_party/cares/cares/src/lib/ares_strsplit.h +0 -42
- data/third_party/cares/cares/src/lib/ares_writev.c +0 -79
- data/third_party/cares/cares/src/lib/ares_writev.h +0 -36
- data/third_party/cares/cares/src/lib/bitncmp.c +0 -59
- data/third_party/cares/cares/src/lib/bitncmp.h +0 -26
- data/third_party/cares/cares/src/lib/setup_once.h +0 -554
- data/third_party/cares/cares/src/tools/ares_getopt.h +0 -53
@@ -26,8 +26,11 @@
|
|
26
26
|
#include <utility>
|
27
27
|
|
28
28
|
#include "absl/base/attributes.h"
|
29
|
+
#include "absl/functional/any_invocable.h"
|
29
30
|
#include "absl/log/check.h"
|
30
31
|
#include "absl/strings/string_view.h"
|
32
|
+
#include "src/core/channelz/channelz.h"
|
33
|
+
#include "src/core/channelz/property_list.h"
|
31
34
|
#include "src/core/lib/debug/trace.h"
|
32
35
|
#include "src/core/lib/event_engine/event_engine_context.h"
|
33
36
|
#include "src/core/lib/promise/activity.h"
|
@@ -38,6 +41,7 @@
|
|
38
41
|
#include "src/core/util/check_class_size.h"
|
39
42
|
#include "src/core/util/construct_destruct.h"
|
40
43
|
#include "src/core/util/crash.h"
|
44
|
+
#include "src/core/util/json/json_writer.h"
|
41
45
|
#include "src/core/util/ref_counted.h"
|
42
46
|
#include "src/core/util/ref_counted_ptr.h"
|
43
47
|
|
@@ -167,6 +171,9 @@ class Party : public Activity, private Wakeable {
|
|
167
171
|
// Destroy the participant before finishing.
|
168
172
|
virtual void Destroy() = 0;
|
169
173
|
|
174
|
+
// Return a description of this participant.
|
175
|
+
virtual channelz::PropertyList ChannelzProperties() = 0;
|
176
|
+
|
170
177
|
// Return a Handle instance for this participant.
|
171
178
|
Wakeable* MakeNonOwningWakeable(Party* party);
|
172
179
|
|
@@ -281,6 +288,20 @@ class Party : public Activity, private Wakeable {
|
|
281
288
|
party_->state_.load(std::memory_order_relaxed), wakeup_mask_);
|
282
289
|
}
|
283
290
|
|
291
|
+
channelz::PropertyList ChannelzProperties() override {
|
292
|
+
channelz::PropertyList properties;
|
293
|
+
if (active_ != nullptr) {
|
294
|
+
properties.Set("active", active_->ChannelzProperties());
|
295
|
+
}
|
296
|
+
properties.Set("queued", [this]() {
|
297
|
+
channelz::PropertyTable queued;
|
298
|
+
next_.ForEach(
|
299
|
+
[&](Participant* p) { queued.AppendRow(p->ChannelzProperties()); });
|
300
|
+
return queued;
|
301
|
+
}());
|
302
|
+
return properties;
|
303
|
+
}
|
304
|
+
|
284
305
|
private:
|
285
306
|
friend class Party;
|
286
307
|
friend class Arena;
|
@@ -367,6 +388,14 @@ class Party : public Activity, private Wakeable {
|
|
367
388
|
return serializer;
|
368
389
|
}
|
369
390
|
|
391
|
+
// Convert the party to a JSON object for visualization.
|
392
|
+
// This is an async operation because the party cannot be locked
|
393
|
+
// synchronously.
|
394
|
+
void ToJson(absl::AnyInvocable<void(Json::Object)>);
|
395
|
+
|
396
|
+
// Export the party to channelz.
|
397
|
+
void ExportToChannelz(std::string name, channelz::DataSink sink);
|
398
|
+
|
370
399
|
protected:
|
371
400
|
friend class Arena;
|
372
401
|
|
@@ -407,6 +436,7 @@ class Party : public Activity, private Wakeable {
|
|
407
436
|
}
|
408
437
|
|
409
438
|
bool PollParticipantPromise() override {
|
439
|
+
GRPC_LATENT_SEE_SCOPE(TypeName<SuppliedFactory>());
|
410
440
|
if (!started_) {
|
411
441
|
auto p = factory_.Make();
|
412
442
|
Destruct(&factory_);
|
@@ -422,6 +452,21 @@ class Party : public Activity, private Wakeable {
|
|
422
452
|
return false;
|
423
453
|
}
|
424
454
|
|
455
|
+
channelz::PropertyList ChannelzProperties() override {
|
456
|
+
return channelz::PropertyList()
|
457
|
+
.Set("on_complete", TypeName<OnComplete>())
|
458
|
+
.Set("factory", [this]() {
|
459
|
+
channelz::PropertyList factory;
|
460
|
+
if (started_) {
|
461
|
+
factory.Set("promise", PromiseProperty(&promise_));
|
462
|
+
} else {
|
463
|
+
factory.Set("factory",
|
464
|
+
TypeName<typename Factory::UnderlyingFactory>());
|
465
|
+
}
|
466
|
+
return factory;
|
467
|
+
}());
|
468
|
+
}
|
469
|
+
|
425
470
|
void Destroy() override { delete this; }
|
426
471
|
|
427
472
|
private:
|
@@ -463,6 +508,7 @@ class Party : public Activity, private Wakeable {
|
|
463
508
|
|
464
509
|
// Inside party poll: drive from factory -> promise -> result
|
465
510
|
bool PollParticipantPromise() override {
|
511
|
+
GRPC_LATENT_SEE_SCOPE(TypeName<SuppliedFactory>());
|
466
512
|
switch (state_.load(std::memory_order_relaxed)) {
|
467
513
|
case State::kFactory: {
|
468
514
|
auto p = factory_.Make();
|
@@ -503,6 +549,23 @@ class Party : public Activity, private Wakeable {
|
|
503
549
|
|
504
550
|
void Destroy() override { this->Unref(); }
|
505
551
|
|
552
|
+
channelz::PropertyList ChannelzProperties() override {
|
553
|
+
channelz::PropertyList properties;
|
554
|
+
switch (state_.load(std::memory_order_relaxed)) {
|
555
|
+
case State::kFactory:
|
556
|
+
properties.Set("factory",
|
557
|
+
TypeName<typename Factory::UnderlyingFactory>());
|
558
|
+
break;
|
559
|
+
case State::kPromise:
|
560
|
+
properties.Set("promise", PromiseProperty(&promise_));
|
561
|
+
break;
|
562
|
+
case State::kResult:
|
563
|
+
properties.Set("result", TypeName<typename Promise::Result>());
|
564
|
+
break;
|
565
|
+
}
|
566
|
+
return properties;
|
567
|
+
}
|
568
|
+
|
506
569
|
private:
|
507
570
|
enum class State : uint8_t { kFactory, kPromise, kResult };
|
508
571
|
union {
|
@@ -560,7 +623,7 @@ class Party : public Activity, private Wakeable {
|
|
560
623
|
|
561
624
|
// Wakeable implementation
|
562
625
|
void Wakeup(WakeupMask wakeup_mask) final {
|
563
|
-
|
626
|
+
GRPC_LATENT_SEE_SCOPE("Party::Wakeup");
|
564
627
|
if (Activity::current() == this) {
|
565
628
|
wakeup_mask_ |= wakeup_mask;
|
566
629
|
Unref();
|
@@ -572,7 +635,7 @@ class Party : public Activity, private Wakeable {
|
|
572
635
|
template <bool kReffed>
|
573
636
|
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION void WakeupFromState(
|
574
637
|
uint64_t cur_state, WakeupMask wakeup_mask) {
|
575
|
-
|
638
|
+
GRPC_LATENT_SEE_SCOPE("Party::WakeupFromState");
|
576
639
|
DCHECK_NE(wakeup_mask & kWakeupMask, 0u)
|
577
640
|
<< "Wakeup mask must be non-zero: " << wakeup_mask;
|
578
641
|
while (true) {
|
@@ -580,7 +643,7 @@ class Party : public Activity, private Wakeable {
|
|
580
643
|
// If the party is locked, we need to set the wakeup bits, and then
|
581
644
|
// we'll immediately unref. Since something is running this should never
|
582
645
|
// bring the refcount to zero.
|
583
|
-
if (kReffed) {
|
646
|
+
if constexpr (kReffed) {
|
584
647
|
DCHECK_GT(cur_state & kRefMask, kOneRef);
|
585
648
|
} else {
|
586
649
|
DCHECK_GE(cur_state & kRefMask, kOneRef);
|
@@ -626,6 +689,8 @@ class Party : public Activity, private Wakeable {
|
|
626
689
|
new_state);
|
627
690
|
}
|
628
691
|
|
692
|
+
channelz::PropertyList ChannelzPropertiesLocked();
|
693
|
+
|
629
694
|
// Sentinel value for currently_polling_ when no participant is being polled.
|
630
695
|
static constexpr uint8_t kNotPolling = 255;
|
631
696
|
|
data/src/core/lib/promise/poll.h
CHANGED
@@ -270,6 +270,16 @@ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline Poll<T> poll_cast(U poll) {
|
|
270
270
|
return PollCastImpl<T, U>::Cast(std::move(poll));
|
271
271
|
}
|
272
272
|
|
273
|
+
template <typename T>
|
274
|
+
bool IsPending(const T&) {
|
275
|
+
return false;
|
276
|
+
}
|
277
|
+
|
278
|
+
template <typename T>
|
279
|
+
bool IsPending(const Poll<T>& poll) {
|
280
|
+
return poll.pending();
|
281
|
+
}
|
282
|
+
|
273
283
|
// Convert a poll to a string
|
274
284
|
template <typename T, typename F>
|
275
285
|
std::string PollToString(
|
data/src/core/lib/promise/race.h
CHANGED
@@ -19,6 +19,9 @@
|
|
19
19
|
|
20
20
|
#include <utility>
|
21
21
|
|
22
|
+
#include "src/core/util/json/json.h"
|
23
|
+
#include "src/proto/grpc/channelz/v2/promise.upb.h"
|
24
|
+
|
22
25
|
namespace grpc_core {
|
23
26
|
|
24
27
|
/// Run all the promises, return the first result that's available.
|
@@ -47,6 +50,24 @@ class Race<Promise, Promises...> {
|
|
47
50
|
return std::move(r.value());
|
48
51
|
}
|
49
52
|
|
53
|
+
void ToProto(grpc_channelz_v2_Promise* promise_proto,
|
54
|
+
upb_Arena* arena) const {
|
55
|
+
auto* race_promise =
|
56
|
+
grpc_channelz_v2_Promise_mutable_race_promise(promise_proto, arena);
|
57
|
+
auto** children = grpc_channelz_v2_Promise_Race_resize_children(
|
58
|
+
race_promise, 1 + sizeof...(Promises), arena);
|
59
|
+
for (size_t i = 0; i < 1 + sizeof...(Promises); ++i) {
|
60
|
+
children[i] = grpc_channelz_v2_Promise_new(arena);
|
61
|
+
}
|
62
|
+
SetChildrenProto(children, 0, arena);
|
63
|
+
}
|
64
|
+
|
65
|
+
void SetChildrenProto(grpc_channelz_v2_Promise** promise_protos, int index,
|
66
|
+
upb_Arena* arena) const {
|
67
|
+
PromiseAsProto(promise_, promise_protos[index], arena);
|
68
|
+
next_.SetChildrenProto(promise_protos, index + 1, arena);
|
69
|
+
}
|
70
|
+
|
50
71
|
private:
|
51
72
|
// The Promise checked by this instance.
|
52
73
|
Promise promise_;
|
@@ -64,6 +85,16 @@ class Race<Promise> {
|
|
64
85
|
return promise_();
|
65
86
|
}
|
66
87
|
|
88
|
+
void ToProto(grpc_channelz_v2_Promise* promise_proto,
|
89
|
+
upb_Arena* arena) const {
|
90
|
+
PromiseAsProto(promise_, promise_proto, arena);
|
91
|
+
}
|
92
|
+
|
93
|
+
void SetChildrenProto(grpc_channelz_v2_Promise** promise_protos, int index,
|
94
|
+
upb_Arena* arena) const {
|
95
|
+
PromiseAsProto(promise_, promise_protos[index], arena);
|
96
|
+
}
|
97
|
+
|
67
98
|
private:
|
68
99
|
Promise promise_;
|
69
100
|
};
|
data/src/core/lib/promise/seq.h
CHANGED
@@ -108,7 +108,10 @@ class Seq {
|
|
108
108
|
return state_.PollOnce();
|
109
109
|
}
|
110
110
|
|
111
|
-
|
111
|
+
void ToProto(grpc_channelz_v2_Promise* promise_proto,
|
112
|
+
upb_Arena* arena) const {
|
113
|
+
state_.ToProto(grpc_channelz_v2_Promise_NORMAL, promise_proto, arena);
|
114
|
+
}
|
112
115
|
|
113
116
|
private:
|
114
117
|
SeqState<SeqTraits, P, Fs...> state_;
|
@@ -275,6 +275,13 @@ class ValueOrFailure {
|
|
275
275
|
return value_ != other;
|
276
276
|
}
|
277
277
|
|
278
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION bool operator==(Failure) const {
|
279
|
+
return !value_.has_value();
|
280
|
+
}
|
281
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION bool operator!=(Failure) const {
|
282
|
+
return value_.has_value();
|
283
|
+
}
|
284
|
+
|
278
285
|
private:
|
279
286
|
std::optional<T> value_;
|
280
287
|
};
|
@@ -263,7 +263,10 @@ class TrySeq {
|
|
263
263
|
return state_.PollOnce();
|
264
264
|
}
|
265
265
|
|
266
|
-
|
266
|
+
void ToProto(grpc_channelz_v2_Promise* promise_proto,
|
267
|
+
upb_Arena* arena) const {
|
268
|
+
state_.ToProto(grpc_channelz_v2_Promise_TRY, promise_proto, arena);
|
269
|
+
}
|
267
270
|
|
268
271
|
private:
|
269
272
|
SeqState<TrySeqTraits, P, Fs...> state_;
|
@@ -0,0 +1,28 @@
|
|
1
|
+
// Copyright 2025 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#include "src/core/lib/promise/wait_set.h"
|
16
|
+
|
17
|
+
#include "absl/strings/str_join.h"
|
18
|
+
|
19
|
+
namespace grpc_core {
|
20
|
+
|
21
|
+
std::string WaitSet::ToString() {
|
22
|
+
return absl::StrJoin(pending_, ", ",
|
23
|
+
[](std::string* out, const Waker& waker) {
|
24
|
+
absl::StrAppend(out, waker.DebugString());
|
25
|
+
});
|
26
|
+
}
|
27
|
+
|
28
|
+
} // namespace grpc_core
|
@@ -0,0 +1,86 @@
|
|
1
|
+
// Copyright 2021 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef GRPC_SRC_CORE_LIB_PROMISE_WAIT_SET_H
|
16
|
+
#define GRPC_SRC_CORE_LIB_PROMISE_WAIT_SET_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include <utility>
|
21
|
+
|
22
|
+
#include "absl/container/flat_hash_set.h"
|
23
|
+
#include "absl/hash/hash.h"
|
24
|
+
#include "src/core/lib/promise/activity.h"
|
25
|
+
#include "src/core/lib/promise/poll.h"
|
26
|
+
|
27
|
+
namespace grpc_core {
|
28
|
+
|
29
|
+
// Helper type that can be used to enqueue many Activities waiting for some
|
30
|
+
// external state.
|
31
|
+
// Typically the external state should be guarded by mu_, and a call to
|
32
|
+
// WakeAllAndUnlock should be made when the state changes.
|
33
|
+
// Promises should bottom out polling inside pending(), which will register for
|
34
|
+
// wakeup and return Pending().
|
35
|
+
// Queues handles to Activities, and not Activities themselves, meaning that if
|
36
|
+
// an Activity is destroyed prior to wakeup we end up holding only a small
|
37
|
+
// amount of memory (around 16 bytes + malloc overhead) until the next wakeup
|
38
|
+
// occurs.
|
39
|
+
class WaitSet final {
|
40
|
+
using WakerSet = absl::flat_hash_set<Waker>;
|
41
|
+
|
42
|
+
public:
|
43
|
+
// Register for wakeup, return Pending(). If state is not ready to proceed,
|
44
|
+
// Promises should bottom out here.
|
45
|
+
Pending AddPending(Waker waker) {
|
46
|
+
pending_.emplace(std::move(waker));
|
47
|
+
return Pending();
|
48
|
+
}
|
49
|
+
|
50
|
+
class WakeupSet {
|
51
|
+
public:
|
52
|
+
void Wakeup() {
|
53
|
+
while (!wakeup_.empty()) {
|
54
|
+
wakeup_.extract(wakeup_.begin()).value().Wakeup();
|
55
|
+
}
|
56
|
+
}
|
57
|
+
|
58
|
+
private:
|
59
|
+
friend class WaitSet;
|
60
|
+
explicit WakeupSet(WakerSet&& wakeup)
|
61
|
+
: wakeup_(std::forward<WakerSet>(wakeup)) {}
|
62
|
+
WakerSet wakeup_;
|
63
|
+
};
|
64
|
+
|
65
|
+
GRPC_MUST_USE_RESULT WakeupSet TakeWakeupSet() {
|
66
|
+
auto ret = WakeupSet(std::move(pending_));
|
67
|
+
pending_.clear(); // reinitialize after move.
|
68
|
+
return ret;
|
69
|
+
}
|
70
|
+
|
71
|
+
void WakeupAsync() {
|
72
|
+
while (!pending_.empty()) {
|
73
|
+
pending_.extract(pending_.begin()).value().WakeupAsync();
|
74
|
+
}
|
75
|
+
}
|
76
|
+
|
77
|
+
std::string ToString();
|
78
|
+
|
79
|
+
private:
|
80
|
+
// Handles to activities that need to be awoken.
|
81
|
+
WakerSet pending_;
|
82
|
+
};
|
83
|
+
|
84
|
+
} // namespace grpc_core
|
85
|
+
|
86
|
+
#endif // GRPC_SRC_CORE_LIB_PROMISE_WAIT_SET_H
|
@@ -409,6 +409,25 @@ class ArenaSpsc {
|
|
409
409
|
return result;
|
410
410
|
}
|
411
411
|
|
412
|
+
T* Peek() {
|
413
|
+
Node* n = tail_.load(std::memory_order_relaxed);
|
414
|
+
Node* next = n->next.load(std::memory_order_acquire);
|
415
|
+
if (next == nullptr) return nullptr;
|
416
|
+
return &next->value;
|
417
|
+
}
|
418
|
+
|
419
|
+
// Iterate over queued nodes. At most one thread can be calling this at a
|
420
|
+
// time, and no other thread can be calling Pop().
|
421
|
+
template <typename F>
|
422
|
+
void ForEach(F f) {
|
423
|
+
Node* tail = tail_.load(std::memory_order_relaxed);
|
424
|
+
Node* n = tail->next.load(std::memory_order_acquire);
|
425
|
+
while (n != nullptr) {
|
426
|
+
f(n->value);
|
427
|
+
n = n->next.load(std::memory_order_acquire);
|
428
|
+
}
|
429
|
+
}
|
430
|
+
|
412
431
|
private:
|
413
432
|
struct Node {
|
414
433
|
Node() {}
|
@@ -32,6 +32,8 @@
|
|
32
32
|
#include "absl/log/log.h"
|
33
33
|
#include "absl/status/status.h"
|
34
34
|
#include "absl/strings/str_cat.h"
|
35
|
+
#include "src/core/channelz/channelz.h"
|
36
|
+
#include "src/core/channelz/property_list.h"
|
35
37
|
#include "src/core/lib/debug/trace.h"
|
36
38
|
#include "src/core/lib/promise/exec_ctx_wakeup_scheduler.h"
|
37
39
|
#include "src/core/lib/promise/loop.h"
|
@@ -407,6 +409,20 @@ grpc_slice GrpcMemoryAllocatorImpl::MakeSlice(MemoryRequest request) {
|
|
407
409
|
return slice;
|
408
410
|
}
|
409
411
|
|
412
|
+
void GrpcMemoryAllocatorImpl::FillChannelzProperties(
|
413
|
+
channelz::PropertyList& list) {
|
414
|
+
list.Set("free_bytes", free_bytes_.load(std::memory_order_relaxed))
|
415
|
+
.Set("taken_bytes", taken_bytes_.load(std::memory_order_relaxed))
|
416
|
+
.Set("chosen_shard_idx",
|
417
|
+
chosen_shard_idx_.load(std::memory_order_relaxed))
|
418
|
+
.Set("donate_back_period", donate_back_.period());
|
419
|
+
donate_back_.Interrupt([&list](Duration so_far) {
|
420
|
+
list.Set("donate_back_period_expired", so_far);
|
421
|
+
});
|
422
|
+
MutexLock lock(&reclaimer_mu_);
|
423
|
+
list.Set("shutdown", shutdown_);
|
424
|
+
}
|
425
|
+
|
410
426
|
//
|
411
427
|
// BasicMemoryQuota
|
412
428
|
//
|
@@ -431,7 +447,11 @@ class BasicMemoryQuota::WaitForSweepPromise {
|
|
431
447
|
uint64_t token_;
|
432
448
|
};
|
433
449
|
|
434
|
-
BasicMemoryQuota::BasicMemoryQuota(
|
450
|
+
BasicMemoryQuota::BasicMemoryQuota(
|
451
|
+
RefCountedPtr<channelz::ResourceQuotaNode> channelz_node)
|
452
|
+
: channelz::DataSource(channelz_node) {
|
453
|
+
channelz::DataSource::SourceConstructed();
|
454
|
+
}
|
435
455
|
|
436
456
|
void BasicMemoryQuota::Start() {
|
437
457
|
auto self = shared_from_this();
|
@@ -471,7 +491,7 @@ void BasicMemoryQuota::Start() {
|
|
471
491
|
if (GRPC_TRACE_FLAG_ENABLED(resource_quota)) {
|
472
492
|
double free = std::max(intptr_t{0}, self->free_bytes_.load());
|
473
493
|
size_t quota_size = self->quota_size_.load();
|
474
|
-
LOG(INFO) << "RQ: " << self->
|
494
|
+
LOG(INFO) << "RQ: " << self->name() << " perform "
|
475
495
|
<< std::get<0>(arg)
|
476
496
|
<< " reclamation. Available free bytes: " << free
|
477
497
|
<< ", total quota_size: " << quota_size;
|
@@ -555,7 +575,7 @@ void BasicMemoryQuota::FinishReclamation(uint64_t token, Waker waker) {
|
|
555
575
|
if (GRPC_TRACE_FLAG_ENABLED(resource_quota)) {
|
556
576
|
double free = std::max(intptr_t{0}, free_bytes_.load());
|
557
577
|
size_t quota_size = quota_size_.load();
|
558
|
-
LOG(INFO) << "RQ: " <<
|
578
|
+
LOG(INFO) << "RQ: " << name()
|
559
579
|
<< " reclamation complete. Available free bytes: " << free
|
560
580
|
<< ", total quota_size: " << quota_size;
|
561
581
|
}
|
@@ -678,6 +698,44 @@ BasicMemoryQuota::PressureInfo BasicMemoryQuota::GetPressureInfo() {
|
|
678
698
|
return pressure_info;
|
679
699
|
}
|
680
700
|
|
701
|
+
void BasicMemoryQuota::AddData(channelz::DataSink sink) {
|
702
|
+
sink.AddData(
|
703
|
+
"memory_quota",
|
704
|
+
channelz::PropertyList()
|
705
|
+
.Set("free_bytes", free_bytes_.load(std::memory_order_relaxed))
|
706
|
+
.Set("quota_size", quota_size_.load(std::memory_order_relaxed))
|
707
|
+
.Merge(pressure_tracker_.ChannelzProperties())
|
708
|
+
.Set("allocators",
|
709
|
+
[this]() {
|
710
|
+
channelz::PropertyTable table;
|
711
|
+
for (auto& shard : small_allocators_.shards) {
|
712
|
+
MutexLock l(&shard.shard_mu);
|
713
|
+
size_t i = 0;
|
714
|
+
for (auto& allocator : shard.allocators) {
|
715
|
+
i++;
|
716
|
+
channelz::PropertyList list;
|
717
|
+
list.Set("shard", absl::StrCat("small", i));
|
718
|
+
allocator->FillChannelzProperties(list);
|
719
|
+
table.AppendRow(std::move(list));
|
720
|
+
}
|
721
|
+
}
|
722
|
+
for (auto& shard : big_allocators_.shards) {
|
723
|
+
MutexLock l(&shard.shard_mu);
|
724
|
+
size_t i = 0;
|
725
|
+
for (auto& allocator : shard.allocators) {
|
726
|
+
i++;
|
727
|
+
channelz::PropertyList list;
|
728
|
+
list.Set("shard", absl::StrCat("big", i));
|
729
|
+
allocator->FillChannelzProperties(list);
|
730
|
+
table.AppendRow(std::move(list));
|
731
|
+
}
|
732
|
+
}
|
733
|
+
return table;
|
734
|
+
}())
|
735
|
+
.Set("reclamation_counter",
|
736
|
+
reclamation_counter_.load(std::memory_order_relaxed)));
|
737
|
+
}
|
738
|
+
|
681
739
|
//
|
682
740
|
// PressureTracker
|
683
741
|
//
|
@@ -789,6 +847,35 @@ double PressureTracker::AddSampleAndGetControlValue(double sample) {
|
|
789
847
|
return report_.load(std::memory_order_relaxed);
|
790
848
|
}
|
791
849
|
|
850
|
+
channelz::PropertyList PressureController::ChannelzProperties() const {
|
851
|
+
return channelz::PropertyList()
|
852
|
+
.Set("ticks_same_pressure", ticks_same_)
|
853
|
+
.Set("max_ticks_same_pressure", max_ticks_same_)
|
854
|
+
.Set("max_pressure_reduction_per_tick", max_reduction_per_tick_ * 0.001)
|
855
|
+
.Set("last_pressure_was_low", last_was_low_)
|
856
|
+
.Set("min_pressure", min_)
|
857
|
+
.Set("max_pressure", max_)
|
858
|
+
.Set("last_control", last_control_);
|
859
|
+
}
|
860
|
+
|
861
|
+
channelz::PropertyList PressureTracker::ChannelzProperties() {
|
862
|
+
return channelz::PropertyList()
|
863
|
+
.Set("max_pressure_this_round",
|
864
|
+
max_this_round_.load(std::memory_order_relaxed))
|
865
|
+
.Set("pressure_report", report_.load(std::memory_order_relaxed))
|
866
|
+
.Merge([this]() {
|
867
|
+
channelz::PropertyList list;
|
868
|
+
if (!update_.Interrupt([&](Duration duration) {
|
869
|
+
list = controller_.ChannelzProperties();
|
870
|
+
list.Set("time_since_last_pressure_update", duration);
|
871
|
+
list.Set("pressure_update_period", update_.period());
|
872
|
+
})) {
|
873
|
+
list.Set("pressure_controller_busy", true)
|
874
|
+
.Set("pressure_update_period", update_.period());
|
875
|
+
}
|
876
|
+
return list;
|
877
|
+
}());
|
878
|
+
}
|
792
879
|
} // namespace memory_quota_detail
|
793
880
|
|
794
881
|
//
|
@@ -35,6 +35,7 @@
|
|
35
35
|
#include "absl/log/check.h"
|
36
36
|
#include "absl/log/log.h"
|
37
37
|
#include "absl/strings/string_view.h"
|
38
|
+
#include "src/core/channelz/channelz.h"
|
38
39
|
#include "src/core/lib/debug/trace.h"
|
39
40
|
#include "src/core/lib/experiments/experiments.h"
|
40
41
|
#include "src/core/lib/promise/activity.h"
|
@@ -233,6 +234,7 @@ class PressureController {
|
|
233
234
|
double Update(double error);
|
234
235
|
// Textual representation of the controller.
|
235
236
|
std::string DebugString() const;
|
237
|
+
channelz::PropertyList ChannelzProperties() const;
|
236
238
|
|
237
239
|
private:
|
238
240
|
// How many update periods have we reached the same decision in a row?
|
@@ -264,6 +266,8 @@ class PressureTracker {
|
|
264
266
|
public:
|
265
267
|
double AddSampleAndGetControlValue(double sample);
|
266
268
|
|
269
|
+
channelz::PropertyList ChannelzProperties();
|
270
|
+
|
267
271
|
private:
|
268
272
|
std::atomic<double> max_this_round_{0.0};
|
269
273
|
std::atomic<double> report_{0.0};
|
@@ -279,7 +283,8 @@ static constexpr size_t kBigAllocatorThreshold = 0.5 * 1024 * 1024;
|
|
279
283
|
static constexpr size_t kSmallAllocatorThreshold = 0.1 * 1024 * 1024;
|
280
284
|
|
281
285
|
class BasicMemoryQuota final
|
282
|
-
: public std::enable_shared_from_this<BasicMemoryQuota
|
286
|
+
: public std::enable_shared_from_this<BasicMemoryQuota>,
|
287
|
+
public channelz::DataSource {
|
283
288
|
public:
|
284
289
|
// Data about current memory pressure.
|
285
290
|
struct PressureInfo {
|
@@ -292,7 +297,9 @@ class BasicMemoryQuota final
|
|
292
297
|
size_t max_recommended_allocation_size = 0;
|
293
298
|
};
|
294
299
|
|
295
|
-
explicit BasicMemoryQuota(
|
300
|
+
explicit BasicMemoryQuota(
|
301
|
+
RefCountedPtr<channelz::ResourceQuotaNode> channelz_node);
|
302
|
+
~BasicMemoryQuota() { channelz::DataSource::SourceDestructing(); }
|
296
303
|
|
297
304
|
// Start the reclamation activity.
|
298
305
|
void Start();
|
@@ -324,7 +331,9 @@ class BasicMemoryQuota final
|
|
324
331
|
ReclaimerQueue* reclaimer_queue(size_t i) { return &reclaimers_[i]; }
|
325
332
|
|
326
333
|
// The name of this quota
|
327
|
-
absl::string_view name() const { return
|
334
|
+
absl::string_view name() const { return channelz_node()->name(); }
|
335
|
+
|
336
|
+
void AddData(channelz::DataSink sink) override;
|
328
337
|
|
329
338
|
private:
|
330
339
|
friend class ReclamationSweep;
|
@@ -378,8 +387,6 @@ class BasicMemoryQuota final
|
|
378
387
|
std::atomic<uint64_t> reclamation_counter_{0};
|
379
388
|
// Memory pressure smoothing
|
380
389
|
memory_quota_detail::PressureTracker pressure_tracker_;
|
381
|
-
// The name of this quota - used for debugging/tracing/etc..
|
382
|
-
std::string name_;
|
383
390
|
};
|
384
391
|
|
385
392
|
// MemoryAllocatorImpl grants the owner the ability to allocate memory from an
|
@@ -453,6 +460,8 @@ class GrpcMemoryAllocatorImpl final : public EventEngineMemoryAllocatorImpl {
|
|
453
460
|
return chosen_shard_idx_.fetch_add(1, std::memory_order_relaxed);
|
454
461
|
}
|
455
462
|
|
463
|
+
void FillChannelzProperties(channelz::PropertyList& list);
|
464
|
+
|
456
465
|
private:
|
457
466
|
static constexpr size_t kMaxQuotaBufferSize = 1024 * 1024;
|
458
467
|
|
@@ -550,8 +559,9 @@ class MemoryOwner final : public MemoryAllocator {
|
|
550
559
|
class MemoryQuota final
|
551
560
|
: public grpc_event_engine::experimental::MemoryAllocatorFactory {
|
552
561
|
public:
|
553
|
-
explicit MemoryQuota(
|
554
|
-
: memory_quota_(
|
562
|
+
explicit MemoryQuota(RefCountedPtr<channelz::ResourceQuotaNode> channelz_node)
|
563
|
+
: memory_quota_(
|
564
|
+
std::make_shared<BasicMemoryQuota>(std::move(channelz_node))) {
|
555
565
|
memory_quota_->Start();
|
556
566
|
}
|
557
567
|
~MemoryQuota() override {
|
@@ -580,8 +590,9 @@ class MemoryQuota final
|
|
580
590
|
};
|
581
591
|
|
582
592
|
using MemoryQuotaRefPtr = std::shared_ptr<MemoryQuota>;
|
583
|
-
inline MemoryQuotaRefPtr MakeMemoryQuota(
|
584
|
-
|
593
|
+
inline MemoryQuotaRefPtr MakeMemoryQuota(
|
594
|
+
RefCountedPtr<channelz::ResourceQuotaNode> channelz_node) {
|
595
|
+
return std::make_shared<MemoryQuota>(std::move(channelz_node));
|
585
596
|
}
|
586
597
|
|
587
598
|
std::vector<std::shared_ptr<BasicMemoryQuota>> AllMemoryQuotas();
|
@@ -22,6 +22,20 @@
|
|
22
22
|
|
23
23
|
namespace grpc_core {
|
24
24
|
|
25
|
+
bool PeriodicUpdate::Interrupt(absl::FunctionRef<void(Duration)> f) {
|
26
|
+
int64_t old_value = updates_remaining_.load(std::memory_order_acquire);
|
27
|
+
while (true) {
|
28
|
+
if (old_value <= 1) return false;
|
29
|
+
if (!updates_remaining_.compare_exchange_weak(old_value, 0,
|
30
|
+
std::memory_order_acquire)) {
|
31
|
+
continue;
|
32
|
+
}
|
33
|
+
f(Timestamp::Now() - period_start_);
|
34
|
+
updates_remaining_.store(old_value, std::memory_order_release);
|
35
|
+
return true;
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
25
39
|
bool PeriodicUpdate::MaybeEndPeriod(absl::FunctionRef<void(Duration)> f) {
|
26
40
|
if (period_start_ == Timestamp::ProcessEpoch()) {
|
27
41
|
period_start_ = Timestamp::Now();
|
@@ -48,6 +48,14 @@ class PeriodicUpdate {
|
|
48
48
|
return false;
|
49
49
|
}
|
50
50
|
|
51
|
+
// Interrupt execution: call f as if the period expired, and then continue
|
52
|
+
// from where we left off.
|
53
|
+
// Returns false if this was not possible (eg we were at the end of a tick)
|
54
|
+
// Argument to the callback is the amount of time expired so far.
|
55
|
+
bool Interrupt(absl::FunctionRef<void(Duration)> f);
|
56
|
+
|
57
|
+
Duration period() const { return period_; }
|
58
|
+
|
51
59
|
private:
|
52
60
|
bool MaybeEndPeriod(absl::FunctionRef<void(Duration)> f);
|
53
61
|
|