grpc 1.73.0 → 1.74.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +38 -17
- data/include/grpc/create_channel_from_endpoint.h +54 -0
- data/include/grpc/credentials.h +11 -5
- data/include/grpc/event_engine/event_engine.h +74 -17
- data/include/grpc/grpc_posix.h +20 -1
- data/include/grpc/impl/channel_arg_names.h +2 -4
- data/include/grpc/module.modulemap +1 -0
- data/include/grpc/support/json.h +24 -0
- data/src/core/call/interception_chain.h +7 -11
- data/src/core/channelz/channel_trace.cc +213 -115
- data/src/core/channelz/channel_trace.h +380 -86
- data/src/core/channelz/channelz.cc +270 -181
- data/src/core/channelz/channelz.h +168 -55
- data/src/core/channelz/channelz_registry.cc +2 -1
- data/src/core/channelz/channelz_registry.h +24 -0
- data/src/core/channelz/property_list.cc +357 -0
- data/src/core/channelz/property_list.h +202 -0
- data/src/core/channelz/ztrace_collector.h +3 -2
- data/src/core/client_channel/backup_poller.cc +17 -2
- data/src/core/client_channel/client_channel.cc +17 -28
- data/src/core/client_channel/client_channel_filter.cc +19 -29
- data/src/core/client_channel/config_selector.h +8 -2
- data/src/core/client_channel/dynamic_filters.cc +5 -6
- data/src/core/client_channel/dynamic_filters.h +1 -1
- data/src/core/client_channel/global_subchannel_pool.cc +4 -1
- data/src/core/client_channel/retry_filter.cc +21 -27
- data/src/core/client_channel/retry_filter.h +10 -7
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
- data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
- data/src/core/client_channel/retry_interceptor.cc +30 -44
- data/src/core/client_channel/retry_interceptor.h +18 -17
- data/src/core/client_channel/retry_throttle.cc +46 -61
- data/src/core/client_channel/retry_throttle.h +17 -39
- data/src/core/client_channel/subchannel.cc +43 -19
- data/src/core/client_channel/subchannel.h +8 -0
- data/src/core/config/config_vars.cc +2 -0
- data/src/core/config/core_configuration.cc +1 -0
- data/src/core/config/core_configuration.h +11 -0
- data/src/core/credentials/call/call_creds_registry.h +125 -0
- data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
- data/src/core/credentials/call/jwt_util.cc +70 -0
- data/src/core/credentials/call/jwt_util.h +32 -0
- data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +0 -1
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
- data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
- data/src/core/ext/filters/http/client_authority_filter.cc +2 -4
- data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
- data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +162 -115
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
- data/src/core/ext/transport/chttp2/transport/flow_control.h +22 -17
- data/src/core/ext/transport/chttp2/transport/frame.cc +10 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +299 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1017 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +593 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +19 -22
- data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
- data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
- data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +43 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +65 -0
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
- data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
- data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -4
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +151 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +180 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +37 -11
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +984 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +226 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +135 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
- data/src/core/filter/auth/auth_filters.h +0 -25
- data/src/core/filter/auth/client_auth_filter.cc +0 -118
- data/src/core/filter/filter_args.h +9 -23
- data/src/core/handshaker/handshaker.cc +23 -14
- data/src/core/handshaker/handshaker.h +3 -0
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -5
- data/src/core/handshaker/security/secure_endpoint.cc +70 -25
- data/src/core/handshaker/security/security_handshaker.cc +4 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
- data/src/core/lib/channel/channel_args.cc +15 -0
- data/src/core/lib/channel/channel_args.h +3 -0
- data/src/core/lib/channel/channel_stack.cc +22 -23
- data/src/core/lib/channel/channel_stack.h +9 -7
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
- data/src/core/lib/channel/promise_based_filter.h +5 -5
- data/src/core/lib/debug/trace_impl.h +0 -1
- data/src/core/lib/event_engine/ares_resolver.cc +165 -46
- data/src/core/lib/event_engine/ares_resolver.h +48 -2
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -4
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -6
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
- data/src/core/lib/event_engine/event_engine.cc +7 -0
- data/src/core/lib/event_engine/extensions/channelz.h +10 -6
- data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +130 -162
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +11 -15
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +75 -117
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -9
- data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -15
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +0 -18
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +29 -19
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +145 -92
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +333 -116
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +61 -18
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +45 -37
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +10 -170
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
- data/src/core/lib/event_engine/shim.cc +9 -0
- data/src/core/lib/event_engine/shim.h +3 -0
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +4 -0
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
- data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
- data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
- data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
- data/src/core/lib/experiments/experiments.cc +45 -93
- data/src/core/lib/experiments/experiments.h +21 -51
- data/src/core/lib/iomgr/endpoint.cc +4 -3
- data/src/core/lib/iomgr/endpoint.h +7 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
- data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
- data/src/core/lib/iomgr/tcp_posix.cc +12 -6
- data/src/core/lib/iomgr/tcp_windows.cc +3 -2
- data/src/core/lib/promise/activity.h +1 -0
- data/src/core/lib/promise/arena_promise.h +23 -7
- data/src/core/lib/promise/detail/promise_factory.h +10 -0
- data/src/core/lib/promise/detail/promise_like.h +118 -11
- data/src/core/lib/promise/detail/promise_variant.h +50 -0
- data/src/core/lib/promise/detail/seq_state.h +687 -548
- data/src/core/lib/promise/if.h +20 -0
- data/src/core/lib/promise/inter_activity_latch.h +147 -0
- data/src/core/lib/promise/inter_activity_mutex.h +547 -0
- data/src/core/lib/promise/loop.h +65 -3
- data/src/core/lib/promise/map.h +24 -0
- data/src/core/lib/promise/match_promise.h +103 -0
- data/src/core/lib/promise/mpsc.cc +425 -0
- data/src/core/lib/promise/mpsc.h +490 -0
- data/src/core/lib/promise/party.cc +50 -1
- data/src/core/lib/promise/party.h +66 -1
- data/src/core/lib/promise/race.h +31 -0
- data/src/core/lib/promise/seq.h +4 -1
- data/src/core/lib/promise/status_flag.h +7 -0
- data/src/core/lib/promise/try_seq.h +4 -1
- data/src/core/lib/promise/wait_set.cc +28 -0
- data/src/core/lib/promise/wait_set.h +86 -0
- data/src/core/lib/resource_quota/arena.h +19 -0
- data/src/core/lib/slice/slice.h +5 -0
- data/src/core/lib/surface/channel_create.cc +88 -13
- data/src/core/lib/surface/channel_create.h +4 -0
- data/src/core/lib/surface/channel_init.cc +164 -47
- data/src/core/lib/surface/channel_init.h +64 -1
- data/src/core/lib/surface/filter_stack_call.cc +18 -9
- data/src/core/lib/surface/init.cc +6 -15
- data/src/core/lib/surface/legacy_channel.cc +3 -5
- data/src/core/lib/surface/legacy_channel.h +3 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.cc +110 -0
- data/src/core/lib/transport/promise_endpoint.h +307 -0
- data/src/core/load_balancing/child_policy_handler.cc +2 -4
- data/src/core/load_balancing/delegating_helper.h +2 -3
- data/src/core/load_balancing/health_check_client.cc +1 -5
- data/src/core/load_balancing/lb_policy.h +1 -3
- data/src/core/load_balancing/oob_backend_metric.cc +1 -5
- data/src/core/load_balancing/pick_first/pick_first.cc +3 -0
- data/src/core/load_balancing/xds/cds.cc +10 -1
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/core/resolver/xds/xds_config.cc +6 -3
- data/src/core/resolver/xds/xds_config.h +9 -4
- data/src/core/resolver/xds/xds_dependency_manager.cc +21 -6
- data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
- data/src/core/resolver/xds/xds_resolver.cc +31 -11
- data/src/core/server/server.cc +83 -12
- data/src/core/server/server.h +21 -2
- data/src/core/server/xds_server_config_fetcher.cc +63 -25
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_impl.h +1 -1
- data/src/core/telemetry/context_list_entry.cc +38 -0
- data/src/core/telemetry/context_list_entry.h +42 -12
- data/src/core/telemetry/stats_data.cc +233 -207
- data/src/core/telemetry/stats_data.h +250 -153
- data/src/core/telemetry/tcp_tracer.h +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
- data/src/core/tsi/fake_transport_security.cc +17 -0
- data/src/core/tsi/ssl_transport_security.cc +2 -0
- data/src/core/tsi/transport_security_grpc.cc +8 -0
- data/src/core/tsi/transport_security_grpc.h +15 -0
- data/src/core/util/backoff.cc +1 -5
- data/src/core/util/backoff.h +1 -0
- data/src/core/util/down_cast.h +1 -1
- data/src/core/util/function_signature.h +15 -1
- data/src/core/util/http_client/httpcli.cc +12 -5
- data/src/core/util/http_client/httpcli.h +4 -1
- data/src/core/util/latent_see.h +8 -5
- data/src/core/util/log.cc +4 -0
- data/src/core/util/memory_usage.h +268 -0
- data/src/core/util/per_cpu.cc +2 -0
- data/src/core/util/per_cpu.h +7 -0
- data/src/core/util/shared_bit_gen.h +20 -0
- data/src/core/util/single_set_ptr.h +2 -2
- data/src/core/util/upb_utils.h +42 -0
- data/src/core/util/uri.cc +3 -2
- data/src/core/util/useful.h +53 -2
- data/src/core/util/wait_for_single_owner.cc +31 -0
- data/src/core/util/wait_for_single_owner.h +24 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
- data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
- data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
- data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
- data/src/core/xds/grpc/xds_http_filter.h +7 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
- data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
- data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
- data/src/core/xds/grpc/xds_server_grpc.h +10 -2
- data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
- data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
- data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
- data/src/core/xds/xds_client/xds_client.cc +26 -5
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -8
- data/src/ruby/ext/grpc/rb_channel.c +72 -568
- data/src/ruby/ext/grpc/rb_channel.h +0 -3
- data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
- data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
- data/src/ruby/ext/grpc/rb_grpc.c +9 -5
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/ext/grpc/rb_loader.c +0 -4
- data/src/ruby/ext/grpc/rb_server.c +31 -50
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/core_spec.rb +22 -0
- data/src/ruby/spec/generic/active_call_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
- data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
- data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
- data/third_party/abseil-cpp/absl/base/config.h +20 -129
- data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
- data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
- data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
- data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
- data/third_party/abseil-cpp/absl/base/options.h +3 -80
- data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
- data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
- data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
- data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
- data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
- data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
- data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
- data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
- data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
- data/third_party/abseil-cpp/absl/log/check.h +2 -1
- data/third_party/abseil-cpp/absl/log/globals.h +4 -5
- data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
- data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
- data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
- data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
- data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
- data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
- data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
- data/third_party/abseil-cpp/absl/log/log.h +48 -35
- data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
- data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
- data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
- data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- data/third_party/abseil-cpp/absl/random/random.h +88 -53
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
- data/third_party/abseil-cpp/absl/status/status.cc +4 -8
- data/third_party/abseil-cpp/absl/status/status.h +8 -8
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
- data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
- data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
- data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
- data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
- data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
- data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
- data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
- data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
- data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
- data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
- data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
- data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
- data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
- data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
- data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
- data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- data/third_party/abseil-cpp/absl/time/time.h +20 -15
- data/third_party/abseil-cpp/absl/types/optional.h +7 -747
- data/third_party/abseil-cpp/absl/types/span.h +13 -11
- data/third_party/abseil-cpp/absl/types/variant.h +5 -784
- data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
- metadata +72 -20
- data/src/core/lib/event_engine/forkable.cc +0 -105
- data/src/core/lib/event_engine/forkable.h +0 -67
- data/src/core/lib/iomgr/python_util.h +0 -46
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
- data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
- data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
@@ -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_INNER_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_INNER_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 {
|
@@ -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/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() {}
|
data/src/core/lib/slice/slice.h
CHANGED
@@ -294,6 +294,11 @@ class GPR_MSVC_EMPTY_BASE_CLASS_WORKAROUND MutableSlice
|
|
294
294
|
return MutableSlice(NoCheck{}, grpc_slice_split_head(c_slice_ptr(), n));
|
295
295
|
}
|
296
296
|
|
297
|
+
MutableSlice TakeFirstNoInline(size_t n) {
|
298
|
+
return MutableSlice(NoCheck{},
|
299
|
+
grpc_slice_split_head_no_inline(c_slice_ptr(), n));
|
300
|
+
}
|
301
|
+
|
297
302
|
// Iterator access to the underlying bytes
|
298
303
|
uint8_t* begin() { return mutable_data(); }
|
299
304
|
uint8_t* end() { return mutable_data() + size(); }
|
@@ -16,6 +16,7 @@
|
|
16
16
|
|
17
17
|
#include "src/core/lib/surface/channel_create.h"
|
18
18
|
|
19
|
+
#include <grpc/create_channel_from_endpoint.h>
|
19
20
|
#include <grpc/grpc.h>
|
20
21
|
#include <grpc/impl/channel_arg_names.h>
|
21
22
|
#include <grpc/support/port_platform.h>
|
@@ -30,12 +31,19 @@
|
|
30
31
|
#include "src/core/credentials/transport/transport_credentials.h"
|
31
32
|
#include "src/core/lib/channel/channel_args.h"
|
32
33
|
#include "src/core/lib/channel/channel_args_preconditioning.h"
|
34
|
+
#include "src/core/lib/event_engine/channel_args_endpoint_config.h"
|
35
|
+
#include "src/core/lib/event_engine/endpoint_channel_arg_wrapper.h"
|
36
|
+
#include "src/core/lib/event_engine/extensions/supports_fd.h"
|
37
|
+
#include "src/core/lib/event_engine/query_extensions.h"
|
38
|
+
#include "src/core/lib/event_engine/resolved_address_internal.h"
|
39
|
+
#include "src/core/lib/event_engine/tcp_socket_utils.h"
|
33
40
|
#include "src/core/lib/experiments/experiments.h"
|
34
41
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
35
42
|
#include "src/core/lib/surface/channel.h"
|
36
43
|
#include "src/core/lib/surface/channel_stack_type.h"
|
37
44
|
#include "src/core/lib/surface/lame_client.h"
|
38
45
|
#include "src/core/lib/surface/legacy_channel.h"
|
46
|
+
#include "src/core/resolver/fake/fake_resolver.h"
|
39
47
|
#include "src/core/telemetry/stats.h"
|
40
48
|
#include "src/core/telemetry/stats_data.h"
|
41
49
|
#include "src/core/transport/endpoint_transport.h"
|
@@ -75,9 +83,7 @@ absl::StatusOr<RefCountedPtr<Channel>> ChannelCreate(
|
|
75
83
|
std::string channelz_node_target{target.empty() ? "unknown" : target};
|
76
84
|
auto channelz_node = MakeRefCounted<channelz::ChannelNode>(
|
77
85
|
channelz_node_target, channel_tracer_max_memory, is_internal_channel);
|
78
|
-
channelz_node
|
79
|
-
channelz::ChannelTrace::Severity::Info,
|
80
|
-
grpc_slice_from_static_string("Channel created"));
|
86
|
+
GRPC_CHANNELZ_LOG(channelz_node) << "Channel created";
|
81
87
|
channelz_node->SetChannelArgs(args);
|
82
88
|
// Add channelz node to channel args.
|
83
89
|
// We remove the is_internal_channel arg, since we no longer need it.
|
@@ -105,25 +111,24 @@ absl::StatusOr<RefCountedPtr<Channel>> ChannelCreate(
|
|
105
111
|
}
|
106
112
|
}
|
107
113
|
|
108
|
-
namespace {
|
109
114
|
absl::StatusOr<grpc_channel*> CreateClientEndpointChannel(
|
110
115
|
const char* target, grpc_channel_credentials* creds,
|
111
|
-
const
|
116
|
+
const ChannelArgs& args) {
|
112
117
|
const auto& c = CoreConfiguration::Get();
|
113
118
|
if (target == nullptr) {
|
114
119
|
return absl::InternalError("channel target is NULL");
|
115
120
|
}
|
116
121
|
if (creds == nullptr) return absl::InternalError("No credentials provided");
|
117
|
-
auto
|
118
|
-
.PreconditionChannelArgs(c_args)
|
119
|
-
.SetObject(creds->Ref()));
|
122
|
+
auto final_args = creds->update_arguments(args.SetObject(creds->Ref()));
|
120
123
|
std::vector<absl::string_view> transport_preferences = absl::StrSplit(
|
121
|
-
|
124
|
+
final_args.GetString(GRPC_ARG_PREFERRED_TRANSPORT_PROTOCOLS)
|
125
|
+
.value_or("h2"),
|
122
126
|
',');
|
123
127
|
if (transport_preferences.size() != 1) {
|
124
128
|
return absl::InternalError(absl::StrCat(
|
125
129
|
"Only one preferred transport name is currently supported: requested='",
|
126
|
-
*
|
130
|
+
*final_args.GetOwnedString(GRPC_ARG_PREFERRED_TRANSPORT_PROTOCOLS),
|
131
|
+
"'"));
|
127
132
|
}
|
128
133
|
auto* transport =
|
129
134
|
c.endpoint_transport_registry().GetTransport(transport_preferences[0]);
|
@@ -131,10 +136,77 @@ absl::StatusOr<grpc_channel*> CreateClientEndpointChannel(
|
|
131
136
|
return absl::InternalError(
|
132
137
|
absl::StrCat("Unknown transport '", transport_preferences[0], "'"));
|
133
138
|
}
|
134
|
-
return transport->ChannelCreate(target,
|
139
|
+
return transport->ChannelCreate(target, final_args);
|
135
140
|
}
|
136
141
|
|
137
|
-
|
142
|
+
namespace experimental {
|
143
|
+
|
144
|
+
using ::grpc_event_engine::experimental::ChannelArgsEndpointConfig;
|
145
|
+
using ::grpc_event_engine::experimental::EndpointChannelArgWrapper;
|
146
|
+
using ::grpc_event_engine::experimental::EventEngine;
|
147
|
+
using ::grpc_event_engine::experimental::EventEngineSupportsFdExtension;
|
148
|
+
using ::grpc_event_engine::experimental::QueryExtension;
|
149
|
+
|
150
|
+
grpc_channel* CreateChannelFromEndpoint(
|
151
|
+
std::unique_ptr<EventEngine::Endpoint> endpoint,
|
152
|
+
grpc_channel_credentials* creds, const grpc_channel_args* args) {
|
153
|
+
auto address_str = ResolvedAddressToString(endpoint->GetPeerAddress());
|
154
|
+
// TODO(rishesh@) once https://github.com/grpc/grpc/issues/34172 is
|
155
|
+
// resolved, we should use a different address that will be less confusing for
|
156
|
+
// debuggability.
|
157
|
+
grpc_resolved_address address =
|
158
|
+
CreateGRPCResolvedAddress(endpoint->GetPeerAddress());
|
159
|
+
auto response_generator = MakeRefCounted<FakeResolverResponseGenerator>();
|
160
|
+
ChannelArgs channel_args =
|
161
|
+
CoreConfiguration::Get()
|
162
|
+
.channel_args_preconditioning()
|
163
|
+
.PreconditionChannelArgs(args)
|
164
|
+
.SetObject(
|
165
|
+
MakeRefCounted<EndpointChannelArgWrapper>(std::move(endpoint)));
|
166
|
+
if (address_str.ok() && !address_str->empty()) {
|
167
|
+
channel_args = channel_args.SetIfUnset(
|
168
|
+
GRPC_ARG_DEFAULT_AUTHORITY, URI::PercentEncodeAuthority(*address_str));
|
169
|
+
}
|
170
|
+
Resolver::Result result;
|
171
|
+
result.args = channel_args;
|
172
|
+
result.addresses = EndpointAddressesList({EndpointAddresses{address, {}}});
|
173
|
+
response_generator->SetResponseAsync(std::move(result));
|
174
|
+
auto r = CreateClientEndpointChannel(
|
175
|
+
"fake:created-from-endpoint", creds,
|
176
|
+
channel_args.SetObject(std::move(response_generator)));
|
177
|
+
if (!r.ok()) {
|
178
|
+
return grpc_lame_client_channel_create(
|
179
|
+
"fake:created-from-endpoint",
|
180
|
+
static_cast<grpc_status_code>(r.status().code()),
|
181
|
+
absl::StrCat(
|
182
|
+
"Failed to create channel to 'fake:created-from-endpoint':",
|
183
|
+
r.status().message())
|
184
|
+
.c_str());
|
185
|
+
}
|
186
|
+
return *r;
|
187
|
+
}
|
188
|
+
|
189
|
+
grpc_channel* CreateChannelFromFd(int fd, grpc_channel_credentials* creds,
|
190
|
+
const grpc_channel_args* args) {
|
191
|
+
ChannelArgs channel_args = CoreConfiguration::Get()
|
192
|
+
.channel_args_preconditioning()
|
193
|
+
.PreconditionChannelArgs(args);
|
194
|
+
EventEngineSupportsFdExtension* supports_fd =
|
195
|
+
QueryExtension<EventEngineSupportsFdExtension>(
|
196
|
+
channel_args.GetObjectRef<EventEngine>().get());
|
197
|
+
if (supports_fd == nullptr) {
|
198
|
+
return grpc_lame_client_channel_create("fake:created-from-endpoint",
|
199
|
+
GRPC_STATUS_INTERNAL,
|
200
|
+
"Failed to create client channel");
|
201
|
+
}
|
202
|
+
std::unique_ptr<EventEngine::Endpoint> endpoint =
|
203
|
+
supports_fd->CreateEndpointFromFd(
|
204
|
+
fd, ChannelArgsEndpointConfig(channel_args));
|
205
|
+
return CreateChannelFromEndpoint(std::move(endpoint), creds,
|
206
|
+
channel_args.ToC().get());
|
207
|
+
}
|
208
|
+
} // namespace experimental
|
209
|
+
|
138
210
|
} // namespace grpc_core
|
139
211
|
|
140
212
|
grpc_channel* grpc_lame_client_channel_create(const char* target,
|
@@ -173,7 +245,10 @@ grpc_channel* grpc_channel_create(const char* target,
|
|
173
245
|
GRPC_TRACE_LOG(api, INFO)
|
174
246
|
<< "grpc_channel_create(target=" << target << ", creds=" << (void*)creds
|
175
247
|
<< ", args=" << (void*)c_args << ")";
|
176
|
-
auto
|
248
|
+
const auto& c = grpc_core::CoreConfiguration::Get();
|
249
|
+
grpc_core::ChannelArgs channel_args =
|
250
|
+
c.channel_args_preconditioning().PreconditionChannelArgs(c_args);
|
251
|
+
auto r = grpc_core::CreateClientEndpointChannel(target, creds, channel_args);
|
177
252
|
if (!r.ok()) {
|
178
253
|
return grpc_lame_client_channel_create(
|
179
254
|
target, static_cast<grpc_status_code>(r.status().code()),
|
@@ -37,6 +37,10 @@ absl::StatusOr<RefCountedPtr<Channel>> ChannelCreate(
|
|
37
37
|
std::string target, ChannelArgs args,
|
38
38
|
grpc_channel_stack_type channel_stack_type, Transport* optional_transport);
|
39
39
|
|
40
|
+
absl::StatusOr<grpc_channel*> CreateClientEndpointChannel(
|
41
|
+
const char* target, grpc_channel_credentials* creds,
|
42
|
+
const ChannelArgs& args);
|
43
|
+
|
40
44
|
} // namespace grpc_core
|
41
45
|
|
42
46
|
#endif // GRPC_SRC_CORE_LIB_SURFACE_CHANNEL_CREATE_H
|