grpc 1.50.0-x86_64-linux → 1.51.0-x86_64-linux
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/2.6/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/grpc_c.so +0 -0
- 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 +55 -18
- 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
@@ -40,7 +40,8 @@ namespace internal {
|
|
40
40
|
/// Tracks retry throttling data for an individual server name.
|
41
41
|
class ServerRetryThrottleData : public RefCounted<ServerRetryThrottleData> {
|
42
42
|
public:
|
43
|
-
ServerRetryThrottleData(
|
43
|
+
ServerRetryThrottleData(uintptr_t max_milli_tokens,
|
44
|
+
uintptr_t milli_token_ratio,
|
44
45
|
ServerRetryThrottleData* old_throttle_data);
|
45
46
|
~ServerRetryThrottleData() override;
|
46
47
|
|
@@ -50,15 +51,15 @@ class ServerRetryThrottleData : public RefCounted<ServerRetryThrottleData> {
|
|
50
51
|
/// Records a success.
|
51
52
|
void RecordSuccess();
|
52
53
|
|
53
|
-
|
54
|
-
|
54
|
+
uintptr_t max_milli_tokens() const { return max_milli_tokens_; }
|
55
|
+
uintptr_t milli_token_ratio() const { return milli_token_ratio_; }
|
55
56
|
|
56
57
|
private:
|
57
58
|
void GetReplacementThrottleDataIfNeeded(
|
58
59
|
ServerRetryThrottleData** throttle_data);
|
59
60
|
|
60
|
-
const
|
61
|
-
const
|
61
|
+
const uintptr_t max_milli_tokens_;
|
62
|
+
const uintptr_t milli_token_ratio_;
|
62
63
|
gpr_atm milli_tokens_;
|
63
64
|
// A pointer to the replacement for this ServerRetryThrottleData entry.
|
64
65
|
// If non-nullptr, then this entry is stale and must not be used.
|
@@ -74,8 +75,8 @@ class ServerRetryThrottleMap {
|
|
74
75
|
/// Returns the failure data for \a server_name, creating a new entry if
|
75
76
|
/// needed.
|
76
77
|
RefCountedPtr<ServerRetryThrottleData> GetDataForServer(
|
77
|
-
const std::string& server_name,
|
78
|
-
|
78
|
+
const std::string& server_name, uintptr_t max_milli_tokens,
|
79
|
+
uintptr_t milli_token_ratio);
|
79
80
|
|
80
81
|
private:
|
81
82
|
using StringToDataMap =
|
@@ -114,7 +114,7 @@ grpc_error_handle ServiceConfigChannelArgInitCallElem(
|
|
114
114
|
}
|
115
115
|
new (calld) ServiceConfigChannelArgCallData(std::move(service_config),
|
116
116
|
method_config, args);
|
117
|
-
return
|
117
|
+
return absl::OkStatus();
|
118
118
|
}
|
119
119
|
|
120
120
|
void ServiceConfigChannelArgDestroyCallElem(
|
@@ -130,7 +130,7 @@ grpc_error_handle ServiceConfigChannelArgInitChannelElem(
|
|
130
130
|
ServiceConfigChannelArgChannelData* chand =
|
131
131
|
static_cast<ServiceConfigChannelArgChannelData*>(elem->channel_data);
|
132
132
|
new (chand) ServiceConfigChannelArgChannelData(args);
|
133
|
-
return
|
133
|
+
return absl::OkStatus();
|
134
134
|
}
|
135
135
|
|
136
136
|
void ServiceConfigChannelArgDestroyChannelElem(grpc_channel_element* elem) {
|
@@ -43,18 +43,18 @@
|
|
43
43
|
#include "src/core/lib/backoff/backoff.h"
|
44
44
|
#include "src/core/lib/channel/channel_args.h"
|
45
45
|
#include "src/core/lib/channel/channel_stack.h"
|
46
|
-
#include "src/core/lib/channel/channel_stack_builder.h"
|
47
46
|
#include "src/core/lib/channel/channel_stack_builder_impl.h"
|
48
47
|
#include "src/core/lib/channel/channel_trace.h"
|
49
48
|
#include "src/core/lib/channel/channelz.h"
|
50
49
|
#include "src/core/lib/config/core_configuration.h"
|
51
50
|
#include "src/core/lib/debug/stats.h"
|
51
|
+
#include "src/core/lib/debug/stats_data.h"
|
52
52
|
#include "src/core/lib/debug/trace.h"
|
53
|
-
#include "src/core/lib/event_engine/default_event_engine.h"
|
54
53
|
#include "src/core/lib/gpr/alloc.h"
|
55
54
|
#include "src/core/lib/gpr/useful.h"
|
56
55
|
#include "src/core/lib/gprpp/debug_location.h"
|
57
56
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
57
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
58
58
|
#include "src/core/lib/gprpp/sync.h"
|
59
59
|
#include "src/core/lib/handshaker/proxy_mapper_registry.h"
|
60
60
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
@@ -81,7 +81,8 @@
|
|
81
81
|
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(SubchannelCall)))
|
82
82
|
|
83
83
|
namespace grpc_core {
|
84
|
-
|
84
|
+
|
85
|
+
using ::grpc_event_engine::experimental::EventEngine;
|
85
86
|
|
86
87
|
TraceFlag grpc_trace_subchannel(false, "subchannel");
|
87
88
|
DebugOnlyTraceFlag grpc_trace_subchannel_refcount(false, "subchannel_refcount");
|
@@ -160,8 +161,8 @@ SubchannelCall::SubchannelCall(Args args, grpc_error_handle* error)
|
|
160
161
|
};
|
161
162
|
*error = grpc_call_stack_init(connected_subchannel_->channel_stack(), 1,
|
162
163
|
SubchannelCall::Destroy, this, &call_args);
|
163
|
-
if (GPR_UNLIKELY(!
|
164
|
-
gpr_log(GPR_ERROR, "error: %s",
|
164
|
+
if (GPR_UNLIKELY(!error->ok())) {
|
165
|
+
gpr_log(GPR_ERROR, "error: %s", StatusToString(*error).c_str());
|
165
166
|
return;
|
166
167
|
}
|
167
168
|
grpc_call_stack_set_pollset_or_pollset_set(callstk, args.pollent);
|
@@ -255,12 +256,11 @@ namespace {
|
|
255
256
|
// Sets *status based on the rest of the parameters.
|
256
257
|
void GetCallStatus(grpc_status_code* status, Timestamp deadline,
|
257
258
|
grpc_metadata_batch* md_batch, grpc_error_handle error) {
|
258
|
-
if (!
|
259
|
+
if (!error.ok()) {
|
259
260
|
grpc_error_get_status(error, deadline, status, nullptr, nullptr, nullptr);
|
260
261
|
} else {
|
261
262
|
*status = md_batch->get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN);
|
262
263
|
}
|
263
|
-
GRPC_ERROR_UNREF(error);
|
264
264
|
}
|
265
265
|
|
266
266
|
} // namespace
|
@@ -270,8 +270,7 @@ void SubchannelCall::RecvTrailingMetadataReady(void* arg,
|
|
270
270
|
SubchannelCall* call = static_cast<SubchannelCall*>(arg);
|
271
271
|
GPR_ASSERT(call->recv_trailing_metadata_ != nullptr);
|
272
272
|
grpc_status_code status = GRPC_STATUS_OK;
|
273
|
-
GetCallStatus(&status, call->deadline_, call->recv_trailing_metadata_,
|
274
|
-
GRPC_ERROR_REF(error));
|
273
|
+
GetCallStatus(&status, call->deadline_, call->recv_trailing_metadata_, error);
|
275
274
|
channelz::SubchannelNode* channelz_subchannel =
|
276
275
|
call->connected_subchannel_->channelz_subchannel();
|
277
276
|
GPR_ASSERT(channelz_subchannel != nullptr);
|
@@ -280,8 +279,7 @@ void SubchannelCall::RecvTrailingMetadataReady(void* arg,
|
|
280
279
|
} else {
|
281
280
|
channelz_subchannel->RecordCallFailed();
|
282
281
|
}
|
283
|
-
Closure::Run(DEBUG_LOCATION, call->original_recv_trailing_metadata_,
|
284
|
-
GRPC_ERROR_REF(error));
|
282
|
+
Closure::Run(DEBUG_LOCATION, call->original_recv_trailing_metadata_, error);
|
285
283
|
}
|
286
284
|
|
287
285
|
void SubchannelCall::IncrementRefCount() {
|
@@ -365,7 +363,7 @@ class Subchannel::AsyncWatcherNotifierLocked {
|
|
365
363
|
delete self;
|
366
364
|
},
|
367
365
|
this, nullptr),
|
368
|
-
|
366
|
+
absl::OkStatus());
|
369
367
|
}
|
370
368
|
|
371
369
|
private:
|
@@ -627,7 +625,8 @@ Subchannel::Subchannel(SubchannelKey key,
|
|
627
625
|
args_(args),
|
628
626
|
pollset_set_(grpc_pollset_set_create()),
|
629
627
|
connector_(std::move(connector)),
|
630
|
-
backoff_(ParseArgsForBackoffValues(args_, &min_connect_timeout_))
|
628
|
+
backoff_(ParseArgsForBackoffValues(args_, &min_connect_timeout_)),
|
629
|
+
event_engine_(args_.GetObjectRef<EventEngine>()) {
|
631
630
|
// A grpc_init is added here to ensure that grpc_shutdown does not happen
|
632
631
|
// until the subchannel is destroyed. Subchannels can persist longer than
|
633
632
|
// channels because they maybe reused/shared among multiple channels. As a
|
@@ -637,7 +636,7 @@ Subchannel::Subchannel(SubchannelKey key,
|
|
637
636
|
// triggering segmentation faults. To prevent this issue, we call a grpc_init
|
638
637
|
// here and a grpc_shutdown in the subchannel destructor.
|
639
638
|
InitInternally();
|
640
|
-
|
639
|
+
global_stats().IncrementClientSubchannelsCreated();
|
641
640
|
GRPC_CLOSURE_INIT(&on_connecting_finished_, OnConnectingFinished, this,
|
642
641
|
grpc_schedule_on_exec_ctx);
|
643
642
|
// Check proxy mapper to determine address to connect to and channel
|
@@ -764,7 +763,7 @@ void Subchannel::ResetBackoff() {
|
|
764
763
|
MutexLock lock(&mu_);
|
765
764
|
backoff_.Reset();
|
766
765
|
if (state_ == GRPC_CHANNEL_TRANSIENT_FAILURE &&
|
767
|
-
|
766
|
+
event_engine_->Cancel(retry_timer_handle_)) {
|
768
767
|
OnRetryTimerLocked();
|
769
768
|
} else if (state_ == GRPC_CHANNEL_CONNECTING) {
|
770
769
|
next_attempt_time_ = Timestamp::Now();
|
@@ -889,14 +888,13 @@ void Subchannel::OnConnectingFinished(void* arg, grpc_error_handle error) {
|
|
889
888
|
WeakRefCountedPtr<Subchannel> c(static_cast<Subchannel*>(arg));
|
890
889
|
{
|
891
890
|
MutexLock lock(&c->mu_);
|
892
|
-
c->OnConnectingFinishedLocked(
|
891
|
+
c->OnConnectingFinishedLocked(error);
|
893
892
|
}
|
894
893
|
c.reset(DEBUG_LOCATION, "Connect");
|
895
894
|
}
|
896
895
|
|
897
896
|
void Subchannel::OnConnectingFinishedLocked(grpc_error_handle error) {
|
898
897
|
if (shutdown_) {
|
899
|
-
(void)GRPC_ERROR_UNREF(error);
|
900
898
|
return;
|
901
899
|
}
|
902
900
|
// If we didn't get a transport or we fail to publish it, report
|
@@ -910,11 +908,11 @@ void Subchannel::OnConnectingFinishedLocked(grpc_error_handle error) {
|
|
910
908
|
gpr_log(GPR_INFO,
|
911
909
|
"subchannel %p %s: connect failed (%s), backing off for %" PRId64
|
912
910
|
" ms",
|
913
|
-
this, key_.ToString().c_str(),
|
911
|
+
this, key_.ToString().c_str(), StatusToString(error).c_str(),
|
914
912
|
time_until_next_attempt.millis());
|
915
913
|
SetConnectivityStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE,
|
916
914
|
grpc_error_to_absl_status(error));
|
917
|
-
retry_timer_handle_ =
|
915
|
+
retry_timer_handle_ = event_engine_->RunAfter(
|
918
916
|
time_until_next_attempt,
|
919
917
|
[self = WeakRef(DEBUG_LOCATION, "RetryTimer")]() mutable {
|
920
918
|
{
|
@@ -931,14 +929,13 @@ void Subchannel::OnConnectingFinishedLocked(grpc_error_handle error) {
|
|
931
929
|
}
|
932
930
|
});
|
933
931
|
}
|
934
|
-
(void)GRPC_ERROR_UNREF(error);
|
935
932
|
}
|
936
933
|
|
937
934
|
bool Subchannel::PublishTransportLocked() {
|
938
935
|
// Construct channel stack.
|
939
|
-
ChannelStackBuilderImpl builder("subchannel", GRPC_CLIENT_SUBCHANNEL
|
940
|
-
|
941
|
-
|
936
|
+
ChannelStackBuilderImpl builder("subchannel", GRPC_CLIENT_SUBCHANNEL,
|
937
|
+
connecting_result_.channel_args);
|
938
|
+
builder.SetTransport(connecting_result_.transport);
|
942
939
|
if (!CoreConfiguration::Get().channel_init().CreateStack(&builder)) {
|
943
940
|
return false;
|
944
941
|
}
|
@@ -948,8 +945,7 @@ bool Subchannel::PublishTransportLocked() {
|
|
948
945
|
grpc_transport_destroy(connecting_result_.transport);
|
949
946
|
gpr_log(GPR_ERROR,
|
950
947
|
"subchannel %p %s: error initializing subchannel stack: %s", this,
|
951
|
-
key_.ToString().c_str(),
|
952
|
-
GRPC_ERROR_UNREF(error);
|
948
|
+
key_.ToString().c_str(), StatusToString(error).c_str());
|
953
949
|
return false;
|
954
950
|
}
|
955
951
|
RefCountedPtr<channelz::SocketNode> socket =
|
@@ -24,6 +24,7 @@
|
|
24
24
|
#include <deque>
|
25
25
|
#include <functional>
|
26
26
|
#include <map>
|
27
|
+
#include <memory>
|
27
28
|
#include <string>
|
28
29
|
|
29
30
|
#include "absl/base/thread_annotations.h"
|
@@ -239,8 +240,6 @@ class Subchannel : public DualRefCounted<Subchannel> {
|
|
239
240
|
|
240
241
|
grpc_pollset_set* pollset_set() const { return pollset_set_; }
|
241
242
|
|
242
|
-
const ChannelArgs& channel_args() const { return args_; }
|
243
|
-
|
244
243
|
channelz::SubchannelNode* channelz_node();
|
245
244
|
|
246
245
|
// Starts watching the subchannel's connectivity state.
|
@@ -428,6 +427,7 @@ class Subchannel : public DualRefCounted<Subchannel> {
|
|
428
427
|
// Data producer map.
|
429
428
|
std::map<UniqueTypeName, DataProducerInterface*> data_producer_map_
|
430
429
|
ABSL_GUARDED_BY(mu_);
|
430
|
+
std::shared_ptr<grpc_event_engine::experimental::EventEngine> event_engine_;
|
431
431
|
};
|
432
432
|
|
433
433
|
} // namespace grpc_core
|
@@ -30,6 +30,7 @@
|
|
30
30
|
#include "src/core/lib/channel/channel_args.h"
|
31
31
|
#include "src/core/lib/gpr/time_precise.h"
|
32
32
|
#include "src/core/lib/gprpp/debug_location.h"
|
33
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
33
34
|
#include "src/core/lib/gprpp/sync.h"
|
34
35
|
#include "src/core/lib/gprpp/time.h"
|
35
36
|
#include "src/core/lib/resource_quota/resource_quota.h"
|
@@ -146,7 +147,7 @@ void SubchannelStreamClient::OnRetryTimer(void* arg, grpc_error_handle error) {
|
|
146
147
|
{
|
147
148
|
MutexLock lock(&self->mu_);
|
148
149
|
self->retry_timer_callback_pending_ = false;
|
149
|
-
if (self->event_handler_ != nullptr &&
|
150
|
+
if (self->event_handler_ != nullptr && error.ok() &&
|
150
151
|
self->call_state_ == nullptr) {
|
151
152
|
if (GPR_UNLIKELY(self->tracer_ != nullptr)) {
|
152
153
|
gpr_log(GPR_INFO,
|
@@ -196,7 +197,7 @@ SubchannelStreamClient::CallState::~CallState() {
|
|
196
197
|
}
|
197
198
|
|
198
199
|
void SubchannelStreamClient::CallState::Orphan() {
|
199
|
-
call_combiner_.Cancel(
|
200
|
+
call_combiner_.Cancel(absl::CancelledError());
|
200
201
|
Cancel();
|
201
202
|
}
|
202
203
|
|
@@ -211,21 +212,19 @@ void SubchannelStreamClient::CallState::StartCallLocked() {
|
|
211
212
|
context_,
|
212
213
|
&call_combiner_,
|
213
214
|
};
|
214
|
-
grpc_error_handle error
|
215
|
+
grpc_error_handle error;
|
215
216
|
call_ = SubchannelCall::Create(std::move(args), &error).release();
|
216
217
|
// Register after-destruction callback.
|
217
218
|
GRPC_CLOSURE_INIT(&after_call_stack_destruction_, AfterCallStackDestruction,
|
218
219
|
this, grpc_schedule_on_exec_ctx);
|
219
220
|
call_->SetAfterCallStackDestroy(&after_call_stack_destruction_);
|
220
221
|
// Check if creation failed.
|
221
|
-
if (!
|
222
|
-
subchannel_stream_client_->event_handler_ == nullptr) {
|
222
|
+
if (!error.ok() || subchannel_stream_client_->event_handler_ == nullptr) {
|
223
223
|
gpr_log(GPR_ERROR,
|
224
224
|
"SubchannelStreamClient %p CallState %p: error creating "
|
225
225
|
"stream on subchannel (%s); will retry",
|
226
226
|
subchannel_stream_client_.get(), this,
|
227
|
-
|
228
|
-
GRPC_ERROR_UNREF(error);
|
227
|
+
StatusToString(error).c_str());
|
229
228
|
CallEndedLocked(/*retry=*/true);
|
230
229
|
return;
|
231
230
|
}
|
@@ -240,7 +239,7 @@ void SubchannelStreamClient::CallState::StartCallLocked() {
|
|
240
239
|
send_initial_metadata_.Set(
|
241
240
|
HttpPathMetadata(),
|
242
241
|
subchannel_stream_client_->event_handler_->GetPathLocked());
|
243
|
-
GPR_ASSERT(
|
242
|
+
GPR_ASSERT(error.ok());
|
244
243
|
payload_.send_initial_metadata.send_initial_metadata =
|
245
244
|
&send_initial_metadata_;
|
246
245
|
payload_.send_initial_metadata.peer_string = nullptr;
|
@@ -306,7 +305,7 @@ void SubchannelStreamClient::CallState::StartBatch(
|
|
306
305
|
GRPC_CLOSURE_INIT(&batch->handler_private.closure, StartBatchInCallCombiner,
|
307
306
|
batch, grpc_schedule_on_exec_ctx);
|
308
307
|
GRPC_CALL_COMBINER_START(&call_combiner_, &batch->handler_private.closure,
|
309
|
-
|
308
|
+
absl::OkStatus(), "start_subchannel_batch");
|
310
309
|
}
|
311
310
|
|
312
311
|
void SubchannelStreamClient::CallState::AfterCallStackDestruction(
|
@@ -328,7 +327,7 @@ void SubchannelStreamClient::CallState::StartCancel(
|
|
328
327
|
auto* batch = grpc_make_transport_stream_op(
|
329
328
|
GRPC_CLOSURE_CREATE(OnCancelComplete, self, grpc_schedule_on_exec_ctx));
|
330
329
|
batch->cancel_stream = true;
|
331
|
-
batch->payload->cancel_stream.cancel_error =
|
330
|
+
batch->payload->cancel_stream.cancel_error = absl::CancelledError();
|
332
331
|
self->call_->StartTransportStreamOpBatch(batch);
|
333
332
|
}
|
334
333
|
|
@@ -341,7 +340,7 @@ void SubchannelStreamClient::CallState::Cancel() {
|
|
341
340
|
GRPC_CALL_COMBINER_START(
|
342
341
|
&call_combiner_,
|
343
342
|
GRPC_CLOSURE_CREATE(StartCancel, this, grpc_schedule_on_exec_ctx),
|
344
|
-
|
343
|
+
absl::OkStatus(), "health_cancel");
|
345
344
|
}
|
346
345
|
}
|
347
346
|
|
@@ -418,7 +417,7 @@ void SubchannelStreamClient::CallState::RecvTrailingMetadataReady(
|
|
418
417
|
grpc_status_code status =
|
419
418
|
self->recv_trailing_metadata_.get(GrpcStatusMetadata())
|
420
419
|
.value_or(GRPC_STATUS_UNKNOWN);
|
421
|
-
if (!
|
420
|
+
if (!error.ok()) {
|
422
421
|
grpc_error_get_status(error, Timestamp::InfFuture(), &status,
|
423
422
|
nullptr /* slice */, nullptr /* http_error */,
|
424
423
|
nullptr /* error_string */);
|
@@ -31,6 +31,7 @@
|
|
31
31
|
#include "src/core/lib/channel/channel_stack_builder.h"
|
32
32
|
#include "src/core/lib/config/core_configuration.h"
|
33
33
|
#include "src/core/lib/gprpp/debug_location.h"
|
34
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
34
35
|
#include "src/core/lib/iomgr/error.h"
|
35
36
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
36
37
|
#include "src/core/lib/iomgr/timer.h"
|
@@ -73,7 +74,7 @@ class TimerState {
|
|
73
74
|
grpc_transport_stream_op_batch* batch = grpc_make_transport_stream_op(
|
74
75
|
GRPC_CLOSURE_INIT(&self->closure_, YieldCallCombiner, self, nullptr));
|
75
76
|
batch->cancel_stream = true;
|
76
|
-
batch->payload->cancel_stream.cancel_error =
|
77
|
+
batch->payload->cancel_stream.cancel_error = error;
|
77
78
|
self->elem_->filter->start_transport_stream_op_batch(self->elem_, batch);
|
78
79
|
}
|
79
80
|
|
@@ -82,11 +83,11 @@ class TimerState {
|
|
82
83
|
TimerState* self = static_cast<TimerState*>(arg);
|
83
84
|
grpc_deadline_state* deadline_state =
|
84
85
|
static_cast<grpc_deadline_state*>(self->elem_->call_data);
|
85
|
-
if (error !=
|
86
|
-
error = grpc_error_set_int(
|
87
|
-
|
88
|
-
|
89
|
-
deadline_state->call_combiner->Cancel(
|
86
|
+
if (error != absl::CancelledError()) {
|
87
|
+
error = grpc_error_set_int(GRPC_ERROR_CREATE("Deadline Exceeded"),
|
88
|
+
StatusIntProperty::kRpcStatus,
|
89
|
+
GRPC_STATUS_DEADLINE_EXCEEDED);
|
90
|
+
deadline_state->call_combiner->Cancel(error);
|
90
91
|
GRPC_CLOSURE_INIT(&self->closure_, SendCancelOpInCallCombiner, self,
|
91
92
|
nullptr);
|
92
93
|
GRPC_CALL_COMBINER_START(deadline_state->call_combiner, &self->closure_,
|
@@ -145,7 +146,7 @@ static void recv_trailing_metadata_ready(void* arg, grpc_error_handle error) {
|
|
145
146
|
// Invoke the original callback.
|
146
147
|
grpc_core::Closure::Run(DEBUG_LOCATION,
|
147
148
|
deadline_state->original_recv_trailing_metadata_ready,
|
148
|
-
|
149
|
+
error);
|
149
150
|
}
|
150
151
|
|
151
152
|
// Inject our own recv_trailing_metadata_ready callback into op.
|
@@ -183,8 +184,7 @@ static void start_timer_after_init(void* arg, grpc_error_handle error) {
|
|
183
184
|
// need to bounce ourselves into it.
|
184
185
|
state->in_call_combiner = true;
|
185
186
|
GRPC_CALL_COMBINER_START(deadline_state->call_combiner, &state->closure,
|
186
|
-
|
187
|
-
"scheduling deadline timer");
|
187
|
+
error, "scheduling deadline timer");
|
188
188
|
return;
|
189
189
|
}
|
190
190
|
delete state;
|
@@ -212,7 +212,7 @@ grpc_deadline_state::grpc_deadline_state(grpc_call_element* elem,
|
|
212
212
|
new start_timer_after_init_state(elem, deadline);
|
213
213
|
GRPC_CLOSURE_INIT(&state->closure, start_timer_after_init, state,
|
214
214
|
grpc_schedule_on_exec_ctx);
|
215
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, &state->closure,
|
215
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, &state->closure, absl::OkStatus());
|
216
216
|
}
|
217
217
|
}
|
218
218
|
|
@@ -249,7 +249,7 @@ void grpc_deadline_state_client_start_transport_stream_op_batch(
|
|
249
249
|
static grpc_error_handle deadline_init_channel_elem(
|
250
250
|
grpc_channel_element* /*elem*/, grpc_channel_element_args* args) {
|
251
251
|
GPR_ASSERT(!args->is_last);
|
252
|
-
return
|
252
|
+
return absl::OkStatus();
|
253
253
|
}
|
254
254
|
|
255
255
|
// Destructor for channel_data. Used for both client and server filters.
|
@@ -276,7 +276,7 @@ typedef struct server_call_data {
|
|
276
276
|
static grpc_error_handle deadline_init_call_elem(
|
277
277
|
grpc_call_element* elem, const grpc_call_element_args* args) {
|
278
278
|
new (elem->call_data) grpc_deadline_state(elem, *args, args->deadline);
|
279
|
-
return
|
279
|
+
return absl::OkStatus();
|
280
280
|
}
|
281
281
|
|
282
282
|
// Destructor for call_data. Used for both client and server filters.
|
@@ -305,8 +305,7 @@ static void recv_initial_metadata_ready(void* arg, grpc_error_handle error) {
|
|
305
305
|
.value_or(grpc_core::Timestamp::InfFuture()));
|
306
306
|
// Invoke the next callback.
|
307
307
|
grpc_core::Closure::Run(DEBUG_LOCATION,
|
308
|
-
calld->next_recv_initial_metadata_ready,
|
309
|
-
GRPC_ERROR_REF(error));
|
308
|
+
calld->next_recv_initial_metadata_ready, error);
|
310
309
|
}
|
311
310
|
|
312
311
|
// Method for starting a call op for server filter.
|
@@ -35,7 +35,7 @@
|
|
35
35
|
#include <grpc/status.h>
|
36
36
|
#include <grpc/support/log.h>
|
37
37
|
|
38
|
-
#include "src/core/ext/filters/fault_injection/
|
38
|
+
#include "src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h"
|
39
39
|
#include "src/core/lib/channel/channel_stack.h"
|
40
40
|
#include "src/core/lib/channel/context.h"
|
41
41
|
#include "src/core/lib/channel/status_util.h"
|
@@ -34,10 +34,6 @@
|
|
34
34
|
#include "src/core/lib/promise/arena_promise.h"
|
35
35
|
#include "src/core/lib/transport/transport.h"
|
36
36
|
|
37
|
-
// Channel arg key for enabling parsing fault injection via method config.
|
38
|
-
#define GRPC_ARG_PARSE_FAULT_INJECTION_METHOD_CONFIG \
|
39
|
-
"grpc.parse_fault_injection_method_config"
|
40
|
-
|
41
37
|
namespace grpc_core {
|
42
38
|
|
43
39
|
// This channel filter is intended to be used by the dynamic filters, instead
|
@@ -0,0 +1,118 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2021 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
#include <grpc/support/port_platform.h>
|
18
|
+
|
19
|
+
#include "src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h"
|
20
|
+
|
21
|
+
#include <vector>
|
22
|
+
|
23
|
+
#include "absl/types/optional.h"
|
24
|
+
|
25
|
+
#include "src/core/lib/channel/channel_args.h"
|
26
|
+
#include "src/core/lib/channel/status_util.h"
|
27
|
+
|
28
|
+
namespace grpc_core {
|
29
|
+
|
30
|
+
const JsonLoaderInterface*
|
31
|
+
FaultInjectionMethodParsedConfig::FaultInjectionPolicy::JsonLoader(
|
32
|
+
const JsonArgs&) {
|
33
|
+
static const auto* loader =
|
34
|
+
JsonObjectLoader<FaultInjectionPolicy>()
|
35
|
+
.OptionalField("abortMessage", &FaultInjectionPolicy::abort_message)
|
36
|
+
.OptionalField("abortCodeHeader",
|
37
|
+
&FaultInjectionPolicy::abort_code_header)
|
38
|
+
.OptionalField("abortPercentageHeader",
|
39
|
+
&FaultInjectionPolicy::abort_percentage_header)
|
40
|
+
.OptionalField("abortPercentageNumerator",
|
41
|
+
&FaultInjectionPolicy::abort_percentage_numerator)
|
42
|
+
.OptionalField("abortPercentageDenominator",
|
43
|
+
&FaultInjectionPolicy::abort_percentage_denominator)
|
44
|
+
.OptionalField("delay", &FaultInjectionPolicy::delay)
|
45
|
+
.OptionalField("delayHeader", &FaultInjectionPolicy::delay_header)
|
46
|
+
.OptionalField("delayPercentageHeader",
|
47
|
+
&FaultInjectionPolicy::delay_percentage_header)
|
48
|
+
.OptionalField("delayPercentageNumerator",
|
49
|
+
&FaultInjectionPolicy::delay_percentage_numerator)
|
50
|
+
.OptionalField("delayPercentageDenominator",
|
51
|
+
&FaultInjectionPolicy::delay_percentage_denominator)
|
52
|
+
.OptionalField("maxFaults", &FaultInjectionPolicy::max_faults)
|
53
|
+
.Finish();
|
54
|
+
return loader;
|
55
|
+
}
|
56
|
+
|
57
|
+
void FaultInjectionMethodParsedConfig::FaultInjectionPolicy::JsonPostLoad(
|
58
|
+
const Json& json, const JsonArgs& args, ValidationErrors* errors) {
|
59
|
+
// Parse abort_code.
|
60
|
+
auto abort_code_string = LoadJsonObjectField<std::string>(
|
61
|
+
json.object_value(), args, "abortCode", errors, /*required=*/false);
|
62
|
+
if (abort_code_string.has_value() &&
|
63
|
+
!grpc_status_code_from_string(abort_code_string->c_str(), &abort_code)) {
|
64
|
+
ValidationErrors::ScopedField field(errors, ".abortCode");
|
65
|
+
errors->AddError("failed to parse status code");
|
66
|
+
}
|
67
|
+
// Validate abort_percentage_denominator.
|
68
|
+
if (abort_percentage_denominator != 100 &&
|
69
|
+
abort_percentage_denominator != 10000 &&
|
70
|
+
abort_percentage_denominator != 1000000) {
|
71
|
+
ValidationErrors::ScopedField field(errors, ".abortPercentageDenominator");
|
72
|
+
errors->AddError("must be one of 100, 10000, or 1000000");
|
73
|
+
}
|
74
|
+
// Validate delay_percentage_denominator.
|
75
|
+
if (delay_percentage_denominator != 100 &&
|
76
|
+
delay_percentage_denominator != 10000 &&
|
77
|
+
delay_percentage_denominator != 1000000) {
|
78
|
+
ValidationErrors::ScopedField field(errors, ".delayPercentageDenominator");
|
79
|
+
errors->AddError("must be one of 100, 10000, or 1000000");
|
80
|
+
}
|
81
|
+
}
|
82
|
+
|
83
|
+
const JsonLoaderInterface* FaultInjectionMethodParsedConfig::JsonLoader(
|
84
|
+
const JsonArgs&) {
|
85
|
+
static const auto* loader =
|
86
|
+
JsonObjectLoader<FaultInjectionMethodParsedConfig>()
|
87
|
+
.OptionalField(
|
88
|
+
"faultInjectionPolicy",
|
89
|
+
&FaultInjectionMethodParsedConfig::fault_injection_policies_)
|
90
|
+
.Finish();
|
91
|
+
return loader;
|
92
|
+
}
|
93
|
+
|
94
|
+
std::unique_ptr<ServiceConfigParser::ParsedConfig>
|
95
|
+
FaultInjectionServiceConfigParser::ParsePerMethodParams(
|
96
|
+
const ChannelArgs& args, const Json& json, ValidationErrors* errors) {
|
97
|
+
// Only parse fault injection policy if the following channel arg is present.
|
98
|
+
if (!args.GetBool(GRPC_ARG_PARSE_FAULT_INJECTION_METHOD_CONFIG)
|
99
|
+
.value_or(false)) {
|
100
|
+
return nullptr;
|
101
|
+
}
|
102
|
+
// Parse fault injection policy from given Json
|
103
|
+
return LoadFromJson<std::unique_ptr<FaultInjectionMethodParsedConfig>>(
|
104
|
+
json, JsonArgs(), errors);
|
105
|
+
}
|
106
|
+
|
107
|
+
void FaultInjectionServiceConfigParser::Register(
|
108
|
+
CoreConfiguration::Builder* builder) {
|
109
|
+
builder->service_config_parser()->RegisterParser(
|
110
|
+
std::make_unique<FaultInjectionServiceConfigParser>());
|
111
|
+
}
|
112
|
+
|
113
|
+
size_t FaultInjectionServiceConfigParser::ParserIndex() {
|
114
|
+
return CoreConfiguration::Get().service_config_parser().GetParserIndex(
|
115
|
+
parser_name());
|
116
|
+
}
|
117
|
+
|
118
|
+
} // namespace grpc_core
|
@@ -14,8 +14,8 @@
|
|
14
14
|
// limitations under the License.
|
15
15
|
//
|
16
16
|
|
17
|
-
#ifndef
|
18
|
-
#define
|
17
|
+
#ifndef GRPC_CORE_EXT_FILTERS_FAULT_INJECTION_FAULT_INJECTION_SERVICE_CONFIG_PARSER_H
|
18
|
+
#define GRPC_CORE_EXT_FILTERS_FAULT_INJECTION_FAULT_INJECTION_SERVICE_CONFIG_PARSER_H
|
19
19
|
|
20
20
|
#include <grpc/support/port_platform.h>
|
21
21
|
|
@@ -25,10 +25,8 @@
|
|
25
25
|
#include <limits>
|
26
26
|
#include <memory>
|
27
27
|
#include <string>
|
28
|
-
#include <utility>
|
29
28
|
#include <vector>
|
30
29
|
|
31
|
-
#include "absl/status/statusor.h"
|
32
30
|
#include "absl/strings/string_view.h"
|
33
31
|
|
34
32
|
#include <grpc/status.h>
|
@@ -36,9 +34,16 @@
|
|
36
34
|
#include "src/core/lib/channel/channel_args.h"
|
37
35
|
#include "src/core/lib/config/core_configuration.h"
|
38
36
|
#include "src/core/lib/gprpp/time.h"
|
37
|
+
#include "src/core/lib/gprpp/validation_errors.h"
|
39
38
|
#include "src/core/lib/json/json.h"
|
39
|
+
#include "src/core/lib/json/json_args.h"
|
40
|
+
#include "src/core/lib/json/json_object_loader.h"
|
40
41
|
#include "src/core/lib/service_config/service_config_parser.h"
|
41
42
|
|
43
|
+
// Channel arg key for enabling parsing fault injection via method config.
|
44
|
+
#define GRPC_ARG_PARSE_FAULT_INJECTION_METHOD_CONFIG \
|
45
|
+
"grpc.internal.parse_fault_injection_method_config"
|
46
|
+
|
42
47
|
namespace grpc_core {
|
43
48
|
|
44
49
|
class FaultInjectionMethodParsedConfig
|
@@ -46,7 +51,7 @@ class FaultInjectionMethodParsedConfig
|
|
46
51
|
public:
|
47
52
|
struct FaultInjectionPolicy {
|
48
53
|
grpc_status_code abort_code = GRPC_STATUS_OK;
|
49
|
-
std::string abort_message;
|
54
|
+
std::string abort_message = "Fault injected";
|
50
55
|
std::string abort_code_header;
|
51
56
|
std::string abort_percentage_header;
|
52
57
|
uint32_t abort_percentage_numerator = 0;
|
@@ -60,11 +65,11 @@ class FaultInjectionMethodParsedConfig
|
|
60
65
|
|
61
66
|
// By default, the max allowed active faults are unlimited.
|
62
67
|
uint32_t max_faults = std::numeric_limits<uint32_t>::max();
|
63
|
-
};
|
64
68
|
|
65
|
-
|
66
|
-
|
67
|
-
|
69
|
+
static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
|
70
|
+
void JsonPostLoad(const Json& json, const JsonArgs&,
|
71
|
+
ValidationErrors* errors);
|
72
|
+
};
|
68
73
|
|
69
74
|
// Returns the fault injection policy at certain index.
|
70
75
|
// There might be multiple fault injection policies functioning at the same
|
@@ -79,6 +84,8 @@ class FaultInjectionMethodParsedConfig
|
|
79
84
|
return &fault_injection_policies_[index];
|
80
85
|
}
|
81
86
|
|
87
|
+
static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
|
88
|
+
|
82
89
|
private:
|
83
90
|
std::vector<FaultInjectionPolicy> fault_injection_policies_;
|
84
91
|
};
|
@@ -88,8 +95,9 @@ class FaultInjectionServiceConfigParser final
|
|
88
95
|
public:
|
89
96
|
absl::string_view name() const override { return parser_name(); }
|
90
97
|
// Parses the per-method service config for fault injection filter.
|
91
|
-
|
92
|
-
|
98
|
+
std::unique_ptr<ServiceConfigParser::ParsedConfig> ParsePerMethodParams(
|
99
|
+
const ChannelArgs& args, const Json& json,
|
100
|
+
ValidationErrors* errors) override;
|
93
101
|
// Returns the parser index for FaultInjectionServiceConfigParser.
|
94
102
|
static size_t ParserIndex();
|
95
103
|
// Registers FaultInjectionServiceConfigParser to ServiceConfigParser.
|
@@ -101,4 +109,4 @@ class FaultInjectionServiceConfigParser final
|
|
101
109
|
|
102
110
|
} // namespace grpc_core
|
103
111
|
|
104
|
-
#endif //
|
112
|
+
#endif // GRPC_CORE_EXT_FILTERS_FAULT_INJECTION_FAULT_INJECTION_SERVICE_CONFIG_PARSER_H
|