grpc 1.50.0.pre1 → 1.51.0
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 +131 -42
- data/include/grpc/event_engine/event_engine.h +10 -3
- data/include/grpc/event_engine/slice_buffer.h +17 -0
- data/include/grpc/grpc.h +0 -10
- data/include/grpc/impl/codegen/grpc_types.h +1 -5
- data/include/grpc/impl/codegen/port_platform.h +0 -3
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +19 -13
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -5
- data/src/core/ext/filters/client_channel/client_channel.cc +120 -140
- data/src/core/ext/filters/client_channel/client_channel.h +3 -4
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +0 -2
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
- data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +20 -47
- data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +3 -4
- data/src/core/ext/filters/client_channel/http_proxy.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +8 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +35 -44
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +41 -29
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +9 -11
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -12
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +8 -10
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +26 -27
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +7 -9
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +44 -26
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +17 -27
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +13 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +48 -47
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -126
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -32
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +22 -23
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +50 -52
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +2 -4
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -26
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +63 -46
- data/src/core/ext/filters/client_channel/retry_filter.cc +80 -102
- data/src/core/ext/filters/client_channel/retry_service_config.cc +192 -234
- data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
- data/src/core/ext/filters/client_channel/retry_throttle.cc +8 -8
- data/src/core/ext/filters/client_channel/retry_throttle.h +8 -7
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/subchannel.cc +21 -25
- data/src/core/ext/filters/client_channel/subchannel.h +2 -2
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
- data/src/core/ext/filters/deadline/deadline_filter.cc +13 -14
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
- data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -16
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +13 -13
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +34 -34
- data/src/core/ext/filters/http/server/http_server_filter.cc +26 -25
- data/src/core/ext/filters/message_size/message_size_filter.cc +86 -117
- data/src/core/ext/filters/message_size/message_size_filter.h +22 -15
- data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +1 -1
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +17 -21
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +57 -72
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +212 -253
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -11
- data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -3
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +16 -15
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +13 -13
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +10 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +15 -17
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +31 -39
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/internal.h +24 -8
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -52
- data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/varint.h +11 -8
- data/src/core/ext/transport/chttp2/transport/writing.cc +16 -16
- data/src/core/ext/transport/inproc/inproc_transport.cc +97 -115
- data/src/core/ext/xds/certificate_provider_store.cc +4 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
- data/src/core/ext/xds/xds_api.cc +15 -68
- data/src/core/ext/xds/xds_api.h +3 -7
- data/src/core/ext/xds/xds_bootstrap.h +0 -1
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
- data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
- data/src/core/ext/xds/xds_client.cc +122 -90
- data/src/core/ext/xds/xds_client.h +7 -2
- data/src/core/ext/xds/xds_client_grpc.cc +5 -24
- data/src/core/ext/xds/xds_cluster.cc +291 -183
- data/src/core/ext/xds/xds_cluster.h +11 -15
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +32 -29
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +35 -16
- data/src/core/ext/xds/xds_common_types.cc +208 -141
- data/src/core/ext/xds/xds_common_types.h +19 -13
- data/src/core/ext/xds/xds_endpoint.cc +214 -129
- data/src/core/ext/xds/xds_endpoint.h +4 -7
- data/src/core/ext/xds/xds_http_fault_filter.cc +56 -43
- data/src/core/ext/xds/xds_http_fault_filter.h +13 -21
- data/src/core/ext/xds/xds_http_filters.cc +60 -73
- data/src/core/ext/xds/xds_http_filters.h +67 -19
- data/src/core/ext/xds/xds_http_rbac_filter.cc +152 -207
- data/src/core/ext/xds/xds_http_rbac_filter.h +12 -15
- data/src/core/ext/xds/xds_lb_policy_registry.cc +122 -169
- data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
- data/src/core/ext/xds/xds_listener.cc +459 -417
- data/src/core/ext/xds/xds_listener.h +43 -47
- data/src/core/ext/xds/xds_resource_type.h +3 -11
- data/src/core/ext/xds/xds_resource_type_impl.h +8 -13
- data/src/core/ext/xds/xds_route_config.cc +94 -80
- data/src/core/ext/xds/xds_route_config.h +10 -10
- data/src/core/ext/xds/xds_routing.cc +2 -1
- data/src/core/ext/xds/xds_routing.h +2 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -94
- data/src/core/ext/xds/xds_transport_grpc.cc +4 -5
- data/src/core/lib/address_utils/parse_address.cc +11 -10
- data/src/core/lib/channel/channel_args.h +16 -1
- data/src/core/lib/channel/channel_stack.cc +23 -20
- data/src/core/lib/channel/channel_stack.h +17 -4
- data/src/core/lib/channel/channel_stack_builder.cc +4 -7
- data/src/core/lib/channel/channel_stack_builder.h +14 -6
- data/src/core/lib/channel/channel_stack_builder_impl.cc +25 -7
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
- data/src/core/lib/channel/channel_trace.cc +4 -5
- data/src/core/lib/channel/channelz.cc +1 -1
- data/src/core/lib/channel/connected_channel.cc +695 -35
- data/src/core/lib/channel/connected_channel.h +0 -4
- data/src/core/lib/channel/promise_based_filter.cc +1004 -140
- data/src/core/lib/channel/promise_based_filter.h +364 -87
- data/src/core/lib/compression/message_compress.cc +5 -5
- data/src/core/lib/debug/event_log.cc +88 -0
- data/src/core/lib/debug/event_log.h +81 -0
- data/src/core/lib/debug/histogram_view.cc +69 -0
- data/src/core/lib/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
- data/src/core/lib/debug/stats.cc +22 -119
- data/src/core/lib/debug/stats.h +29 -35
- data/src/core/lib/debug/stats_data.cc +224 -73
- data/src/core/lib/debug/stats_data.h +263 -122
- data/src/core/lib/event_engine/common_closures.h +71 -0
- data/src/core/lib/event_engine/default_event_engine.cc +38 -15
- data/src/core/lib/event_engine/default_event_engine.h +15 -3
- data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
- data/src/core/lib/event_engine/memory_allocator.cc +1 -1
- data/src/core/lib/event_engine/poller.h +10 -4
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
- data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
- data/src/core/lib/event_engine/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +13 -16
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +453 -18
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
- data/src/core/lib/event_engine/posix_engine/timer.h +9 -8
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +57 -194
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +21 -49
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
- data/src/core/lib/event_engine/slice.cc +7 -6
- data/src/core/lib/event_engine/slice_buffer.cc +2 -2
- data/src/core/lib/event_engine/thread_pool.cc +106 -25
- data/src/core/lib/event_engine/thread_pool.h +32 -9
- data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
- data/src/core/lib/event_engine/windows/windows_engine.cc +18 -12
- data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
- data/src/core/lib/experiments/config.cc +1 -1
- data/src/core/lib/experiments/experiments.cc +13 -2
- data/src/core/lib/experiments/experiments.h +8 -1
- data/src/core/lib/gpr/cpu_linux.cc +6 -2
- data/src/core/lib/gpr/log_linux.cc +3 -4
- data/src/core/lib/gpr/string.h +1 -1
- data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
- data/src/core/lib/gprpp/load_file.cc +75 -0
- data/src/core/lib/gprpp/load_file.h +33 -0
- data/src/core/lib/gprpp/per_cpu.h +46 -0
- data/src/core/lib/gprpp/stat_posix.cc +5 -4
- data/src/core/lib/gprpp/stat_windows.cc +3 -2
- data/src/core/lib/gprpp/status_helper.h +1 -3
- data/src/core/lib/gprpp/strerror.cc +41 -0
- data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/strerror.h} +9 -13
- data/src/core/lib/gprpp/thd_windows.cc +1 -2
- data/src/core/lib/gprpp/time.cc +3 -4
- data/src/core/lib/gprpp/time.h +13 -2
- data/src/core/lib/gprpp/validation_errors.h +18 -1
- data/src/core/lib/http/httpcli.cc +40 -44
- data/src/core/lib/http/httpcli.h +6 -5
- data/src/core/lib/http/httpcli_security_connector.cc +4 -6
- data/src/core/lib/http/parser.cc +54 -65
- data/src/core/lib/iomgr/buffer_list.cc +105 -116
- data/src/core/lib/iomgr/buffer_list.h +60 -44
- data/src/core/lib/iomgr/call_combiner.cc +11 -10
- data/src/core/lib/iomgr/call_combiner.h +3 -4
- data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
- data/src/core/lib/iomgr/closure.h +49 -5
- data/src/core/lib/iomgr/combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +26 -25
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
- data/src/core/lib/iomgr/error.cc +27 -42
- data/src/core/lib/iomgr/error.h +22 -152
- data/src/core/lib/iomgr/ev_apple.cc +4 -4
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +26 -25
- data/src/core/lib/iomgr/ev_poll_posix.cc +27 -31
- data/src/core/lib/iomgr/exec_ctx.cc +3 -4
- data/src/core/lib/iomgr/exec_ctx.h +2 -3
- data/src/core/lib/iomgr/executor.cc +1 -2
- data/src/core/lib/iomgr/internal_errqueue.cc +3 -1
- data/src/core/lib/iomgr/iocp_windows.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -1
- data/src/core/lib/iomgr/iomgr_windows.cc +2 -1
- data/src/core/lib/iomgr/load_file.cc +5 -9
- data/src/core/lib/iomgr/lockfree_event.cc +10 -10
- data/src/core/lib/iomgr/pollset_windows.cc +4 -4
- data/src/core/lib/iomgr/python_util.h +2 -2
- data/src/core/lib/iomgr/resolve_address.cc +8 -3
- data/src/core/lib/iomgr/resolve_address.h +3 -4
- data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +14 -25
- data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +14 -17
- data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +30 -29
- data/src/core/lib/iomgr/socket_utils_posix.cc +1 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
- data/src/core/lib/iomgr/socket_windows.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +31 -35
- data/src/core/lib/iomgr/tcp_client_windows.cc +8 -12
- data/src/core/lib/iomgr/tcp_posix.cc +92 -108
- data/src/core/lib/iomgr/tcp_server_posix.cc +34 -34
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +18 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -13
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_windows.cc +26 -29
- data/src/core/lib/iomgr/tcp_windows.cc +27 -34
- data/src/core/lib/iomgr/timer.h +8 -8
- data/src/core/lib/iomgr/timer_generic.cc +9 -15
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
- data/src/core/lib/json/json_channel_args.h +42 -0
- data/src/core/lib/json/json_object_loader.cc +7 -2
- data/src/core/lib/json/json_object_loader.h +22 -0
- data/src/core/lib/json/json_util.cc +5 -5
- data/src/core/lib/json/json_util.h +4 -4
- data/src/core/lib/load_balancing/lb_policy.cc +1 -1
- data/src/core/lib/load_balancing/lb_policy.h +4 -0
- data/src/core/lib/load_balancing/subchannel_interface.h +0 -7
- data/src/core/lib/matchers/matchers.cc +3 -4
- data/src/core/lib/promise/activity.cc +16 -2
- data/src/core/lib/promise/activity.h +38 -15
- data/src/core/lib/promise/arena_promise.h +80 -51
- data/src/core/lib/promise/context.h +13 -6
- data/src/core/lib/promise/detail/basic_seq.h +9 -28
- data/src/core/lib/promise/detail/promise_factory.h +58 -10
- data/src/core/lib/promise/detail/status.h +28 -0
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -1
- data/src/core/lib/promise/for_each.h +129 -0
- data/src/core/lib/promise/loop.h +7 -5
- data/src/core/lib/promise/map_pipe.h +87 -0
- data/src/core/lib/promise/pipe.cc +19 -0
- data/src/core/lib/promise/pipe.h +505 -0
- data/src/core/lib/promise/poll.h +13 -0
- data/src/core/lib/promise/seq.h +3 -5
- data/src/core/lib/promise/sleep.cc +5 -4
- data/src/core/lib/promise/sleep.h +1 -2
- data/src/core/lib/promise/try_concurrently.h +341 -0
- data/src/core/lib/promise/try_seq.h +10 -13
- data/src/core/lib/resolver/server_address.cc +1 -0
- data/src/core/lib/resolver/server_address.h +1 -3
- data/src/core/lib/resource_quota/api.cc +0 -1
- data/src/core/lib/resource_quota/arena.cc +19 -0
- data/src/core/lib/resource_quota/arena.h +89 -0
- data/src/core/lib/resource_quota/memory_quota.cc +1 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
- data/src/core/lib/security/authorization/matchers.cc +25 -22
- data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
- data/src/core/lib/security/context/security_context.h +10 -0
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -24
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +24 -30
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +19 -27
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -41
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +6 -11
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +8 -15
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +2 -6
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +1 -4
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +7 -11
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +9 -14
- data/src/core/lib/security/security_connector/ssl_utils.cc +5 -7
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -27
- data/src/core/lib/security/transport/client_auth_filter.cc +1 -1
- data/src/core/lib/security/transport/secure_endpoint.cc +26 -28
- data/src/core/lib/security/transport/security_handshaker.cc +53 -53
- data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
- data/src/core/lib/security/transport/tsi_error.cc +6 -3
- data/src/core/lib/security/util/json_util.cc +4 -5
- data/src/core/lib/service_config/service_config.h +1 -1
- data/src/core/lib/service_config/service_config_impl.cc +111 -158
- data/src/core/lib/service_config/service_config_impl.h +14 -17
- data/src/core/lib/service_config/service_config_parser.cc +14 -31
- data/src/core/lib/service_config/service_config_parser.h +14 -10
- data/src/core/lib/slice/b64.cc +2 -2
- data/src/core/lib/slice/slice.cc +7 -1
- data/src/core/lib/slice/slice.h +19 -6
- data/src/core/lib/slice/slice_buffer.cc +13 -14
- data/src/core/lib/slice/slice_internal.h +13 -21
- data/src/core/lib/slice/slice_refcount.h +34 -19
- data/src/core/lib/surface/byte_buffer.cc +3 -4
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
- data/src/core/lib/surface/call.cc +1366 -239
- data/src/core/lib/surface/call.h +44 -0
- data/src/core/lib/surface/call_details.cc +3 -3
- data/src/core/lib/surface/call_trace.cc +113 -0
- data/src/core/lib/surface/call_trace.h +30 -0
- data/src/core/lib/surface/channel.cc +44 -49
- data/src/core/lib/surface/channel.h +9 -1
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/channel_stack_type.cc +4 -0
- data/src/core/lib/surface/channel_stack_type.h +2 -0
- data/src/core/lib/surface/completion_queue.cc +38 -52
- data/src/core/lib/surface/init.cc +8 -39
- data/src/core/lib/surface/init_internally.h +8 -0
- data/src/core/lib/surface/lame_client.cc +10 -8
- data/src/core/lib/surface/server.cc +48 -70
- data/src/core/lib/surface/server.h +3 -4
- data/src/core/lib/surface/validate_metadata.cc +11 -12
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/connectivity_state.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +34 -28
- data/src/core/lib/transport/error_utils.h +3 -3
- data/src/core/lib/transport/handshaker.cc +14 -14
- data/src/core/lib/transport/handshaker.h +1 -1
- data/src/core/lib/transport/handshaker_factory.h +26 -0
- data/src/core/lib/transport/handshaker_registry.cc +8 -2
- data/src/core/lib/transport/handshaker_registry.h +3 -4
- data/src/core/lib/transport/http_connect_handshaker.cc +23 -24
- data/src/core/lib/transport/metadata_batch.h +17 -1
- data/src/core/lib/transport/parsed_metadata.cc +2 -6
- data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
- data/src/core/lib/transport/transport.cc +63 -17
- data/src/core/lib/transport/transport.h +64 -68
- data/src/core/lib/transport/transport_impl.h +1 -1
- data/src/core/lib/transport/transport_op_string.cc +7 -6
- data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -10
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -14
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +10 -10
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +8 -8
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
- 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 +5 -5
- data/src/core/tsi/fake_transport_security.cc +3 -3
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +7 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +6 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +0 -3
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/channel_spec.rb +0 -43
- data/src/ruby/spec/generic/active_call_spec.rb +12 -3
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
- data/third_party/zlib/compress.c +3 -3
- data/third_party/zlib/crc32.c +21 -12
- data/third_party/zlib/deflate.c +112 -106
- data/third_party/zlib/deflate.h +2 -2
- data/third_party/zlib/gzlib.c +1 -1
- data/third_party/zlib/gzread.c +3 -5
- data/third_party/zlib/gzwrite.c +1 -1
- data/third_party/zlib/infback.c +10 -7
- data/third_party/zlib/inflate.c +5 -2
- data/third_party/zlib/inftrees.c +2 -2
- data/third_party/zlib/inftrees.h +1 -1
- data/third_party/zlib/trees.c +61 -62
- data/third_party/zlib/uncompr.c +2 -2
- data/third_party/zlib/zconf.h +16 -3
- data/third_party/zlib/zlib.h +10 -10
- data/third_party/zlib/zutil.c +9 -7
- data/third_party/zlib/zutil.h +1 -0
- metadata +57 -20
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
- data/src/core/lib/event_engine/executor/threaded_executor.h +0 -44
- data/src/core/lib/gpr/murmur_hash.cc +0 -82
- data/src/core/lib/gpr/murmur_hash.h +0 -29
- data/src/core/lib/gpr/tls.h +0 -156
- data/src/core/lib/promise/call_push_pull.h +0 -148
- data/src/core/lib/slice/slice_api.cc +0 -39
- data/src/core/lib/slice/slice_buffer_api.cc +0 -35
- data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -28,6 +28,7 @@
|
|
28
28
|
#include <utility>
|
29
29
|
|
30
30
|
#include "absl/container/inlined_vector.h"
|
31
|
+
#include "absl/status/status.h"
|
31
32
|
#include "absl/status/statusor.h"
|
32
33
|
#include "absl/strings/str_cat.h"
|
33
34
|
#include "absl/strings/string_view.h"
|
@@ -56,6 +57,7 @@
|
|
56
57
|
#include "src/core/lib/gprpp/orphanable.h"
|
57
58
|
#include "src/core/lib/gprpp/ref_counted.h"
|
58
59
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
60
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
59
61
|
#include "src/core/lib/gprpp/time.h"
|
60
62
|
#include "src/core/lib/iomgr/call_combiner.h"
|
61
63
|
#include "src/core/lib/iomgr/closure.h"
|
@@ -66,8 +68,8 @@
|
|
66
68
|
#include "src/core/lib/resource_quota/arena.h"
|
67
69
|
#include "src/core/lib/service_config/service_config.h"
|
68
70
|
#include "src/core/lib/service_config/service_config_call_data.h"
|
71
|
+
#include "src/core/lib/slice/slice.h"
|
69
72
|
#include "src/core/lib/slice/slice_buffer.h"
|
70
|
-
#include "src/core/lib/slice/slice_refcount.h"
|
71
73
|
#include "src/core/lib/transport/error_utils.h"
|
72
74
|
#include "src/core/lib/transport/metadata_batch.h"
|
73
75
|
#include "src/core/lib/transport/transport.h"
|
@@ -149,7 +151,7 @@ class RetryFilter {
|
|
149
151
|
grpc_channel_element_args* args) {
|
150
152
|
GPR_ASSERT(args->is_last);
|
151
153
|
GPR_ASSERT(elem->filter == &kRetryFilterVtable);
|
152
|
-
grpc_error_handle error
|
154
|
+
grpc_error_handle error;
|
153
155
|
new (elem->channel_data) RetryFilter(args->channel_args, &error);
|
154
156
|
return error;
|
155
157
|
}
|
@@ -190,15 +192,15 @@ class RetryFilter {
|
|
190
192
|
const char* server_uri =
|
191
193
|
grpc_channel_args_find_string(args, GRPC_ARG_SERVER_URI);
|
192
194
|
if (server_uri == nullptr) {
|
193
|
-
*error =
|
195
|
+
*error = GRPC_ERROR_CREATE(
|
194
196
|
"server URI channel arg missing or wrong type in client channel "
|
195
197
|
"filter");
|
196
198
|
return;
|
197
199
|
}
|
198
200
|
absl::StatusOr<URI> uri = URI::Parse(server_uri);
|
199
201
|
if (!uri.ok() || uri->path().empty()) {
|
200
|
-
*error =
|
201
|
-
"could not extract server name from target URI");
|
202
|
+
*error =
|
203
|
+
GRPC_ERROR_CREATE("could not extract server name from target URI");
|
202
204
|
return;
|
203
205
|
}
|
204
206
|
std::string server_name(absl::StripPrefix(uri->path(), "/"));
|
@@ -491,9 +493,9 @@ class RetryFilter::CallData {
|
|
491
493
|
bool sent_cancel_stream_ : 1;
|
492
494
|
// State for callback processing.
|
493
495
|
RefCountedPtr<BatchData> recv_initial_metadata_ready_deferred_batch_;
|
494
|
-
grpc_error_handle recv_initial_metadata_error_
|
496
|
+
grpc_error_handle recv_initial_metadata_error_;
|
495
497
|
RefCountedPtr<BatchData> recv_message_ready_deferred_batch_;
|
496
|
-
grpc_error_handle recv_message_error_
|
498
|
+
grpc_error_handle recv_message_error_;
|
497
499
|
struct OnCompleteDeferredBatch {
|
498
500
|
OnCompleteDeferredBatch(RefCountedPtr<BatchData> batch,
|
499
501
|
grpc_error_handle error)
|
@@ -505,7 +507,7 @@ class RetryFilter::CallData {
|
|
505
507
|
absl::InlinedVector<OnCompleteDeferredBatch, 3>
|
506
508
|
on_complete_deferred_batches_;
|
507
509
|
RefCountedPtr<BatchData> recv_trailing_metadata_internal_batch_;
|
508
|
-
grpc_error_handle recv_trailing_metadata_error_
|
510
|
+
grpc_error_handle recv_trailing_metadata_error_;
|
509
511
|
bool seen_recv_trailing_metadata_from_surface_ : 1;
|
510
512
|
// NOTE: Do not move this next to the metadata bitfields above. That would
|
511
513
|
// save space but will also result in a data race because compiler
|
@@ -575,7 +577,7 @@ class RetryFilter::CallData {
|
|
575
577
|
CallCombiner* call_combiner_;
|
576
578
|
grpc_call_context_element* call_context_;
|
577
579
|
|
578
|
-
grpc_error_handle cancelled_from_surface_
|
580
|
+
grpc_error_handle cancelled_from_surface_;
|
579
581
|
|
580
582
|
RefCountedPtr<CallStackDestructionBarrier> call_stack_destruction_barrier_;
|
581
583
|
|
@@ -663,7 +665,7 @@ class RetryFilter::CallData::CallStackDestructionBarrier
|
|
663
665
|
|
664
666
|
~CallStackDestructionBarrier() override {
|
665
667
|
// TODO(yashkt) : This can potentially be a Closure::Run
|
666
|
-
ExecCtx::Run(DEBUG_LOCATION, on_call_stack_destruction_,
|
668
|
+
ExecCtx::Run(DEBUG_LOCATION, on_call_stack_destruction_, absl::OkStatus());
|
667
669
|
}
|
668
670
|
|
669
671
|
// Set the closure from the surface. This closure will be invoked
|
@@ -901,7 +903,7 @@ void RetryFilter::CallData::CallAttempt::AddClosureForBatch(
|
|
901
903
|
batch->handler_private.extra_arg = lb_call_.get();
|
902
904
|
GRPC_CLOSURE_INIT(&batch->handler_private.closure, StartBatchInCallCombiner,
|
903
905
|
batch, grpc_schedule_on_exec_ctx);
|
904
|
-
closures->Add(&batch->handler_private.closure,
|
906
|
+
closures->Add(&batch->handler_private.closure, absl::OkStatus(), reason);
|
905
907
|
}
|
906
908
|
|
907
909
|
void RetryFilter::CallData::CallAttempt::
|
@@ -926,7 +928,6 @@ void RetryFilter::CallData::CallAttempt::
|
|
926
928
|
void RetryFilter::CallData::CallAttempt::MaybeAddBatchForCancelOp(
|
927
929
|
grpc_error_handle error, CallCombinerClosureList* closures) {
|
928
930
|
if (sent_cancel_stream_) {
|
929
|
-
GRPC_ERROR_UNREF(error);
|
930
931
|
return;
|
931
932
|
}
|
932
933
|
sent_cancel_stream_ = true;
|
@@ -1020,9 +1021,8 @@ void RetryFilter::CallData::CallAttempt::AddBatchesForPendingBatches(
|
|
1020
1021
|
DEBUG_LOCATION,
|
1021
1022
|
"internally started recv_trailing_metadata batch pending and "
|
1022
1023
|
"recv_trailing_metadata started from surface");
|
1023
|
-
GRPC_ERROR_UNREF(recv_trailing_metadata_error_);
|
1024
1024
|
}
|
1025
|
-
recv_trailing_metadata_error_ =
|
1025
|
+
recv_trailing_metadata_error_ = absl::OkStatus();
|
1026
1026
|
}
|
1027
1027
|
// We don't want the fact that we've already started this op internally
|
1028
1028
|
// to prevent us from adding a batch that may contain other ops.
|
@@ -1236,22 +1236,18 @@ void RetryFilter::CallData::CallAttempt::Abandon() {
|
|
1236
1236
|
DEBUG_LOCATION,
|
1237
1237
|
"unref internal recv_trailing_metadata_ready batch; attempt abandoned");
|
1238
1238
|
}
|
1239
|
-
|
1240
|
-
recv_trailing_metadata_error_ = GRPC_ERROR_NONE;
|
1239
|
+
recv_trailing_metadata_error_ = absl::OkStatus();
|
1241
1240
|
recv_initial_metadata_ready_deferred_batch_.reset(
|
1242
1241
|
DEBUG_LOCATION,
|
1243
1242
|
"unref deferred recv_initial_metadata_ready batch; attempt abandoned");
|
1244
|
-
|
1245
|
-
recv_initial_metadata_error_ = GRPC_ERROR_NONE;
|
1243
|
+
recv_initial_metadata_error_ = absl::OkStatus();
|
1246
1244
|
recv_message_ready_deferred_batch_.reset(
|
1247
1245
|
DEBUG_LOCATION,
|
1248
1246
|
"unref deferred recv_message_ready batch; attempt abandoned");
|
1249
|
-
|
1250
|
-
recv_message_error_ = GRPC_ERROR_NONE;
|
1247
|
+
recv_message_error_ = absl::OkStatus();
|
1251
1248
|
for (auto& on_complete_deferred_batch : on_complete_deferred_batches_) {
|
1252
1249
|
on_complete_deferred_batch.batch.reset(
|
1253
1250
|
DEBUG_LOCATION, "unref deferred on_complete batch; attempt abandoned");
|
1254
|
-
GRPC_ERROR_UNREF(on_complete_deferred_batch.error);
|
1255
1251
|
}
|
1256
1252
|
on_complete_deferred_batches_.clear();
|
1257
1253
|
}
|
@@ -1262,8 +1258,8 @@ void RetryFilter::CallData::CallAttempt::OnPerAttemptRecvTimer(
|
|
1262
1258
|
GRPC_CLOSURE_INIT(&call_attempt->on_per_attempt_recv_timer_,
|
1263
1259
|
OnPerAttemptRecvTimerLocked, call_attempt, nullptr);
|
1264
1260
|
GRPC_CALL_COMBINER_START(call_attempt->calld_->call_combiner_,
|
1265
|
-
&call_attempt->on_per_attempt_recv_timer_,
|
1266
|
-
|
1261
|
+
&call_attempt->on_per_attempt_recv_timer_, error,
|
1262
|
+
"per-attempt timer fired");
|
1267
1263
|
}
|
1268
1264
|
|
1269
1265
|
void RetryFilter::CallData::CallAttempt::OnPerAttemptRecvTimerLocked(
|
@@ -1274,21 +1270,19 @@ void RetryFilter::CallData::CallAttempt::OnPerAttemptRecvTimerLocked(
|
|
1274
1270
|
gpr_log(GPR_INFO,
|
1275
1271
|
"chand=%p calld=%p attempt=%p: perAttemptRecvTimeout timer fired: "
|
1276
1272
|
"error=%s, per_attempt_recv_timer_pending_=%d",
|
1277
|
-
calld->chand_, calld, call_attempt,
|
1278
|
-
grpc_error_std_string(error).c_str(),
|
1273
|
+
calld->chand_, calld, call_attempt, StatusToString(error).c_str(),
|
1279
1274
|
call_attempt->per_attempt_recv_timer_pending_);
|
1280
1275
|
}
|
1281
1276
|
CallCombinerClosureList closures;
|
1282
|
-
if (
|
1283
|
-
call_attempt->per_attempt_recv_timer_pending_) {
|
1277
|
+
if (error.ok() && call_attempt->per_attempt_recv_timer_pending_) {
|
1284
1278
|
call_attempt->per_attempt_recv_timer_pending_ = false;
|
1285
1279
|
// Cancel this attempt.
|
1286
1280
|
// TODO(roth): When implementing hedging, we should not cancel the
|
1287
1281
|
// current attempt.
|
1288
1282
|
call_attempt->MaybeAddBatchForCancelOp(
|
1289
|
-
grpc_error_set_int(
|
1290
|
-
|
1291
|
-
|
1283
|
+
grpc_error_set_int(
|
1284
|
+
GRPC_ERROR_CREATE("retry perAttemptRecvTimeout exceeded"),
|
1285
|
+
StatusIntProperty::kRpcStatus, GRPC_STATUS_CANCELLED),
|
1292
1286
|
&closures);
|
1293
1287
|
// Check whether we should retry.
|
1294
1288
|
if (call_attempt->ShouldRetry(/*status=*/absl::nullopt,
|
@@ -1399,7 +1393,6 @@ void RetryFilter::CallData::CallAttempt::BatchData::
|
|
1399
1393
|
.recv_initial_metadata_ready != nullptr;
|
1400
1394
|
});
|
1401
1395
|
if (pending == nullptr) {
|
1402
|
-
GRPC_ERROR_UNREF(error);
|
1403
1396
|
return;
|
1404
1397
|
}
|
1405
1398
|
// Return metadata.
|
@@ -1432,7 +1425,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvInitialMetadataReady(
|
|
1432
1425
|
"chand=%p calld=%p attempt=%p batch_data=%p: "
|
1433
1426
|
"got recv_initial_metadata_ready, error=%s",
|
1434
1427
|
calld->chand_, calld, call_attempt, batch_data.get(),
|
1435
|
-
|
1428
|
+
StatusToString(error).c_str());
|
1436
1429
|
}
|
1437
1430
|
call_attempt->completed_recv_initial_metadata_ = true;
|
1438
1431
|
// If this attempt has been abandoned, then we're not going to use the
|
@@ -1451,9 +1444,9 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvInitialMetadataReady(
|
|
1451
1444
|
// the recv_trailing_metadata_ready callback, then defer propagating this
|
1452
1445
|
// callback back to the surface. We can evaluate whether to retry when
|
1453
1446
|
// recv_trailing_metadata comes back.
|
1454
|
-
if (GPR_UNLIKELY(
|
1455
|
-
|
1456
|
-
|
1447
|
+
if (GPR_UNLIKELY(
|
1448
|
+
(call_attempt->trailing_metadata_available_ || !error.ok()) &&
|
1449
|
+
!call_attempt->completed_recv_trailing_metadata_)) {
|
1457
1450
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
|
1458
1451
|
gpr_log(GPR_INFO,
|
1459
1452
|
"chand=%p calld=%p attempt=%p: deferring "
|
@@ -1462,11 +1455,10 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvInitialMetadataReady(
|
|
1462
1455
|
}
|
1463
1456
|
call_attempt->recv_initial_metadata_ready_deferred_batch_ =
|
1464
1457
|
std::move(batch_data);
|
1465
|
-
call_attempt->recv_initial_metadata_error_ =
|
1458
|
+
call_attempt->recv_initial_metadata_error_ = error;
|
1466
1459
|
CallCombinerClosureList closures;
|
1467
|
-
if (!
|
1468
|
-
call_attempt->MaybeAddBatchForCancelOp(
|
1469
|
-
&closures);
|
1460
|
+
if (!error.ok()) {
|
1461
|
+
call_attempt->MaybeAddBatchForCancelOp(error, &closures);
|
1470
1462
|
}
|
1471
1463
|
if (!call_attempt->started_recv_trailing_metadata_) {
|
1472
1464
|
// recv_trailing_metadata not yet started by application; start it
|
@@ -1484,8 +1476,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvInitialMetadataReady(
|
|
1484
1476
|
}
|
1485
1477
|
// Invoke the callback to return the result to the surface.
|
1486
1478
|
CallCombinerClosureList closures;
|
1487
|
-
batch_data->MaybeAddClosureForRecvInitialMetadataCallback(
|
1488
|
-
GRPC_ERROR_REF(error), &closures);
|
1479
|
+
batch_data->MaybeAddClosureForRecvInitialMetadataCallback(error, &closures);
|
1489
1480
|
closures.RunClosures(calld->call_combiner_);
|
1490
1481
|
}
|
1491
1482
|
|
@@ -1504,7 +1495,6 @@ void RetryFilter::CallData::CallAttempt::BatchData::
|
|
1504
1495
|
batch->payload->recv_message.recv_message_ready != nullptr;
|
1505
1496
|
});
|
1506
1497
|
if (pending == nullptr) {
|
1507
|
-
GRPC_ERROR_UNREF(error);
|
1508
1498
|
return;
|
1509
1499
|
}
|
1510
1500
|
// Return payload.
|
@@ -1534,7 +1524,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvMessageReady(
|
|
1534
1524
|
"chand=%p calld=%p attempt=%p batch_data=%p: "
|
1535
1525
|
"got recv_message_ready, error=%s",
|
1536
1526
|
calld->chand_, calld, call_attempt, batch_data.get(),
|
1537
|
-
|
1527
|
+
StatusToString(error).c_str());
|
1538
1528
|
}
|
1539
1529
|
++call_attempt->completed_recv_message_count_;
|
1540
1530
|
// If this attempt has been abandoned, then we're not going to use the
|
@@ -1556,9 +1546,9 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvMessageReady(
|
|
1556
1546
|
// the recv_trailing_metadata_ready callback, then defer propagating this
|
1557
1547
|
// callback back to the surface. We can evaluate whether to retry when
|
1558
1548
|
// recv_trailing_metadata comes back.
|
1559
|
-
if (GPR_UNLIKELY(
|
1560
|
-
|
1561
|
-
|
1549
|
+
if (GPR_UNLIKELY(
|
1550
|
+
(!call_attempt->recv_message_.has_value() || !error.ok()) &&
|
1551
|
+
!call_attempt->completed_recv_trailing_metadata_)) {
|
1562
1552
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
|
1563
1553
|
gpr_log(GPR_INFO,
|
1564
1554
|
"chand=%p calld=%p attempt=%p: deferring recv_message_ready "
|
@@ -1566,11 +1556,10 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvMessageReady(
|
|
1566
1556
|
calld->chand_, calld, call_attempt);
|
1567
1557
|
}
|
1568
1558
|
call_attempt->recv_message_ready_deferred_batch_ = std::move(batch_data);
|
1569
|
-
call_attempt->recv_message_error_ =
|
1559
|
+
call_attempt->recv_message_error_ = error;
|
1570
1560
|
CallCombinerClosureList closures;
|
1571
|
-
if (!
|
1572
|
-
call_attempt->MaybeAddBatchForCancelOp(
|
1573
|
-
&closures);
|
1561
|
+
if (!error.ok()) {
|
1562
|
+
call_attempt->MaybeAddBatchForCancelOp(error, &closures);
|
1574
1563
|
}
|
1575
1564
|
if (!call_attempt->started_recv_trailing_metadata_) {
|
1576
1565
|
// recv_trailing_metadata not yet started by application; start it
|
@@ -1588,8 +1577,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvMessageReady(
|
|
1588
1577
|
}
|
1589
1578
|
// Invoke the callback to return the result to the surface.
|
1590
1579
|
CallCombinerClosureList closures;
|
1591
|
-
batch_data->MaybeAddClosureForRecvMessageCallback(
|
1592
|
-
&closures);
|
1580
|
+
batch_data->MaybeAddClosureForRecvMessageCallback(error, &closures);
|
1593
1581
|
closures.RunClosures(calld->call_combiner_);
|
1594
1582
|
}
|
1595
1583
|
|
@@ -1606,10 +1594,10 @@ void GetCallStatus(
|
|
1606
1594
|
grpc_status_code* status, absl::optional<Duration>* server_pushback,
|
1607
1595
|
bool* is_lb_drop,
|
1608
1596
|
absl::optional<GrpcStreamNetworkState::ValueType>* stream_network_state) {
|
1609
|
-
if (!
|
1597
|
+
if (!error.ok()) {
|
1610
1598
|
grpc_error_get_status(error, deadline, status, nullptr, nullptr, nullptr);
|
1611
1599
|
intptr_t value = 0;
|
1612
|
-
if (grpc_error_get_int(error,
|
1600
|
+
if (grpc_error_get_int(error, StatusIntProperty::kLbPolicyDrop, &value) &&
|
1613
1601
|
value != 0) {
|
1614
1602
|
*is_lb_drop = true;
|
1615
1603
|
}
|
@@ -1618,7 +1606,6 @@ void GetCallStatus(
|
|
1618
1606
|
}
|
1619
1607
|
*server_pushback = md_batch->get(GrpcRetryPushbackMsMetadata());
|
1620
1608
|
*stream_network_state = md_batch->get(GrpcStreamNetworkState());
|
1621
|
-
GRPC_ERROR_UNREF(error);
|
1622
1609
|
}
|
1623
1610
|
|
1624
1611
|
} // namespace
|
@@ -1669,7 +1656,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::
|
|
1669
1656
|
call_attempt_->recv_initial_metadata_error_, closures);
|
1670
1657
|
call_attempt_->recv_initial_metadata_ready_deferred_batch_.reset(
|
1671
1658
|
DEBUG_LOCATION, "resuming deferred recv_initial_metadata_ready");
|
1672
|
-
call_attempt_->recv_initial_metadata_error_ =
|
1659
|
+
call_attempt_->recv_initial_metadata_error_ = absl::OkStatus();
|
1673
1660
|
}
|
1674
1661
|
// Add closure for deferred recv_message_ready.
|
1675
1662
|
if (GPR_UNLIKELY(call_attempt_->recv_message_ready_deferred_batch_ !=
|
@@ -1678,7 +1665,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::
|
|
1678
1665
|
closures);
|
1679
1666
|
call_attempt_->recv_message_ready_deferred_batch_.reset(
|
1680
1667
|
DEBUG_LOCATION, "resuming deferred recv_message_ready");
|
1681
|
-
call_attempt_->recv_message_error_ =
|
1668
|
+
call_attempt_->recv_message_error_ = absl::OkStatus();
|
1682
1669
|
}
|
1683
1670
|
// Add closures for deferred on_complete callbacks.
|
1684
1671
|
for (auto& on_complete_deferred_batch :
|
@@ -1698,13 +1685,12 @@ void RetryFilter::CallData::CallAttempt::BatchData::
|
|
1698
1685
|
PendingBatch* pending = &calld->pending_batches_[i];
|
1699
1686
|
if (pending->batch == nullptr) continue;
|
1700
1687
|
if (call_attempt_->PendingBatchContainsUnstartedSendOps(pending)) {
|
1701
|
-
closures->Add(pending->batch->on_complete,
|
1688
|
+
closures->Add(pending->batch->on_complete, error,
|
1702
1689
|
"failing on_complete for pending batch");
|
1703
1690
|
pending->batch->on_complete = nullptr;
|
1704
1691
|
calld->MaybeClearPendingBatch(pending);
|
1705
1692
|
}
|
1706
1693
|
}
|
1707
|
-
GRPC_ERROR_UNREF(error);
|
1708
1694
|
}
|
1709
1695
|
|
1710
1696
|
void RetryFilter::CallData::CallAttempt::BatchData::RunClosuresForCompletedCall(
|
@@ -1712,15 +1698,14 @@ void RetryFilter::CallData::CallAttempt::BatchData::RunClosuresForCompletedCall(
|
|
1712
1698
|
// Construct list of closures to execute.
|
1713
1699
|
CallCombinerClosureList closures;
|
1714
1700
|
// First, add closure for recv_trailing_metadata_ready.
|
1715
|
-
MaybeAddClosureForRecvTrailingMetadataReady(
|
1701
|
+
MaybeAddClosureForRecvTrailingMetadataReady(error, &closures);
|
1716
1702
|
// If there are deferred batch completion callbacks, add them to closures.
|
1717
1703
|
AddClosuresForDeferredCompletionCallbacks(&closures);
|
1718
1704
|
// Add closures to fail any pending batches that have not yet been started.
|
1719
|
-
AddClosuresToFailUnstartedPendingBatches(
|
1705
|
+
AddClosuresToFailUnstartedPendingBatches(error, &closures);
|
1720
1706
|
// Schedule all of the closures identified above.
|
1721
1707
|
// Note: This will release the call combiner.
|
1722
1708
|
closures.RunClosures(call_attempt_->calld_->call_combiner_);
|
1723
|
-
GRPC_ERROR_UNREF(error);
|
1724
1709
|
}
|
1725
1710
|
|
1726
1711
|
void RetryFilter::CallData::CallAttempt::BatchData::RecvTrailingMetadataReady(
|
@@ -1733,7 +1718,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvTrailingMetadataReady(
|
|
1733
1718
|
"chand=%p calld=%p attempt=%p batch_data=%p: "
|
1734
1719
|
"got recv_trailing_metadata_ready, error=%s",
|
1735
1720
|
calld->chand_, calld, call_attempt, batch_data.get(),
|
1736
|
-
|
1721
|
+
StatusToString(error).c_str());
|
1737
1722
|
}
|
1738
1723
|
call_attempt->completed_recv_trailing_metadata_ = true;
|
1739
1724
|
// If this attempt has been abandoned, then we're not going to use the
|
@@ -1753,8 +1738,8 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvTrailingMetadataReady(
|
|
1753
1738
|
absl::optional<GrpcStreamNetworkState::ValueType> stream_network_state;
|
1754
1739
|
grpc_metadata_batch* md_batch =
|
1755
1740
|
batch_data->batch_.payload->recv_trailing_metadata.recv_trailing_metadata;
|
1756
|
-
GetCallStatus(calld->deadline_, md_batch,
|
1757
|
-
&
|
1741
|
+
GetCallStatus(calld->deadline_, md_batch, error, &status, &server_pushback,
|
1742
|
+
&is_lb_drop, &stream_network_state);
|
1758
1743
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
|
1759
1744
|
gpr_log(GPR_INFO,
|
1760
1745
|
"chand=%p calld=%p attempt=%p: call finished, status=%s "
|
@@ -1794,11 +1779,10 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvTrailingMetadataReady(
|
|
1794
1779
|
CallCombinerClosureList closures;
|
1795
1780
|
// Cancel call attempt.
|
1796
1781
|
call_attempt->MaybeAddBatchForCancelOp(
|
1797
|
-
|
1798
|
-
|
1799
|
-
|
1800
|
-
|
1801
|
-
: GRPC_ERROR_REF(error),
|
1782
|
+
error.ok() ? grpc_error_set_int(
|
1783
|
+
GRPC_ERROR_CREATE("call attempt failed"),
|
1784
|
+
StatusIntProperty::kRpcStatus, GRPC_STATUS_CANCELLED)
|
1785
|
+
: error,
|
1802
1786
|
&closures);
|
1803
1787
|
// For transparent retries, add a closure to immediately start a new
|
1804
1788
|
// call attempt.
|
@@ -1821,7 +1805,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvTrailingMetadataReady(
|
|
1821
1805
|
// subsequent batches.
|
1822
1806
|
call_attempt->MaybeSwitchToFastPath();
|
1823
1807
|
// Run any necessary closures.
|
1824
|
-
batch_data->RunClosuresForCompletedCall(
|
1808
|
+
batch_data->RunClosuresForCompletedCall(error);
|
1825
1809
|
}
|
1826
1810
|
|
1827
1811
|
//
|
@@ -1844,7 +1828,6 @@ void RetryFilter::CallData::CallAttempt::BatchData::
|
|
1844
1828
|
// If batch_data is a replay batch, then there will be no pending
|
1845
1829
|
// batch to complete.
|
1846
1830
|
if (pending == nullptr) {
|
1847
|
-
GRPC_ERROR_UNREF(error);
|
1848
1831
|
return;
|
1849
1832
|
}
|
1850
1833
|
// Propagate payload.
|
@@ -1898,7 +1881,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::OnComplete(
|
|
1898
1881
|
"chand=%p calld=%p attempt=%p batch_data=%p: "
|
1899
1882
|
"got on_complete, error=%s, batch=%s",
|
1900
1883
|
calld->chand_, calld, call_attempt, batch_data.get(),
|
1901
|
-
|
1884
|
+
StatusToString(error).c_str(),
|
1902
1885
|
grpc_transport_stream_op_batch_string(&batch_data->batch_).c_str());
|
1903
1886
|
}
|
1904
1887
|
// If this attempt has been abandoned, then we're not going to propagate
|
@@ -1912,16 +1895,16 @@ void RetryFilter::CallData::CallAttempt::BatchData::OnComplete(
|
|
1912
1895
|
// recv_trailing_metadata_ready callback, then defer propagating this
|
1913
1896
|
// callback back to the surface. We can evaluate whether to retry when
|
1914
1897
|
// recv_trailing_metadata comes back.
|
1915
|
-
if (GPR_UNLIKELY(!calld->retry_committed_ && !
|
1898
|
+
if (GPR_UNLIKELY(!calld->retry_committed_ && !error.ok() &&
|
1916
1899
|
!call_attempt->completed_recv_trailing_metadata_)) {
|
1917
1900
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
|
1918
1901
|
gpr_log(GPR_INFO, "chand=%p calld=%p attempt=%p: deferring on_complete",
|
1919
1902
|
calld->chand_, calld, call_attempt);
|
1920
1903
|
}
|
1921
1904
|
call_attempt->on_complete_deferred_batches_.emplace_back(
|
1922
|
-
std::move(batch_data),
|
1905
|
+
std::move(batch_data), error);
|
1923
1906
|
CallCombinerClosureList closures;
|
1924
|
-
call_attempt->MaybeAddBatchForCancelOp(
|
1907
|
+
call_attempt->MaybeAddBatchForCancelOp(error, &closures);
|
1925
1908
|
if (!call_attempt->started_recv_trailing_metadata_) {
|
1926
1909
|
// recv_trailing_metadata not yet started by application; start it
|
1927
1910
|
// ourselves to get status.
|
@@ -1948,8 +1931,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::OnComplete(
|
|
1948
1931
|
// Construct list of closures to execute.
|
1949
1932
|
CallCombinerClosureList closures;
|
1950
1933
|
// Add closure for the completed pending batch, if any.
|
1951
|
-
batch_data->AddClosuresForCompletedPendingBatch(
|
1952
|
-
&closures);
|
1934
|
+
batch_data->AddClosuresForCompletedPendingBatch(error, &closures);
|
1953
1935
|
// If needed, add a callback to start any replay or pending send ops on
|
1954
1936
|
// the LB call.
|
1955
1937
|
if (!call_attempt->completed_recv_trailing_metadata_) {
|
@@ -1974,7 +1956,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::OnCompleteForCancelOp(
|
|
1974
1956
|
"chand=%p calld=%p attempt=%p batch_data=%p: "
|
1975
1957
|
"got on_complete for cancel_stream batch, error=%s, batch=%s",
|
1976
1958
|
calld->chand_, calld, call_attempt, batch_data.get(),
|
1977
|
-
|
1959
|
+
StatusToString(error).c_str(),
|
1978
1960
|
grpc_transport_stream_op_batch_string(&batch_data->batch_).c_str());
|
1979
1961
|
}
|
1980
1962
|
GRPC_CALL_COMBINER_STOP(
|
@@ -2106,7 +2088,7 @@ grpc_error_handle RetryFilter::CallData::Init(
|
|
2106
2088
|
gpr_log(GPR_INFO, "chand=%p calld=%p: created call", chand,
|
2107
2089
|
elem->call_data);
|
2108
2090
|
}
|
2109
|
-
return
|
2091
|
+
return absl::OkStatus();
|
2110
2092
|
}
|
2111
2093
|
|
2112
2094
|
void RetryFilter::CallData::Destroy(grpc_call_element* elem,
|
@@ -2169,7 +2151,7 @@ RetryFilter::CallData::CallData(RetryFilter* chand,
|
|
2169
2151
|
.set_max_backoff(retry_policy_ == nullptr
|
2170
2152
|
? Duration::Zero()
|
2171
2153
|
: retry_policy_->max_backoff())),
|
2172
|
-
path_(
|
2154
|
+
path_(CSliceRef(args.path)),
|
2173
2155
|
deadline_(args.deadline),
|
2174
2156
|
arena_(args.arena),
|
2175
2157
|
owning_call_(args.call_stack),
|
@@ -2187,12 +2169,11 @@ RetryFilter::CallData::CallData(RetryFilter* chand,
|
|
2187
2169
|
|
2188
2170
|
RetryFilter::CallData::~CallData() {
|
2189
2171
|
FreeAllCachedSendOpData();
|
2190
|
-
|
2172
|
+
CSliceUnref(path_);
|
2191
2173
|
// Make sure there are no remaining pending batches.
|
2192
2174
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
2193
2175
|
GPR_ASSERT(pending_batches_[i].batch == nullptr);
|
2194
2176
|
}
|
2195
|
-
GRPC_ERROR_UNREF(cancelled_from_surface_);
|
2196
2177
|
}
|
2197
2178
|
|
2198
2179
|
void RetryFilter::CallData::StartTransportStreamOpBatch(
|
@@ -2210,24 +2191,22 @@ void RetryFilter::CallData::StartTransportStreamOpBatch(
|
|
2210
2191
|
}
|
2211
2192
|
// If we were previously cancelled from the surface, fail this
|
2212
2193
|
// batch immediately.
|
2213
|
-
if (!
|
2194
|
+
if (!cancelled_from_surface_.ok()) {
|
2214
2195
|
// Note: This will release the call combiner.
|
2215
2196
|
grpc_transport_stream_op_batch_finish_with_failure(
|
2216
|
-
batch,
|
2197
|
+
batch, cancelled_from_surface_, call_combiner_);
|
2217
2198
|
return;
|
2218
2199
|
}
|
2219
2200
|
// Handle cancellation.
|
2220
2201
|
if (GPR_UNLIKELY(batch->cancel_stream)) {
|
2221
2202
|
// Save cancel_error in case subsequent batches are started.
|
2222
|
-
|
2223
|
-
cancelled_from_surface_ =
|
2224
|
-
GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error);
|
2203
|
+
cancelled_from_surface_ = batch->payload->cancel_stream.cancel_error;
|
2225
2204
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
|
2226
2205
|
gpr_log(GPR_INFO, "chand=%p calld=%p: cancelled from surface: %s", chand_,
|
2227
|
-
this,
|
2206
|
+
this, StatusToString(cancelled_from_surface_).c_str());
|
2228
2207
|
}
|
2229
2208
|
// Fail any pending batches.
|
2230
|
-
PendingBatchesFail(
|
2209
|
+
PendingBatchesFail(cancelled_from_surface_);
|
2231
2210
|
// If we have a current call attempt, commit the call, then send
|
2232
2211
|
// the cancellation down to that attempt. When the call fails, it
|
2233
2212
|
// will not be retried, because we have committed it here.
|
@@ -2257,7 +2236,7 @@ void RetryFilter::CallData::StartTransportStreamOpBatch(
|
|
2257
2236
|
// batch. Return it back to the surface immediately.
|
2258
2237
|
// Note: This will release the call combiner.
|
2259
2238
|
grpc_transport_stream_op_batch_finish_with_failure(
|
2260
|
-
batch,
|
2239
|
+
batch, cancelled_from_surface_, call_combiner_);
|
2261
2240
|
return;
|
2262
2241
|
}
|
2263
2242
|
// Add the batch to the pending list.
|
@@ -2515,13 +2494,13 @@ void RetryFilter::CallData::FailPendingBatchInCallCombiner(
|
|
2515
2494
|
static_cast<grpc_transport_stream_op_batch*>(arg);
|
2516
2495
|
CallData* call = static_cast<CallData*>(batch->handler_private.extra_arg);
|
2517
2496
|
// Note: This will release the call combiner.
|
2518
|
-
grpc_transport_stream_op_batch_finish_with_failure(
|
2519
|
-
|
2497
|
+
grpc_transport_stream_op_batch_finish_with_failure(batch, error,
|
2498
|
+
call->call_combiner_);
|
2520
2499
|
}
|
2521
2500
|
|
2522
2501
|
// This is called via the call combiner, so access to calld is synchronized.
|
2523
2502
|
void RetryFilter::CallData::PendingBatchesFail(grpc_error_handle error) {
|
2524
|
-
GPR_ASSERT(!
|
2503
|
+
GPR_ASSERT(!error.ok());
|
2525
2504
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
|
2526
2505
|
size_t num_batches = 0;
|
2527
2506
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
@@ -2529,7 +2508,7 @@ void RetryFilter::CallData::PendingBatchesFail(grpc_error_handle error) {
|
|
2529
2508
|
}
|
2530
2509
|
gpr_log(GPR_INFO,
|
2531
2510
|
"chand=%p calld=%p: failing %" PRIuPTR " pending batches: %s",
|
2532
|
-
chand_, this, num_batches,
|
2511
|
+
chand_, this, num_batches, StatusToString(error).c_str());
|
2533
2512
|
}
|
2534
2513
|
CallCombinerClosureList closures;
|
2535
2514
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
@@ -2540,13 +2519,12 @@ void RetryFilter::CallData::PendingBatchesFail(grpc_error_handle error) {
|
|
2540
2519
|
GRPC_CLOSURE_INIT(&batch->handler_private.closure,
|
2541
2520
|
FailPendingBatchInCallCombiner, batch,
|
2542
2521
|
grpc_schedule_on_exec_ctx);
|
2543
|
-
closures.Add(&batch->handler_private.closure,
|
2522
|
+
closures.Add(&batch->handler_private.closure, error,
|
2544
2523
|
"PendingBatchesFail");
|
2545
2524
|
PendingBatchClear(pending);
|
2546
2525
|
}
|
2547
2526
|
}
|
2548
2527
|
closures.RunClosuresWithoutYielding(call_combiner_);
|
2549
|
-
GRPC_ERROR_UNREF(error);
|
2550
2528
|
}
|
2551
2529
|
|
2552
2530
|
template <typename Predicate>
|
@@ -2623,14 +2601,14 @@ void RetryFilter::CallData::StartRetryTimer(
|
|
2623
2601
|
void RetryFilter::CallData::OnRetryTimer(void* arg, grpc_error_handle error) {
|
2624
2602
|
auto* calld = static_cast<CallData*>(arg);
|
2625
2603
|
GRPC_CLOSURE_INIT(&calld->retry_closure_, OnRetryTimerLocked, calld, nullptr);
|
2626
|
-
GRPC_CALL_COMBINER_START(calld->call_combiner_, &calld->retry_closure_,
|
2627
|
-
|
2604
|
+
GRPC_CALL_COMBINER_START(calld->call_combiner_, &calld->retry_closure_, error,
|
2605
|
+
"retry timer fired");
|
2628
2606
|
}
|
2629
2607
|
|
2630
2608
|
void RetryFilter::CallData::OnRetryTimerLocked(void* arg,
|
2631
2609
|
grpc_error_handle error) {
|
2632
2610
|
auto* calld = static_cast<CallData*>(arg);
|
2633
|
-
if (
|
2611
|
+
if (error.ok() && calld->retry_timer_pending_) {
|
2634
2612
|
calld->retry_timer_pending_ = false;
|
2635
2613
|
calld->CreateCallAttempt(/*is_transparent_retry=*/false);
|
2636
2614
|
} else {
|
@@ -2647,13 +2625,13 @@ void RetryFilter::CallData::AddClosureToStartTransparentRetry(
|
|
2647
2625
|
}
|
2648
2626
|
GRPC_CALL_STACK_REF(owning_call_, "OnRetryTimer");
|
2649
2627
|
GRPC_CLOSURE_INIT(&retry_closure_, StartTransparentRetry, this, nullptr);
|
2650
|
-
closures->Add(&retry_closure_,
|
2628
|
+
closures->Add(&retry_closure_, absl::OkStatus(), "start transparent retry");
|
2651
2629
|
}
|
2652
2630
|
|
2653
2631
|
void RetryFilter::CallData::StartTransparentRetry(void* arg,
|
2654
2632
|
grpc_error_handle /*error*/) {
|
2655
2633
|
auto* calld = static_cast<CallData*>(arg);
|
2656
|
-
if (
|
2634
|
+
if (calld->cancelled_from_surface_.ok()) {
|
2657
2635
|
calld->CreateCallAttempt(/*is_transparent_retry=*/true);
|
2658
2636
|
} else {
|
2659
2637
|
GRPC_CALL_COMBINER_STOP(calld->call_combiner_,
|