grpc 1.46.2 → 1.48.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +138 -128
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/event_engine.h +62 -18
- data/include/grpc/event_engine/memory_allocator.h +0 -15
- data/include/grpc/event_engine/port.h +1 -1
- data/include/grpc/event_engine/slice.h +286 -0
- data/include/grpc/event_engine/slice_buffer.h +118 -0
- data/include/grpc/grpc.h +3 -3
- data/include/grpc/grpc_security.h +11 -0
- data/include/grpc/impl/codegen/compression_types.h +2 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -1
- data/include/grpc/impl/codegen/gpr_types.h +2 -1
- data/include/grpc/impl/codegen/grpc_types.h +2 -1
- data/include/grpc/impl/codegen/port_platform.h +106 -39
- data/include/grpc/impl/codegen/slice.h +1 -1
- data/src/core/ext/filters/census/grpc_context.cc +3 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +35 -35
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +20 -1
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
- data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
- data/src/core/ext/filters/client_channel/backup_poller.cc +8 -6
- data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +43 -21
- data/src/core/ext/filters/client_channel/client_channel.cc +111 -82
- data/src/core/ext/filters/client_channel/client_channel.h +43 -8
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/config_selector.h +8 -6
- data/src/core/ext/filters/client_channel/connector.h +9 -3
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +19 -6
- data/src/core/ext/filters/client_channel/dynamic_filters.h +12 -2
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
- data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
- data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +11 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +132 -62
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +407 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1036 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +149 -147
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +176 -85
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +303 -203
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +6 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +92 -54
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +240 -214
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +119 -111
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +86 -71
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +101 -25
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +35 -11
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +36 -20
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +78 -14
- data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
- data/src/core/ext/filters/client_channel/lb_policy.h +18 -31
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +11 -6
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +1 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +26 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +139 -48
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +6 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +36 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +39 -7
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +18 -19
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +61 -16
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +14 -2
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +17 -12
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +111 -46
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +12 -18
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
- data/src/core/ext/filters/client_channel/retry_filter.cc +75 -36
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +12 -13
- data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
- data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +24 -6
- data/src/core/ext/filters/client_channel/subchannel.cc +186 -187
- data/src/core/ext/filters/client_channel/subchannel.h +80 -36
- data/src/core/ext/filters/client_channel/subchannel_interface.h +51 -41
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +24 -95
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +17 -9
- data/src/core/ext/filters/deadline/deadline_filter.cc +18 -9
- data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +22 -6
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
- data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +30 -10
- data/src/core/ext/filters/http/client/http_client_filter.h +15 -2
- data/src/core/ext/filters/http/client_authority_filter.cc +16 -20
- data/src/core/ext/filters/http/client_authority_filter.h +5 -2
- data/src/core/ext/filters/http/http_filters_plugin.cc +16 -9
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +65 -187
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +45 -107
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +95 -255
- data/src/core/ext/filters/http/server/http_server_filter.h +37 -3
- data/src/core/ext/filters/message_size/message_size_filter.cc +45 -41
- data/src/core/ext/filters/message_size/message_size_filter.h +15 -2
- data/src/core/ext/filters/rbac/rbac_filter.cc +15 -3
- data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +104 -138
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +58 -29
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +260 -491
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +6 -1
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +145 -261
- data/src/core/ext/transport/chttp2/transport/flow_control.h +179 -288
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +59 -211
- data/src/core/ext/transport/chttp2/transport/frame_data.h +13 -36
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +10 -42
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +10 -12
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +32 -13
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +53 -37
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +31 -112
- data/src/core/ext/transport/chttp2/transport/parsing.cc +77 -43
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +11 -11
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +54 -21
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +93 -86
- data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
- data/src/core/ext/xds/certificate_provider_factory.h +6 -1
- data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
- data/src/core/ext/xds/certificate_provider_registry.h +3 -1
- data/src/core/ext/xds/certificate_provider_store.cc +6 -2
- data/src/core/ext/xds/certificate_provider_store.h +10 -1
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
- data/src/core/ext/xds/upb_utils.h +1 -2
- data/src/core/ext/xds/xds_api.cc +16 -18
- data/src/core/ext/xds/xds_api.h +12 -5
- data/src/core/ext/xds/xds_bootstrap.cc +39 -26
- data/src/core/ext/xds/xds_bootstrap.h +11 -11
- data/src/core/ext/xds/xds_certificate_provider.cc +16 -4
- data/src/core/ext/xds/xds_certificate_provider.h +17 -2
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +14 -5
- data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
- data/src/core/ext/xds/xds_client.cc +121 -46
- data/src/core/ext/xds/xds_client.h +19 -4
- data/src/core/ext/xds/xds_client_stats.cc +3 -4
- data/src/core/ext/xds/xds_client_stats.h +4 -3
- data/src/core/ext/xds/xds_cluster.cc +126 -25
- data/src/core/ext/xds/xds_cluster.h +12 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
- data/src/core/ext/xds/xds_common_types.cc +36 -22
- data/src/core/ext/xds/xds_common_types.h +12 -4
- data/src/core/ext/xds/xds_endpoint.cc +25 -15
- data/src/core/ext/xds/xds_endpoint.h +13 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +10 -8
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
- data/src/core/ext/xds/xds_http_filters.cc +7 -0
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
- data/src/core/ext/xds/xds_listener.cc +70 -42
- data/src/core/ext/xds/xds_listener.h +10 -1
- data/src/core/ext/xds/xds_resource_type.h +3 -3
- data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
- data/src/core/ext/xds/xds_route_config.cc +56 -28
- data/src/core/ext/xds/xds_route_config.h +11 -2
- data/src/core/ext/xds/xds_routing.cc +16 -0
- data/src/core/ext/xds/xds_routing.h +7 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +56 -7
- data/src/core/lib/address_utils/parse_address.cc +5 -8
- data/src/core/lib/address_utils/parse_address.h +3 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +60 -26
- data/src/core/lib/address_utils/sockaddr_utils.h +9 -4
- data/src/core/lib/avl/avl.h +6 -4
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/backoff/backoff.h +1 -1
- data/src/core/lib/channel/call_finalization.h +4 -0
- data/src/core/lib/channel/call_tracer.h +11 -5
- data/src/core/lib/channel/channel_args.cc +41 -22
- data/src/core/lib/channel/channel_args.h +34 -3
- data/src/core/lib/channel/channel_args_preconditioning.cc +4 -3
- data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +45 -7
- data/src/core/lib/channel/channel_stack.h +45 -9
- data/src/core/lib/channel/channel_stack_builder.cc +9 -19
- data/src/core/lib/channel/channel_stack_builder.h +17 -32
- data/src/core/lib/channel/channel_stack_builder_impl.cc +38 -43
- data/src/core/lib/channel/channel_stack_builder_impl.h +4 -6
- data/src/core/lib/channel/channel_trace.cc +8 -13
- data/src/core/lib/channel/channel_trace.h +6 -3
- data/src/core/lib/channel/channelz.cc +10 -14
- data/src/core/lib/channel/channelz.h +15 -7
- data/src/core/lib/channel/channelz_registry.cc +11 -19
- data/src/core/lib/channel/channelz_registry.h +10 -9
- data/src/core/lib/channel/connected_channel.cc +22 -31
- data/src/core/lib/channel/connected_channel.h +2 -0
- data/src/core/lib/channel/promise_based_filter.cc +451 -190
- data/src/core/lib/channel/promise_based_filter.h +162 -27
- data/src/core/lib/channel/status_util.cc +2 -0
- data/src/core/lib/channel/status_util.h +0 -3
- data/src/core/lib/compression/compression.cc +6 -1
- data/src/core/lib/compression/compression_internal.cc +48 -16
- data/src/core/lib/compression/compression_internal.h +4 -3
- data/src/core/lib/compression/message_compress.cc +3 -1
- data/src/core/lib/compression/message_compress.h +2 -3
- data/src/core/lib/config/core_configuration.cc +3 -0
- data/src/core/lib/config/core_configuration.h +2 -1
- data/src/core/lib/debug/stats.cc +9 -9
- data/src/core/lib/debug/stats.h +2 -1
- data/src/core/lib/debug/stats_data.cc +2 -1
- data/src/core/lib/debug/stats_data.h +0 -4
- data/src/core/lib/debug/trace.h +13 -12
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
- data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
- data/src/core/lib/event_engine/event_engine.cc +29 -14
- data/src/core/lib/event_engine/event_engine_factory.h +5 -0
- data/src/core/lib/event_engine/handle_containers.h +67 -0
- data/src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc +159 -0
- data/src/core/lib/event_engine/iomgr_engine/iomgr_engine.h +122 -0
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
- data/src/core/lib/event_engine/memory_allocator.cc +12 -4
- data/src/core/lib/{iomgr/event_engine → event_engine}/promise.h +27 -9
- data/src/core/lib/event_engine/resolved_address.cc +4 -2
- data/src/core/lib/event_engine/slice.cc +102 -0
- data/src/core/lib/event_engine/slice_buffer.cc +50 -0
- data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
- data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
- data/src/core/lib/gpr/log.cc +5 -0
- data/src/core/lib/gpr/time_posix.cc +6 -9
- data/src/core/lib/gpr/time_windows.cc +10 -7
- data/src/core/lib/gpr/tls.h +3 -5
- data/src/core/lib/gprpp/bitset.h +5 -1
- data/src/core/lib/gprpp/chunked_vector.h +4 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
- data/src/core/lib/gprpp/examine_stack.h +0 -1
- data/src/core/lib/gprpp/fork.cc +3 -6
- data/src/core/lib/gprpp/global_config.h +2 -4
- data/src/core/lib/gprpp/global_config_env.cc +3 -2
- data/src/core/lib/gprpp/global_config_env.h +3 -1
- data/src/core/lib/gprpp/global_config_generic.h +0 -4
- data/src/core/lib/gprpp/host_port.cc +2 -0
- data/src/core/lib/gprpp/manual_constructor.h +0 -68
- data/src/core/lib/gprpp/match.h +2 -0
- data/src/core/lib/gprpp/memory.h +1 -5
- data/src/core/lib/gprpp/orphanable.h +1 -4
- data/src/core/lib/gprpp/ref_counted.h +1 -3
- data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
- data/src/core/lib/gprpp/stat.h +0 -2
- data/src/core/lib/gprpp/stat_posix.cc +7 -2
- data/src/core/lib/gprpp/status_helper.cc +50 -32
- data/src/core/lib/gprpp/status_helper.h +4 -0
- data/src/core/lib/gprpp/sync.h +3 -1
- data/src/core/lib/gprpp/table.h +10 -0
- data/src/core/lib/gprpp/thd.h +2 -5
- data/src/core/lib/gprpp/thd_posix.cc +4 -2
- data/src/core/lib/gprpp/thd_windows.cc +2 -0
- data/src/core/lib/gprpp/time.cc +16 -0
- data/src/core/lib/gprpp/time.h +10 -1
- data/src/core/lib/gprpp/time_util.cc +4 -0
- data/src/core/lib/gprpp/time_util.h +1 -1
- data/src/core/lib/gprpp/unique_type_name.h +104 -0
- data/src/core/lib/http/format_request.cc +34 -4
- data/src/core/lib/http/format_request.h +3 -1
- data/src/core/lib/http/httpcli.cc +106 -93
- data/src/core/lib/http/httpcli.h +58 -10
- data/src/core/lib/http/httpcli_security_connector.cc +19 -8
- data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
- data/src/core/lib/http/parser.cc +6 -7
- data/src/core/lib/http/parser.h +3 -0
- data/src/core/lib/iomgr/call_combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.cc +4 -4
- data/src/core/lib/iomgr/endpoint.h +7 -5
- data/src/core/lib/iomgr/endpoint_cfstream.cc +9 -6
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
- data/src/core/lib/iomgr/error.cc +11 -9
- data/src/core/lib/iomgr/error.h +9 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
- data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
- data/src/core/lib/iomgr/ev_posix.cc +55 -96
- data/src/core/lib/iomgr/ev_posix.h +5 -3
- data/src/core/lib/iomgr/exec_ctx.h +1 -2
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
- data/src/core/lib/iomgr/internal_errqueue.h +1 -6
- data/src/core/lib/iomgr/iomgr.cc +7 -1
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/pollset_set.h +1 -2
- data/src/core/lib/iomgr/port.h +25 -6
- data/src/core/lib/iomgr/resolve_address.cc +8 -0
- data/src/core/lib/iomgr/resolve_address.h +21 -14
- data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +9 -15
- data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -15
- data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
- data/src/core/lib/iomgr/sockaddr.h +2 -3
- data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
- data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
- data/src/core/lib/iomgr/tcp_client.cc +12 -7
- data/src/core/lib/iomgr/tcp_client.h +24 -13
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +24 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +154 -29
- data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_windows.cc +27 -16
- data/src/core/lib/iomgr/tcp_posix.cc +96 -52
- data/src/core/lib/iomgr/tcp_server_posix.cc +33 -19
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +41 -38
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -6
- data/src/core/lib/iomgr/tcp_server_windows.cc +20 -12
- data/src/core/lib/iomgr/tcp_windows.cc +12 -9
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
- data/src/core/lib/iomgr/work_serializer.h +2 -3
- data/src/core/lib/json/json.h +1 -2
- data/src/core/lib/json/json_reader.cc +9 -1
- data/src/core/lib/json/json_util.cc +7 -0
- data/src/core/lib/json/json_util.h +10 -1
- data/src/core/lib/json/json_writer.cc +6 -1
- data/src/core/lib/matchers/matchers.cc +6 -3
- data/src/core/lib/matchers/matchers.h +2 -0
- data/src/core/lib/promise/activity.cc +1 -2
- data/src/core/lib/promise/activity.h +13 -19
- data/src/core/lib/promise/arena_promise.h +11 -1
- data/src/core/lib/promise/call_push_pull.h +4 -0
- data/src/core/lib/promise/context.h +1 -1
- data/src/core/lib/promise/detail/basic_seq.h +2 -2
- data/src/core/lib/promise/detail/promise_factory.h +0 -1
- data/src/core/lib/promise/latch.h +0 -1
- data/src/core/lib/promise/loop.h +2 -0
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/race.h +0 -1
- data/src/core/lib/promise/seq.h +0 -2
- data/src/core/lib/promise/sleep.cc +38 -31
- data/src/core/lib/promise/sleep.h +32 -22
- data/src/core/lib/promise/try_seq.h +2 -2
- data/src/core/lib/resolver/resolver.cc +5 -0
- data/src/core/lib/resolver/resolver.h +3 -0
- data/src/core/lib/resolver/resolver_factory.h +6 -4
- data/src/core/lib/resolver/resolver_registry.cc +2 -9
- data/src/core/lib/resolver/resolver_registry.h +12 -1
- data/src/core/lib/resolver/server_address.cc +17 -3
- data/src/core/lib/resolver/server_address.h +13 -6
- data/src/core/lib/resource_quota/api.cc +14 -1
- data/src/core/lib/resource_quota/api.h +4 -1
- data/src/core/lib/resource_quota/arena.cc +0 -6
- data/src/core/lib/resource_quota/arena.h +1 -2
- data/src/core/lib/resource_quota/memory_quota.cc +62 -62
- data/src/core/lib/resource_quota/memory_quota.h +35 -30
- data/src/core/lib/resource_quota/resource_quota.h +8 -0
- data/src/core/lib/resource_quota/thread_quota.cc +2 -0
- data/src/core/lib/resource_quota/thread_quota.h +4 -0
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
- data/src/core/lib/security/authorization/evaluate_args.h +6 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +15 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
- data/src/core/lib/security/authorization/matchers.cc +9 -1
- data/src/core/lib/security/authorization/matchers.h +7 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
- data/src/core/lib/security/authorization/rbac_policy.h +7 -0
- data/src/core/lib/security/context/security_context.cc +5 -2
- data/src/core/lib/security/context/security_context.h +14 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +12 -4
- data/src/core/lib/security/credentials/alts/alts_credentials.h +8 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
- data/src/core/lib/security/credentials/call_creds_util.cc +10 -0
- data/src/core/lib/security/credentials/call_creds_util.h +1 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +7 -1
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +11 -7
- data/src/core/lib/security/credentials/composite/composite_credentials.h +21 -6
- data/src/core/lib/security/credentials/credentials.cc +4 -8
- data/src/core/lib/security/credentials/credentials.h +27 -18
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +108 -9
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +18 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +27 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +22 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +21 -9
- data/src/core/lib/security/credentials/fake/fake_credentials.h +15 -3
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +51 -24
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +12 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +13 -4
- data/src/core/lib/security/credentials/iam/iam_credentials.h +12 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +12 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +9 -4
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +14 -7
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +16 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +12 -5
- data/src/core/lib/security/credentials/local/local_credentials.h +9 -2
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +36 -19
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +12 -8
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +25 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +17 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +39 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +14 -11
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +35 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +34 -11
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +17 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +7 -3
- data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +20 -4
- data/src/core/lib/security/credentials/xds/xds_credentials.h +19 -5
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +18 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
- data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
- data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
- data/src/core/lib/security/security_connector/security_connector.cc +20 -18
- data/src/core/lib/security/security_connector/security_connector.h +19 -7
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +19 -7
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
- data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +24 -17
- data/src/core/lib/security/transport/secure_endpoint.cc +81 -20
- data/src/core/lib/security/transport/secure_endpoint.h +4 -3
- data/src/core/lib/security/transport/security_handshaker.cc +49 -16
- data/src/core/lib/security/transport/security_handshaker.h +5 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +29 -6
- data/src/core/lib/security/util/json_util.cc +3 -2
- data/src/core/lib/security/util/json_util.h +0 -2
- data/src/core/lib/service_config/service_config.h +4 -8
- data/src/core/lib/service_config/service_config_call_data.h +6 -2
- data/src/core/lib/service_config/service_config_impl.cc +13 -6
- data/src/core/lib/service_config/service_config_impl.h +9 -4
- data/src/core/lib/service_config/service_config_parser.cc +8 -2
- data/src/core/lib/service_config/service_config_parser.h +7 -0
- data/src/core/lib/slice/b64.cc +1 -1
- data/src/core/lib/slice/b64.h +2 -0
- data/src/core/lib/slice/percent_encoding.cc +4 -1
- data/src/core/lib/slice/percent_encoding.h +0 -6
- data/src/core/lib/slice/slice.cc +2 -1
- data/src/core/lib/slice/slice.h +10 -5
- data/src/core/lib/slice/slice_api.cc +1 -1
- data/src/core/lib/slice/slice_buffer.cc +79 -23
- data/src/core/lib/slice/slice_buffer.h +137 -0
- data/src/core/lib/slice/slice_buffer_api.cc +35 -0
- data/src/core/lib/slice/slice_internal.h +4 -3
- data/src/core/lib/slice/slice_refcount.h +2 -3
- data/src/core/lib/slice/slice_refcount_base.h +2 -3
- data/src/core/lib/slice/slice_string_helpers.cc +0 -16
- data/src/core/lib/slice/slice_string_helpers.h +1 -8
- data/src/core/lib/surface/builtins.cc +7 -2
- data/src/core/lib/surface/byte_buffer.cc +7 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
- data/src/core/lib/surface/call.cc +90 -137
- data/src/core/lib/surface/call.h +21 -3
- data/src/core/lib/surface/call_details.cc +4 -4
- data/src/core/lib/surface/call_log_batch.cc +7 -1
- data/src/core/lib/surface/call_test_only.h +4 -1
- data/src/core/lib/surface/channel.cc +179 -242
- data/src/core/lib/surface/channel.h +97 -58
- data/src/core/lib/surface/channel_init.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +8 -2
- data/src/core/lib/surface/channel_stack_type.cc +0 -2
- data/src/core/lib/surface/channel_stack_type.h +0 -2
- data/src/core/lib/surface/completion_queue.cc +29 -20
- data/src/core/lib/surface/completion_queue.h +7 -2
- data/src/core/lib/surface/completion_queue_factory.cc +1 -0
- data/src/core/lib/surface/completion_queue_factory.h +1 -3
- data/src/core/lib/surface/event_string.cc +1 -7
- data/src/core/lib/surface/event_string.h +1 -1
- data/src/core/lib/surface/init.cc +17 -46
- data/src/core/lib/surface/init.h +0 -8
- data/src/core/lib/surface/lame_client.cc +63 -109
- data/src/core/lib/surface/lame_client.h +41 -3
- data/src/core/lib/surface/metadata_array.cc +2 -0
- data/src/core/lib/surface/server.cc +83 -64
- data/src/core/lib/surface/server.h +42 -9
- data/src/core/lib/surface/validate_metadata.cc +3 -6
- data/src/core/lib/surface/validate_metadata.h +3 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +3 -1
- data/src/core/lib/transport/bdp_estimator.h +2 -3
- data/src/core/lib/transport/connectivity_state.cc +6 -4
- data/src/core/lib/transport/connectivity_state.h +2 -3
- data/src/core/lib/transport/error_utils.cc +16 -8
- data/src/core/lib/transport/error_utils.h +5 -1
- data/src/core/lib/{channel → transport}/handshaker.cc +12 -7
- data/src/core/lib/{channel → transport}/handshaker.h +13 -6
- data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
- data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
- data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +28 -14
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
- data/src/core/lib/transport/metadata_batch.cc +287 -0
- data/src/core/lib/transport/metadata_batch.h +133 -264
- data/src/core/lib/transport/parsed_metadata.cc +2 -0
- data/src/core/lib/transport/parsed_metadata.h +10 -3
- data/src/core/lib/transport/status_conversion.cc +2 -0
- data/src/core/lib/transport/status_conversion.h +2 -2
- data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
- data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
- data/src/core/lib/transport/timeout_encoding.cc +2 -6
- data/src/core/lib/transport/timeout_encoding.h +5 -1
- data/src/core/lib/transport/transport.cc +18 -20
- data/src/core/lib/transport/transport.h +48 -16
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +11 -0
- data/src/core/lib/transport/transport_op_string.cc +17 -18
- data/src/core/lib/uri/uri_parser.cc +11 -3
- data/src/core/lib/uri/uri_parser.h +0 -2
- data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
- data/src/core/tsi/fake_transport_security.cc +13 -1
- data/src/core/tsi/fake_transport_security.h +6 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
- data/src/core/tsi/ssl_transport_security.cc +1 -1
- data/src/core/tsi/transport_security_grpc.cc +3 -2
- data/src/core/tsi/transport_security_grpc.h +5 -2
- data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -0
- data/src/ruby/ext/grpc/extconf.rb +50 -19
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
- data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +182 -41
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +510 -0
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
- data/third_party/abseil-cpp/absl/status/status.cc +174 -2
- data/third_party/abseil-cpp/absl/status/status.h +22 -12
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
- data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- 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 +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
- data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/time.h +16 -12
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +2 -1
- metadata +69 -38
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
- data/src/core/lib/event_engine/sockaddr.cc +0 -40
- data/src/core/lib/event_engine/sockaddr.h +0 -44
- data/src/core/lib/gprpp/capture.h +0 -76
- data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
- data/src/core/lib/iomgr/event_engine/closure.h +0 -42
- data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
- data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
- data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
- data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
- data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
- data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
- data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
- data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
- data/src/core/lib/slice/slice_split.cc +0 -100
- data/src/core/lib/slice/slice_split.h +0 -40
- data/src/core/lib/transport/byte_stream.cc +0 -164
- data/src/core/lib/transport/byte_stream.h +0 -166
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -16,9 +16,20 @@
|
|
16
16
|
|
17
17
|
#include "src/core/lib/channel/promise_based_filter.h"
|
18
18
|
|
19
|
-
#include <
|
19
|
+
#include <memory>
|
20
|
+
#include <string>
|
21
|
+
|
22
|
+
#include "absl/base/attributes.h"
|
23
|
+
#include "absl/memory/memory.h"
|
24
|
+
#include "absl/types/variant.h"
|
25
|
+
#include "absl/utility/utility.h"
|
26
|
+
|
27
|
+
#include <grpc/status.h>
|
20
28
|
|
21
29
|
#include "src/core/lib/channel/channel_stack.h"
|
30
|
+
#include "src/core/lib/gprpp/manual_constructor.h"
|
31
|
+
#include "src/core/lib/iomgr/error.h"
|
32
|
+
#include "src/core/lib/slice/slice.h"
|
22
33
|
|
23
34
|
namespace grpc_core {
|
24
35
|
namespace promise_filter_detail {
|
@@ -70,6 +81,131 @@ void BaseCallData::Wakeup() {
|
|
70
81
|
|
71
82
|
void BaseCallData::Drop() { GRPC_CALL_STACK_UNREF(call_stack_, "waker"); }
|
72
83
|
|
84
|
+
///////////////////////////////////////////////////////////////////////////////
|
85
|
+
// BaseCallData::CapturedBatch
|
86
|
+
|
87
|
+
namespace {
|
88
|
+
uintptr_t* RefCountField(grpc_transport_stream_op_batch* b) {
|
89
|
+
return &b->handler_private.closure.error_data.scratch;
|
90
|
+
}
|
91
|
+
} // namespace
|
92
|
+
|
93
|
+
BaseCallData::CapturedBatch::CapturedBatch() : batch_(nullptr) {}
|
94
|
+
|
95
|
+
BaseCallData::CapturedBatch::CapturedBatch(
|
96
|
+
grpc_transport_stream_op_batch* batch) {
|
97
|
+
*RefCountField(batch) = 1;
|
98
|
+
batch_ = batch;
|
99
|
+
}
|
100
|
+
|
101
|
+
BaseCallData::CapturedBatch::~CapturedBatch() {
|
102
|
+
if (batch_ == nullptr) return;
|
103
|
+
// A ref can be dropped by destruction, but it must not release the batch
|
104
|
+
uintptr_t& refcnt = *RefCountField(batch_);
|
105
|
+
if (refcnt == 0) return; // refcnt==0 ==> cancelled
|
106
|
+
--refcnt;
|
107
|
+
GPR_ASSERT(refcnt != 0);
|
108
|
+
}
|
109
|
+
|
110
|
+
BaseCallData::CapturedBatch::CapturedBatch(const CapturedBatch& rhs)
|
111
|
+
: batch_(rhs.batch_) {
|
112
|
+
if (batch_ == nullptr) return;
|
113
|
+
uintptr_t& refcnt = *RefCountField(batch_);
|
114
|
+
if (refcnt == 0) return; // refcnt==0 ==> cancelled
|
115
|
+
++refcnt;
|
116
|
+
}
|
117
|
+
|
118
|
+
BaseCallData::CapturedBatch& BaseCallData::CapturedBatch::operator=(
|
119
|
+
const CapturedBatch& b) {
|
120
|
+
CapturedBatch temp(b);
|
121
|
+
Swap(&temp);
|
122
|
+
return *this;
|
123
|
+
}
|
124
|
+
|
125
|
+
BaseCallData::CapturedBatch::CapturedBatch(CapturedBatch&& rhs) noexcept
|
126
|
+
: batch_(rhs.batch_) {
|
127
|
+
rhs.batch_ = nullptr;
|
128
|
+
}
|
129
|
+
|
130
|
+
BaseCallData::CapturedBatch& BaseCallData::CapturedBatch::operator=(
|
131
|
+
CapturedBatch&& b) noexcept {
|
132
|
+
Swap(&b);
|
133
|
+
return *this;
|
134
|
+
}
|
135
|
+
|
136
|
+
void BaseCallData::CapturedBatch::ResumeWith(Flusher* releaser) {
|
137
|
+
auto* batch = absl::exchange(batch_, nullptr);
|
138
|
+
GPR_ASSERT(batch != nullptr);
|
139
|
+
uintptr_t& refcnt = *RefCountField(batch);
|
140
|
+
if (refcnt == 0) return; // refcnt==0 ==> cancelled
|
141
|
+
if (--refcnt == 0) {
|
142
|
+
releaser->Resume(batch);
|
143
|
+
}
|
144
|
+
}
|
145
|
+
|
146
|
+
void BaseCallData::CapturedBatch::CompleteWith(Flusher* releaser) {
|
147
|
+
auto* batch = absl::exchange(batch_, nullptr);
|
148
|
+
GPR_ASSERT(batch != nullptr);
|
149
|
+
uintptr_t& refcnt = *RefCountField(batch);
|
150
|
+
if (refcnt == 0) return; // refcnt==0 ==> cancelled
|
151
|
+
if (--refcnt == 0) {
|
152
|
+
releaser->Complete(batch);
|
153
|
+
}
|
154
|
+
}
|
155
|
+
|
156
|
+
void BaseCallData::CapturedBatch::CancelWith(grpc_error_handle error,
|
157
|
+
Flusher* releaser) {
|
158
|
+
auto* batch = absl::exchange(batch_, nullptr);
|
159
|
+
GPR_ASSERT(batch != nullptr);
|
160
|
+
uintptr_t& refcnt = *RefCountField(batch);
|
161
|
+
if (refcnt == 0) {
|
162
|
+
// refcnt==0 ==> cancelled
|
163
|
+
GRPC_ERROR_UNREF(error);
|
164
|
+
return;
|
165
|
+
}
|
166
|
+
refcnt = 0;
|
167
|
+
releaser->Cancel(batch, error);
|
168
|
+
}
|
169
|
+
|
170
|
+
///////////////////////////////////////////////////////////////////////////////
|
171
|
+
// BaseCallData::Flusher
|
172
|
+
|
173
|
+
BaseCallData::Flusher::Flusher(BaseCallData* call) : call_(call) {
|
174
|
+
GRPC_CALL_STACK_REF(call_->call_stack(), "flusher");
|
175
|
+
}
|
176
|
+
|
177
|
+
BaseCallData::Flusher::~Flusher() {
|
178
|
+
if (release_.empty()) {
|
179
|
+
if (call_closures_.size() == 0) {
|
180
|
+
GRPC_CALL_COMBINER_STOP(call_->call_combiner(), "nothing to flush");
|
181
|
+
GRPC_CALL_STACK_UNREF(call_->call_stack(), "flusher");
|
182
|
+
return;
|
183
|
+
}
|
184
|
+
call_closures_.RunClosures(call_->call_combiner());
|
185
|
+
GRPC_CALL_STACK_UNREF(call_->call_stack(), "flusher");
|
186
|
+
return;
|
187
|
+
}
|
188
|
+
auto call_next_op = [](void* p, grpc_error_handle) {
|
189
|
+
auto* batch = static_cast<grpc_transport_stream_op_batch*>(p);
|
190
|
+
BaseCallData* call =
|
191
|
+
static_cast<BaseCallData*>(batch->handler_private.extra_arg);
|
192
|
+
grpc_call_next_op(call->elem(), batch);
|
193
|
+
GRPC_CALL_STACK_UNREF(call->call_stack(), "flusher_batch");
|
194
|
+
};
|
195
|
+
for (size_t i = 1; i < release_.size(); i++) {
|
196
|
+
auto* batch = release_[i];
|
197
|
+
batch->handler_private.extra_arg = call_;
|
198
|
+
GRPC_CLOSURE_INIT(&batch->handler_private.closure, call_next_op, batch,
|
199
|
+
nullptr);
|
200
|
+
GRPC_CALL_STACK_REF(call_->call_stack(), "flusher_batch");
|
201
|
+
call_closures_.Add(&batch->handler_private.closure, GRPC_ERROR_NONE,
|
202
|
+
"flusher_batch");
|
203
|
+
}
|
204
|
+
call_closures_.RunClosuresWithoutYielding(call_->call_combiner());
|
205
|
+
grpc_call_next_op(call_->elem(), release_[0]);
|
206
|
+
GRPC_CALL_STACK_UNREF(call_->call_stack(), "flusher");
|
207
|
+
}
|
208
|
+
|
73
209
|
///////////////////////////////////////////////////////////////////////////////
|
74
210
|
// ClientCallData
|
75
211
|
|
@@ -104,8 +240,10 @@ struct ClientCallData::RecvInitialMetadata final {
|
|
104
240
|
|
105
241
|
class ClientCallData::PollContext {
|
106
242
|
public:
|
107
|
-
explicit PollContext(ClientCallData* self
|
243
|
+
explicit PollContext(ClientCallData* self, Flusher* flusher)
|
244
|
+
: self_(self), flusher_(flusher) {
|
108
245
|
GPR_ASSERT(self_->poll_ctx_ == nullptr);
|
246
|
+
|
109
247
|
self_->poll_ctx_ = this;
|
110
248
|
scoped_activity_.Init(self_);
|
111
249
|
have_scoped_activity_ = true;
|
@@ -143,7 +281,7 @@ class ClientCallData::PollContext {
|
|
143
281
|
}
|
144
282
|
self_->recv_initial_metadata_->state =
|
145
283
|
RecvInitialMetadata::kResponded;
|
146
|
-
|
284
|
+
flusher_->AddClosure(
|
147
285
|
absl::exchange(self_->recv_initial_metadata_->original_on_ready,
|
148
286
|
nullptr),
|
149
287
|
GRPC_ERROR_NONE,
|
@@ -171,7 +309,7 @@ class ClientCallData::PollContext {
|
|
171
309
|
destroy_md = false;
|
172
310
|
}
|
173
311
|
self_->recv_trailing_state_ = RecvTrailingState::kResponded;
|
174
|
-
|
312
|
+
flusher_->AddClosure(
|
175
313
|
absl::exchange(self_->original_recv_trailing_metadata_ready_,
|
176
314
|
nullptr),
|
177
315
|
GRPC_ERROR_NONE, "wake_inside_combiner:recv_trailing_ready:1");
|
@@ -195,7 +333,7 @@ class ClientCallData::PollContext {
|
|
195
333
|
case RecvInitialMetadata::kCompleteWaitingForLatch:
|
196
334
|
self_->recv_initial_metadata_->state =
|
197
335
|
RecvInitialMetadata::kResponded;
|
198
|
-
|
336
|
+
flusher_->AddClosure(
|
199
337
|
absl::exchange(
|
200
338
|
self_->recv_initial_metadata_->original_on_ready,
|
201
339
|
nullptr),
|
@@ -237,7 +375,7 @@ class ClientCallData::PollContext {
|
|
237
375
|
case RecvInitialMetadata::kCompleteAndSetLatch:
|
238
376
|
self_->recv_initial_metadata_->state =
|
239
377
|
RecvInitialMetadata::kResponded;
|
240
|
-
|
378
|
+
flusher_->AddClosure(
|
241
379
|
absl::exchange(
|
242
380
|
self_->recv_initial_metadata_->original_on_ready,
|
243
381
|
nullptr),
|
@@ -247,21 +385,21 @@ class ClientCallData::PollContext {
|
|
247
385
|
}
|
248
386
|
if (self_->send_initial_state_ == SendInitialState::kQueued) {
|
249
387
|
self_->send_initial_state_ = SendInitialState::kCancelled;
|
250
|
-
|
388
|
+
self_->send_initial_metadata_batch_.CancelWith(error, flusher_);
|
251
389
|
} else {
|
252
390
|
GPR_ASSERT(
|
253
391
|
self_->recv_trailing_state_ == RecvTrailingState::kInitial ||
|
254
392
|
self_->recv_trailing_state_ == RecvTrailingState::kForwarded);
|
255
393
|
self_->call_combiner()->Cancel(GRPC_ERROR_REF(error));
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
394
|
+
CapturedBatch b(grpc_make_transport_stream_op(GRPC_CLOSURE_CREATE(
|
395
|
+
[](void* p, grpc_error_handle) {
|
396
|
+
GRPC_CALL_COMBINER_STOP(static_cast<CallCombiner*>(p),
|
397
|
+
"finish_cancel");
|
398
|
+
},
|
399
|
+
self_->call_combiner(), nullptr)));
|
400
|
+
b->cancel_stream = true;
|
401
|
+
b->payload->cancel_stream.cancel_error = error;
|
402
|
+
b.ResumeWith(flusher_);
|
265
403
|
}
|
266
404
|
self_->recv_trailing_state_ = RecvTrailingState::kCancelled;
|
267
405
|
}
|
@@ -280,7 +418,7 @@ class ClientCallData::PollContext {
|
|
280
418
|
// promise transition).
|
281
419
|
if (self_->recv_trailing_state_ == RecvTrailingState::kComplete) {
|
282
420
|
self_->recv_trailing_state_ = RecvTrailingState::kResponded;
|
283
|
-
|
421
|
+
flusher_->AddClosure(
|
284
422
|
absl::exchange(self_->original_recv_trailing_metadata_ready_,
|
285
423
|
nullptr),
|
286
424
|
GRPC_ERROR_NONE, "wake_inside_combiner:recv_trailing_ready:2");
|
@@ -292,77 +430,42 @@ class ClientCallData::PollContext {
|
|
292
430
|
~PollContext() {
|
293
431
|
self_->poll_ctx_ = nullptr;
|
294
432
|
if (have_scoped_activity_) scoped_activity_.Destroy();
|
295
|
-
GRPC_CALL_STACK_REF(self_->call_stack(), "finish_poll");
|
296
|
-
bool in_combiner = true;
|
297
|
-
if (call_closures_.size() != 0) {
|
298
|
-
if (forward_batch_ != nullptr) {
|
299
|
-
call_closures_.RunClosuresWithoutYielding(self_->call_combiner());
|
300
|
-
} else {
|
301
|
-
in_combiner = false;
|
302
|
-
call_closures_.RunClosures(self_->call_combiner());
|
303
|
-
}
|
304
|
-
}
|
305
|
-
if (forward_batch_ != nullptr) {
|
306
|
-
GPR_ASSERT(in_combiner);
|
307
|
-
in_combiner = false;
|
308
|
-
forward_send_initial_metadata_ = false;
|
309
|
-
grpc_call_next_op(self_->elem(), forward_batch_);
|
310
|
-
}
|
311
|
-
if (cancel_send_initial_metadata_error_ != GRPC_ERROR_NONE) {
|
312
|
-
GPR_ASSERT(in_combiner);
|
313
|
-
forward_send_initial_metadata_ = false;
|
314
|
-
in_combiner = false;
|
315
|
-
grpc_transport_stream_op_batch_finish_with_failure(
|
316
|
-
absl::exchange(self_->send_initial_metadata_batch_, nullptr),
|
317
|
-
cancel_send_initial_metadata_error_, self_->call_combiner());
|
318
|
-
}
|
319
|
-
if (absl::exchange(forward_send_initial_metadata_, false)) {
|
320
|
-
GPR_ASSERT(in_combiner);
|
321
|
-
in_combiner = false;
|
322
|
-
grpc_call_next_op(
|
323
|
-
self_->elem(),
|
324
|
-
absl::exchange(self_->send_initial_metadata_batch_, nullptr));
|
325
|
-
}
|
326
433
|
if (repoll_) {
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
} else if (in_combiner) {
|
349
|
-
GRPC_CALL_COMBINER_STOP(self_->call_combiner(), "poll paused");
|
434
|
+
struct NextPoll : public grpc_closure {
|
435
|
+
grpc_call_stack* call_stack;
|
436
|
+
ClientCallData* call_data;
|
437
|
+
};
|
438
|
+
auto run = [](void* p, grpc_error_handle) {
|
439
|
+
auto* next_poll = static_cast<NextPoll*>(p);
|
440
|
+
{
|
441
|
+
Flusher flusher(next_poll->call_data);
|
442
|
+
next_poll->call_data->WakeInsideCombiner(&flusher);
|
443
|
+
}
|
444
|
+
GRPC_CALL_STACK_UNREF(next_poll->call_stack, "re-poll");
|
445
|
+
delete next_poll;
|
446
|
+
};
|
447
|
+
// Unique ptr --> release to suppress clang-tidy warnings about allocating
|
448
|
+
// in a destructor.
|
449
|
+
auto* p = absl::make_unique<NextPoll>().release();
|
450
|
+
p->call_stack = self_->call_stack();
|
451
|
+
p->call_data = self_;
|
452
|
+
GRPC_CALL_STACK_REF(self_->call_stack(), "re-poll");
|
453
|
+
GRPC_CLOSURE_INIT(p, run, p, nullptr);
|
454
|
+
flusher_->AddClosure(p, GRPC_ERROR_NONE, "re-poll");
|
350
455
|
}
|
351
|
-
GRPC_CALL_STACK_UNREF(self_->call_stack(), "finish_poll");
|
352
456
|
}
|
353
457
|
|
354
458
|
void Repoll() { repoll_ = true; }
|
355
459
|
|
356
|
-
void ForwardSendInitialMetadata() {
|
460
|
+
void ForwardSendInitialMetadata() {
|
461
|
+
self_->send_initial_metadata_batch_.ResumeWith(flusher_);
|
462
|
+
}
|
357
463
|
|
358
464
|
private:
|
359
465
|
ManualConstructor<ScopedActivity> scoped_activity_;
|
360
466
|
ClientCallData* self_;
|
361
|
-
|
362
|
-
grpc_error_handle cancel_send_initial_metadata_error_ = GRPC_ERROR_NONE;
|
363
|
-
grpc_transport_stream_op_batch* forward_batch_ = nullptr;
|
467
|
+
Flusher* flusher_;
|
364
468
|
bool repoll_ = false;
|
365
|
-
bool forward_send_initial_metadata_ = false;
|
366
469
|
bool have_scoped_activity_;
|
367
470
|
};
|
368
471
|
|
@@ -393,9 +496,11 @@ void ClientCallData::ForceImmediateRepoll() {
|
|
393
496
|
}
|
394
497
|
|
395
498
|
// Handle one grpc_transport_stream_op_batch
|
396
|
-
void ClientCallData::StartBatch(grpc_transport_stream_op_batch*
|
499
|
+
void ClientCallData::StartBatch(grpc_transport_stream_op_batch* b) {
|
397
500
|
// Fake out the activity based context.
|
398
501
|
ScopedContext context(this);
|
502
|
+
CapturedBatch batch(b);
|
503
|
+
Flusher flusher(this);
|
399
504
|
|
400
505
|
// If this is a cancel stream, cancel anything we have pending and propagate
|
401
506
|
// the cancellation.
|
@@ -405,7 +510,12 @@ void ClientCallData::StartBatch(grpc_transport_stream_op_batch* batch) {
|
|
405
510
|
!batch->recv_initial_metadata && !batch->recv_message &&
|
406
511
|
!batch->recv_trailing_metadata);
|
407
512
|
Cancel(batch->payload->cancel_stream.cancel_error);
|
408
|
-
|
513
|
+
if (is_last()) {
|
514
|
+
GRPC_ERROR_UNREF(batch->payload->cancel_stream.cancel_error);
|
515
|
+
batch.CompleteWith(&flusher);
|
516
|
+
} else {
|
517
|
+
batch.ResumeWith(&flusher);
|
518
|
+
}
|
409
519
|
return;
|
410
520
|
}
|
411
521
|
|
@@ -451,40 +561,43 @@ void ClientCallData::StartBatch(grpc_transport_stream_op_batch* batch) {
|
|
451
561
|
// If we're already cancelled, just terminate the batch.
|
452
562
|
if (send_initial_state_ == SendInitialState::kCancelled ||
|
453
563
|
recv_trailing_state_ == RecvTrailingState::kCancelled) {
|
454
|
-
|
455
|
-
|
456
|
-
|
564
|
+
batch.CancelWith(GRPC_ERROR_REF(cancelled_error_), &flusher);
|
565
|
+
} else {
|
566
|
+
// Otherwise, we should not have seen a send_initial_metadata op yet.
|
567
|
+
GPR_ASSERT(send_initial_state_ == SendInitialState::kInitial);
|
568
|
+
// Mark ourselves as queued.
|
569
|
+
send_initial_state_ = SendInitialState::kQueued;
|
570
|
+
if (batch->recv_trailing_metadata) {
|
571
|
+
// If there's a recv_trailing_metadata op, we queue that too.
|
572
|
+
GPR_ASSERT(recv_trailing_state_ == RecvTrailingState::kInitial);
|
573
|
+
recv_trailing_state_ = RecvTrailingState::kQueued;
|
574
|
+
}
|
575
|
+
// This is the queuing!
|
576
|
+
send_initial_metadata_batch_ = batch;
|
577
|
+
// And kick start the promise.
|
578
|
+
StartPromise(&flusher);
|
457
579
|
}
|
458
|
-
|
459
|
-
|
460
|
-
//
|
461
|
-
|
462
|
-
|
463
|
-
|
580
|
+
} else if (batch->recv_trailing_metadata) {
|
581
|
+
// recv_trailing_metadata *without* send_initial_metadata: hook it so we
|
582
|
+
// can respond to it, and push it down.
|
583
|
+
if (recv_trailing_state_ == RecvTrailingState::kCancelled) {
|
584
|
+
batch.CancelWith(GRPC_ERROR_REF(cancelled_error_), &flusher);
|
585
|
+
} else {
|
464
586
|
GPR_ASSERT(recv_trailing_state_ == RecvTrailingState::kInitial);
|
465
|
-
recv_trailing_state_ = RecvTrailingState::
|
587
|
+
recv_trailing_state_ = RecvTrailingState::kForwarded;
|
588
|
+
HookRecvTrailingMetadata(batch);
|
466
589
|
}
|
467
|
-
|
468
|
-
|
469
|
-
// And kick start the promise.
|
470
|
-
StartPromise();
|
471
|
-
return;
|
590
|
+
} else if (!GRPC_ERROR_IS_NONE(cancelled_error_)) {
|
591
|
+
batch.CancelWith(GRPC_ERROR_REF(cancelled_error_), &flusher);
|
472
592
|
}
|
473
593
|
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
batch, GRPC_ERROR_REF(cancelled_error_), call_combiner());
|
480
|
-
return;
|
594
|
+
if (batch.is_captured()) {
|
595
|
+
if (!is_last()) {
|
596
|
+
batch.ResumeWith(&flusher);
|
597
|
+
} else {
|
598
|
+
batch.CancelWith(GRPC_ERROR_CANCELLED, &flusher);
|
481
599
|
}
|
482
|
-
GPR_ASSERT(recv_trailing_state_ == RecvTrailingState::kInitial);
|
483
|
-
recv_trailing_state_ = RecvTrailingState::kForwarded;
|
484
|
-
HookRecvTrailingMetadata(batch);
|
485
600
|
}
|
486
|
-
|
487
|
-
grpc_call_next_op(elem(), batch);
|
488
601
|
}
|
489
602
|
|
490
603
|
// Handle cancellation.
|
@@ -502,19 +615,23 @@ void ClientCallData::Cancel(grpc_error_handle error) {
|
|
502
615
|
recv_trailing_state_ = RecvTrailingState::kCancelled;
|
503
616
|
}
|
504
617
|
struct FailBatch : public grpc_closure {
|
505
|
-
|
506
|
-
|
618
|
+
CapturedBatch batch;
|
619
|
+
ClientCallData* call;
|
507
620
|
};
|
508
621
|
auto fail = [](void* p, grpc_error_handle error) {
|
509
622
|
auto* f = static_cast<FailBatch*>(p);
|
510
|
-
|
511
|
-
|
623
|
+
{
|
624
|
+
Flusher flusher(f->call);
|
625
|
+
f->batch.CancelWith(GRPC_ERROR_REF(error), &flusher);
|
626
|
+
GRPC_CALL_STACK_UNREF(f->call->call_stack(), "cancel pending batch");
|
627
|
+
}
|
512
628
|
delete f;
|
513
629
|
};
|
514
630
|
auto* b = new FailBatch();
|
515
631
|
GRPC_CLOSURE_INIT(b, fail, b, nullptr);
|
516
|
-
b->batch =
|
517
|
-
b->
|
632
|
+
b->batch = std::move(send_initial_metadata_batch_);
|
633
|
+
b->call = this;
|
634
|
+
GRPC_CALL_STACK_REF(call_stack(), "cancel pending batch");
|
518
635
|
GRPC_CALL_COMBINER_START(call_combiner(), b,
|
519
636
|
GRPC_ERROR_REF(cancelled_error_),
|
520
637
|
"cancel pending batch");
|
@@ -545,12 +662,12 @@ void ClientCallData::Cancel(grpc_error_handle error) {
|
|
545
662
|
|
546
663
|
// Begin running the promise - which will ultimately take some initial
|
547
664
|
// metadata and return some trailing metadata.
|
548
|
-
void ClientCallData::StartPromise() {
|
665
|
+
void ClientCallData::StartPromise(Flusher* flusher) {
|
549
666
|
GPR_ASSERT(send_initial_state_ == SendInitialState::kQueued);
|
550
667
|
ChannelFilter* filter = static_cast<ChannelFilter*>(elem()->channel_data);
|
551
668
|
|
552
669
|
// Construct the promise.
|
553
|
-
PollContext ctx(this);
|
670
|
+
PollContext ctx(this, flusher);
|
554
671
|
promise_ = filter->MakeCallPromise(
|
555
672
|
CallArgs{WrapMetadata(send_initial_metadata_batch_->payload
|
556
673
|
->send_initial_metadata.send_initial_metadata),
|
@@ -580,28 +697,26 @@ void ClientCallData::RecvInitialMetadataReady(grpc_error_handle error) {
|
|
580
697
|
case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
|
581
698
|
abort(); // unreachable
|
582
699
|
}
|
583
|
-
|
700
|
+
Flusher flusher(this);
|
701
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
584
702
|
recv_initial_metadata_->state = RecvInitialMetadata::kResponded;
|
585
|
-
|
586
|
-
call_combiner(),
|
703
|
+
flusher.AddClosure(
|
587
704
|
absl::exchange(recv_initial_metadata_->original_on_ready, nullptr),
|
588
705
|
GRPC_ERROR_REF(error), "propagate cancellation");
|
589
706
|
} else if (send_initial_state_ == SendInitialState::kCancelled ||
|
590
707
|
recv_trailing_state_ == RecvTrailingState::kResponded) {
|
591
708
|
recv_initial_metadata_->state = RecvInitialMetadata::kResponded;
|
592
|
-
|
593
|
-
call_combiner(),
|
709
|
+
flusher.AddClosure(
|
594
710
|
absl::exchange(recv_initial_metadata_->original_on_ready, nullptr),
|
595
711
|
GRPC_ERROR_REF(cancelled_error_), "propagate cancellation");
|
596
712
|
}
|
597
|
-
WakeInsideCombiner();
|
713
|
+
WakeInsideCombiner(&flusher);
|
598
714
|
}
|
599
715
|
|
600
716
|
// Interject our callback into the op batch for recv trailing metadata ready.
|
601
717
|
// Stash a pointer to the trailing metadata that will be filled in, so we can
|
602
718
|
// manipulate it later.
|
603
|
-
void ClientCallData::HookRecvTrailingMetadata(
|
604
|
-
grpc_transport_stream_op_batch* batch) {
|
719
|
+
void ClientCallData::HookRecvTrailingMetadata(CapturedBatch batch) {
|
605
720
|
recv_trailing_metadata_ =
|
606
721
|
batch->payload->recv_trailing_metadata.recv_trailing_metadata;
|
607
722
|
original_recv_trailing_metadata_ready_ =
|
@@ -665,7 +780,7 @@ Poll<ServerMetadataHandle> ClientCallData::PollTrailingMetadata() {
|
|
665
780
|
GPR_ASSERT(poll_ctx_ != nullptr);
|
666
781
|
if (send_initial_state_ == SendInitialState::kQueued) {
|
667
782
|
// First poll: pass the send_initial_metadata op down the stack.
|
668
|
-
GPR_ASSERT(send_initial_metadata_batch_
|
783
|
+
GPR_ASSERT(send_initial_metadata_batch_.is_captured());
|
669
784
|
send_initial_state_ = SendInitialState::kForwarded;
|
670
785
|
if (recv_trailing_state_ == RecvTrailingState::kQueued) {
|
671
786
|
// (and the recv_trailing_metadata op if it's part of the queuing)
|
@@ -707,18 +822,20 @@ void ClientCallData::RecvTrailingMetadataReadyCallback(
|
|
707
822
|
}
|
708
823
|
|
709
824
|
void ClientCallData::RecvTrailingMetadataReady(grpc_error_handle error) {
|
825
|
+
Flusher flusher(this);
|
710
826
|
// If we were cancelled prior to receiving this callback, we should simply
|
711
827
|
// forward the callback up with the same error.
|
712
828
|
if (recv_trailing_state_ == RecvTrailingState::kCancelled) {
|
713
829
|
if (grpc_closure* call_closure =
|
714
830
|
absl::exchange(original_recv_trailing_metadata_ready_, nullptr)) {
|
715
|
-
|
831
|
+
flusher.AddClosure(call_closure, GRPC_ERROR_REF(error),
|
832
|
+
"propagate failure");
|
716
833
|
}
|
717
834
|
return;
|
718
835
|
}
|
719
836
|
// If there was an error, we'll put that into the trailing metadata and
|
720
837
|
// proceed as if there was not.
|
721
|
-
if (error
|
838
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
722
839
|
SetStatusFromError(recv_trailing_metadata_, error);
|
723
840
|
}
|
724
841
|
// Record that we've got the callback.
|
@@ -726,7 +843,7 @@ void ClientCallData::RecvTrailingMetadataReady(grpc_error_handle error) {
|
|
726
843
|
recv_trailing_state_ = RecvTrailingState::kComplete;
|
727
844
|
// Repoll the promise.
|
728
845
|
ScopedContext context(this);
|
729
|
-
WakeInsideCombiner();
|
846
|
+
WakeInsideCombiner(&flusher);
|
730
847
|
}
|
731
848
|
|
732
849
|
// Given an error, fill in ServerMetadataHandle to represent that error.
|
@@ -743,37 +860,114 @@ void ClientCallData::SetStatusFromError(grpc_metadata_batch* metadata,
|
|
743
860
|
}
|
744
861
|
|
745
862
|
// Wakeup and poll the promise if appropriate.
|
746
|
-
void ClientCallData::WakeInsideCombiner() {
|
863
|
+
void ClientCallData::WakeInsideCombiner(Flusher* flusher) {
|
864
|
+
PollContext(this, flusher).Run();
|
865
|
+
}
|
747
866
|
|
748
867
|
void ClientCallData::OnWakeup() {
|
868
|
+
Flusher flusher(this);
|
749
869
|
ScopedContext context(this);
|
750
|
-
WakeInsideCombiner();
|
870
|
+
WakeInsideCombiner(&flusher);
|
751
871
|
}
|
752
872
|
|
753
873
|
///////////////////////////////////////////////////////////////////////////////
|
754
874
|
// ServerCallData
|
755
875
|
|
876
|
+
struct ServerCallData::SendInitialMetadata {
|
877
|
+
enum State {
|
878
|
+
kInitial,
|
879
|
+
kGotLatch,
|
880
|
+
kQueuedWaitingForLatch,
|
881
|
+
kQueuedAndGotLatch,
|
882
|
+
kQueuedAndSetLatch,
|
883
|
+
kForwarded,
|
884
|
+
kCancelled,
|
885
|
+
};
|
886
|
+
State state = kInitial;
|
887
|
+
CapturedBatch batch;
|
888
|
+
Latch<ServerMetadata*>* server_initial_metadata_publisher = nullptr;
|
889
|
+
};
|
890
|
+
|
891
|
+
class ServerCallData::PollContext {
|
892
|
+
public:
|
893
|
+
explicit PollContext(ServerCallData* self, Flusher* flusher)
|
894
|
+
: self_(self), flusher_(flusher) {
|
895
|
+
GPR_ASSERT(self_->poll_ctx_ == nullptr);
|
896
|
+
self_->poll_ctx_ = this;
|
897
|
+
scoped_activity_.Init(self_);
|
898
|
+
have_scoped_activity_ = true;
|
899
|
+
}
|
900
|
+
|
901
|
+
PollContext(const PollContext&) = delete;
|
902
|
+
PollContext& operator=(const PollContext&) = delete;
|
903
|
+
|
904
|
+
~PollContext() {
|
905
|
+
self_->poll_ctx_ = nullptr;
|
906
|
+
if (have_scoped_activity_) scoped_activity_.Destroy();
|
907
|
+
if (repoll_) {
|
908
|
+
struct NextPoll : public grpc_closure {
|
909
|
+
grpc_call_stack* call_stack;
|
910
|
+
ServerCallData* call_data;
|
911
|
+
};
|
912
|
+
auto run = [](void* p, grpc_error_handle) {
|
913
|
+
auto* next_poll = static_cast<NextPoll*>(p);
|
914
|
+
{
|
915
|
+
Flusher flusher(next_poll->call_data);
|
916
|
+
next_poll->call_data->WakeInsideCombiner(&flusher);
|
917
|
+
}
|
918
|
+
GRPC_CALL_STACK_UNREF(next_poll->call_stack, "re-poll");
|
919
|
+
delete next_poll;
|
920
|
+
};
|
921
|
+
auto* p = absl::make_unique<NextPoll>().release();
|
922
|
+
p->call_stack = self_->call_stack();
|
923
|
+
p->call_data = self_;
|
924
|
+
GRPC_CALL_STACK_REF(self_->call_stack(), "re-poll");
|
925
|
+
GRPC_CLOSURE_INIT(p, run, p, nullptr);
|
926
|
+
flusher_->AddClosure(p, GRPC_ERROR_NONE, "re-poll");
|
927
|
+
}
|
928
|
+
}
|
929
|
+
|
930
|
+
void Repoll() { repoll_ = true; }
|
931
|
+
void ClearRepoll() { repoll_ = false; }
|
932
|
+
|
933
|
+
private:
|
934
|
+
ManualConstructor<ScopedActivity> scoped_activity_;
|
935
|
+
ServerCallData* const self_;
|
936
|
+
Flusher* const flusher_;
|
937
|
+
bool repoll_ = false;
|
938
|
+
bool have_scoped_activity_;
|
939
|
+
};
|
940
|
+
|
756
941
|
ServerCallData::ServerCallData(grpc_call_element* elem,
|
757
942
|
const grpc_call_element_args* args,
|
758
943
|
uint8_t flags)
|
759
944
|
: BaseCallData(elem, args, flags) {
|
945
|
+
if (server_initial_metadata_latch() != nullptr) {
|
946
|
+
send_initial_metadata_ = arena()->New<SendInitialMetadata>();
|
947
|
+
}
|
760
948
|
GRPC_CLOSURE_INIT(&recv_initial_metadata_ready_,
|
761
949
|
RecvInitialMetadataReadyCallback, this,
|
762
950
|
grpc_schedule_on_exec_ctx);
|
763
951
|
}
|
764
952
|
|
765
953
|
ServerCallData::~ServerCallData() {
|
766
|
-
GPR_ASSERT(
|
954
|
+
GPR_ASSERT(poll_ctx_ == nullptr);
|
767
955
|
GRPC_ERROR_UNREF(cancelled_error_);
|
768
956
|
}
|
769
957
|
|
770
958
|
// Activity implementation.
|
771
|
-
void ServerCallData::ForceImmediateRepoll() {
|
959
|
+
void ServerCallData::ForceImmediateRepoll() {
|
960
|
+
GPR_ASSERT(poll_ctx_ != nullptr);
|
961
|
+
poll_ctx_->Repoll();
|
962
|
+
}
|
772
963
|
|
773
964
|
// Handle one grpc_transport_stream_op_batch
|
774
|
-
void ServerCallData::StartBatch(grpc_transport_stream_op_batch*
|
965
|
+
void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) {
|
775
966
|
// Fake out the activity based context.
|
776
967
|
ScopedContext context(this);
|
968
|
+
CapturedBatch batch(b);
|
969
|
+
Flusher flusher(this);
|
970
|
+
bool wake = false;
|
777
971
|
|
778
972
|
// If this is a cancel stream, cancel anything we have pending and
|
779
973
|
// propagate the cancellation.
|
@@ -782,8 +976,14 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* batch) {
|
|
782
976
|
!batch->send_trailing_metadata && !batch->send_message &&
|
783
977
|
!batch->recv_initial_metadata && !batch->recv_message &&
|
784
978
|
!batch->recv_trailing_metadata);
|
785
|
-
Cancel(batch->payload->cancel_stream.cancel_error)
|
786
|
-
|
979
|
+
Cancel(GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error),
|
980
|
+
&flusher);
|
981
|
+
if (is_last()) {
|
982
|
+
GRPC_ERROR_UNREF(batch->payload->cancel_stream.cancel_error);
|
983
|
+
batch.CompleteWith(&flusher);
|
984
|
+
} else {
|
985
|
+
batch.ResumeWith(&flusher);
|
986
|
+
}
|
787
987
|
return;
|
788
988
|
}
|
789
989
|
|
@@ -805,61 +1005,85 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* batch) {
|
|
805
1005
|
recv_initial_state_ = RecvInitialState::kForwarded;
|
806
1006
|
}
|
807
1007
|
|
1008
|
+
// send_initial_metadata
|
1009
|
+
if (send_initial_metadata_ != nullptr && batch->send_initial_metadata) {
|
1010
|
+
switch (send_initial_metadata_->state) {
|
1011
|
+
case SendInitialMetadata::kInitial:
|
1012
|
+
send_initial_metadata_->state =
|
1013
|
+
SendInitialMetadata::kQueuedWaitingForLatch;
|
1014
|
+
break;
|
1015
|
+
case SendInitialMetadata::kGotLatch:
|
1016
|
+
send_initial_metadata_->state = SendInitialMetadata::kQueuedAndGotLatch;
|
1017
|
+
break;
|
1018
|
+
case SendInitialMetadata::kCancelled:
|
1019
|
+
batch.CancelWith(GRPC_ERROR_REF(cancelled_error_), &flusher);
|
1020
|
+
break;
|
1021
|
+
case SendInitialMetadata::kQueuedAndGotLatch:
|
1022
|
+
case SendInitialMetadata::kQueuedWaitingForLatch:
|
1023
|
+
case SendInitialMetadata::kQueuedAndSetLatch:
|
1024
|
+
case SendInitialMetadata::kForwarded:
|
1025
|
+
abort(); // not reachable
|
1026
|
+
}
|
1027
|
+
send_initial_metadata_->batch = batch;
|
1028
|
+
wake = true;
|
1029
|
+
}
|
1030
|
+
|
808
1031
|
// send_trailing_metadata
|
809
|
-
if (batch->send_trailing_metadata) {
|
1032
|
+
if (batch.is_captured() && batch->send_trailing_metadata) {
|
810
1033
|
switch (send_trailing_state_) {
|
811
1034
|
case SendTrailingState::kInitial:
|
812
1035
|
send_trailing_metadata_batch_ = batch;
|
813
1036
|
send_trailing_state_ = SendTrailingState::kQueued;
|
814
|
-
|
815
|
-
GPR_ASSERT(send_trailing_state_ == SendTrailingState::kQueued);
|
816
|
-
Cancel(error);
|
817
|
-
});
|
1037
|
+
wake = true;
|
818
1038
|
break;
|
819
1039
|
case SendTrailingState::kQueued:
|
820
1040
|
case SendTrailingState::kForwarded:
|
821
1041
|
abort(); // unreachable
|
822
1042
|
break;
|
823
1043
|
case SendTrailingState::kCancelled:
|
824
|
-
|
825
|
-
batch, GRPC_ERROR_REF(cancelled_error_), call_combiner());
|
1044
|
+
batch.CancelWith(GRPC_ERROR_REF(cancelled_error_), &flusher);
|
826
1045
|
break;
|
827
1046
|
}
|
828
|
-
return;
|
829
1047
|
}
|
830
1048
|
|
831
|
-
|
1049
|
+
if (wake) WakeInsideCombiner(&flusher);
|
1050
|
+
if (batch.is_captured()) batch.ResumeWith(&flusher);
|
832
1051
|
}
|
833
1052
|
|
834
1053
|
// Handle cancellation.
|
835
|
-
void ServerCallData::Cancel(grpc_error_handle error) {
|
1054
|
+
void ServerCallData::Cancel(grpc_error_handle error, Flusher* flusher) {
|
836
1055
|
// Track the latest reason for cancellation.
|
837
1056
|
GRPC_ERROR_UNREF(cancelled_error_);
|
838
|
-
cancelled_error_ =
|
1057
|
+
cancelled_error_ = error;
|
839
1058
|
// Stop running the promise.
|
840
1059
|
promise_ = ArenaPromise<ServerMetadataHandle>();
|
841
1060
|
if (send_trailing_state_ == SendTrailingState::kQueued) {
|
842
1061
|
send_trailing_state_ = SendTrailingState::kCancelled;
|
843
|
-
|
844
|
-
grpc_transport_stream_op_batch* batch;
|
845
|
-
CallCombiner* call_combiner;
|
846
|
-
};
|
847
|
-
auto fail = [](void* p, grpc_error_handle error) {
|
848
|
-
auto* f = static_cast<FailBatch*>(p);
|
849
|
-
grpc_transport_stream_op_batch_finish_with_failure(
|
850
|
-
f->batch, GRPC_ERROR_REF(error), f->call_combiner);
|
851
|
-
delete f;
|
852
|
-
};
|
853
|
-
auto* b = new FailBatch();
|
854
|
-
GRPC_CLOSURE_INIT(b, fail, b, nullptr);
|
855
|
-
b->batch = absl::exchange(send_trailing_metadata_batch_, nullptr);
|
856
|
-
b->call_combiner = call_combiner();
|
857
|
-
GRPC_CALL_COMBINER_START(call_combiner(), b,
|
858
|
-
GRPC_ERROR_REF(cancelled_error_),
|
859
|
-
"cancel pending batch");
|
1062
|
+
send_trailing_metadata_batch_.CancelWith(GRPC_ERROR_REF(error), flusher);
|
860
1063
|
} else {
|
861
1064
|
send_trailing_state_ = SendTrailingState::kCancelled;
|
862
1065
|
}
|
1066
|
+
if (send_initial_metadata_ != nullptr) {
|
1067
|
+
switch (send_initial_metadata_->state) {
|
1068
|
+
case SendInitialMetadata::kInitial:
|
1069
|
+
case SendInitialMetadata::kGotLatch:
|
1070
|
+
case SendInitialMetadata::kForwarded:
|
1071
|
+
case SendInitialMetadata::kCancelled:
|
1072
|
+
break;
|
1073
|
+
case SendInitialMetadata::kQueuedWaitingForLatch:
|
1074
|
+
case SendInitialMetadata::kQueuedAndGotLatch:
|
1075
|
+
case SendInitialMetadata::kQueuedAndSetLatch:
|
1076
|
+
send_initial_metadata_->batch.CancelWith(GRPC_ERROR_REF(error),
|
1077
|
+
flusher);
|
1078
|
+
break;
|
1079
|
+
}
|
1080
|
+
send_initial_metadata_->state = SendInitialMetadata::kCancelled;
|
1081
|
+
}
|
1082
|
+
if (auto* closure =
|
1083
|
+
absl::exchange(original_recv_initial_metadata_ready_, nullptr)) {
|
1084
|
+
flusher->AddClosure(closure, GRPC_ERROR_REF(error),
|
1085
|
+
"original_recv_initial_metadata");
|
1086
|
+
}
|
863
1087
|
}
|
864
1088
|
|
865
1089
|
// Construct a promise that will "call" the next filter.
|
@@ -872,6 +1096,31 @@ ArenaPromise<ServerMetadataHandle> ServerCallData::MakeNextPromise(
|
|
872
1096
|
GPR_ASSERT(UnwrapMetadata(std::move(call_args.client_initial_metadata)) ==
|
873
1097
|
recv_initial_metadata_);
|
874
1098
|
forward_recv_initial_metadata_callback_ = true;
|
1099
|
+
if (send_initial_metadata_ != nullptr) {
|
1100
|
+
GPR_ASSERT(send_initial_metadata_->server_initial_metadata_publisher ==
|
1101
|
+
nullptr);
|
1102
|
+
GPR_ASSERT(call_args.server_initial_metadata != nullptr);
|
1103
|
+
send_initial_metadata_->server_initial_metadata_publisher =
|
1104
|
+
call_args.server_initial_metadata;
|
1105
|
+
switch (send_initial_metadata_->state) {
|
1106
|
+
case SendInitialMetadata::kInitial:
|
1107
|
+
send_initial_metadata_->state = SendInitialMetadata::kGotLatch;
|
1108
|
+
break;
|
1109
|
+
case SendInitialMetadata::kGotLatch:
|
1110
|
+
case SendInitialMetadata::kQueuedAndGotLatch:
|
1111
|
+
case SendInitialMetadata::kQueuedAndSetLatch:
|
1112
|
+
case SendInitialMetadata::kForwarded:
|
1113
|
+
abort(); // not reachable
|
1114
|
+
break;
|
1115
|
+
case SendInitialMetadata::kQueuedWaitingForLatch:
|
1116
|
+
send_initial_metadata_->state = SendInitialMetadata::kQueuedAndGotLatch;
|
1117
|
+
break;
|
1118
|
+
case SendInitialMetadata::kCancelled:
|
1119
|
+
break;
|
1120
|
+
}
|
1121
|
+
} else {
|
1122
|
+
GPR_ASSERT(call_args.server_initial_metadata == nullptr);
|
1123
|
+
}
|
875
1124
|
return ArenaPromise<ServerMetadataHandle>(
|
876
1125
|
[this]() { return PollTrailingMetadata(); });
|
877
1126
|
}
|
@@ -903,12 +1152,14 @@ void ServerCallData::RecvInitialMetadataReadyCallback(void* arg,
|
|
903
1152
|
}
|
904
1153
|
|
905
1154
|
void ServerCallData::RecvInitialMetadataReady(grpc_error_handle error) {
|
1155
|
+
Flusher flusher(this);
|
906
1156
|
GPR_ASSERT(recv_initial_state_ == RecvInitialState::kForwarded);
|
907
1157
|
// If there was an error we just propagate that through
|
908
|
-
if (error
|
1158
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
909
1159
|
recv_initial_state_ = RecvInitialState::kResponded;
|
910
|
-
|
911
|
-
|
1160
|
+
flusher.AddClosure(
|
1161
|
+
absl::exchange(original_recv_initial_metadata_ready_, nullptr),
|
1162
|
+
GRPC_ERROR_REF(error), "propagate error");
|
912
1163
|
return;
|
913
1164
|
}
|
914
1165
|
// Record that we've got the callback.
|
@@ -925,30 +1176,46 @@ void ServerCallData::RecvInitialMetadataReady(grpc_error_handle error) {
|
|
925
1176
|
return MakeNextPromise(std::move(call_args));
|
926
1177
|
});
|
927
1178
|
// Poll once.
|
928
|
-
|
929
|
-
|
930
|
-
|
931
|
-
|
932
|
-
|
933
|
-
}
|
934
|
-
Closure::Run(DEBUG_LOCATION, original_recv_initial_metadata_ready_,
|
935
|
-
GRPC_ERROR_REF(error));
|
936
|
-
if (own_error) GRPC_ERROR_UNREF(error);
|
1179
|
+
WakeInsideCombiner(&flusher);
|
1180
|
+
if (auto* closure =
|
1181
|
+
absl::exchange(original_recv_initial_metadata_ready_, nullptr)) {
|
1182
|
+
flusher.AddClosure(closure, GRPC_ERROR_NONE,
|
1183
|
+
"original_recv_initial_metadata");
|
1184
|
+
}
|
937
1185
|
}
|
938
1186
|
|
939
1187
|
// Wakeup and poll the promise if appropriate.
|
940
|
-
void ServerCallData::WakeInsideCombiner(
|
941
|
-
|
942
|
-
|
943
|
-
|
944
|
-
|
945
|
-
|
1188
|
+
void ServerCallData::WakeInsideCombiner(Flusher* flusher) {
|
1189
|
+
PollContext poll_ctx(this, flusher);
|
1190
|
+
if (send_initial_metadata_ != nullptr &&
|
1191
|
+
send_initial_metadata_->state ==
|
1192
|
+
SendInitialMetadata::kQueuedAndGotLatch) {
|
1193
|
+
send_initial_metadata_->state = SendInitialMetadata::kQueuedAndSetLatch;
|
1194
|
+
send_initial_metadata_->server_initial_metadata_publisher->Set(
|
1195
|
+
send_initial_metadata_->batch->payload->send_initial_metadata
|
1196
|
+
.send_initial_metadata);
|
1197
|
+
}
|
1198
|
+
poll_ctx.ClearRepoll();
|
1199
|
+
if (promise_.has_value()) {
|
946
1200
|
Poll<ServerMetadataHandle> poll;
|
947
|
-
|
948
|
-
|
949
|
-
|
1201
|
+
poll = promise_();
|
1202
|
+
if (send_initial_metadata_ != nullptr &&
|
1203
|
+
send_initial_metadata_->state ==
|
1204
|
+
SendInitialMetadata::kQueuedAndSetLatch) {
|
1205
|
+
Poll<ServerMetadata**> p = server_initial_metadata_latch()->Wait()();
|
1206
|
+
if (ServerMetadata*** ppp = absl::get_if<ServerMetadata**>(&p)) {
|
1207
|
+
ServerMetadata* md = **ppp;
|
1208
|
+
if (send_initial_metadata_->batch->payload->send_initial_metadata
|
1209
|
+
.send_initial_metadata != md) {
|
1210
|
+
*send_initial_metadata_->batch->payload->send_initial_metadata
|
1211
|
+
.send_initial_metadata = std::move(*md);
|
1212
|
+
}
|
1213
|
+
send_initial_metadata_->state = SendInitialMetadata::kForwarded;
|
1214
|
+
send_initial_metadata_->batch.ResumeWith(flusher);
|
1215
|
+
}
|
950
1216
|
}
|
951
1217
|
if (auto* r = absl::get_if<ServerMetadataHandle>(&poll)) {
|
1218
|
+
promise_ = ArenaPromise<ServerMetadataHandle>();
|
952
1219
|
auto* md = UnwrapMetadata(std::move(*r));
|
953
1220
|
bool destroy_md = true;
|
954
1221
|
switch (send_trailing_state_) {
|
@@ -960,7 +1227,7 @@ void ServerCallData::WakeInsideCombiner(
|
|
960
1227
|
} else {
|
961
1228
|
destroy_md = false;
|
962
1229
|
}
|
963
|
-
|
1230
|
+
send_trailing_metadata_batch_.ResumeWith(flusher);
|
964
1231
|
send_trailing_state_ = SendTrailingState::kForwarded;
|
965
1232
|
} break;
|
966
1233
|
case SendTrailingState::kForwarded:
|
@@ -977,8 +1244,7 @@ void ServerCallData::WakeInsideCombiner(
|
|
977
1244
|
error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE,
|
978
1245
|
message->as_string_view());
|
979
1246
|
}
|
980
|
-
|
981
|
-
GRPC_ERROR_UNREF(error);
|
1247
|
+
Cancel(error, flusher);
|
982
1248
|
} break;
|
983
1249
|
case SendTrailingState::kCancelled:
|
984
1250
|
// Nothing to do.
|
@@ -989,11 +1255,6 @@ void ServerCallData::WakeInsideCombiner(
|
|
989
1255
|
}
|
990
1256
|
}
|
991
1257
|
}
|
992
|
-
is_polling_ = false;
|
993
|
-
if (forward_send_trailing_metadata) {
|
994
|
-
grpc_call_next_op(elem(),
|
995
|
-
absl::exchange(send_trailing_metadata_batch_, nullptr));
|
996
|
-
}
|
997
1258
|
}
|
998
1259
|
|
999
1260
|
void ServerCallData::OnWakeup() { abort(); } // not implemented
|