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
@@ -38,6 +38,7 @@
|
|
38
38
|
#include "absl/log/log.h"
|
39
39
|
#include "absl/strings/str_cat.h"
|
40
40
|
#include "absl/strings/str_format.h"
|
41
|
+
#include "src/core/lib/event_engine/shim.h"
|
41
42
|
#include "src/core/lib/experiments/experiments.h"
|
42
43
|
#include "src/core/lib/iomgr/block_annotate.h"
|
43
44
|
#include "src/core/lib/iomgr/ev_poll_posix.h"
|
@@ -378,7 +379,9 @@ static void unref_by(grpc_fd* fd, int n) {
|
|
378
379
|
}
|
379
380
|
|
380
381
|
static grpc_fd* fd_create(int fd, const char* name, bool track_err) {
|
381
|
-
if (grpc_core::IsEventEngineForAllOtherEndpointsEnabled()
|
382
|
+
if (grpc_core::IsEventEngineForAllOtherEndpointsEnabled() &&
|
383
|
+
!grpc_event_engine::experimental::
|
384
|
+
EventEngineExperimentDisabledForPython()) {
|
382
385
|
GRPC_TRACE_LOG(event_engine, ERROR)
|
383
386
|
<< "Creating a wrapped EventEngine grpc_fd with fd:" << fd;
|
384
387
|
grpc_fd* new_fd = static_cast<grpc_fd*>(gpr_malloc(sizeof(grpc_fd)));
|
@@ -477,7 +480,9 @@ static int fd_wrapped_fd(grpc_fd* fd) {
|
|
477
480
|
|
478
481
|
static void fd_orphan(grpc_fd* fd, grpc_closure* on_done, int* release_fd,
|
479
482
|
const char* reason) {
|
480
|
-
if (grpc_core::IsEventEngineForAllOtherEndpointsEnabled()
|
483
|
+
if (grpc_core::IsEventEngineForAllOtherEndpointsEnabled() &&
|
484
|
+
!grpc_event_engine::experimental::
|
485
|
+
EventEngineExperimentDisabledForPython()) {
|
481
486
|
CHECK_NE(release_fd, nullptr);
|
482
487
|
CHECK_EQ(on_done, nullptr);
|
483
488
|
*release_fd = fd->fd;
|
@@ -312,8 +312,9 @@ void EndpointRead(grpc_endpoint* ep, grpc_slice_buffer* slices,
|
|
312
312
|
|
313
313
|
// Write the data from slices and invoke the provided closure asynchronously
|
314
314
|
// after the write is complete.
|
315
|
-
void EndpointWrite(
|
316
|
-
|
315
|
+
void EndpointWrite(
|
316
|
+
grpc_endpoint* ep, grpc_slice_buffer* slices, grpc_closure* cb,
|
317
|
+
grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs args) {
|
317
318
|
auto* eeep =
|
318
319
|
reinterpret_cast<EventEngineEndpointWrapper::grpc_event_engine_endpoint*>(
|
319
320
|
ep);
|
@@ -323,10 +324,7 @@ void EndpointWrite(grpc_endpoint* ep, grpc_slice_buffer* slices,
|
|
323
324
|
return;
|
324
325
|
}
|
325
326
|
|
326
|
-
|
327
|
-
write_args.SetDeprecatedAndDiscouragedGoogleSpecificPointer(arg);
|
328
|
-
write_args.set_max_frame_size(max_frame_size);
|
329
|
-
if (eeep->wrapper->Write(cb, slices, std::move(write_args))) {
|
327
|
+
if (eeep->wrapper->Write(cb, slices, std::move(args))) {
|
330
328
|
// Write succeeded immediately. Run the callback inline.
|
331
329
|
eeep->wrapper->FinishPendingWrite(absl::OkStatus());
|
332
330
|
}
|
@@ -1795,8 +1795,9 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
|
|
1795
1795
|
}
|
1796
1796
|
}
|
1797
1797
|
|
1798
|
-
static void tcp_write(
|
1799
|
-
|
1798
|
+
static void tcp_write(
|
1799
|
+
grpc_endpoint* ep, grpc_slice_buffer* buf, grpc_closure* cb,
|
1800
|
+
grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs args) {
|
1800
1801
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
1801
1802
|
grpc_error_handle error;
|
1802
1803
|
TcpZerocopySendRecord* zerocopy_send_record = nullptr;
|
@@ -1835,8 +1836,9 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
|
|
1835
1836
|
tcp->outgoing_buffer = buf;
|
1836
1837
|
tcp->outgoing_byte_idx = 0;
|
1837
1838
|
}
|
1838
|
-
tcp->outgoing_buffer_arg =
|
1839
|
-
|
1839
|
+
tcp->outgoing_buffer_arg =
|
1840
|
+
args.TakeDeprecatedAndDiscouragedGoogleSpecificPointer();
|
1841
|
+
if (tcp->outgoing_buffer_arg) {
|
1840
1842
|
CHECK(grpc_event_engine_can_track_errors());
|
1841
1843
|
}
|
1842
1844
|
|
@@ -1915,7 +1917,9 @@ static const grpc_endpoint_vtable vtable = {tcp_read,
|
|
1915
1917
|
grpc_endpoint* grpc_tcp_create(
|
1916
1918
|
grpc_fd* fd, const grpc_event_engine::experimental::EndpointConfig& config,
|
1917
1919
|
absl::string_view peer_string) {
|
1918
|
-
if (grpc_core::IsEventEngineForAllOtherEndpointsEnabled()
|
1920
|
+
if (grpc_core::IsEventEngineForAllOtherEndpointsEnabled() &&
|
1921
|
+
!grpc_event_engine::experimental::
|
1922
|
+
EventEngineExperimentDisabledForPython()) {
|
1919
1923
|
// Create an EventEngine endpoint when creating the transport.
|
1920
1924
|
auto* engine =
|
1921
1925
|
reinterpret_cast<grpc_event_engine::experimental::EventEngine*>(
|
@@ -1943,7 +1947,9 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
1943
1947
|
CHECK(!grpc_event_engine::experimental::UsePollsetAlternative())
|
1944
1948
|
<< "This function must not be called when the pollset_alternative "
|
1945
1949
|
"experiment is enabled. This is a bug.";
|
1946
|
-
CHECK(
|
1950
|
+
CHECK(
|
1951
|
+
!grpc_core::IsEventEngineForAllOtherEndpointsEnabled() ||
|
1952
|
+
grpc_event_engine::experimental::EventEngineExperimentDisabledForPython())
|
1947
1953
|
<< "The event_engine_for_all_other_endpoints experiment should prevent "
|
1948
1954
|
"this method from being called. This is a bug.";
|
1949
1955
|
grpc_tcp* tcp = new grpc_tcp(options);
|
@@ -323,8 +323,9 @@ static void on_write(void* tcpp, grpc_error_handle error) {
|
|
323
323
|
|
324
324
|
// Initiates a write.
|
325
325
|
static void win_write(grpc_endpoint* ep, grpc_slice_buffer* slices,
|
326
|
-
grpc_closure* cb,
|
327
|
-
|
326
|
+
grpc_closure* cb,
|
327
|
+
grpc_event_engine::experimental::EventEngine::Endpoint::
|
328
|
+
WriteArgs /*args*/) {
|
328
329
|
grpc_tcp* tcp = (grpc_tcp*)ep;
|
329
330
|
grpc_winsocket* socket = tcp->socket;
|
330
331
|
grpc_winsocket_callback_info* info = &socket->write_info;
|
@@ -48,6 +48,8 @@ template <typename T>
|
|
48
48
|
struct Vtable {
|
49
49
|
// Poll the promise, once.
|
50
50
|
Poll<T> (*poll_once)(ArgType* arg);
|
51
|
+
// Move the promise to another memory location.
|
52
|
+
void (*move)(ArgType* dst, ArgType* src);
|
51
53
|
// Destroy the underlying callable object if there is one.
|
52
54
|
// Since we don't delete (the arena owns the memory) but we may need to call a
|
53
55
|
// destructor, we expose this for when the ArenaPromise object is destroyed.
|
@@ -73,11 +75,12 @@ struct Null {
|
|
73
75
|
GPR_UNREACHABLE_CODE(return Pending{});
|
74
76
|
}
|
75
77
|
|
78
|
+
static void Move(ArgType*, ArgType*) {}
|
76
79
|
static void Destroy(ArgType*) {}
|
77
80
|
};
|
78
81
|
|
79
82
|
template <typename T>
|
80
|
-
const Vtable<T> Null<T>::vtable = {PollOnce, Destroy};
|
83
|
+
const Vtable<T> Null<T>::vtable = {PollOnce, Move, Destroy};
|
81
84
|
|
82
85
|
// Implementation of ImplInterface for a callable object.
|
83
86
|
template <typename T, typename Callable>
|
@@ -88,11 +91,16 @@ struct AllocatedCallable {
|
|
88
91
|
return poll_cast<T>((*ArgAsPtr<Callable>(arg))());
|
89
92
|
}
|
90
93
|
|
94
|
+
static void Move(ArgType* dst, ArgType* src) {
|
95
|
+
ArgAsPtr<Callable>(dst) = ArgAsPtr<Callable>(src);
|
96
|
+
}
|
97
|
+
|
91
98
|
static void Destroy(ArgType* arg) { Destruct(ArgAsPtr<Callable>(arg)); }
|
92
99
|
};
|
93
100
|
|
94
101
|
template <typename T, typename Callable>
|
95
|
-
const Vtable<T> AllocatedCallable<T, Callable>::vtable = {PollOnce,
|
102
|
+
const Vtable<T> AllocatedCallable<T, Callable>::vtable = {PollOnce, Move,
|
103
|
+
Destroy};
|
96
104
|
|
97
105
|
// Implementation of ImplInterface for a small callable object (one that fits
|
98
106
|
// within the ArgType arg)
|
@@ -104,13 +112,17 @@ struct Inlined {
|
|
104
112
|
return poll_cast<T>((*reinterpret_cast<Callable*>(arg))());
|
105
113
|
}
|
106
114
|
|
115
|
+
static void Move(ArgType* dst, ArgType* src) {
|
116
|
+
new (dst) Callable(reinterpret_cast<Callable&&>(*src));
|
117
|
+
}
|
118
|
+
|
107
119
|
static void Destroy(ArgType* arg) {
|
108
120
|
Destruct(reinterpret_cast<Callable*>(arg));
|
109
121
|
}
|
110
122
|
};
|
111
123
|
|
112
124
|
template <typename T, typename Callable>
|
113
|
-
const Vtable<T> Inlined<T, Callable>::vtable = {PollOnce, Destroy};
|
125
|
+
const Vtable<T> Inlined<T, Callable>::vtable = {PollOnce, Move, Destroy};
|
114
126
|
|
115
127
|
// If a callable object is empty we can substitute any instance of that callable
|
116
128
|
// for the one we call (for how could we tell the difference)?
|
@@ -129,7 +141,7 @@ struct SharedCallable {
|
|
129
141
|
};
|
130
142
|
|
131
143
|
template <typename T, typename Callable>
|
132
|
-
const Vtable<T> SharedCallable<T, Callable>::vtable = {PollOnce,
|
144
|
+
const Vtable<T> SharedCallable<T, Callable>::vtable = {PollOnce, Null<T>::Move,
|
133
145
|
Null<T>::Destroy};
|
134
146
|
|
135
147
|
// Redirector type: given a callable type, expose a Make() function that creates
|
@@ -199,13 +211,17 @@ class ArenaPromise {
|
|
199
211
|
ArenaPromise(const ArenaPromise&) = delete;
|
200
212
|
ArenaPromise& operator=(const ArenaPromise&) = delete;
|
201
213
|
// ArenaPromise is movable.
|
202
|
-
ArenaPromise(ArenaPromise&& other) noexcept
|
203
|
-
|
214
|
+
ArenaPromise(ArenaPromise&& other) noexcept {
|
215
|
+
vtable_and_arg_.vtable = other.vtable_and_arg_.vtable;
|
216
|
+
vtable_and_arg_.vtable->move(&vtable_and_arg_.arg,
|
217
|
+
&other.vtable_and_arg_.arg);
|
204
218
|
other.vtable_and_arg_.vtable = &arena_promise_detail::Null<T>::vtable;
|
205
219
|
}
|
206
220
|
ArenaPromise& operator=(ArenaPromise&& other) noexcept {
|
207
221
|
vtable_and_arg_.vtable->destroy(&vtable_and_arg_.arg);
|
208
|
-
vtable_and_arg_ = other.vtable_and_arg_;
|
222
|
+
vtable_and_arg_.vtable = other.vtable_and_arg_.vtable;
|
223
|
+
vtable_and_arg_.vtable->move(&vtable_and_arg_.arg,
|
224
|
+
&other.vtable_and_arg_.arg);
|
209
225
|
other.vtable_and_arg_.vtable = &arena_promise_detail::Null<T>::vtable;
|
210
226
|
return *this;
|
211
227
|
}
|
@@ -223,6 +223,7 @@ class OncePromiseFactory {
|
|
223
223
|
using Arg = A;
|
224
224
|
using Promise = decltype(PromiseFactoryImpl(OnceToken{}, std::move(f_),
|
225
225
|
std::declval<A>()));
|
226
|
+
using UnderlyingFactory = F;
|
226
227
|
|
227
228
|
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION explicit OncePromiseFactory(F f)
|
228
229
|
: f_(std::move(f)) {}
|
@@ -240,6 +241,7 @@ class OncePromiseFactory<void, F> {
|
|
240
241
|
public:
|
241
242
|
using Arg = void;
|
242
243
|
using Promise = decltype(PromiseFactoryImpl(OnceToken{}, std::move(f_)));
|
244
|
+
using UnderlyingFactory = F;
|
243
245
|
|
244
246
|
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION explicit OncePromiseFactory(F f)
|
245
247
|
: f_(std::move(f)) {}
|
@@ -272,6 +274,14 @@ class RepeatedPromiseFactory {
|
|
272
274
|
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION Promise Make(Arg&& a) {
|
273
275
|
return PromiseFactoryImpl(RepeatableToken{}, f_, std::forward<Arg>(a));
|
274
276
|
}
|
277
|
+
template <typename U>
|
278
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION Promise Make(U&& u) const {
|
279
|
+
return PromiseFactoryImpl(RepeatableToken{}, f_, std::forward<U>(u));
|
280
|
+
}
|
281
|
+
template <typename U>
|
282
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION Promise Make(U&& u) {
|
283
|
+
return PromiseFactoryImpl(RepeatableToken{}, f_, std::forward<U>(u));
|
284
|
+
}
|
275
285
|
};
|
276
286
|
|
277
287
|
template <typename F>
|
@@ -17,13 +17,17 @@
|
|
17
17
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
|
20
|
+
#include <cstddef>
|
20
21
|
#include <utility>
|
21
22
|
|
22
|
-
#include "absl/functional/any_invocable.h"
|
23
23
|
#include "absl/meta/type_traits.h"
|
24
|
+
#include "src/core/channelz/property_list.h"
|
24
25
|
#include "src/core/lib/promise/poll.h"
|
25
26
|
#include "src/core/util/function_signature.h"
|
26
|
-
#include "src/core/util/
|
27
|
+
#include "src/core/util/upb_utils.h"
|
28
|
+
#include "src/proto/grpc/channelz/v2/promise.upb.h"
|
29
|
+
#include "src/proto/grpc/channelz/v2/promise.upbdefs.h"
|
30
|
+
#include "upb/reflection/def.hpp"
|
27
31
|
|
28
32
|
// A Promise is a callable object that returns Poll<T> for some T.
|
29
33
|
// Often when we're writing code that uses promises, we end up wanting to also
|
@@ -50,23 +54,120 @@
|
|
50
54
|
namespace grpc_core {
|
51
55
|
|
52
56
|
namespace promise_detail {
|
57
|
+
|
58
|
+
template <typename Promise, typename = void>
|
59
|
+
constexpr bool kHasToProtoMethod = false;
|
60
|
+
|
61
|
+
template <typename Promise>
|
62
|
+
constexpr bool kHasToProtoMethod<
|
63
|
+
Promise, std::void_t<decltype(std::declval<Promise>().ToProto(
|
64
|
+
static_cast<grpc_channelz_v2_Promise*>(nullptr),
|
65
|
+
static_cast<upb_Arena*>(nullptr)))>> = true;
|
66
|
+
|
53
67
|
template <typename Promise, typename = void>
|
54
|
-
constexpr bool
|
68
|
+
constexpr bool kHasChannelzPropertiesMethod = false;
|
55
69
|
|
56
70
|
template <typename Promise>
|
57
|
-
constexpr bool
|
58
|
-
Promise,
|
71
|
+
constexpr bool kHasChannelzPropertiesMethod<
|
72
|
+
Promise,
|
73
|
+
std::void_t<decltype(std::declval<Promise>().ChannelzProperties())>> = true;
|
74
|
+
|
59
75
|
} // namespace promise_detail
|
60
76
|
|
61
77
|
template <typename Promise>
|
62
|
-
|
63
|
-
|
64
|
-
|
78
|
+
void PromiseAsProto(const Promise& promise,
|
79
|
+
grpc_channelz_v2_Promise* promise_proto, upb_Arena* arena) {
|
80
|
+
if constexpr (promise_detail::kHasToProtoMethod<Promise>) {
|
81
|
+
promise.ToProto(promise_proto, arena);
|
82
|
+
} else if constexpr (promise_detail::kHasChannelzPropertiesMethod<Promise>) {
|
83
|
+
auto* custom_promise =
|
84
|
+
grpc_channelz_v2_Promise_mutable_custom_promise(promise_proto, arena);
|
85
|
+
grpc_channelz_v2_Promise_Custom_set_type(
|
86
|
+
custom_promise, StdStringToUpbString(TypeName<Promise>()));
|
87
|
+
promise.ChannelzProperties().FillUpbProto(
|
88
|
+
grpc_channelz_v2_Promise_Custom_mutable_properties(custom_promise,
|
89
|
+
arena),
|
90
|
+
arena);
|
65
91
|
} else {
|
66
|
-
|
92
|
+
grpc_channelz_v2_Promise_set_unknown_promise(
|
93
|
+
promise_proto, StdStringToUpbString(TypeName<Promise>()));
|
67
94
|
}
|
68
95
|
}
|
69
96
|
|
97
|
+
// Wrapper for Promises to convert them to PropertyValue types.
|
98
|
+
// Allows the type resolution logic to properly handle arbitrary promises.
|
99
|
+
template <typename T>
|
100
|
+
class PromiseProperty {
|
101
|
+
public:
|
102
|
+
explicit PromiseProperty(T* value) : value_(value) {}
|
103
|
+
|
104
|
+
T* TakeValue() { return std::exchange(value_, nullptr); }
|
105
|
+
|
106
|
+
private:
|
107
|
+
T* value_;
|
108
|
+
};
|
109
|
+
|
110
|
+
template <typename T>
|
111
|
+
PromiseProperty(T* value) -> PromiseProperty<T>;
|
112
|
+
|
113
|
+
// TODO(ctiller): needed to avoid circular dependencies as we transition the
|
114
|
+
// codebase, but we'll need a better long-term solution here.
|
115
|
+
namespace channelz::property_list_detail {
|
116
|
+
|
117
|
+
class PromisePropertyValue final : public OtherPropertyValue {
|
118
|
+
public:
|
119
|
+
template <typename T>
|
120
|
+
explicit PromisePropertyValue(T* value) {
|
121
|
+
PromiseAsProto(*value, promise_proto_, arena_);
|
122
|
+
}
|
123
|
+
|
124
|
+
PromisePropertyValue(PromisePropertyValue&&) = delete;
|
125
|
+
PromisePropertyValue& operator=(PromisePropertyValue&&) = delete;
|
126
|
+
PromisePropertyValue(const PromisePropertyValue&) = delete;
|
127
|
+
PromisePropertyValue& operator=(const PromisePropertyValue&) = delete;
|
128
|
+
|
129
|
+
~PromisePropertyValue() override { upb_Arena_Free(arena_); }
|
130
|
+
|
131
|
+
void FillAny(google_protobuf_Any* any, upb_Arena* arena) override {
|
132
|
+
size_t length;
|
133
|
+
upb_Arena_Fuse(arena_, arena);
|
134
|
+
auto* bytes =
|
135
|
+
grpc_channelz_v2_Promise_serialize(promise_proto_, arena, &length);
|
136
|
+
google_protobuf_Any_set_value(
|
137
|
+
any, upb_StringView_FromDataAndSize(bytes, length));
|
138
|
+
google_protobuf_Any_set_type_url(
|
139
|
+
any,
|
140
|
+
StdStringToUpbString("type.googleapis.com/grpc.channelz.v2.Promise"));
|
141
|
+
}
|
142
|
+
|
143
|
+
Json::Object TakeJsonObject() override {
|
144
|
+
upb::DefPool def_pool;
|
145
|
+
auto* def = grpc_channelz_v2_Promise_getmsgdef(def_pool.ptr());
|
146
|
+
size_t length =
|
147
|
+
upb_TextEncode(reinterpret_cast<upb_Message*>(promise_proto_), def,
|
148
|
+
def_pool.ptr(), 0, nullptr, 0);
|
149
|
+
auto str = std::make_unique<char[]>(length);
|
150
|
+
upb_TextEncode(reinterpret_cast<upb_Message*>(promise_proto_), def,
|
151
|
+
def_pool.ptr(), 0, str.get(), length);
|
152
|
+
return {{"promise", Json::FromString(std::string(str.get()))}};
|
153
|
+
}
|
154
|
+
|
155
|
+
private:
|
156
|
+
upb_Arena* arena_ = upb_Arena_New();
|
157
|
+
grpc_channelz_v2_Promise* promise_proto_ =
|
158
|
+
grpc_channelz_v2_Promise_new(arena_);
|
159
|
+
};
|
160
|
+
|
161
|
+
template <typename T>
|
162
|
+
struct Wrapper<PromiseProperty<T>> {
|
163
|
+
static std::optional<PropertyValue> Wrap(PromiseProperty<T> value) {
|
164
|
+
return PropertyValue(
|
165
|
+
std::make_shared<PromisePropertyValue>(value.TakeValue()));
|
166
|
+
}
|
167
|
+
};
|
168
|
+
|
169
|
+
} // namespace channelz::property_list_detail
|
170
|
+
|
70
171
|
namespace promise_detail {
|
71
172
|
|
72
173
|
template <typename T>
|
@@ -114,7 +215,10 @@ class PromiseLike<
|
|
114
215
|
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION WrappedResult operator()() {
|
115
216
|
return WrapInPoll(f_());
|
116
217
|
}
|
117
|
-
|
218
|
+
void ToProto(grpc_channelz_v2_Promise* promise_proto,
|
219
|
+
upb_Arena* arena) const {
|
220
|
+
PromiseAsProto(f_, promise_proto, arena);
|
221
|
+
}
|
118
222
|
PromiseLike(const PromiseLike&) = default;
|
119
223
|
PromiseLike& operator=(const PromiseLike&) = default;
|
120
224
|
PromiseLike(PromiseLike&&) = default;
|
@@ -136,7 +240,10 @@ class PromiseLike<
|
|
136
240
|
f_();
|
137
241
|
return Empty{};
|
138
242
|
}
|
139
|
-
|
243
|
+
void ToProto(grpc_channelz_v2_Promise* promise_proto,
|
244
|
+
upb_Arena* arena) const {
|
245
|
+
PromiseAsProto(f_, promise_proto, arena);
|
246
|
+
}
|
140
247
|
PromiseLike(const PromiseLike&) = default;
|
141
248
|
PromiseLike& operator=(const PromiseLike&) = default;
|
142
249
|
PromiseLike(PromiseLike&&) = default;
|
@@ -0,0 +1,50 @@
|
|
1
|
+
// Copyright 2024 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_DETAIL_PROMISE_VARIANT_H
|
16
|
+
#define GRPC_SRC_CORE_LIB_PROMISE_DETAIL_PROMISE_VARIANT_H
|
17
|
+
|
18
|
+
#include <variant>
|
19
|
+
|
20
|
+
namespace grpc_core {
|
21
|
+
|
22
|
+
namespace promise_detail {
|
23
|
+
|
24
|
+
// Visitor function for PromiseVariant - calls the poll operator on the inner
|
25
|
+
// type
|
26
|
+
class PollVisitor {
|
27
|
+
public:
|
28
|
+
template <typename T>
|
29
|
+
auto operator()(T& x) {
|
30
|
+
return x();
|
31
|
+
}
|
32
|
+
};
|
33
|
+
|
34
|
+
// Helper type - given a variant V, provides the poll operator (which simply
|
35
|
+
// visits the inner type on the variant with PollVisitor)
|
36
|
+
template <typename V>
|
37
|
+
class PromiseVariant {
|
38
|
+
public:
|
39
|
+
explicit PromiseVariant(V variant) : variant_(std::move(variant)) {}
|
40
|
+
auto operator()() { return std::visit(PollVisitor(), variant_); }
|
41
|
+
|
42
|
+
private:
|
43
|
+
V variant_;
|
44
|
+
};
|
45
|
+
|
46
|
+
} // namespace promise_detail
|
47
|
+
|
48
|
+
} // namespace grpc_core
|
49
|
+
|
50
|
+
#endif // GRPC_SRC_CORE_LIB_PROMISE_DETAIL_PROMISE_VARIANT_H
|