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
@@ -0,0 +1,268 @@
|
|
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
|
+
#ifndef GRPC_SRC_CORE_UTIL_MEMORY_USAGE_H
|
16
|
+
#define GRPC_SRC_CORE_UTIL_MEMORY_USAGE_H
|
17
|
+
|
18
|
+
#include <cstddef>
|
19
|
+
#include <memory>
|
20
|
+
#include <optional>
|
21
|
+
#include <tuple>
|
22
|
+
#include <type_traits>
|
23
|
+
#include <utility>
|
24
|
+
#include <vector>
|
25
|
+
|
26
|
+
#include "absl/log/log.h"
|
27
|
+
#include "absl/status/status.h"
|
28
|
+
#include "absl/status/statusor.h"
|
29
|
+
#include "absl/strings/string_view.h"
|
30
|
+
#include "absl/time/time.h"
|
31
|
+
#include "src/core/util/time.h"
|
32
|
+
|
33
|
+
namespace grpc_core {
|
34
|
+
|
35
|
+
namespace memory_usage_detail {
|
36
|
+
|
37
|
+
template <typename SfinaeVoid, typename T, typename... Args>
|
38
|
+
struct IsBraceConstructible : public std::false_type {};
|
39
|
+
|
40
|
+
template <typename T, typename... Args>
|
41
|
+
struct IsBraceConstructible<std::void_t<decltype(T{std::declval<Args>()...})>,
|
42
|
+
T, Args...> : public std::true_type {};
|
43
|
+
|
44
|
+
template <typename T, typename... Args>
|
45
|
+
constexpr bool kIsBraceConstructible =
|
46
|
+
IsBraceConstructible<void, T, Args...>::value;
|
47
|
+
|
48
|
+
template <typename T>
|
49
|
+
constexpr bool kAnyTypeConvertibleTo = true;
|
50
|
+
template <typename T>
|
51
|
+
constexpr bool kAnyTypeConvertibleTo<std::optional<T>> = false;
|
52
|
+
|
53
|
+
struct AnyType {
|
54
|
+
template <typename T, std::enable_if_t<kAnyTypeConvertibleTo<T>, int> = 0>
|
55
|
+
// NOLINTNEXTLINE
|
56
|
+
constexpr operator T() {
|
57
|
+
LOG(FATAL) << "unreachable";
|
58
|
+
}
|
59
|
+
};
|
60
|
+
|
61
|
+
enum class Category {
|
62
|
+
kUncategorized,
|
63
|
+
kOptional,
|
64
|
+
kAbslStatusOr,
|
65
|
+
kSimple, // memory usage == sizeof(T)
|
66
|
+
kOwnedPointer, // memory usage is pointer + usage of pointed to value
|
67
|
+
kVector, // memory usage is container + elements
|
68
|
+
};
|
69
|
+
|
70
|
+
template <typename T, typename = void>
|
71
|
+
constexpr Category kMemoryUsageCategory = Category::kUncategorized;
|
72
|
+
|
73
|
+
template <typename T>
|
74
|
+
constexpr Category
|
75
|
+
kMemoryUsageCategory<T, std::enable_if_t<std::is_fundamental_v<T>>> =
|
76
|
+
Category::kSimple;
|
77
|
+
|
78
|
+
template <typename T>
|
79
|
+
constexpr Category
|
80
|
+
kMemoryUsageCategory<T, std::enable_if_t<std::is_enum_v<T>>> =
|
81
|
+
Category::kSimple;
|
82
|
+
|
83
|
+
template <typename T, typename D>
|
84
|
+
constexpr Category kMemoryUsageCategory<std::unique_ptr<T, D>> =
|
85
|
+
Category::kOwnedPointer;
|
86
|
+
|
87
|
+
template <typename T>
|
88
|
+
constexpr Category kMemoryUsageCategory<std::shared_ptr<T>> =
|
89
|
+
Category::kOwnedPointer;
|
90
|
+
|
91
|
+
template <typename T>
|
92
|
+
constexpr Category kMemoryUsageCategory<std::vector<T>> = Category::kVector;
|
93
|
+
|
94
|
+
template <typename C, typename Traits, typename Allocator>
|
95
|
+
constexpr Category
|
96
|
+
kMemoryUsageCategory<std::basic_string<C, Traits, Allocator>> =
|
97
|
+
Category::kVector;
|
98
|
+
|
99
|
+
template <typename T>
|
100
|
+
constexpr Category kMemoryUsageCategory<std::optional<T>> = Category::kOptional;
|
101
|
+
|
102
|
+
template <typename T, typename = void>
|
103
|
+
constexpr bool kHasMemoryUsageMethod = false;
|
104
|
+
|
105
|
+
template <typename T>
|
106
|
+
constexpr bool kHasMemoryUsageMethod<
|
107
|
+
T, std::void_t<decltype(std::declval<T>().MemoryUsage())>> = true;
|
108
|
+
|
109
|
+
} // namespace memory_usage_detail
|
110
|
+
|
111
|
+
// Given an object x, `MemoryUsage(x)` returns a size_t that approximates the
|
112
|
+
// memory used by x. It's not totally accurate, but "good enough" for systems
|
113
|
+
// that need to roughly bound memory usage of a collection of elements.
|
114
|
+
|
115
|
+
template <typename T>
|
116
|
+
size_t MemoryUsageOf(const T& x) {
|
117
|
+
using memory_usage_detail::AnyType;
|
118
|
+
using memory_usage_detail::Category;
|
119
|
+
using memory_usage_detail::kHasMemoryUsageMethod;
|
120
|
+
using memory_usage_detail::kIsBraceConstructible;
|
121
|
+
constexpr Category category = memory_usage_detail::kMemoryUsageCategory<T>;
|
122
|
+
if constexpr (kHasMemoryUsageMethod<T>) {
|
123
|
+
return x.MemoryUsage();
|
124
|
+
} else if constexpr (std::is_empty_v<T>) {
|
125
|
+
return sizeof(T);
|
126
|
+
} else if constexpr (std::is_same_v<T, absl::Status>) {
|
127
|
+
if (x.ok()) return sizeof(T);
|
128
|
+
return 2 * sizeof(T) + x.message().length(); // wrong, but not super wrong
|
129
|
+
} else if constexpr (std::is_same_v<T, absl::Time>) {
|
130
|
+
return sizeof(T);
|
131
|
+
} else if constexpr (std::is_same_v<T, absl::string_view>) {
|
132
|
+
// Assume that the string_view is not owning the string.
|
133
|
+
return sizeof(T);
|
134
|
+
} else if constexpr (std::is_same_v<T, Timestamp>) {
|
135
|
+
return sizeof(T);
|
136
|
+
} else if constexpr (std::is_same_v<T, Duration>) {
|
137
|
+
return sizeof(T);
|
138
|
+
} else if constexpr (category == Category::kSimple) {
|
139
|
+
return sizeof(T);
|
140
|
+
} else if constexpr (category == Category::kOwnedPointer) {
|
141
|
+
if (x == nullptr) return sizeof(T);
|
142
|
+
return sizeof(T) + MemoryUsageOf(*x);
|
143
|
+
} else if constexpr (category == Category::kVector) {
|
144
|
+
size_t total = sizeof(T) + sizeof(*x.begin()) * (x.capacity() - x.size());
|
145
|
+
for (const auto& e : x) {
|
146
|
+
total += MemoryUsageOf(e);
|
147
|
+
}
|
148
|
+
return total;
|
149
|
+
} else if constexpr (category == Category::kOptional) {
|
150
|
+
if (x.has_value()) return MemoryUsageOf(*x) + sizeof(T) - sizeof(*x);
|
151
|
+
return sizeof(T);
|
152
|
+
} else if constexpr (category == Category::kAbslStatusOr) {
|
153
|
+
if (x.ok()) return MemoryUsageOf(*x) + sizeof(absl::Status);
|
154
|
+
return MemoryUsageOf(x.status()) + sizeof(T);
|
155
|
+
} else if constexpr (category == Category::kUncategorized) {
|
156
|
+
// Structs!
|
157
|
+
// If you have more than 8 fields, you can add more cases here.
|
158
|
+
// Keep sorted longest to shortest.
|
159
|
+
if constexpr (kIsBraceConstructible<T, AnyType, AnyType, AnyType, AnyType,
|
160
|
+
AnyType, AnyType, AnyType, AnyType,
|
161
|
+
AnyType, AnyType>) {
|
162
|
+
const auto& [v1, v2, v3, v4, v5, v6, v7, v8, v9, v10] = x;
|
163
|
+
constexpr auto padding = sizeof(T) - sizeof(v1) - sizeof(v2) -
|
164
|
+
sizeof(v3) - sizeof(v4) - sizeof(v5) -
|
165
|
+
sizeof(v6) - sizeof(v7) - sizeof(v8) -
|
166
|
+
sizeof(v9) - sizeof(v10);
|
167
|
+
static_assert(padding >= 0);
|
168
|
+
return MemoryUsageOf(v1) + MemoryUsageOf(v2) + MemoryUsageOf(v3) +
|
169
|
+
MemoryUsageOf(v4) + MemoryUsageOf(v5) + MemoryUsageOf(v6) +
|
170
|
+
MemoryUsageOf(v7) + MemoryUsageOf(v8) + MemoryUsageOf(v9) +
|
171
|
+
MemoryUsageOf(v10) + padding;
|
172
|
+
} else if constexpr (kIsBraceConstructible<T, AnyType, AnyType, AnyType,
|
173
|
+
AnyType, AnyType, AnyType,
|
174
|
+
AnyType, AnyType, AnyType>) {
|
175
|
+
const auto& [v1, v2, v3, v4, v5, v6, v7, v8, v9] = x;
|
176
|
+
constexpr auto padding =
|
177
|
+
sizeof(T) - sizeof(v1) - sizeof(v2) - sizeof(v3) - sizeof(v4) -
|
178
|
+
sizeof(v5) - sizeof(v6) - sizeof(v7) - sizeof(v8) - sizeof(v9);
|
179
|
+
static_assert(padding >= 0);
|
180
|
+
return MemoryUsageOf(v1) + MemoryUsageOf(v2) + MemoryUsageOf(v3) +
|
181
|
+
MemoryUsageOf(v4) + MemoryUsageOf(v5) + MemoryUsageOf(v6) +
|
182
|
+
MemoryUsageOf(v7) + MemoryUsageOf(v8) + MemoryUsageOf(v9) +
|
183
|
+
padding;
|
184
|
+
} else if constexpr (kIsBraceConstructible<T, AnyType, AnyType, AnyType,
|
185
|
+
AnyType, AnyType, AnyType,
|
186
|
+
AnyType, AnyType>) {
|
187
|
+
const auto& [v1, v2, v3, v4, v5, v6, v7, v8] = x;
|
188
|
+
constexpr auto padding = sizeof(T) - sizeof(v1) - sizeof(v2) -
|
189
|
+
sizeof(v3) - sizeof(v4) - sizeof(v5) -
|
190
|
+
sizeof(v6) - sizeof(v7) - sizeof(v8);
|
191
|
+
static_assert(padding >= 0);
|
192
|
+
return MemoryUsageOf(v1) + MemoryUsageOf(v2) + MemoryUsageOf(v3) +
|
193
|
+
MemoryUsageOf(v4) + MemoryUsageOf(v5) + MemoryUsageOf(v6) +
|
194
|
+
MemoryUsageOf(v7) + MemoryUsageOf(v8) + padding;
|
195
|
+
} else if constexpr (kIsBraceConstructible<T, AnyType, AnyType, AnyType,
|
196
|
+
AnyType, AnyType, AnyType,
|
197
|
+
AnyType>) {
|
198
|
+
const auto& [v1, v2, v3, v4, v5, v6, v7] = x;
|
199
|
+
constexpr auto padding = sizeof(T) - sizeof(v1) - sizeof(v2) -
|
200
|
+
sizeof(v3) - sizeof(v4) - sizeof(v5) -
|
201
|
+
sizeof(v6) - sizeof(v7);
|
202
|
+
static_assert(padding >= 0);
|
203
|
+
return MemoryUsageOf(v1) + MemoryUsageOf(v2) + MemoryUsageOf(v3) +
|
204
|
+
MemoryUsageOf(v4) + MemoryUsageOf(v5) + MemoryUsageOf(v6) +
|
205
|
+
MemoryUsageOf(v7) + padding;
|
206
|
+
} else if constexpr (kIsBraceConstructible<T, AnyType, AnyType, AnyType,
|
207
|
+
AnyType, AnyType, AnyType>) {
|
208
|
+
const auto& [v1, v2, v3, v4, v5, v6] = x;
|
209
|
+
constexpr auto padding = sizeof(T) - sizeof(v1) - sizeof(v2) -
|
210
|
+
sizeof(v3) - sizeof(v4) - sizeof(v5) -
|
211
|
+
sizeof(v6);
|
212
|
+
static_assert(padding >= 0);
|
213
|
+
return MemoryUsageOf(v1) + MemoryUsageOf(v2) + MemoryUsageOf(v3) +
|
214
|
+
MemoryUsageOf(v4) + MemoryUsageOf(v5) + MemoryUsageOf(v6) +
|
215
|
+
padding;
|
216
|
+
} else if constexpr (kIsBraceConstructible<T, AnyType, AnyType, AnyType,
|
217
|
+
AnyType, AnyType>) {
|
218
|
+
const auto& [v1, v2, v3, v4, v5] = x;
|
219
|
+
constexpr auto padding = sizeof(T) - sizeof(v1) - sizeof(v2) -
|
220
|
+
sizeof(v3) - sizeof(v4) - sizeof(v5);
|
221
|
+
static_assert(padding >= 0);
|
222
|
+
return MemoryUsageOf(v1) + MemoryUsageOf(v2) + MemoryUsageOf(v3) +
|
223
|
+
MemoryUsageOf(v4) + MemoryUsageOf(v5) + padding;
|
224
|
+
} else if constexpr (kIsBraceConstructible<T, AnyType, AnyType, AnyType,
|
225
|
+
AnyType>) {
|
226
|
+
const auto& [v1, v2, v3, v4] = x;
|
227
|
+
constexpr auto padding =
|
228
|
+
sizeof(T) - sizeof(v1) - sizeof(v2) - sizeof(v3) - sizeof(v4);
|
229
|
+
static_assert(padding >= 0);
|
230
|
+
return MemoryUsageOf(v1) + MemoryUsageOf(v2) + MemoryUsageOf(v3) +
|
231
|
+
MemoryUsageOf(v4) + padding;
|
232
|
+
} else if constexpr (kIsBraceConstructible<T, AnyType, AnyType, AnyType>) {
|
233
|
+
const auto& [v1, v2, v3] = x;
|
234
|
+
constexpr auto padding = sizeof(T) - sizeof(v1) - sizeof(v2) - sizeof(v3);
|
235
|
+
static_assert(padding >= 0);
|
236
|
+
return MemoryUsageOf(v1) + MemoryUsageOf(v2) + MemoryUsageOf(v3) +
|
237
|
+
padding;
|
238
|
+
} else if constexpr (kIsBraceConstructible<T, AnyType, AnyType>) {
|
239
|
+
const auto& [v1, v2] = x;
|
240
|
+
constexpr auto padding = sizeof(T) - sizeof(v1) - sizeof(v2);
|
241
|
+
static_assert(padding >= 0);
|
242
|
+
return MemoryUsageOf(v1) + MemoryUsageOf(v2) + padding;
|
243
|
+
} else if constexpr (kIsBraceConstructible<T, AnyType>) {
|
244
|
+
const auto& [v1] = x;
|
245
|
+
constexpr auto padding = sizeof(T) - sizeof(v1);
|
246
|
+
static_assert(padding >= 0);
|
247
|
+
return MemoryUsageOf(v1) + padding;
|
248
|
+
} else {
|
249
|
+
// Probably wrong, but we've not figured any better...
|
250
|
+
LOG(DFATAL) << "Unsupported type";
|
251
|
+
return sizeof(T);
|
252
|
+
}
|
253
|
+
} else {
|
254
|
+
// Probably wrong, but we've not figured any better...
|
255
|
+
LOG(DFATAL) << "Unsupported type";
|
256
|
+
return sizeof(T);
|
257
|
+
}
|
258
|
+
}
|
259
|
+
|
260
|
+
template <typename... Args>
|
261
|
+
size_t MemoryUsageOf(const std::tuple<Args...>& t) {
|
262
|
+
return std::apply(
|
263
|
+
[](const auto&... args) { return (MemoryUsageOf(args) + ... + 0); }, t);
|
264
|
+
}
|
265
|
+
|
266
|
+
} // namespace grpc_core
|
267
|
+
|
268
|
+
#endif // GRPC_SRC_CORE_UTIL_MEMORY_USAGE_H
|
data/src/core/util/per_cpu.cc
CHANGED
data/src/core/util/per_cpu.h
CHANGED
@@ -55,6 +55,12 @@ class PerCpuOptions {
|
|
55
55
|
size_t max_shards_ = std::numeric_limits<size_t>::max();
|
56
56
|
};
|
57
57
|
|
58
|
+
#ifdef GPR_CPU_CUSTOM
|
59
|
+
class PerCpuShardingHelper {
|
60
|
+
public:
|
61
|
+
size_t GetShardingBits() { return gpr_cpu_current_cpu(); }
|
62
|
+
};
|
63
|
+
#else
|
58
64
|
class PerCpuShardingHelper {
|
59
65
|
public:
|
60
66
|
size_t GetShardingBits() {
|
@@ -76,6 +82,7 @@ class PerCpuShardingHelper {
|
|
76
82
|
};
|
77
83
|
static thread_local State state_;
|
78
84
|
};
|
85
|
+
#endif // GPR_CPU_CUSTOM
|
79
86
|
|
80
87
|
template <typename T>
|
81
88
|
class PerCpu {
|
@@ -19,6 +19,25 @@
|
|
19
19
|
|
20
20
|
namespace grpc_core {
|
21
21
|
|
22
|
+
#if defined(GRPC_CPU_INTENSIVE_BITGEN)
|
23
|
+
class SharedBitGen {
|
24
|
+
public:
|
25
|
+
SharedBitGen() = default;
|
26
|
+
SharedBitGen(const SharedBitGen&) = delete;
|
27
|
+
SharedBitGen& operator=(const SharedBitGen&) = delete;
|
28
|
+
SharedBitGen(SharedBitGen&&) = default;
|
29
|
+
SharedBitGen& operator=(SharedBitGen&&) = default;
|
30
|
+
|
31
|
+
using result_type = absl::BitGen::result_type;
|
32
|
+
result_type operator()() { return bit_gen_(); }
|
33
|
+
|
34
|
+
static constexpr auto min() { return absl::BitGen::min(); }
|
35
|
+
static constexpr auto max() { return absl::BitGen::max(); }
|
36
|
+
|
37
|
+
private:
|
38
|
+
absl::BitGen bit_gen_;
|
39
|
+
};
|
40
|
+
#else
|
22
41
|
class SharedBitGen {
|
23
42
|
public:
|
24
43
|
SharedBitGen() = default;
|
@@ -38,6 +57,7 @@ class SharedBitGen {
|
|
38
57
|
// for the mutex acquisition.
|
39
58
|
static thread_local absl::BitGen bit_gen_;
|
40
59
|
};
|
60
|
+
#endif // defined(GRPC_CPU_INTENSIVE_BITGEN)
|
41
61
|
|
42
62
|
} // namespace grpc_core
|
43
63
|
|
@@ -90,9 +90,10 @@ class SingleSetRefCountedPtr {
|
|
90
90
|
|
91
91
|
bool is_set() const { return p_.is_set(); }
|
92
92
|
|
93
|
-
|
93
|
+
template <typename... Args>
|
94
|
+
RefCountedPtr<T> GetOrCreate(Args&&... args) {
|
94
95
|
T* p = Get();
|
95
|
-
if (p == nullptr) p = Set(MakeRefCounted<T>());
|
96
|
+
if (p == nullptr) p = Set(MakeRefCounted<T>(std::forward<Args>(args)...));
|
96
97
|
return p->Ref();
|
97
98
|
}
|
98
99
|
T* Get() const { return p_.Get(); }
|
@@ -105,13 +106,15 @@ class SingleSetRefCountedPtr {
|
|
105
106
|
|
106
107
|
T& operator*() const { return *Get(); }
|
107
108
|
|
109
|
+
T* Set(RefCountedPtr<T> p) { return p_.Set(p.release()); }
|
110
|
+
|
111
|
+
void Reset() { p_.Reset(); }
|
112
|
+
|
108
113
|
private:
|
109
114
|
struct UnrefDeleter {
|
110
115
|
void operator()(T* p) { p->Unref(); }
|
111
116
|
};
|
112
117
|
|
113
|
-
T* Set(RefCountedPtr<T> p) { return p_.Set(p.release()); }
|
114
|
-
|
115
118
|
SingleSetPtr<T, UnrefDeleter> p_;
|
116
119
|
};
|
117
120
|
|
data/src/core/util/upb_utils.h
CHANGED
@@ -17,10 +17,15 @@
|
|
17
17
|
#ifndef GRPC_SRC_CORE_UTIL_UPB_UTILS_H
|
18
18
|
#define GRPC_SRC_CORE_UTIL_UPB_UTILS_H
|
19
19
|
|
20
|
+
#include <grpc/support/time.h>
|
21
|
+
|
20
22
|
#include <string>
|
21
23
|
|
22
24
|
#include "absl/strings/string_view.h"
|
25
|
+
#include "google/protobuf/duration.upb.h"
|
26
|
+
#include "google/protobuf/timestamp.upb.h"
|
23
27
|
#include "upb/base/string_view.h"
|
28
|
+
#include "upb/mem/arena.h"
|
24
29
|
|
25
30
|
namespace grpc_core {
|
26
31
|
|
@@ -30,6 +35,17 @@ inline upb_StringView StdStringToUpbString(const T& str) {
|
|
30
35
|
return upb_StringView_FromDataAndSize(str.data(), str.size());
|
31
36
|
}
|
32
37
|
|
38
|
+
inline upb_StringView StdStringToUpbString(const char* str) {
|
39
|
+
return upb_StringView_FromDataAndSize(str, strlen(str));
|
40
|
+
}
|
41
|
+
|
42
|
+
template <typename T>
|
43
|
+
inline upb_StringView CopyStdStringToUpbString(const T& str, upb_Arena* arena) {
|
44
|
+
char* copy = static_cast<char*>(upb_Arena_Malloc(arena, str.size()));
|
45
|
+
memcpy(copy, str.data(), str.size());
|
46
|
+
return upb_StringView_FromDataAndSize(copy, str.size());
|
47
|
+
}
|
48
|
+
|
33
49
|
inline absl::string_view UpbStringToAbsl(const upb_StringView& str) {
|
34
50
|
return absl::string_view(str.data, str.size);
|
35
51
|
}
|
@@ -38,6 +54,32 @@ inline std::string UpbStringToStdString(const upb_StringView& str) {
|
|
38
54
|
return std::string(str.data, str.size);
|
39
55
|
}
|
40
56
|
|
57
|
+
inline void TimestampToUpb(gpr_timespec ts, google_protobuf_Timestamp* proto) {
|
58
|
+
auto t = gpr_convert_clock_type(ts, GPR_CLOCK_REALTIME);
|
59
|
+
google_protobuf_Timestamp_set_seconds(proto, t.tv_sec);
|
60
|
+
google_protobuf_Timestamp_set_nanos(proto, t.tv_nsec);
|
61
|
+
}
|
62
|
+
|
63
|
+
inline void UpbToTimestamp(const google_protobuf_Timestamp* proto,
|
64
|
+
gpr_timespec* ts) {
|
65
|
+
ts->clock_type = GPR_CLOCK_REALTIME;
|
66
|
+
ts->tv_sec = google_protobuf_Timestamp_seconds(proto);
|
67
|
+
ts->tv_nsec = google_protobuf_Timestamp_nanos(proto);
|
68
|
+
}
|
69
|
+
|
70
|
+
inline void DurationToUpb(gpr_timespec ts, google_protobuf_Duration* proto) {
|
71
|
+
auto t = gpr_convert_clock_type(ts, GPR_TIMESPAN);
|
72
|
+
google_protobuf_Duration_set_seconds(proto, t.tv_sec);
|
73
|
+
google_protobuf_Duration_set_nanos(proto, t.tv_nsec);
|
74
|
+
}
|
75
|
+
|
76
|
+
inline void UpbToTimestamp(const google_protobuf_Duration* proto,
|
77
|
+
gpr_timespec* ts) {
|
78
|
+
ts->clock_type = GPR_TIMESPAN;
|
79
|
+
ts->tv_sec = google_protobuf_Duration_seconds(proto);
|
80
|
+
ts->tv_nsec = google_protobuf_Duration_nanos(proto);
|
81
|
+
}
|
82
|
+
|
41
83
|
} // namespace grpc_core
|
42
84
|
|
43
85
|
#endif // GRPC_SRC_CORE_UTIL_UPB_UTILS_H
|
data/src/core/util/uri.cc
CHANGED
@@ -259,7 +259,7 @@ absl::StatusOr<URI> URI::Parse(absl::string_view uri_text) {
|
|
259
259
|
std::string host_port;
|
260
260
|
if (absl::ConsumePrefix(&remaining, "//")) {
|
261
261
|
offset = remaining.find_first_of("/?#");
|
262
|
-
absl::string_view encoded_authority =
|
262
|
+
absl::string_view encoded_authority = remaining.substr(0, offset);
|
263
263
|
// parse user_info and host_port
|
264
264
|
absl::string_view encoded_user_info;
|
265
265
|
absl::string_view encoded_host_port;
|
@@ -404,7 +404,8 @@ std::string URI::ToString() const {
|
|
404
404
|
std::vector<std::string> parts = {PercentEncode(scheme_, IsSchemeChar), ":"};
|
405
405
|
// If path starts with '//' we need to encode the authority to ensure that
|
406
406
|
// we can round-trip the URI through a parse/encode/parse loop.
|
407
|
-
if (!
|
407
|
+
if (!user_info_.empty() || !host_port_.empty() ||
|
408
|
+
absl::StartsWith(path_, "//")) {
|
408
409
|
parts.emplace_back("//");
|
409
410
|
if (!user_info_.empty()) {
|
410
411
|
parts.emplace_back(PercentEncode(user_info_, IsUserInfoChar));
|
data/src/core/util/useful.h
CHANGED
@@ -19,6 +19,7 @@
|
|
19
19
|
|
20
20
|
#include <cstddef>
|
21
21
|
#include <limits>
|
22
|
+
#include <type_traits>
|
22
23
|
#include <variant>
|
23
24
|
|
24
25
|
#include "absl/log/check.h"
|
@@ -114,8 +115,58 @@ inline T SaturatingAdd(T a, T b) {
|
|
114
115
|
return a + b;
|
115
116
|
}
|
116
117
|
|
117
|
-
|
118
|
-
|
118
|
+
template <
|
119
|
+
typename T,
|
120
|
+
std::enable_if_t<std::is_integral_v<T> && std::is_unsigned_v<T>, int> = 0>
|
121
|
+
inline T SaturatingMul(T a, T b) {
|
122
|
+
if (a == 0 || b == 0) return 0;
|
123
|
+
if (b > std::numeric_limits<T>::max() / a) {
|
124
|
+
return std::numeric_limits<T>::max();
|
125
|
+
}
|
126
|
+
return a * b;
|
127
|
+
}
|
128
|
+
|
129
|
+
template <
|
130
|
+
typename T,
|
131
|
+
std::enable_if_t<std::is_integral_v<T> && std::is_signed_v<T>, int> = 0>
|
132
|
+
inline T SaturatingMul(T a, T b) {
|
133
|
+
if (a == 0 || b == 0) return 0;
|
134
|
+
if (a == std::numeric_limits<T>::min()) {
|
135
|
+
// negation is ub
|
136
|
+
if (b == -1) return std::numeric_limits<T>::max();
|
137
|
+
if (b == 1) return std::numeric_limits<T>::min();
|
138
|
+
if (b > 1) return std::numeric_limits<T>::min();
|
139
|
+
return std::numeric_limits<T>::max();
|
140
|
+
}
|
141
|
+
if (b == std::numeric_limits<T>::min()) {
|
142
|
+
if (a == -1) return std::numeric_limits<T>::max();
|
143
|
+
if (a == 1) return std::numeric_limits<T>::min();
|
144
|
+
if (a > 1) return std::numeric_limits<T>::min();
|
145
|
+
return std::numeric_limits<T>::max();
|
146
|
+
}
|
147
|
+
if (a > 0 && b > 0) {
|
148
|
+
// both positive
|
149
|
+
if (a > std::numeric_limits<T>::max() / b) {
|
150
|
+
return std::numeric_limits<T>::max();
|
151
|
+
}
|
152
|
+
} else if (a < 0 && b < 0) {
|
153
|
+
// both negative
|
154
|
+
if (a < std::numeric_limits<T>::max() / b) {
|
155
|
+
return std::numeric_limits<T>::max();
|
156
|
+
}
|
157
|
+
} else {
|
158
|
+
// one positive, one negative
|
159
|
+
if (a > 0) {
|
160
|
+
if (b < std::numeric_limits<T>::min() / a) {
|
161
|
+
return std::numeric_limits<T>::min();
|
162
|
+
}
|
163
|
+
} else {
|
164
|
+
if (a < std::numeric_limits<T>::min() / b) {
|
165
|
+
return std::numeric_limits<T>::min();
|
166
|
+
}
|
167
|
+
}
|
168
|
+
}
|
169
|
+
return a * b;
|
119
170
|
}
|
120
171
|
|
121
172
|
inline uint32_t RoundUpToPowerOf2(uint32_t v) {
|
@@ -146,6 +197,97 @@ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline uint64_t LowestOneBit(uint64_t x) {
|
|
146
197
|
return x & -x;
|
147
198
|
}
|
148
199
|
|
200
|
+
namespace useful_detail {
|
201
|
+
|
202
|
+
// Constexpr implementation of std::log for base e.
|
203
|
+
// This is a simple implementation using a Taylor series expansion and may not
|
204
|
+
// be as accurate as std::log from <cmath>. It is intended for use in constexpr
|
205
|
+
// contexts.
|
206
|
+
// It uses the identity log(y) = 2 * atanh((y-1)/(y+1))
|
207
|
+
// where atanh(x) = x + x^3/3 + x^5/5 + ...
|
208
|
+
constexpr double ConstexprLog(double y) {
|
209
|
+
if (y < 0) {
|
210
|
+
return std::numeric_limits<double>::quiet_NaN();
|
211
|
+
}
|
212
|
+
if (y == 0) {
|
213
|
+
return -std::numeric_limits<double>::infinity();
|
214
|
+
}
|
215
|
+
if (y == 1) {
|
216
|
+
return 0.0;
|
217
|
+
}
|
218
|
+
// Bring y into the range [1, 2) to improve convergence.
|
219
|
+
// log(y) = log(y / 2^k) + k*log(2)
|
220
|
+
int k = 0;
|
221
|
+
while (y > 2.0) {
|
222
|
+
y /= 2.0;
|
223
|
+
k++;
|
224
|
+
}
|
225
|
+
while (y < 1.0) {
|
226
|
+
y *= 2.0;
|
227
|
+
k--;
|
228
|
+
}
|
229
|
+
// Now y is in [1, 2).
|
230
|
+
// x = (y-1)/(y+1) is in [0, 1/3).
|
231
|
+
// The series will converge quickly.
|
232
|
+
double x = (y - 1) / (y + 1);
|
233
|
+
double x2 = x * x;
|
234
|
+
double term = x;
|
235
|
+
double sum = term;
|
236
|
+
for (int i = 1; i < 100; ++i) {
|
237
|
+
term *= x2;
|
238
|
+
double next_sum = sum + term / (2 * i + 1);
|
239
|
+
if (next_sum == sum) break;
|
240
|
+
sum = next_sum;
|
241
|
+
}
|
242
|
+
constexpr double kLog2 = 0.693147180559945309417;
|
243
|
+
return 2 * sum + k * kLog2;
|
244
|
+
}
|
245
|
+
|
246
|
+
// Constexpr implementation of std::exp.
|
247
|
+
// This is a simple implementation using a Taylor series expansion and may not
|
248
|
+
// be as accurate as std::exp from <cmath>. It is intended for use in constexpr
|
249
|
+
// contexts.
|
250
|
+
// It uses exp(x) = 1 + x + x^2/2! + x^3/3! + ...
|
251
|
+
// For better convergence, we use range reduction via exp(x) = (exp(x/2))^2.
|
252
|
+
constexpr double ConstexprExp(double x) {
|
253
|
+
if (x > 2.0 || x < -2.0) {
|
254
|
+
const double half = ConstexprExp(x / 2.0);
|
255
|
+
return half * half;
|
256
|
+
}
|
257
|
+
double sum = 1.0;
|
258
|
+
double term = 1.0;
|
259
|
+
for (int i = 1; i < 30; ++i) {
|
260
|
+
term *= x / i;
|
261
|
+
double next_sum = sum + term;
|
262
|
+
if (next_sum == sum) break;
|
263
|
+
sum = next_sum;
|
264
|
+
}
|
265
|
+
return sum;
|
266
|
+
}
|
267
|
+
|
268
|
+
} // namespace useful_detail
|
269
|
+
|
270
|
+
// Constexpr implementation of std::pow.
|
271
|
+
// This is a simple implementation and may not be as accurate as std::pow from
|
272
|
+
// <cmath>. It is intended for use in constexpr contexts.
|
273
|
+
// Fuzztests exist in useful_fuzztest.cc to test that the constexpr and
|
274
|
+
// non-constexpr implementations are within an acceptable error bound.
|
275
|
+
// Replace with std::pow when we move to C++26.
|
276
|
+
constexpr double ConstexprPow(double base, double exponent) {
|
277
|
+
// For simplicity, only handle non-negative bases.
|
278
|
+
// std::pow has more complex rules for negative bases.
|
279
|
+
if (base < 0) return std::numeric_limits<double>::quiet_NaN();
|
280
|
+
if (base == 0) {
|
281
|
+
if (exponent > 0) return 0.0;
|
282
|
+
if (exponent == 0) return 1.0;
|
283
|
+
return std::numeric_limits<double>::infinity();
|
284
|
+
}
|
285
|
+
if (exponent == 0.0) return 1.0;
|
286
|
+
if (exponent == 1.0) return base;
|
287
|
+
return useful_detail::ConstexprExp(exponent *
|
288
|
+
useful_detail::ConstexprLog(base));
|
289
|
+
}
|
290
|
+
|
149
291
|
} // namespace grpc_core
|
150
292
|
|
151
293
|
#define GPR_ARRAY_SIZE(array) (sizeof(array) / sizeof(*(array)))
|
@@ -0,0 +1,31 @@
|
|
1
|
+
// Copyright 2025 The 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/util/wait_for_single_owner.h"
|
16
|
+
|
17
|
+
#include "src/core/util/no_destruct.h"
|
18
|
+
|
19
|
+
namespace grpc_core {
|
20
|
+
|
21
|
+
NoDestruct<absl::AnyInvocable<void()>> cb_{nullptr};
|
22
|
+
|
23
|
+
void SetWaitForSingleOwnerStalledCallback(absl::AnyInvocable<void()> cb) {
|
24
|
+
*cb_ = std::move(cb);
|
25
|
+
}
|
26
|
+
|
27
|
+
void WaitForSingleOwnerStalled() {
|
28
|
+
if (*cb_ != nullptr) (*cb_)();
|
29
|
+
}
|
30
|
+
|
31
|
+
} // namespace grpc_core
|