grpc 1.64.3 → 1.65.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 +57 -58
- data/include/grpc/event_engine/event_engine.h +13 -6
- data/include/grpc/impl/channel_arg_names.h +7 -3
- data/include/grpc/module.modulemap +1 -0
- data/include/grpc/passive_listener.h +62 -0
- data/include/grpc/support/log.h +7 -17
- data/include/grpc/support/port_platform.h +3 -0
- data/src/core/channelz/channel_trace.cc +1 -1
- data/src/core/channelz/channel_trace.h +1 -1
- data/src/core/channelz/channelz.cc +3 -3
- data/src/core/channelz/channelz.h +7 -7
- data/src/core/channelz/channelz_registry.cc +4 -3
- data/src/core/client_channel/backup_poller.cc +4 -5
- data/src/core/client_channel/client_channel.cc +1324 -0
- data/src/core/client_channel/client_channel.h +243 -0
- data/src/core/client_channel/client_channel_filter.cc +266 -709
- data/src/core/client_channel/client_channel_filter.h +11 -64
- data/src/core/client_channel/client_channel_internal.h +16 -5
- data/src/core/client_channel/client_channel_plugin.cc +1 -14
- data/src/core/client_channel/client_channel_service_config.h +3 -3
- data/src/core/client_channel/config_selector.cc +1 -1
- data/src/core/client_channel/config_selector.h +1 -1
- data/src/core/client_channel/dynamic_filters.cc +3 -3
- data/src/core/client_channel/dynamic_filters.h +1 -3
- data/src/core/client_channel/load_balanced_call_destination.cc +336 -0
- data/src/core/client_channel/load_balanced_call_destination.h +49 -0
- data/src/core/client_channel/retry_filter.cc +2 -9
- data/src/core/client_channel/retry_filter.h +2 -7
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +65 -72
- data/src/core/client_channel/retry_filter_legacy_call_data.h +0 -2
- data/src/core/client_channel/retry_service_config.cc +4 -5
- data/src/core/client_channel/retry_service_config.h +3 -3
- data/src/core/client_channel/subchannel.cc +220 -112
- data/src/core/client_channel/subchannel.h +31 -18
- data/src/core/client_channel/subchannel_pool_interface.cc +0 -2
- data/src/core/client_channel/subchannel_pool_interface.h +2 -4
- data/src/core/client_channel/subchannel_stream_client.cc +36 -49
- data/src/core/client_channel/subchannel_stream_client.h +2 -4
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +7 -10
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +1 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +7 -0
- data/src/core/ext/filters/census/grpc_context.cc +2 -4
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +8 -15
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +3 -7
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +1 -0
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +3 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +1 -0
- data/src/core/ext/filters/http/client/http_client_filter.h +1 -0
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -0
- data/src/core/ext/filters/http/client_authority_filter.h +1 -0
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +10 -15
- data/src/core/ext/filters/http/message_compress/compression_filter.h +2 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +2 -2
- data/src/core/ext/filters/http/server/http_server_filter.h +1 -0
- data/src/core/ext/filters/message_size/message_size_filter.cc +6 -9
- data/src/core/ext/filters/message_size/message_size_filter.h +6 -6
- data/src/core/ext/filters/rbac/rbac_filter.cc +2 -5
- data/src/core/ext/filters/rbac/rbac_filter.h +1 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +2 -6
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +1 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +3 -3
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +8 -25
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -5
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +223 -148
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +33 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +131 -107
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +8 -8
- data/src/core/ext/transport/chttp2/transport/context_list_entry.h +1 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -2
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -2
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +9 -5
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +9 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +32 -43
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +3 -8
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +1 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +29 -19
- data/src/core/ext/transport/chttp2/transport/parsing.cc +15 -25
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +0 -2
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +0 -2
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +29 -13
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +5 -4
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -5
- data/src/core/ext/transport/chttp2/transport/writing.cc +24 -25
- data/src/core/ext/transport/inproc/inproc_transport.cc +56 -32
- data/src/core/ext/transport/inproc/inproc_transport.h +1 -3
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +13 -15
- data/src/core/ext/transport/inproc/legacy_inproc_transport.h +0 -2
- data/src/core/handshaker/handshaker.cc +6 -14
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +9 -17
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +3 -2
- data/src/core/handshaker/security/secure_endpoint.cc +38 -32
- data/src/core/handshaker/security/secure_endpoint.h +0 -2
- data/src/core/handshaker/security/security_handshaker.cc +25 -37
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +2 -1
- data/src/core/lib/address_utils/parse_address.cc +27 -39
- data/src/core/lib/address_utils/sockaddr_utils.cc +5 -6
- data/src/core/lib/avl/avl.h +1 -1
- data/src/core/lib/channel/channel_args.cc +13 -17
- data/src/core/lib/channel/channel_args.h +19 -8
- data/src/core/lib/channel/channel_stack.cc +5 -63
- data/src/core/lib/channel/channel_stack.h +13 -37
- data/src/core/lib/channel/channel_stack_builder.h +0 -5
- data/src/core/lib/channel/channel_stack_builder_impl.cc +0 -142
- data/src/core/lib/channel/channel_stack_builder_impl.h +0 -2
- data/src/core/lib/channel/connected_channel.cc +37 -676
- data/src/core/lib/channel/promise_based_filter.cc +41 -47
- data/src/core/lib/channel/promise_based_filter.h +124 -477
- data/src/core/lib/channel/status_util.cc +1 -1
- data/src/core/lib/compression/compression.cc +1 -1
- data/src/core/lib/compression/message_compress.cc +6 -6
- data/src/core/lib/config/config_vars.cc +3 -8
- data/src/core/lib/config/config_vars.h +1 -5
- data/src/core/lib/debug/event_log.h +1 -1
- data/src/core/lib/debug/trace.cc +43 -59
- data/src/core/lib/debug/trace.h +2 -97
- data/src/core/lib/debug/trace_flags.cc +255 -0
- data/src/core/lib/debug/trace_flags.h +133 -0
- data/src/core/lib/debug/trace_impl.h +115 -0
- data/src/core/lib/event_engine/ares_resolver.cc +5 -7
- data/src/core/lib/event_engine/ares_resolver.h +1 -3
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +1 -1
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +17 -22
- data/src/core/lib/event_engine/event_engine.cc +29 -4
- data/src/core/lib/event_engine/extensions/supports_fd.h +7 -0
- data/src/core/lib/event_engine/extensions/tcp_trace.h +43 -0
- data/src/core/lib/event_engine/forkable.cc +4 -5
- data/src/core/lib/event_engine/forkable.h +0 -11
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +10 -11
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +4 -3
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +19 -33
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +3 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +24 -7
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +2 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +14 -16
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +18 -22
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +13 -17
- data/src/core/lib/event_engine/posix_engine/timer.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +4 -6
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -1
- data/src/core/lib/event_engine/shim.cc +1 -1
- data/src/core/lib/event_engine/tcp_socket_utils.cc +6 -8
- data/src/core/lib/event_engine/thread_local.h +1 -1
- data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +19 -21
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -6
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +14 -13
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +4 -3
- data/src/core/lib/event_engine/trace.h +6 -17
- data/src/core/lib/event_engine/windows/iocp.h +1 -1
- data/src/core/lib/event_engine/windows/win_socket.cc +23 -17
- data/src/core/lib/event_engine/windows/win_socket.h +4 -5
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +6 -9
- data/src/core/lib/event_engine/windows/windows_engine.cc +201 -87
- data/src/core/lib/event_engine/windows/windows_engine.h +136 -25
- data/src/core/lib/event_engine/windows/windows_listener.cc +12 -23
- data/src/core/lib/experiments/experiments.cc +35 -151
- data/src/core/lib/experiments/experiments.h +12 -45
- data/src/core/lib/gprpp/bitset.h +1 -1
- data/src/core/lib/gprpp/crash.cc +2 -3
- data/src/core/lib/gprpp/dual_ref_counted.h +45 -33
- data/src/core/lib/gprpp/dump_args.cc +54 -0
- data/src/core/lib/gprpp/dump_args.h +69 -0
- data/src/core/lib/gprpp/glob.cc +70 -0
- data/src/core/lib/gprpp/glob.h +29 -0
- data/src/core/lib/gprpp/per_cpu.cc +1 -1
- data/src/core/lib/gprpp/posix/stat.cc +3 -4
- data/src/core/lib/gprpp/posix/thd.cc +8 -9
- data/src/core/lib/gprpp/ref_counted.h +30 -22
- data/src/core/lib/gprpp/single_set_ptr.h +5 -3
- data/src/core/lib/gprpp/status_helper.cc +11 -30
- data/src/core/lib/gprpp/status_helper.h +3 -31
- data/src/core/lib/gprpp/time.cc +3 -4
- data/src/core/lib/gprpp/time.h +3 -2
- data/src/core/lib/gprpp/unique_type_name.h +1 -1
- data/src/core/lib/gprpp/validation_errors.cc +10 -1
- data/src/core/lib/gprpp/validation_errors.h +11 -0
- data/src/core/lib/gprpp/windows/stat.cc +3 -4
- data/src/core/lib/gprpp/windows/thd.cc +3 -2
- data/src/core/lib/gprpp/work_serializer.cc +48 -57
- data/src/core/lib/iomgr/buffer_list.cc +4 -2
- data/src/core/lib/iomgr/call_combiner.cc +18 -27
- data/src/core/lib/iomgr/call_combiner.h +1 -3
- data/src/core/lib/iomgr/cfstream_handle.cc +4 -6
- data/src/core/lib/iomgr/closure.h +2 -4
- data/src/core/lib/iomgr/combiner.cc +6 -8
- data/src/core/lib/iomgr/combiner.h +0 -2
- data/src/core/lib/iomgr/endpoint.cc +0 -6
- data/src/core/lib/iomgr/endpoint.h +0 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +19 -41
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +1 -1
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -6
- data/src/core/lib/iomgr/error.cc +13 -21
- data/src/core/lib/iomgr/error.h +1 -1
- data/src/core/lib/iomgr/ev_apple.cc +3 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +43 -42
- data/src/core/lib/iomgr/ev_poll_posix.cc +38 -29
- data/src/core/lib/iomgr/ev_posix.cc +8 -9
- data/src/core/lib/iomgr/ev_posix.h +10 -7
- data/src/core/lib/iomgr/event_engine_shims/closure.cc +2 -2
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +14 -28
- data/src/core/lib/iomgr/exec_ctx.cc +2 -2
- data/src/core/lib/iomgr/exec_ctx.h +1 -1
- data/src/core/lib/iomgr/executor.cc +6 -15
- data/src/core/lib/iomgr/executor.h +1 -1
- data/src/core/lib/iomgr/fork_posix.cc +8 -10
- data/src/core/lib/iomgr/fork_windows.cc +3 -1
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -3
- data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +3 -5
- data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
- data/src/core/lib/iomgr/iocp_windows.cc +4 -3
- data/src/core/lib/iomgr/iomgr.cc +13 -17
- data/src/core/lib/iomgr/lockfree_event.cc +3 -5
- data/src/core/lib/iomgr/pollset.h +0 -2
- data/src/core/lib/iomgr/pollset_windows.cc +0 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +7 -14
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +11 -17
- data/src/core/lib/iomgr/socket_windows.cc +4 -6
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +3 -5
- data/src/core/lib/iomgr/tcp_client_posix.cc +9 -15
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -4
- data/src/core/lib/iomgr/tcp_posix.cc +57 -84
- data/src/core/lib/iomgr/tcp_posix.h +0 -2
- data/src/core/lib/iomgr/tcp_server_posix.cc +3 -3
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +4 -6
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_windows.cc +10 -16
- data/src/core/lib/iomgr/tcp_windows.cc +25 -41
- data/src/core/lib/iomgr/timer_generic.cc +17 -20
- data/src/core/lib/iomgr/timer_heap.cc +1 -1
- data/src/core/lib/iomgr/timer_manager.cc +17 -30
- data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
- data/src/core/lib/iomgr/vsock.cc +1 -1
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +3 -3
- data/src/core/lib/promise/activity.h +27 -4
- data/src/core/lib/promise/cancel_callback.h +24 -0
- data/src/core/lib/promise/context.h +11 -0
- data/src/core/lib/promise/detail/basic_seq.h +1 -2
- data/src/core/lib/promise/detail/join_state.h +354 -398
- data/src/core/lib/promise/detail/promise_like.h +6 -5
- data/src/core/lib/promise/detail/seq_state.h +1178 -1178
- data/src/core/lib/promise/for_each.h +6 -6
- data/src/core/lib/promise/interceptor_list.h +6 -7
- data/src/core/lib/promise/latch.h +9 -9
- data/src/core/lib/promise/map.h +17 -0
- data/src/core/lib/promise/observable.h +182 -0
- data/src/core/lib/promise/party.cc +7 -8
- data/src/core/lib/promise/party.h +10 -8
- data/src/core/lib/promise/pipe.h +16 -35
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/status_flag.h +2 -0
- data/src/core/lib/resource_quota/arena.cc +56 -79
- data/src/core/lib/resource_quota/arena.h +118 -209
- data/src/core/lib/resource_quota/memory_quota.cc +12 -13
- data/src/core/lib/resource_quota/memory_quota.h +2 -3
- data/src/core/lib/resource_quota/periodic_update.cc +1 -1
- data/src/core/lib/resource_quota/resource_quota.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
- data/src/core/lib/security/authorization/evaluate_args.cc +6 -8
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +5 -6
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -0
- data/src/core/lib/security/authorization/matchers.cc +3 -3
- data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +2 -2
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +2 -3
- data/src/core/lib/security/context/security_context.cc +12 -13
- data/src/core/lib/security/context/security_context.h +31 -8
- data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +3 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +5 -5
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +3 -3
- data/src/core/lib/security/credentials/call_creds_util.cc +2 -1
- data/src/core/lib/security/credentials/channel_creds_registry.h +2 -2
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +5 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.h +1 -1
- data/src/core/lib/security/credentials/credentials.cc +6 -6
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -4
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +2 -2
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +9 -11
- data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -3
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +2 -2
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +1 -1
- data/src/core/lib/security/credentials/fake/fake_credentials.h +1 -1
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +3 -3
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +11 -11
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.h +1 -1
- data/src/core/lib/security/credentials/jwt/json_token.cc +14 -15
- data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +6 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +50 -54
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
- data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +12 -11
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -3
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +15 -21
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +21 -30
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +3 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +14 -16
- data/src/core/lib/security/credentials/tls/tls_utils.cc +4 -4
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -1
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -16
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +15 -12
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +6 -6
- data/src/core/lib/security/security_connector/load_system_roots_windows.cc +1 -1
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +8 -12
- data/src/core/lib/security/security_connector/security_connector.cc +1 -4
- data/src/core/lib/security/security_connector/security_connector.h +1 -3
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +17 -19
- data/src/core/lib/security/security_connector/ssl_utils.cc +19 -21
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +29 -40
- data/src/core/lib/security/transport/auth_filters.h +1 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +7 -13
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -8
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/slice/slice.h +1 -1
- data/src/core/lib/slice/slice_refcount.h +2 -4
- data/src/core/lib/slice/slice_string_helpers.cc +1 -1
- data/src/core/lib/surface/api_trace.h +1 -3
- data/src/core/lib/surface/call.cc +64 -3738
- data/src/core/lib/surface/call.h +41 -143
- data/src/core/lib/surface/call_log_batch.cc +1 -1
- data/src/core/lib/surface/call_utils.cc +276 -0
- data/src/core/lib/surface/call_utils.h +449 -0
- data/src/core/lib/surface/channel.cc +8 -3
- data/src/core/lib/surface/channel.h +10 -7
- data/src/core/lib/surface/channel_create.cc +14 -6
- data/src/core/lib/surface/channel_create.h +3 -2
- data/src/core/lib/surface/channel_init.cc +21 -77
- data/src/core/lib/surface/channel_init.h +19 -97
- data/src/core/lib/surface/client_call.cc +419 -0
- data/src/core/lib/surface/client_call.h +180 -0
- data/src/core/lib/surface/completion_queue.cc +28 -33
- data/src/core/lib/surface/completion_queue.h +0 -8
- data/src/core/lib/surface/filter_stack_call.cc +1157 -0
- data/src/core/lib/surface/filter_stack_call.h +369 -0
- data/src/core/lib/surface/init.cc +7 -6
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/legacy_channel.cc +40 -27
- data/src/core/lib/surface/legacy_channel.h +9 -18
- data/src/core/lib/surface/server_call.cc +222 -0
- data/src/core/lib/surface/server_call.h +167 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +3 -5
- data/src/core/lib/transport/bdp_estimator.h +2 -4
- data/src/core/lib/transport/call_arena_allocator.h +9 -7
- data/src/core/lib/transport/call_destination.h +76 -0
- data/src/core/lib/transport/call_filters.cc +28 -10
- data/src/core/lib/transport/call_filters.h +128 -22
- data/src/core/lib/transport/call_spine.cc +5 -6
- data/src/core/lib/transport/call_spine.h +159 -334
- data/src/core/lib/transport/connectivity_state.cc +8 -10
- data/src/core/lib/transport/connectivity_state.h +0 -2
- data/src/core/lib/transport/interception_chain.cc +155 -0
- data/src/core/lib/transport/interception_chain.h +236 -0
- data/src/core/lib/transport/metadata_batch.h +10 -1
- data/src/core/lib/transport/metadata_info.h +1 -1
- data/src/core/lib/transport/transport.cc +3 -6
- data/src/core/lib/transport/transport.h +43 -40
- data/src/core/load_balancing/child_policy_handler.cc +8 -8
- data/src/core/load_balancing/endpoint_list.cc +5 -5
- data/src/core/load_balancing/endpoint_list.h +1 -1
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +1 -0
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/load_balancing/grpclb/grpclb.cc +25 -29
- data/src/core/load_balancing/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/load_balancing/grpclb/load_balancer_api.cc +3 -4
- data/src/core/load_balancing/health_check_client.cc +10 -13
- data/src/core/load_balancing/lb_policy.cc +5 -8
- data/src/core/load_balancing/lb_policy.h +19 -3
- data/src/core/load_balancing/lb_policy_factory.h +1 -1
- data/src/core/load_balancing/lb_policy_registry.cc +2 -3
- data/src/core/load_balancing/lb_policy_registry.h +1 -1
- data/src/core/load_balancing/oob_backend_metric.cc +2 -4
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +33 -35
- data/src/core/load_balancing/outlier_detection/outlier_detection.h +3 -3
- data/src/core/load_balancing/pick_first/pick_first.cc +65 -65
- data/src/core/load_balancing/priority/priority.cc +26 -28
- data/src/core/load_balancing/ring_hash/ring_hash.cc +11 -13
- data/src/core/load_balancing/ring_hash/ring_hash.h +3 -3
- data/src/core/load_balancing/rls/rls.cc +82 -82
- data/src/core/load_balancing/round_robin/round_robin.cc +17 -20
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +54 -43
- data/src/core/load_balancing/weighted_target/weighted_target.cc +21 -24
- data/src/core/load_balancing/xds/cds.cc +14 -16
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +16 -18
- data/src/core/load_balancing/xds/xds_cluster_manager.cc +15 -17
- data/src/core/load_balancing/xds/xds_override_host.cc +40 -41
- data/src/core/load_balancing/xds/xds_override_host.h +3 -3
- data/src/core/load_balancing/xds/xds_wrr_locality.cc +10 -12
- data/src/core/plugin_registry/grpc_plugin_registry.cc +5 -1
- data/src/core/resolver/binder/binder_resolver.cc +3 -2
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +3 -2
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +7 -14
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -5
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/resolver/dns/dns_resolver_plugin.cc +6 -5
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +4 -9
- data/src/core/resolver/dns/event_engine/service_config_helper.cc +5 -5
- data/src/core/resolver/dns/native/dns_resolver.cc +8 -9
- data/src/core/resolver/endpoint_addresses.cc +1 -1
- data/src/core/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/resolver/fake/fake_resolver.h +1 -1
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +13 -14
- data/src/core/resolver/polling_resolver.cc +30 -35
- data/src/core/resolver/resolver.cc +2 -6
- data/src/core/resolver/resolver.h +0 -2
- data/src/core/resolver/resolver_registry.cc +6 -8
- data/src/core/resolver/sockaddr/sockaddr_resolver.cc +3 -3
- data/src/core/resolver/xds/xds_dependency_manager.cc +22 -23
- data/src/core/resolver/xds/xds_resolver.cc +13 -15
- data/src/core/server/server.cc +269 -389
- data/src/core/server/server.h +37 -19
- data/src/core/server/server_call_tracer_filter.cc +7 -14
- data/src/core/server/server_config_selector.h +1 -1
- data/src/core/server/server_config_selector_filter.cc +3 -3
- data/src/core/server/server_interface.h +2 -0
- data/src/core/server/xds_channel_stack_modifier.cc +1 -1
- data/src/core/server/xds_channel_stack_modifier.h +1 -1
- data/src/core/server/xds_server_config_fetcher.cc +1 -4
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_call_data.h +13 -11
- data/src/core/service_config/service_config_channel_arg_filter.cc +6 -4
- data/src/core/service_config/service_config_impl.cc +5 -5
- data/src/core/service_config/service_config_impl.h +1 -1
- data/src/core/service_config/service_config_parser.cc +3 -6
- data/src/core/service_config/service_config_parser.h +1 -1
- data/src/core/{lib/channel → telemetry}/call_tracer.cc +20 -30
- data/src/core/{lib/channel → telemetry}/call_tracer.h +32 -9
- data/src/core/{lib/debug → telemetry}/histogram_view.cc +1 -1
- data/src/core/{lib/debug → telemetry}/histogram_view.h +3 -3
- data/src/core/telemetry/metrics.cc +178 -0
- data/src/core/telemetry/metrics.h +562 -0
- data/src/core/{lib/debug → telemetry}/stats.cc +1 -1
- data/src/core/{lib/debug → telemetry}/stats.h +5 -5
- data/src/core/{lib/debug → telemetry}/stats_data.cc +1 -1
- data/src/core/{lib/debug → telemetry}/stats_data.h +4 -4
- data/src/core/{lib/channel → telemetry}/tcp_tracer.h +3 -3
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +12 -13
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +25 -27
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -33
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +5 -4
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +5 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -3
- data/src/core/tsi/fake_transport_security.cc +14 -17
- data/src/core/tsi/local_transport_security.cc +6 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +4 -4
- data/src/core/tsi/ssl_transport_security.cc +76 -81
- data/src/core/tsi/ssl_transport_security_utils.cc +74 -18
- data/src/core/tsi/ssl_transport_security_utils.h +11 -0
- data/src/core/tsi/transport_security.cc +0 -4
- data/src/core/tsi/transport_security.h +0 -2
- data/src/core/tsi/transport_security_interface.h +0 -4
- data/src/core/{lib/gpr → util}/alloc.h +3 -3
- data/src/core/{lib/gpr → util}/android/log.cc +0 -19
- data/src/core/{lib/gpr → util}/atm.cc +1 -1
- data/src/core/{ext/gcp/metadata_query.cc → util/gcp_metadata_query.cc} +25 -26
- data/src/core/{ext/gcp/metadata_query.h → util/gcp_metadata_query.h} +11 -11
- data/src/core/{lib/http → util/http_client}/format_request.cc +4 -3
- data/src/core/{lib/http → util/http_client}/format_request.h +6 -5
- data/src/core/{lib/http → util/http_client}/httpcli.cc +9 -10
- data/src/core/{lib/http → util/http_client}/httpcli.h +6 -5
- data/src/core/{lib/http → util/http_client}/httpcli_security_connector.cc +9 -9
- data/src/core/{lib/http → util/http_client}/httpcli_ssl_credentials.h +5 -4
- data/src/core/{lib/http → util/http_client}/parser.cc +4 -5
- data/src/core/{lib/http → util/http_client}/parser.h +5 -6
- data/src/core/{lib → util}/json/json.h +5 -4
- data/src/core/{lib → util}/json/json_args.h +5 -5
- data/src/core/{lib → util}/json/json_channel_args.h +6 -6
- data/src/core/{lib → util}/json/json_object_loader.cc +3 -2
- data/src/core/{lib → util}/json/json_object_loader.h +7 -7
- data/src/core/{lib → util}/json/json_reader.cc +3 -2
- data/src/core/{lib → util}/json/json_reader.h +6 -6
- data/src/core/{lib → util}/json/json_util.cc +4 -4
- data/src/core/{lib → util}/json/json_util.h +6 -6
- data/src/core/{lib → util}/json/json_writer.cc +3 -3
- data/src/core/{lib → util}/json/json_writer.h +6 -6
- data/src/core/{lib/gpr → util}/linux/log.cc +0 -45
- data/src/core/util/log.cc +165 -0
- data/src/core/{lib/gpr → util}/msys/tmpfile.cc +2 -2
- data/src/core/{lib/gpr → util}/posix/cpu.cc +1 -1
- data/src/core/{lib/gpr → util}/posix/log.cc +0 -42
- data/src/core/{lib/gpr → util}/posix/time.cc +1 -1
- data/src/core/{lib/gpr → util}/posix/tmpfile.cc +2 -2
- data/src/core/{lib/gpr → util}/spinlock.h +3 -3
- data/src/core/{lib/gpr → util}/string.cc +2 -2
- data/src/core/{lib/gpr → util}/string.h +3 -3
- data/src/core/{lib/gpr → util}/time_precise.cc +1 -1
- data/src/core/{lib/gpr → util}/time_precise.h +3 -3
- data/src/core/{lib/gpr → util}/tmpfile.h +3 -3
- data/src/core/{lib/gpr → util}/useful.h +3 -3
- data/src/core/{lib/gpr → util}/windows/log.cc +1 -44
- data/src/core/{lib/gpr → util}/windows/string.cc +1 -1
- data/src/core/{lib/gpr → util}/windows/string_util.cc +1 -1
- data/src/core/{lib/gpr → util}/windows/time.cc +1 -1
- data/src/core/{lib/gpr → util}/windows/tmpfile.cc +1 -1
- data/src/core/xds/grpc/certificate_provider_store.cc +3 -3
- data/src/core/xds/grpc/certificate_provider_store.h +4 -4
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +3 -3
- data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +5 -5
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +3 -3
- data/src/core/xds/grpc/xds_certificate_provider.h +1 -1
- data/src/core/xds/grpc/xds_client_grpc.cc +27 -23
- data/src/core/xds/grpc/xds_client_grpc.h +2 -2
- data/src/core/xds/grpc/xds_cluster.cc +4 -5
- data/src/core/xds/grpc/xds_cluster.h +1 -1
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
- data/src/core/xds/grpc/xds_common_types.cc +1 -1
- data/src/core/xds/grpc/xds_common_types.h +1 -1
- data/src/core/xds/grpc/xds_endpoint.cc +4 -5
- data/src/core/xds/grpc/xds_http_fault_filter.cc +2 -2
- data/src/core/xds/grpc/xds_http_filters.h +2 -2
- data/src/core/xds/grpc/xds_http_rbac_filter.cc +3 -3
- data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +2 -2
- data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
- data/src/core/xds/grpc/xds_listener.cc +4 -6
- data/src/core/xds/grpc/xds_route_config.cc +7 -8
- data/src/core/xds/grpc/xds_transport_grpc.cc +2 -2
- data/src/core/xds/grpc/xds_transport_grpc.h +1 -1
- data/src/core/xds/xds_client/xds_api.cc +5 -9
- data/src/core/xds/xds_client/xds_bootstrap.cc +1 -1
- data/src/core/xds/xds_client/xds_bootstrap.h +1 -1
- data/src/core/xds/xds_client/xds_client.cc +39 -45
- data/src/core/xds/xds_client/xds_client.h +0 -3
- data/src/core/xds/xds_client/xds_client_stats.cc +6 -6
- data/src/core/xds/xds_client/xds_client_stats.h +2 -2
- data/src/ruby/bin/math_pb.rb +1 -22
- data/src/ruby/ext/grpc/rb_call.c +8 -1
- data/src/ruby/ext/grpc/rb_completion_queue.c +15 -32
- data/src/ruby/ext/grpc/rb_completion_queue.h +7 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
- data/src/ruby/ext/grpc/rb_server.c +39 -22
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +1 -22
- data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +5 -5
- data/src/ruby/pb/grpc/testing/metrics_pb.rb +10 -19
- data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +5 -5
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +1 -22
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +1 -22
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -22
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +12 -12
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +66 -41
- data/third_party/boringssl-with-bazel/src/crypto/dilithium/dilithium.c +1497 -0
- data/third_party/boringssl-with-bazel/src/crypto/dilithium/internal.h +58 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -3
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +45 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +33 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +3 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +6 -0
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/v3_utl.c +49 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -10
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +7 -17
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +8 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +3 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/experimental/dilithium.h +125 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +0 -23
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -10
- metadata +103 -93
- data/src/core/ext/transport/chttp2/transport/http_trace.cc +0 -19
- data/src/core/ext/transport/chttp2/transport/http_trace.h +0 -24
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -23
- data/src/core/handshaker/security/tsi_error.cc +0 -31
- data/src/core/handshaker/security/tsi_error.h +0 -30
- data/src/core/lib/channel/channel_stack_trace.cc +0 -19
- data/src/core/lib/channel/channel_stack_trace.h +0 -24
- data/src/core/lib/channel/context.h +0 -105
- data/src/core/lib/channel/metrics.cc +0 -334
- data/src/core/lib/channel/metrics.h +0 -365
- data/src/core/lib/event_engine/trace.cc +0 -25
- data/src/core/lib/gpr/log.cc +0 -166
- data/src/core/lib/iomgr/ev_windows.cc +0 -30
- data/src/core/lib/promise/trace.cc +0 -20
- data/src/core/lib/promise/trace.h +0 -24
- data/src/core/lib/resource_quota/trace.cc +0 -19
- data/src/core/lib/resource_quota/trace.h +0 -24
- data/src/core/lib/slice/slice_refcount.cc +0 -20
- data/src/core/lib/surface/api_trace.cc +0 -25
- data/src/core/lib/surface/call_trace.h +0 -24
- data/src/core/lib/surface/wait_for_cq_end_op.cc +0 -75
- data/src/core/lib/surface/wait_for_cq_end_op.h +0 -72
- data/src/core/lib/transport/batch_builder.cc +0 -172
- data/src/core/lib/transport/batch_builder.h +0 -474
- data/src/core/resolver/xds/xds_resolver_trace.cc +0 -25
- data/src/core/resolver/xds/xds_resolver_trace.h +0 -30
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -122
- /data/src/core/{lib/gpr → util}/alloc.cc +0 -0
- /data/src/core/{lib/gpr → util}/iphone/cpu.cc +0 -0
- /data/src/core/{lib/gpr → util}/linux/cpu.cc +0 -0
- /data/src/core/{lib/gpr → util}/posix/string.cc +0 -0
- /data/src/core/{lib/gpr → util}/posix/sync.cc +0 -0
- /data/src/core/{lib/gpr → util}/sync.cc +0 -0
- /data/src/core/{lib/gpr → util}/sync_abseil.cc +0 -0
- /data/src/core/{lib/gpr → util}/time.cc +0 -0
- /data/src/core/{lib/gpr → util}/windows/cpu.cc +0 -0
- /data/src/core/{lib/gpr → util}/windows/sync.cc +0 -0
@@ -27,13 +27,13 @@
|
|
27
27
|
#include <grpc/support/log.h>
|
28
28
|
#include <grpc/support/port_platform.h>
|
29
29
|
|
30
|
+
#include "src/core/lib/debug/trace.h"
|
30
31
|
#include "src/core/lib/gprpp/construct_destruct.h"
|
31
32
|
#include "src/core/lib/promise/activity.h"
|
32
33
|
#include "src/core/lib/promise/detail/promise_factory.h"
|
33
34
|
#include "src/core/lib/promise/detail/status.h"
|
34
35
|
#include "src/core/lib/promise/poll.h"
|
35
36
|
#include "src/core/lib/promise/status_flag.h"
|
36
|
-
#include "src/core/lib/promise/trace.h"
|
37
37
|
|
38
38
|
namespace grpc_core {
|
39
39
|
|
@@ -164,14 +164,14 @@ class ForEach {
|
|
164
164
|
}
|
165
165
|
|
166
166
|
Poll<Result> PollReaderNext() {
|
167
|
-
if (
|
167
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
168
168
|
gpr_log(GPR_INFO, "%s PollReaderNext", DebugTag().c_str());
|
169
169
|
}
|
170
170
|
auto r = reader_next_();
|
171
171
|
if (auto* p = r.value_if_ready()) {
|
172
172
|
switch (NextValueTraits<ReaderResult>::Type(*p)) {
|
173
173
|
case NextValueType::kValue: {
|
174
|
-
if (
|
174
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
175
175
|
gpr_log(GPR_INFO, "%s PollReaderNext: got value",
|
176
176
|
DebugTag().c_str());
|
177
177
|
}
|
@@ -183,14 +183,14 @@ class ForEach {
|
|
183
183
|
return PollAction();
|
184
184
|
}
|
185
185
|
case NextValueType::kEndOfStream: {
|
186
|
-
if (
|
186
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
187
187
|
gpr_log(GPR_INFO, "%s PollReaderNext: got end of stream",
|
188
188
|
DebugTag().c_str());
|
189
189
|
}
|
190
190
|
return Done<Result>::Make(false);
|
191
191
|
}
|
192
192
|
case NextValueType::kError: {
|
193
|
-
if (
|
193
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
194
194
|
gpr_log(GPR_INFO, "%s PollReaderNext: got error",
|
195
195
|
DebugTag().c_str());
|
196
196
|
}
|
@@ -202,7 +202,7 @@ class ForEach {
|
|
202
202
|
}
|
203
203
|
|
204
204
|
Poll<Result> PollAction() {
|
205
|
-
if (
|
205
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
206
206
|
gpr_log(GPR_INFO, "%s PollAction", DebugTag().c_str());
|
207
207
|
}
|
208
208
|
auto r = in_action_.promise();
|
@@ -35,7 +35,6 @@
|
|
35
35
|
#include "src/core/lib/promise/context.h"
|
36
36
|
#include "src/core/lib/promise/detail/promise_factory.h"
|
37
37
|
#include "src/core/lib/promise/poll.h"
|
38
|
-
#include "src/core/lib/promise/trace.h"
|
39
38
|
#include "src/core/lib/resource_quota/arena.h"
|
40
39
|
|
41
40
|
namespace grpc_core {
|
@@ -88,7 +87,7 @@ class InterceptorList {
|
|
88
87
|
public:
|
89
88
|
RunPromise(size_t memory_required, Map** factory, absl::optional<T> value) {
|
90
89
|
if (!value.has_value() || *factory == nullptr) {
|
91
|
-
if (
|
90
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
92
91
|
gpr_log(GPR_DEBUG,
|
93
92
|
"InterceptorList::RunPromise[%p]: create immediate", this);
|
94
93
|
}
|
@@ -101,7 +100,7 @@ class InterceptorList {
|
|
101
100
|
async_resolution_.space.get());
|
102
101
|
async_resolution_.current_factory = *factory;
|
103
102
|
async_resolution_.first_factory = factory;
|
104
|
-
if (
|
103
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
105
104
|
gpr_log(GPR_DEBUG,
|
106
105
|
"InterceptorList::RunPromise[%p]: create async; mem=%p", this,
|
107
106
|
async_resolution_.space.get());
|
@@ -110,7 +109,7 @@ class InterceptorList {
|
|
110
109
|
}
|
111
110
|
|
112
111
|
~RunPromise() {
|
113
|
-
if (
|
112
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
114
113
|
gpr_log(GPR_DEBUG, "InterceptorList::RunPromise[%p]: destroy", this);
|
115
114
|
}
|
116
115
|
if (is_immediately_resolved_) {
|
@@ -129,7 +128,7 @@ class InterceptorList {
|
|
129
128
|
|
130
129
|
RunPromise(RunPromise&& other) noexcept
|
131
130
|
: is_immediately_resolved_(other.is_immediately_resolved_) {
|
132
|
-
if (
|
131
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
133
132
|
gpr_log(GPR_DEBUG, "InterceptorList::RunPromise[%p]: move from %p",
|
134
133
|
this, &other);
|
135
134
|
}
|
@@ -143,7 +142,7 @@ class InterceptorList {
|
|
143
142
|
RunPromise& operator=(RunPromise&& other) noexcept = delete;
|
144
143
|
|
145
144
|
Poll<absl::optional<T>> operator()() {
|
146
|
-
if (
|
145
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
147
146
|
gpr_log(GPR_DEBUG, "InterceptorList::RunPromise[%p]: %s", this,
|
148
147
|
DebugString().c_str());
|
149
148
|
}
|
@@ -161,7 +160,7 @@ class InterceptorList {
|
|
161
160
|
async_resolution_.current_factory =
|
162
161
|
async_resolution_.current_factory->next();
|
163
162
|
if (!p->has_value()) async_resolution_.current_factory = nullptr;
|
164
|
-
if (
|
163
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
165
164
|
gpr_log(GPR_DEBUG, "InterceptorList::RunPromise[%p]: %s", this,
|
166
165
|
DebugString().c_str());
|
167
166
|
}
|
@@ -27,9 +27,9 @@
|
|
27
27
|
#include <grpc/support/log.h>
|
28
28
|
#include <grpc/support/port_platform.h>
|
29
29
|
|
30
|
+
#include "src/core/lib/debug/trace.h"
|
30
31
|
#include "src/core/lib/promise/activity.h"
|
31
32
|
#include "src/core/lib/promise/poll.h"
|
32
|
-
#include "src/core/lib/promise/trace.h"
|
33
33
|
|
34
34
|
namespace grpc_core {
|
35
35
|
|
@@ -67,7 +67,7 @@ class Latch {
|
|
67
67
|
has_had_waiters_ = true;
|
68
68
|
#endif
|
69
69
|
return [this]() -> Poll<T> {
|
70
|
-
if (
|
70
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
71
71
|
gpr_log(GPR_INFO, "%sWait %s", DebugTag().c_str(),
|
72
72
|
StateString().c_str());
|
73
73
|
}
|
@@ -86,7 +86,7 @@ class Latch {
|
|
86
86
|
has_had_waiters_ = true;
|
87
87
|
#endif
|
88
88
|
return [this]() -> Poll<T> {
|
89
|
-
if (
|
89
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
90
90
|
gpr_log(GPR_INFO, "%sWaitAndCopy %s", DebugTag().c_str(),
|
91
91
|
StateString().c_str());
|
92
92
|
}
|
@@ -100,7 +100,7 @@ class Latch {
|
|
100
100
|
|
101
101
|
// Set the value of the latch. Can only be called once.
|
102
102
|
void Set(T value) {
|
103
|
-
if (
|
103
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
104
104
|
gpr_log(GPR_INFO, "%sSet %s", DebugTag().c_str(), StateString().c_str());
|
105
105
|
}
|
106
106
|
DCHECK(!has_value_);
|
@@ -163,7 +163,7 @@ class Latch<void> {
|
|
163
163
|
has_had_waiters_ = true;
|
164
164
|
#endif
|
165
165
|
return [this]() -> Poll<Empty> {
|
166
|
-
if (
|
166
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
167
167
|
gpr_log(GPR_INFO, "%sPollWait %s", DebugTag().c_str(),
|
168
168
|
StateString().c_str());
|
169
169
|
}
|
@@ -177,7 +177,7 @@ class Latch<void> {
|
|
177
177
|
|
178
178
|
// Set the latch. Can only be called once.
|
179
179
|
void Set() {
|
180
|
-
if (
|
180
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
181
181
|
gpr_log(GPR_INFO, "%sSet %s", DebugTag().c_str(), StateString().c_str());
|
182
182
|
}
|
183
183
|
DCHECK(!is_set_);
|
@@ -226,7 +226,7 @@ class ExternallyObservableLatch<void> {
|
|
226
226
|
// Produce a promise to wait for this latch.
|
227
227
|
auto Wait() {
|
228
228
|
return [this]() -> Poll<Empty> {
|
229
|
-
if (
|
229
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
230
230
|
gpr_log(GPR_INFO, "%sPollWait %s", DebugTag().c_str(),
|
231
231
|
StateString().c_str());
|
232
232
|
}
|
@@ -240,7 +240,7 @@ class ExternallyObservableLatch<void> {
|
|
240
240
|
|
241
241
|
// Set the latch.
|
242
242
|
void Set() {
|
243
|
-
if (
|
243
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
244
244
|
gpr_log(GPR_INFO, "%sSet %s", DebugTag().c_str(), StateString().c_str());
|
245
245
|
}
|
246
246
|
is_set_.store(true, std::memory_order_relaxed);
|
@@ -250,7 +250,7 @@ class ExternallyObservableLatch<void> {
|
|
250
250
|
bool IsSet() const { return is_set_.load(std::memory_order_relaxed); }
|
251
251
|
|
252
252
|
void Reset() {
|
253
|
-
if (
|
253
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
254
254
|
gpr_log(GPR_INFO, "%sReset %s", DebugTag().c_str(),
|
255
255
|
StateString().c_str());
|
256
256
|
}
|
data/src/core/lib/promise/map.h
CHANGED
@@ -72,6 +72,23 @@ promise_detail::Map<Promise, Fn> Map(Promise promise, Fn fn) {
|
|
72
72
|
return promise_detail::Map<Promise, Fn>(std::move(promise), std::move(fn));
|
73
73
|
}
|
74
74
|
|
75
|
+
// Maps a promise to a new promise that returns a tuple of the original result
|
76
|
+
// and a bool indicating whether there was ever a Pending{} value observed from
|
77
|
+
// polling.
|
78
|
+
template <typename Promise>
|
79
|
+
auto CheckDelayed(Promise promise) {
|
80
|
+
using P = promise_detail::PromiseLike<Promise>;
|
81
|
+
return [delayed = false, promise = P(std::move(promise))]() mutable
|
82
|
+
-> Poll<std::tuple<typename P::Result, bool>> {
|
83
|
+
auto r = promise();
|
84
|
+
if (r.pending()) {
|
85
|
+
delayed = true;
|
86
|
+
return Pending{};
|
87
|
+
}
|
88
|
+
return std::make_tuple(r.value(), delayed);
|
89
|
+
};
|
90
|
+
}
|
91
|
+
|
75
92
|
// Callable that takes a tuple and returns one element
|
76
93
|
template <size_t kElem>
|
77
94
|
struct JustElem {
|
@@ -0,0 +1,182 @@
|
|
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_OBSERVABLE_H
|
16
|
+
#define GRPC_SRC_CORE_LIB_PROMISE_OBSERVABLE_H
|
17
|
+
|
18
|
+
#include "absl/container/flat_hash_set.h"
|
19
|
+
#include "absl/functional/any_invocable.h"
|
20
|
+
#include "absl/log/check.h"
|
21
|
+
|
22
|
+
#include <grpc/support/port_platform.h>
|
23
|
+
|
24
|
+
#include "src/core/lib/gprpp/sync.h"
|
25
|
+
#include "src/core/lib/promise/activity.h"
|
26
|
+
#include "src/core/lib/promise/poll.h"
|
27
|
+
|
28
|
+
namespace grpc_core {
|
29
|
+
|
30
|
+
// Observable allows broadcasting a value to multiple interested observers.
|
31
|
+
template <typename T>
|
32
|
+
class Observable {
|
33
|
+
public:
|
34
|
+
// We need to assign a value initially.
|
35
|
+
explicit Observable(T initial)
|
36
|
+
: state_(MakeRefCounted<State>(std::move(initial))) {}
|
37
|
+
|
38
|
+
// Update the value to something new. Awakes any waiters.
|
39
|
+
void Set(T value) { state_->Set(std::move(value)); }
|
40
|
+
|
41
|
+
// Returns a promise that resolves to a T when is_acceptable returns true for
|
42
|
+
// that value.
|
43
|
+
// is_acceptable is any invocable that takes a `const T&` and returns a bool.
|
44
|
+
template <typename F>
|
45
|
+
auto NextWhen(F is_acceptable) {
|
46
|
+
return ObserverWhen<F>(state_, std::move(is_acceptable));
|
47
|
+
}
|
48
|
+
|
49
|
+
// Returns a promise that resolves to a T when the value becomes != current.
|
50
|
+
auto Next(T current) {
|
51
|
+
return NextWhen([current = std::move(current)](const T& value) {
|
52
|
+
return value != current;
|
53
|
+
});
|
54
|
+
}
|
55
|
+
|
56
|
+
private:
|
57
|
+
// Forward declaration so we can form pointers to Observer in State.
|
58
|
+
class Observer;
|
59
|
+
|
60
|
+
// State keeps track of all observable state.
|
61
|
+
// It's a refcounted object so that promises reading the state are not tied
|
62
|
+
// to the lifetime of the Observable.
|
63
|
+
class State : public RefCounted<State> {
|
64
|
+
public:
|
65
|
+
explicit State(T value) : value_(std::move(value)) {}
|
66
|
+
|
67
|
+
// Update the value and wake all observers.
|
68
|
+
void Set(T value) {
|
69
|
+
MutexLock lock(&mu_);
|
70
|
+
std::swap(value_, value);
|
71
|
+
WakeAll();
|
72
|
+
}
|
73
|
+
|
74
|
+
// Export our mutex so that Observer can use it.
|
75
|
+
Mutex* mu() ABSL_LOCK_RETURNED(mu_) { return &mu_; }
|
76
|
+
|
77
|
+
// Fetch a ref to the current value.
|
78
|
+
const T& current() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
|
79
|
+
return value_;
|
80
|
+
}
|
81
|
+
|
82
|
+
// Remove an observer from the set (it no longer needs updates).
|
83
|
+
void Remove(Observer* observer) ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
|
84
|
+
observers_.erase(observer);
|
85
|
+
}
|
86
|
+
|
87
|
+
// Add an observer to the set (it needs updates).
|
88
|
+
GRPC_MUST_USE_RESULT Waker Add(Observer* observer)
|
89
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
|
90
|
+
observers_.insert(observer);
|
91
|
+
return GetContext<Activity>()->MakeNonOwningWaker();
|
92
|
+
}
|
93
|
+
|
94
|
+
private:
|
95
|
+
// Wake all observers.
|
96
|
+
void WakeAll() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
|
97
|
+
for (auto* observer : observers_) {
|
98
|
+
observer->Wakeup();
|
99
|
+
}
|
100
|
+
}
|
101
|
+
|
102
|
+
Mutex mu_;
|
103
|
+
// All observers that may need an update.
|
104
|
+
absl::flat_hash_set<Observer*> observers_ ABSL_GUARDED_BY(mu_);
|
105
|
+
// The current value.
|
106
|
+
T value_ ABSL_GUARDED_BY(mu_);
|
107
|
+
};
|
108
|
+
|
109
|
+
// A promise that resolves to a T when ShouldReturn() returns true.
|
110
|
+
// Subclasses must implement ShouldReturn().
|
111
|
+
class Observer {
|
112
|
+
public:
|
113
|
+
explicit Observer(RefCountedPtr<State> state) : state_(std::move(state)) {}
|
114
|
+
|
115
|
+
virtual ~Observer() {
|
116
|
+
// If we saw a pending at all then we *may* be in the set of observers.
|
117
|
+
// If not we're definitely not and we can avoid taking the lock at all.
|
118
|
+
if (!saw_pending_) return;
|
119
|
+
MutexLock lock(state_->mu());
|
120
|
+
auto w = std::move(waker_);
|
121
|
+
state_->Remove(this);
|
122
|
+
}
|
123
|
+
|
124
|
+
Observer(const Observer&) = delete;
|
125
|
+
Observer& operator=(const Observer&) = delete;
|
126
|
+
Observer(Observer&& other) noexcept : state_(std::move(other.state_)) {
|
127
|
+
CHECK(other.waker_.is_unwakeable());
|
128
|
+
DCHECK(waker_.is_unwakeable());
|
129
|
+
CHECK(!other.saw_pending_);
|
130
|
+
}
|
131
|
+
Observer& operator=(Observer&& other) noexcept = delete;
|
132
|
+
|
133
|
+
void Wakeup() { waker_.WakeupAsync(); }
|
134
|
+
|
135
|
+
virtual bool ShouldReturn(const T& current) = 0;
|
136
|
+
|
137
|
+
Poll<T> operator()() {
|
138
|
+
MutexLock lock(state_->mu());
|
139
|
+
// Check if the value has changed yet.
|
140
|
+
if (ShouldReturn(state_->current())) {
|
141
|
+
if (saw_pending_ && !waker_.is_unwakeable()) state_->Remove(this);
|
142
|
+
return state_->current();
|
143
|
+
}
|
144
|
+
// Record that we saw at least one pending and then register for wakeup.
|
145
|
+
saw_pending_ = true;
|
146
|
+
if (waker_.is_unwakeable()) waker_ = state_->Add(this);
|
147
|
+
return Pending{};
|
148
|
+
}
|
149
|
+
|
150
|
+
private:
|
151
|
+
RefCountedPtr<State> state_;
|
152
|
+
Waker waker_;
|
153
|
+
bool saw_pending_ = false;
|
154
|
+
};
|
155
|
+
|
156
|
+
// A promise that resolves to a T when is_acceptable returns true for
|
157
|
+
// the current value.
|
158
|
+
template <typename F>
|
159
|
+
class ObserverWhen : public Observer {
|
160
|
+
public:
|
161
|
+
ObserverWhen(RefCountedPtr<State> state, F is_acceptable)
|
162
|
+
: Observer(std::move(state)),
|
163
|
+
is_acceptable_(std::move(is_acceptable)) {}
|
164
|
+
|
165
|
+
ObserverWhen(ObserverWhen&& other) noexcept
|
166
|
+
: Observer(std::move(other)),
|
167
|
+
is_acceptable_(std::move(other.is_acceptable_)) {}
|
168
|
+
|
169
|
+
bool ShouldReturn(const T& current) override {
|
170
|
+
return is_acceptable_(current);
|
171
|
+
}
|
172
|
+
|
173
|
+
private:
|
174
|
+
F is_acceptable_;
|
175
|
+
};
|
176
|
+
|
177
|
+
RefCountedPtr<State> state_;
|
178
|
+
};
|
179
|
+
|
180
|
+
} // namespace grpc_core
|
181
|
+
|
182
|
+
#endif // GRPC_SRC_CORE_LIB_PROMISE_OBSERVABLE_H
|
@@ -26,15 +26,12 @@
|
|
26
26
|
#include "src/core/lib/gprpp/sync.h"
|
27
27
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
28
28
|
#include "src/core/lib/promise/activity.h"
|
29
|
-
#include "src/core/lib/promise/trace.h"
|
30
29
|
|
31
30
|
#ifdef GRPC_MAXIMIZE_THREADYNESS
|
32
31
|
#include "src/core/lib/gprpp/thd.h" // IWYU pragma: keep
|
33
32
|
#include "src/core/lib/iomgr/exec_ctx.h" // IWYU pragma: keep
|
34
33
|
#endif
|
35
34
|
|
36
|
-
grpc_core::DebugOnlyTraceFlag grpc_trace_party_state(false, "party_state");
|
37
|
-
|
38
35
|
namespace grpc_core {
|
39
36
|
|
40
37
|
namespace {
|
@@ -273,14 +270,14 @@ bool Party::RunOneParticipant(int i) {
|
|
273
270
|
// somewhere.
|
274
271
|
auto* participant = participants_[i].load(std::memory_order_acquire);
|
275
272
|
if (participant == nullptr) {
|
276
|
-
if (
|
273
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
277
274
|
gpr_log(GPR_INFO, "%s[party] wakeup %d already complete",
|
278
275
|
DebugTag().c_str(), i);
|
279
276
|
}
|
280
277
|
return false;
|
281
278
|
}
|
282
279
|
absl::string_view name;
|
283
|
-
if (
|
280
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
284
281
|
name = participant->name();
|
285
282
|
gpr_log(GPR_INFO, "%s[%s] begin job %d", DebugTag().c_str(),
|
286
283
|
std::string(name).c_str(), i);
|
@@ -306,10 +303,12 @@ void Party::AddParticipants(Participant** participants, size_t count) {
|
|
306
303
|
bool run_party = sync_.AddParticipantsAndRef(count, [this, participants,
|
307
304
|
count](size_t* slots) {
|
308
305
|
for (size_t i = 0; i < count; i++) {
|
309
|
-
if (
|
306
|
+
if (GRPC_TRACE_FLAG_ENABLED(party_state)) {
|
310
307
|
gpr_log(GPR_INFO,
|
311
|
-
"Party %p AddParticipant: %s @ %" PRIdPTR
|
312
|
-
|
308
|
+
"Party %p AddParticipant: %s @ %" PRIdPTR
|
309
|
+
" [participant=%p]",
|
310
|
+
&sync_, std::string(participants[i]->name()).c_str(), slots[i],
|
311
|
+
participants[i]);
|
313
312
|
}
|
314
313
|
participants_[slots[i]].store(participants[i], std::memory_order_release);
|
315
314
|
}
|
@@ -31,6 +31,7 @@
|
|
31
31
|
#include <grpc/support/log.h>
|
32
32
|
#include <grpc/support/port_platform.h>
|
33
33
|
|
34
|
+
#include "src/core/lib/debug/trace.h"
|
34
35
|
#include "src/core/lib/gprpp/construct_destruct.h"
|
35
36
|
#include "src/core/lib/gprpp/crash.h"
|
36
37
|
#include "src/core/lib/gprpp/ref_counted.h"
|
@@ -40,7 +41,6 @@
|
|
40
41
|
#include "src/core/lib/promise/context.h"
|
41
42
|
#include "src/core/lib/promise/detail/promise_factory.h"
|
42
43
|
#include "src/core/lib/promise/poll.h"
|
43
|
-
#include "src/core/lib/promise/trace.h"
|
44
44
|
|
45
45
|
// Two implementations of party synchronization are provided: one using a single
|
46
46
|
// atomic, the other using a mutex and a set of state variables.
|
@@ -52,8 +52,6 @@
|
|
52
52
|
// There's a thought of fuzzing the two implementations against each other as
|
53
53
|
// a correctness check of both, but that's not implemented yet.
|
54
54
|
|
55
|
-
extern grpc_core::DebugOnlyTraceFlag grpc_trace_party_state;
|
56
|
-
|
57
55
|
#define GRPC_PARTY_SYNC_USING_ATOMICS
|
58
56
|
// #define GRPC_PARTY_SYNC_USING_MUTEX
|
59
57
|
|
@@ -231,7 +229,7 @@ class PartySyncUsingAtomics {
|
|
231
229
|
|
232
230
|
void LogStateChange(const char* op, uint64_t prev_state, uint64_t new_state,
|
233
231
|
DebugLocation loc = {}) {
|
234
|
-
if (
|
232
|
+
if (GRPC_TRACE_FLAG_ENABLED(party_state)) {
|
235
233
|
gpr_log(loc.file(), loc.line(), GPR_LOG_SEVERITY_INFO,
|
236
234
|
"Party %p %30s: %016" PRIx64 " -> %016" PRIx64, this, op,
|
237
235
|
prev_state, new_state);
|
@@ -379,6 +377,11 @@ class Party : public Activity, private Wakeable {
|
|
379
377
|
// The on_complete callback will be called with the result of the promise if
|
380
378
|
// it completes.
|
381
379
|
// A maximum of sixteen promises can be spawned onto a party.
|
380
|
+
// promise_factory called to create the promise with the party lock taken;
|
381
|
+
// after the promise is created the factory is destroyed.
|
382
|
+
// This means that pointers or references to factory members will be
|
383
|
+
// invalidated after the promise is created - so the promise should not retain
|
384
|
+
// any of these.
|
382
385
|
template <typename Factory, typename OnComplete>
|
383
386
|
void Spawn(absl::string_view name, Factory promise_factory,
|
384
387
|
OnComplete on_complete);
|
@@ -641,10 +644,9 @@ struct ContextSubclass<Party> {
|
|
641
644
|
template <typename Factory, typename OnComplete>
|
642
645
|
void Party::BulkSpawner::Spawn(absl::string_view name, Factory promise_factory,
|
643
646
|
OnComplete on_complete) {
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
}
|
647
|
+
GRPC_TRACE_LOG(promise_primitives, INFO)
|
648
|
+
<< party_->DebugTag() << "[bulk_spawn] On " << this << " queue " << name
|
649
|
+
<< " (" << sizeof(ParticipantImpl<Factory, OnComplete>) << " bytes)";
|
648
650
|
participants_[num_participants_++] = new ParticipantImpl<Factory, OnComplete>(
|
649
651
|
name, std::move(promise_factory), std::move(on_complete));
|
650
652
|
}
|
data/src/core/lib/promise/pipe.h
CHANGED
@@ -23,6 +23,7 @@
|
|
23
23
|
#include <utility>
|
24
24
|
|
25
25
|
#include "absl/log/check.h"
|
26
|
+
#include "absl/log/log.h"
|
26
27
|
#include "absl/strings/str_cat.h"
|
27
28
|
#include "absl/types/optional.h"
|
28
29
|
#include "absl/types/variant.h"
|
@@ -39,7 +40,6 @@
|
|
39
40
|
#include "src/core/lib/promise/map.h"
|
40
41
|
#include "src/core/lib/promise/poll.h"
|
41
42
|
#include "src/core/lib/promise/seq.h"
|
42
|
-
#include "src/core/lib/promise/trace.h"
|
43
43
|
#include "src/core/lib/resource_quota/arena.h"
|
44
44
|
|
45
45
|
namespace grpc_core {
|
@@ -118,9 +118,8 @@ class Center : public InterceptorList<T> {
|
|
118
118
|
|
119
119
|
// Add one ref to this object, and return this.
|
120
120
|
void IncrementRefCount() {
|
121
|
-
|
122
|
-
|
123
|
-
}
|
121
|
+
GRPC_TRACE_VLOG(promise_primitives, 2)
|
122
|
+
<< DebugOpString("IncrementRefCount");
|
124
123
|
refs_++;
|
125
124
|
DCHECK_NE(refs_, 0);
|
126
125
|
}
|
@@ -133,9 +132,7 @@ class Center : public InterceptorList<T> {
|
|
133
132
|
// Drop a ref
|
134
133
|
// If no refs remain, destroy this object
|
135
134
|
void Unref() {
|
136
|
-
|
137
|
-
gpr_log(GPR_DEBUG, "%s", DebugOpString("Unref").c_str());
|
138
|
-
}
|
135
|
+
GRPC_TRACE_VLOG(promise_primitives, 2) << DebugOpString("Unref");
|
139
136
|
DCHECK_GT(refs_, 0);
|
140
137
|
refs_--;
|
141
138
|
if (0 == refs_) {
|
@@ -148,9 +145,7 @@ class Center : public InterceptorList<T> {
|
|
148
145
|
// Return true if the value was pushed.
|
149
146
|
// Return false if the recv end is closed.
|
150
147
|
Poll<bool> Push(T* value) {
|
151
|
-
|
152
|
-
gpr_log(GPR_INFO, "%s", DebugOpString("Push").c_str());
|
153
|
-
}
|
148
|
+
GRPC_TRACE_LOG(promise_primitives, INFO) << DebugOpString("Push");
|
154
149
|
DCHECK_NE(refs_, 0);
|
155
150
|
switch (value_state_) {
|
156
151
|
case ValueState::kClosed:
|
@@ -172,9 +167,7 @@ class Center : public InterceptorList<T> {
|
|
172
167
|
}
|
173
168
|
|
174
169
|
Poll<bool> PollAck() {
|
175
|
-
|
176
|
-
gpr_log(GPR_INFO, "%s", DebugOpString("PollAck").c_str());
|
177
|
-
}
|
170
|
+
GRPC_TRACE_LOG(promise_primitives, INFO) << DebugOpString("PollAck");
|
178
171
|
DCHECK_NE(refs_, 0);
|
179
172
|
switch (value_state_) {
|
180
173
|
case ValueState::kClosed:
|
@@ -200,9 +193,7 @@ class Center : public InterceptorList<T> {
|
|
200
193
|
// Return the value if one was retrieved.
|
201
194
|
// Return nullopt if the send end is closed and no value had been pushed.
|
202
195
|
Poll<absl::optional<T>> Next() {
|
203
|
-
|
204
|
-
gpr_log(GPR_INFO, "%s", DebugOpString("Next").c_str());
|
205
|
-
}
|
196
|
+
GRPC_TRACE_LOG(promise_primitives, INFO) << DebugOpString("Next");
|
206
197
|
DCHECK_NE(refs_, 0);
|
207
198
|
switch (value_state_) {
|
208
199
|
case ValueState::kEmpty:
|
@@ -226,9 +217,8 @@ class Center : public InterceptorList<T> {
|
|
226
217
|
// Check if the pipe is closed for sending (if there is a value still queued
|
227
218
|
// but the pipe is closed, reports closed).
|
228
219
|
Poll<bool> PollClosedForSender() {
|
229
|
-
|
230
|
-
|
231
|
-
}
|
220
|
+
GRPC_TRACE_LOG(promise_primitives, INFO)
|
221
|
+
<< DebugOpString("PollClosedForSender");
|
232
222
|
DCHECK_NE(refs_, 0);
|
233
223
|
switch (value_state_) {
|
234
224
|
case ValueState::kEmpty:
|
@@ -249,9 +239,8 @@ class Center : public InterceptorList<T> {
|
|
249
239
|
// Check if the pipe is closed for receiving (if there is a value still queued
|
250
240
|
// but the pipe is closed, reports open).
|
251
241
|
Poll<bool> PollClosedForReceiver() {
|
252
|
-
|
253
|
-
|
254
|
-
}
|
242
|
+
GRPC_TRACE_LOG(promise_primitives, INFO)
|
243
|
+
<< DebugOpString("PollClosedForReceiver");
|
255
244
|
DCHECK_NE(refs_, 0);
|
256
245
|
switch (value_state_) {
|
257
246
|
case ValueState::kEmpty:
|
@@ -270,9 +259,7 @@ class Center : public InterceptorList<T> {
|
|
270
259
|
}
|
271
260
|
|
272
261
|
Poll<Empty> PollEmpty() {
|
273
|
-
|
274
|
-
gpr_log(GPR_INFO, "%s", DebugOpString("PollEmpty").c_str());
|
275
|
-
}
|
262
|
+
GRPC_TRACE_LOG(promise_primitives, INFO) << DebugOpString("PollEmpty");
|
276
263
|
DCHECK_NE(refs_, 0);
|
277
264
|
switch (value_state_) {
|
278
265
|
case ValueState::kReady:
|
@@ -290,9 +277,7 @@ class Center : public InterceptorList<T> {
|
|
290
277
|
}
|
291
278
|
|
292
279
|
void AckNext() {
|
293
|
-
|
294
|
-
gpr_log(GPR_INFO, "%s", DebugOpString("AckNext").c_str());
|
295
|
-
}
|
280
|
+
GRPC_TRACE_LOG(promise_primitives, INFO) << DebugOpString("AckNext");
|
296
281
|
switch (value_state_) {
|
297
282
|
case ValueState::kReady:
|
298
283
|
case ValueState::kWaitingForAck:
|
@@ -317,9 +302,7 @@ class Center : public InterceptorList<T> {
|
|
317
302
|
}
|
318
303
|
|
319
304
|
void MarkClosed() {
|
320
|
-
|
321
|
-
gpr_log(GPR_INFO, "%s", DebugOpString("MarkClosed").c_str());
|
322
|
-
}
|
305
|
+
GRPC_TRACE_LOG(promise_primitives, INFO) << DebugOpString("MarkClosed");
|
323
306
|
switch (value_state_) {
|
324
307
|
case ValueState::kEmpty:
|
325
308
|
case ValueState::kAcked:
|
@@ -346,9 +329,7 @@ class Center : public InterceptorList<T> {
|
|
346
329
|
}
|
347
330
|
|
348
331
|
void MarkCancelled() {
|
349
|
-
|
350
|
-
gpr_log(GPR_INFO, "%s", DebugOpString("MarkCancelled").c_str());
|
351
|
-
}
|
332
|
+
GRPC_TRACE_LOG(promise_primitives, INFO) << DebugOpString("MarkCancelled");
|
352
333
|
switch (value_state_) {
|
353
334
|
case ValueState::kEmpty:
|
354
335
|
case ValueState::kAcked:
|
@@ -654,7 +635,7 @@ class Push {
|
|
654
635
|
|
655
636
|
Poll<bool> operator()() {
|
656
637
|
if (center_ == nullptr) {
|
657
|
-
if (
|
638
|
+
if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
|
658
639
|
gpr_log(GPR_DEBUG, "%s Pipe push has a null center",
|
659
640
|
GetContext<Activity>()->DebugTag().c_str());
|
660
641
|
}
|
@@ -171,6 +171,8 @@ class ValueOrFailure {
|
|
171
171
|
T& value() { return value_.value(); }
|
172
172
|
const T& operator*() const { return *value_; }
|
173
173
|
T& operator*() { return *value_; }
|
174
|
+
const T* operator->() const { return &*value_; }
|
175
|
+
T* operator->() { return &*value_; }
|
174
176
|
|
175
177
|
bool operator==(const ValueOrFailure& other) const {
|
176
178
|
return value_ == other.value_;
|