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
@@ -69,7 +69,6 @@
|
|
69
69
|
#include <vector>
|
70
70
|
|
71
71
|
#include "absl/container/inlined_vector.h"
|
72
|
-
#include "absl/memory/memory.h"
|
73
72
|
#include "absl/status/status.h"
|
74
73
|
#include "absl/status/statusor.h"
|
75
74
|
#include "absl/strings/str_cat.h"
|
@@ -106,13 +105,13 @@
|
|
106
105
|
#include "src/core/lib/channel/channelz.h"
|
107
106
|
#include "src/core/lib/config/core_configuration.h"
|
108
107
|
#include "src/core/lib/debug/trace.h"
|
109
|
-
#include "src/core/lib/event_engine/default_event_engine.h"
|
110
108
|
#include "src/core/lib/gpr/string.h"
|
111
109
|
#include "src/core/lib/gpr/useful.h"
|
112
110
|
#include "src/core/lib/gprpp/debug_location.h"
|
113
111
|
#include "src/core/lib/gprpp/orphanable.h"
|
114
112
|
#include "src/core/lib/gprpp/ref_counted.h"
|
115
113
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
114
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
116
115
|
#include "src/core/lib/gprpp/time.h"
|
117
116
|
#include "src/core/lib/gprpp/validation_errors.h"
|
118
117
|
#include "src/core/lib/gprpp/work_serializer.h"
|
@@ -135,7 +134,6 @@
|
|
135
134
|
#include "src/core/lib/resolver/server_address.h"
|
136
135
|
#include "src/core/lib/security/credentials/credentials.h"
|
137
136
|
#include "src/core/lib/slice/slice.h"
|
138
|
-
#include "src/core/lib/slice/slice_refcount.h"
|
139
137
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
140
138
|
#include "src/core/lib/surface/call.h"
|
141
139
|
#include "src/core/lib/surface/channel.h"
|
@@ -161,7 +159,6 @@ const char kGrpcLbAddressAttributeKey[] = "grpclb";
|
|
161
159
|
namespace {
|
162
160
|
|
163
161
|
using ::grpc_event_engine::experimental::EventEngine;
|
164
|
-
using ::grpc_event_engine::experimental::GetDefaultEventEngine;
|
165
162
|
|
166
163
|
constexpr absl::string_view kGrpclb = "grpclb";
|
167
164
|
|
@@ -341,8 +338,8 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
341
338
|
client_stats_(std::move(client_stats)) {}
|
342
339
|
|
343
340
|
std::unique_ptr<AttributeInterface> Copy() const override {
|
344
|
-
return
|
345
|
-
|
341
|
+
return std::make_unique<TokenAndClientStatsAttribute>(lb_token_,
|
342
|
+
client_stats_);
|
346
343
|
}
|
347
344
|
|
348
345
|
int Cmp(const AttributeInterface* other_base) const override {
|
@@ -470,6 +467,7 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
470
467
|
std::unique_ptr<SubchannelPicker> picker) override;
|
471
468
|
void RequestReresolution() override;
|
472
469
|
absl::string_view GetAuthority() override;
|
470
|
+
grpc_event_engine::experimental::EventEngine* GetEventEngine() override;
|
473
471
|
void AddTraceEvent(TraceSeverity severity,
|
474
472
|
absl::string_view message) override;
|
475
473
|
|
@@ -708,8 +706,8 @@ ServerAddressList GrpcLb::Serverlist::GetServerAddressList(
|
|
708
706
|
std::map<const char*, std::unique_ptr<ServerAddress::AttributeInterface>>
|
709
707
|
attributes;
|
710
708
|
attributes[kGrpcLbAddressAttributeKey] =
|
711
|
-
|
712
|
-
|
709
|
+
std::make_unique<TokenAndClientStatsAttribute>(std::move(lb_token),
|
710
|
+
stats);
|
713
711
|
// Add address.
|
714
712
|
addresses.emplace_back(addr, ChannelArgs(), std::move(attributes));
|
715
713
|
}
|
@@ -763,7 +761,7 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
|
|
763
761
|
GrpcLbClientStats* client_stats = subchannel_wrapper->client_stats();
|
764
762
|
if (client_stats != nullptr) {
|
765
763
|
complete_pick->subchannel_call_tracker =
|
766
|
-
|
764
|
+
std::make_unique<SubchannelCallTracker>(
|
767
765
|
client_stats->Ref(),
|
768
766
|
std::move(complete_pick->subchannel_call_tracker));
|
769
767
|
// The metadata value is a hack: we pretend the pointer points to
|
@@ -853,8 +851,8 @@ void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
|
|
853
851
|
}
|
854
852
|
parent_->channel_control_helper()->UpdateState(
|
855
853
|
state, status,
|
856
|
-
|
857
|
-
|
854
|
+
std::make_unique<Picker>(std::move(serverlist), std::move(picker),
|
855
|
+
std::move(client_stats)));
|
858
856
|
}
|
859
857
|
|
860
858
|
void GrpcLb::Helper::RequestReresolution() {
|
@@ -873,6 +871,10 @@ absl::string_view GrpcLb::Helper::GetAuthority() {
|
|
873
871
|
return parent_->channel_control_helper()->GetAuthority();
|
874
872
|
}
|
875
873
|
|
874
|
+
grpc_event_engine::experimental::EventEngine* GrpcLb::Helper::GetEventEngine() {
|
875
|
+
return parent_->channel_control_helper()->GetEventEngine();
|
876
|
+
}
|
877
|
+
|
876
878
|
void GrpcLb::Helper::AddTraceEvent(TraceSeverity severity,
|
877
879
|
absl::string_view message) {
|
878
880
|
if (parent_->shutting_down_) return;
|
@@ -922,7 +924,7 @@ GrpcLb::BalancerCallState::BalancerCallState(
|
|
922
924
|
arena.ptr());
|
923
925
|
send_message_payload_ =
|
924
926
|
grpc_raw_byte_buffer_create(&request_payload_slice, 1);
|
925
|
-
|
927
|
+
CSliceUnref(request_payload_slice);
|
926
928
|
// Init other data associated with the LB call.
|
927
929
|
grpc_metadata_array_init(&lb_initial_metadata_recv_);
|
928
930
|
grpc_metadata_array_init(&lb_trailing_metadata_recv_);
|
@@ -935,7 +937,7 @@ GrpcLb::BalancerCallState::~BalancerCallState() {
|
|
935
937
|
grpc_metadata_array_destroy(&lb_trailing_metadata_recv_);
|
936
938
|
grpc_byte_buffer_destroy(send_message_payload_);
|
937
939
|
grpc_byte_buffer_destroy(recv_message_payload_);
|
938
|
-
|
940
|
+
CSliceUnref(lb_call_status_details_);
|
939
941
|
}
|
940
942
|
|
941
943
|
void GrpcLb::BalancerCallState::Orphan() {
|
@@ -946,7 +948,8 @@ void GrpcLb::BalancerCallState::Orphan() {
|
|
946
948
|
// call, then the following cancellation will be a no-op.
|
947
949
|
grpc_call_cancel_internal(lb_call_);
|
948
950
|
if (client_load_report_handle_.has_value() &&
|
949
|
-
|
951
|
+
grpclb_policy()->channel_control_helper()->GetEventEngine()->Cancel(
|
952
|
+
client_load_report_handle_.value())) {
|
950
953
|
Unref(DEBUG_LOCATION, "client_load_report cancelled");
|
951
954
|
}
|
952
955
|
// Note that the initial ref is hold by lb_on_balancer_status_received_
|
@@ -1032,12 +1035,13 @@ void GrpcLb::BalancerCallState::StartQuery() {
|
|
1032
1035
|
|
1033
1036
|
void GrpcLb::BalancerCallState::ScheduleNextClientLoadReportLocked() {
|
1034
1037
|
client_load_report_handle_ =
|
1035
|
-
|
1036
|
-
|
1037
|
-
|
1038
|
-
|
1039
|
-
|
1040
|
-
|
1038
|
+
grpclb_policy()->channel_control_helper()->GetEventEngine()->RunAfter(
|
1039
|
+
client_stats_report_interval_, [this] {
|
1040
|
+
ApplicationCallbackExecCtx callback_exec_ctx;
|
1041
|
+
ExecCtx exec_ctx;
|
1042
|
+
grpclb_policy()->work_serializer()->Run(
|
1043
|
+
[this] { MaybeSendClientLoadReportLocked(); }, DEBUG_LOCATION);
|
1044
|
+
});
|
1041
1045
|
}
|
1042
1046
|
|
1043
1047
|
void GrpcLb::BalancerCallState::MaybeSendClientLoadReportLocked() {
|
@@ -1090,7 +1094,7 @@ void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
|
|
1090
1094
|
num_calls_finished_known_received, drop_token_counts.get(), arena.ptr());
|
1091
1095
|
send_message_payload_ =
|
1092
1096
|
grpc_raw_byte_buffer_create(&request_payload_slice, 1);
|
1093
|
-
|
1097
|
+
CSliceUnref(request_payload_slice);
|
1094
1098
|
// Send the report.
|
1095
1099
|
grpc_op op;
|
1096
1100
|
memset(&op, 0, sizeof(op));
|
@@ -1109,7 +1113,6 @@ void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
|
|
1109
1113
|
void GrpcLb::BalancerCallState::ClientLoadReportDone(void* arg,
|
1110
1114
|
grpc_error_handle error) {
|
1111
1115
|
BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
|
1112
|
-
(void)GRPC_ERROR_REF(error); // ref owned by lambda
|
1113
1116
|
lb_calld->grpclb_policy()->work_serializer()->Run(
|
1114
1117
|
[lb_calld, error]() { lb_calld->ClientLoadReportDoneLocked(error); },
|
1115
1118
|
DEBUG_LOCATION);
|
@@ -1119,9 +1122,8 @@ void GrpcLb::BalancerCallState::ClientLoadReportDoneLocked(
|
|
1119
1122
|
grpc_error_handle error) {
|
1120
1123
|
grpc_byte_buffer_destroy(send_message_payload_);
|
1121
1124
|
send_message_payload_ = nullptr;
|
1122
|
-
if (!
|
1125
|
+
if (!error.ok() || this != grpclb_policy()->lb_calld_.get()) {
|
1123
1126
|
Unref(DEBUG_LOCATION, "client_load_report");
|
1124
|
-
GRPC_ERROR_UNREF(error);
|
1125
1127
|
return;
|
1126
1128
|
}
|
1127
1129
|
ScheduleNextClientLoadReportLocked();
|
@@ -1293,7 +1295,7 @@ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked() {
|
|
1293
1295
|
}
|
1294
1296
|
}
|
1295
1297
|
}
|
1296
|
-
|
1298
|
+
CSliceUnref(response_slice);
|
1297
1299
|
if (!grpclb_policy()->shutting_down_) {
|
1298
1300
|
// Keep listening for serverlist updates.
|
1299
1301
|
grpc_op op;
|
@@ -1314,7 +1316,6 @@ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked() {
|
|
1314
1316
|
void GrpcLb::BalancerCallState::OnBalancerStatusReceived(
|
1315
1317
|
void* arg, grpc_error_handle error) {
|
1316
1318
|
BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
|
1317
|
-
(void)GRPC_ERROR_REF(error); // owned by lambda
|
1318
1319
|
lb_calld->grpclb_policy()->work_serializer()->Run(
|
1319
1320
|
[lb_calld, error]() { lb_calld->OnBalancerStatusReceivedLocked(error); },
|
1320
1321
|
DEBUG_LOCATION);
|
@@ -1329,10 +1330,9 @@ void GrpcLb::BalancerCallState::OnBalancerStatusReceivedLocked(
|
|
1329
1330
|
"[grpclb %p] lb_calld=%p: Status from LB server received. "
|
1330
1331
|
"Status = %d, details = '%s', (lb_call: %p), error '%s'",
|
1331
1332
|
grpclb_policy(), this, lb_call_status_, status_details, lb_call_,
|
1332
|
-
|
1333
|
+
StatusToString(error).c_str());
|
1333
1334
|
gpr_free(status_details);
|
1334
1335
|
}
|
1335
|
-
GRPC_ERROR_UNREF(error);
|
1336
1336
|
// If this lb_calld is still in use, this call ended because of a failure so
|
1337
1337
|
// we want to retry connecting. Otherwise, we have deliberately ended this
|
1338
1338
|
// call and no further action is required.
|
@@ -1570,7 +1570,7 @@ absl::Status GrpcLb::UpdateLocked(UpdateArgs args) {
|
|
1570
1570
|
for (ServerAddress& address : *fallback_backend_addresses_) {
|
1571
1571
|
address = address.WithAttribute(
|
1572
1572
|
kGrpcLbAddressAttributeKey,
|
1573
|
-
|
1573
|
+
std::make_unique<TokenAndClientStatsAttribute>("", nullptr));
|
1574
1574
|
}
|
1575
1575
|
}
|
1576
1576
|
resolution_note_ = std::move(args.resolution_note);
|
@@ -1698,7 +1698,6 @@ void GrpcLb::StartBalancerCallRetryTimerLocked() {
|
|
1698
1698
|
|
1699
1699
|
void GrpcLb::OnBalancerCallRetryTimer(void* arg, grpc_error_handle error) {
|
1700
1700
|
GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
|
1701
|
-
(void)GRPC_ERROR_REF(error); // ref owned by lambda
|
1702
1701
|
grpclb_policy->work_serializer()->Run(
|
1703
1702
|
[grpclb_policy, error]() {
|
1704
1703
|
grpclb_policy->OnBalancerCallRetryTimerLocked(error);
|
@@ -1708,14 +1707,13 @@ void GrpcLb::OnBalancerCallRetryTimer(void* arg, grpc_error_handle error) {
|
|
1708
1707
|
|
1709
1708
|
void GrpcLb::OnBalancerCallRetryTimerLocked(grpc_error_handle error) {
|
1710
1709
|
retry_timer_callback_pending_ = false;
|
1711
|
-
if (!shutting_down_ &&
|
1710
|
+
if (!shutting_down_ && error.ok() && lb_calld_ == nullptr) {
|
1712
1711
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
|
1713
1712
|
gpr_log(GPR_INFO, "[grpclb %p] Restarting call to LB server", this);
|
1714
1713
|
}
|
1715
1714
|
StartBalancerCallLocked();
|
1716
1715
|
}
|
1717
1716
|
Unref(DEBUG_LOCATION, "on_balancer_call_retry_timer");
|
1718
|
-
GRPC_ERROR_UNREF(error);
|
1719
1717
|
}
|
1720
1718
|
|
1721
1719
|
//
|
@@ -1742,7 +1740,6 @@ void GrpcLb::MaybeEnterFallbackModeAfterStartup() {
|
|
1742
1740
|
|
1743
1741
|
void GrpcLb::OnFallbackTimer(void* arg, grpc_error_handle error) {
|
1744
1742
|
GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
|
1745
|
-
(void)GRPC_ERROR_REF(error); // ref owned by lambda
|
1746
1743
|
grpclb_policy->work_serializer()->Run(
|
1747
1744
|
[grpclb_policy, error]() { grpclb_policy->OnFallbackTimerLocked(error); },
|
1748
1745
|
DEBUG_LOCATION);
|
@@ -1751,8 +1748,7 @@ void GrpcLb::OnFallbackTimer(void* arg, grpc_error_handle error) {
|
|
1751
1748
|
void GrpcLb::OnFallbackTimerLocked(grpc_error_handle error) {
|
1752
1749
|
// If we receive a serverlist after the timer fires but before this callback
|
1753
1750
|
// actually runs, don't fall back.
|
1754
|
-
if (fallback_at_startup_checks_pending_ && !shutting_down_ &&
|
1755
|
-
GRPC_ERROR_IS_NONE(error)) {
|
1751
|
+
if (fallback_at_startup_checks_pending_ && !shutting_down_ && error.ok()) {
|
1756
1752
|
gpr_log(GPR_INFO,
|
1757
1753
|
"[grpclb %p] No response from balancer after fallback timeout; "
|
1758
1754
|
"entering fallback mode",
|
@@ -1763,7 +1759,6 @@ void GrpcLb::OnFallbackTimerLocked(grpc_error_handle error) {
|
|
1763
1759
|
CreateOrUpdateChildPolicyLocked();
|
1764
1760
|
}
|
1765
1761
|
Unref(DEBUG_LOCATION, "on_fallback_timer");
|
1766
|
-
GRPC_ERROR_UNREF(error);
|
1767
1762
|
}
|
1768
1763
|
|
1769
1764
|
//
|
@@ -1786,7 +1781,7 @@ OrphanablePtr<LoadBalancingPolicy> GrpcLb::CreateChildPolicyLocked(
|
|
1786
1781
|
LoadBalancingPolicy::Args lb_policy_args;
|
1787
1782
|
lb_policy_args.work_serializer = work_serializer();
|
1788
1783
|
lb_policy_args.args = args;
|
1789
|
-
lb_policy_args.channel_control_helper =
|
1784
|
+
lb_policy_args.channel_control_helper = std::make_unique<Helper>(Ref());
|
1790
1785
|
OrphanablePtr<LoadBalancingPolicy> lb_policy =
|
1791
1786
|
MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
|
1792
1787
|
&grpc_lb_glb_trace);
|
@@ -1865,14 +1860,13 @@ void GrpcLb::StartSubchannelCacheTimerLocked() {
|
|
1865
1860
|
|
1866
1861
|
void GrpcLb::OnSubchannelCacheTimer(void* arg, grpc_error_handle error) {
|
1867
1862
|
auto* self = static_cast<GrpcLb*>(arg);
|
1868
|
-
(void)GRPC_ERROR_REF(error);
|
1869
1863
|
self->work_serializer()->Run(
|
1870
1864
|
[self, error]() { self->GrpcLb::OnSubchannelCacheTimerLocked(error); },
|
1871
1865
|
DEBUG_LOCATION);
|
1872
1866
|
}
|
1873
1867
|
|
1874
1868
|
void GrpcLb::OnSubchannelCacheTimerLocked(grpc_error_handle error) {
|
1875
|
-
if (subchannel_cache_timer_pending_ &&
|
1869
|
+
if (subchannel_cache_timer_pending_ && error.ok()) {
|
1876
1870
|
auto it = cached_subchannels_.begin();
|
1877
1871
|
if (it != cached_subchannels_.end()) {
|
1878
1872
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
|
@@ -1889,7 +1883,6 @@ void GrpcLb::OnSubchannelCacheTimerLocked(grpc_error_handle error) {
|
|
1889
1883
|
subchannel_cache_timer_pending_ = false;
|
1890
1884
|
}
|
1891
1885
|
Unref(DEBUG_LOCATION, "OnSubchannelCacheTimer");
|
1892
|
-
GRPC_ERROR_UNREF(error);
|
1893
1886
|
}
|
1894
1887
|
|
1895
1888
|
//
|
@@ -1914,16 +1907,13 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
|
|
1914
1907
|
|
1915
1908
|
} // namespace
|
1916
1909
|
|
1917
|
-
} // namespace grpc_core
|
1918
|
-
|
1919
1910
|
//
|
1920
1911
|
// Plugin registration
|
1921
1912
|
//
|
1922
1913
|
|
1923
|
-
namespace grpc_core {
|
1924
1914
|
void RegisterGrpcLbPolicy(CoreConfiguration::Builder* builder) {
|
1925
1915
|
builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
|
1926
|
-
|
1916
|
+
std::make_unique<GrpcLbFactory>());
|
1927
1917
|
builder->channel_init()->RegisterStage(
|
1928
1918
|
GRPC_CLIENT_SUBCHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
|
1929
1919
|
[](ChannelStackBuilder* builder) {
|
@@ -1939,4 +1929,5 @@ void RegisterGrpcLbPolicy(CoreConfiguration::Builder* builder) {
|
|
1939
1929
|
return true;
|
1940
1930
|
});
|
1941
1931
|
}
|
1932
|
+
|
1942
1933
|
} // namespace grpc_core
|
@@ -22,8 +22,6 @@
|
|
22
22
|
|
23
23
|
#include <string.h>
|
24
24
|
|
25
|
-
#include "absl/memory/memory.h"
|
26
|
-
|
27
25
|
#include <grpc/support/atm.h>
|
28
26
|
#include <grpc/support/string_util.h>
|
29
27
|
|
@@ -54,7 +52,7 @@ void GrpcLbClientStats::AddCallDropped(const char* token) {
|
|
54
52
|
// Record the drop.
|
55
53
|
MutexLock lock(&drop_count_mu_);
|
56
54
|
if (drop_token_counts_ == nullptr) {
|
57
|
-
drop_token_counts_ =
|
55
|
+
drop_token_counts_ = std::make_unique<DroppedCallCounts>();
|
58
56
|
}
|
59
57
|
for (size_t i = 0; i < drop_token_counts_->size(); ++i) {
|
60
58
|
if (strcmp((*drop_token_counts_)[i].token.get(), token) == 0) {
|
@@ -27,7 +27,6 @@
|
|
27
27
|
#include <vector>
|
28
28
|
|
29
29
|
#include "absl/base/thread_annotations.h"
|
30
|
-
#include "absl/memory/memory.h"
|
31
30
|
#include "absl/status/status.h"
|
32
31
|
#include "absl/strings/string_view.h"
|
33
32
|
#include "absl/types/optional.h"
|
@@ -263,7 +262,7 @@ class OrcaProducer::OrcaStreamEventHandler
|
|
263
262
|
// BackendMetricAllocator object.
|
264
263
|
void AsyncNotifyWatchersAndDelete() {
|
265
264
|
GRPC_CLOSURE_INIT(&closure_, NotifyWatchersInExecCtx, this, nullptr);
|
266
|
-
ExecCtx::Run(DEBUG_LOCATION, &closure_,
|
265
|
+
ExecCtx::Run(DEBUG_LOCATION, &closure_, absl::OkStatus());
|
267
266
|
}
|
268
267
|
|
269
268
|
private:
|
@@ -348,7 +347,7 @@ void OrcaProducer::MaybeStartStreamLocked() {
|
|
348
347
|
if (connected_subchannel_ == nullptr) return;
|
349
348
|
stream_client_ = MakeOrphanable<SubchannelStreamClient>(
|
350
349
|
connected_subchannel_, subchannel_->pollset_set(),
|
351
|
-
|
350
|
+
std::make_unique<OrcaStreamEventHandler>(WeakRef(), report_interval_),
|
352
351
|
GRPC_TRACE_FLAG_ENABLED(grpc_orca_client_trace) ? "OrcaClient" : nullptr);
|
353
352
|
}
|
354
353
|
|
@@ -410,7 +409,7 @@ void OrcaWatcher::SetSubchannel(Subchannel* subchannel) {
|
|
410
409
|
std::unique_ptr<SubchannelInterface::DataWatcherInterface>
|
411
410
|
MakeOobBackendMetricWatcher(Duration report_interval,
|
412
411
|
std::unique_ptr<OobBackendMetricWatcher> watcher) {
|
413
|
-
return
|
412
|
+
return std::make_unique<OrcaWatcher>(report_interval, std::move(watcher));
|
414
413
|
}
|
415
414
|
|
416
415
|
} // namespace grpc_core
|
@@ -38,7 +38,7 @@ namespace grpc_core {
|
|
38
38
|
// subchannel like this:
|
39
39
|
// subchannel->AddDataWatcher(
|
40
40
|
// MakeOobBackendMetricWatcher(
|
41
|
-
//
|
41
|
+
// std::make_unique<MyOobBackendMetricWatcherSubclass>(...)));
|
42
42
|
|
43
43
|
class OobBackendMetricWatcher {
|
44
44
|
public:
|
@@ -24,7 +24,6 @@
|
|
24
24
|
#include <algorithm>
|
25
25
|
#include <atomic>
|
26
26
|
#include <cmath>
|
27
|
-
#include <cstdint>
|
28
27
|
#include <map>
|
29
28
|
#include <memory>
|
30
29
|
#include <set>
|
@@ -32,13 +31,13 @@
|
|
32
31
|
#include <utility>
|
33
32
|
#include <vector>
|
34
33
|
|
35
|
-
#include "absl/memory/memory.h"
|
36
34
|
#include "absl/random/random.h"
|
37
35
|
#include "absl/status/status.h"
|
38
36
|
#include "absl/status/statusor.h"
|
39
37
|
#include "absl/strings/string_view.h"
|
40
38
|
#include "absl/types/variant.h"
|
41
39
|
|
40
|
+
#include <grpc/event_engine/event_engine.h>
|
42
41
|
#include <grpc/impl/codegen/connectivity_state.h>
|
43
42
|
#include <grpc/support/log.h>
|
44
43
|
|
@@ -47,9 +46,7 @@
|
|
47
46
|
#include "src/core/lib/channel/channel_args.h"
|
48
47
|
#include "src/core/lib/config/core_configuration.h"
|
49
48
|
#include "src/core/lib/debug/trace.h"
|
50
|
-
#include "src/core/lib/gpr/string.h"
|
51
49
|
#include "src/core/lib/gprpp/debug_location.h"
|
52
|
-
#include "src/core/lib/gprpp/env.h"
|
53
50
|
#include "src/core/lib/gprpp/orphanable.h"
|
54
51
|
#include "src/core/lib/gprpp/ref_counted.h"
|
55
52
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
@@ -72,15 +69,6 @@ namespace grpc_core {
|
|
72
69
|
|
73
70
|
TraceFlag grpc_outlier_detection_lb_trace(false, "outlier_detection_lb");
|
74
71
|
|
75
|
-
// TODO(donnadionne): Remove once outlier detection is no longer experimental
|
76
|
-
bool XdsOutlierDetectionEnabled() {
|
77
|
-
auto value = GetEnv("GRPC_EXPERIMENTAL_ENABLE_OUTLIER_DETECTION");
|
78
|
-
if (!value.has_value()) return false;
|
79
|
-
bool parsed_value;
|
80
|
-
bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value);
|
81
|
-
return parse_succeeded && parsed_value;
|
82
|
-
}
|
83
|
-
|
84
72
|
namespace {
|
85
73
|
|
86
74
|
constexpr absl::string_view kOutlierDetection =
|
@@ -307,8 +295,8 @@ class OutlierDetectionLb : public LoadBalancingPolicy {
|
|
307
295
|
}
|
308
296
|
|
309
297
|
private:
|
310
|
-
std::unique_ptr<Bucket> current_bucket_ =
|
311
|
-
std::unique_ptr<Bucket> backup_bucket_ =
|
298
|
+
std::unique_ptr<Bucket> current_bucket_ = std::make_unique<Bucket>();
|
299
|
+
std::unique_ptr<Bucket> backup_bucket_ = std::make_unique<Bucket>();
|
312
300
|
// The bucket used to update call counts.
|
313
301
|
// Points to either current_bucket or active_bucket.
|
314
302
|
std::atomic<Bucket*> active_bucket_{current_bucket_.get()};
|
@@ -357,6 +345,7 @@ class OutlierDetectionLb : public LoadBalancingPolicy {
|
|
357
345
|
std::unique_ptr<SubchannelPicker> picker) override;
|
358
346
|
void RequestReresolution() override;
|
359
347
|
absl::string_view GetAuthority() override;
|
348
|
+
grpc_event_engine::experimental::EventEngine* GetEventEngine() override;
|
360
349
|
void AddTraceEvent(TraceSeverity severity,
|
361
350
|
absl::string_view message) override;
|
362
351
|
|
@@ -434,7 +423,7 @@ void OutlierDetectionLb::SubchannelWrapper::WatchConnectivityState(
|
|
434
423
|
std::unique_ptr<ConnectivityStateWatcherInterface> watcher) {
|
435
424
|
ConnectivityStateWatcherInterface* watcher_ptr = watcher.get();
|
436
425
|
auto watcher_wrapper =
|
437
|
-
|
426
|
+
std::make_unique<WatcherWrapper>(std::move(watcher), ejected_);
|
438
427
|
watchers_.emplace(watcher_ptr, watcher_wrapper.get());
|
439
428
|
wrapped_subchannel()->WatchConnectivityState(std::move(watcher_wrapper));
|
440
429
|
}
|
@@ -530,7 +519,7 @@ LoadBalancingPolicy::PickResult OutlierDetectionLb::Picker::Pick(
|
|
530
519
|
// not both success_rate_ejection and failure_percentage_ejection are unset.
|
531
520
|
if (counting_enabled_) {
|
532
521
|
complete_pick->subchannel_call_tracker =
|
533
|
-
|
522
|
+
std::make_unique<SubchannelCallTracker>(
|
534
523
|
std::move(complete_pick->subchannel_call_tracker),
|
535
524
|
subchannel_wrapper->subchannel_state());
|
536
525
|
}
|
@@ -693,7 +682,7 @@ absl::Status OutlierDetectionLb::UpdateLocked(UpdateArgs args) {
|
|
693
682
|
void OutlierDetectionLb::MaybeUpdatePickerLocked() {
|
694
683
|
if (picker_ != nullptr) {
|
695
684
|
auto outlier_detection_picker =
|
696
|
-
|
685
|
+
std::make_unique<Picker>(this, picker_, config_->CountingEnabled());
|
697
686
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
|
698
687
|
gpr_log(GPR_INFO,
|
699
688
|
"[outlier_detection_lb %p] updating connectivity: state=%s "
|
@@ -712,7 +701,7 @@ OrphanablePtr<LoadBalancingPolicy> OutlierDetectionLb::CreateChildPolicyLocked(
|
|
712
701
|
lb_policy_args.work_serializer = work_serializer();
|
713
702
|
lb_policy_args.args = args;
|
714
703
|
lb_policy_args.channel_control_helper =
|
715
|
-
|
704
|
+
std::make_unique<Helper>(Ref(DEBUG_LOCATION, "Helper"));
|
716
705
|
OrphanablePtr<LoadBalancingPolicy> lb_policy =
|
717
706
|
MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
|
718
707
|
&grpc_outlier_detection_lb_trace);
|
@@ -781,6 +770,11 @@ absl::string_view OutlierDetectionLb::Helper::GetAuthority() {
|
|
781
770
|
return outlier_detection_policy_->channel_control_helper()->GetAuthority();
|
782
771
|
}
|
783
772
|
|
773
|
+
grpc_event_engine::experimental::EventEngine*
|
774
|
+
OutlierDetectionLb::Helper::GetEventEngine() {
|
775
|
+
return outlier_detection_policy_->channel_control_helper()->GetEventEngine();
|
776
|
+
}
|
777
|
+
|
784
778
|
void OutlierDetectionLb::Helper::AddTraceEvent(TraceSeverity severity,
|
785
779
|
absl::string_view message) {
|
786
780
|
if (outlier_detection_policy_->shutting_down_) return;
|
@@ -816,13 +810,12 @@ void OutlierDetectionLb::EjectionTimer::Orphan() {
|
|
816
810
|
void OutlierDetectionLb::EjectionTimer::OnTimer(void* arg,
|
817
811
|
grpc_error_handle error) {
|
818
812
|
auto* self = static_cast<EjectionTimer*>(arg);
|
819
|
-
(void)GRPC_ERROR_REF(error); // ref owned by lambda
|
820
813
|
self->parent_->work_serializer()->Run(
|
821
814
|
[self, error]() { self->OnTimerLocked(error); }, DEBUG_LOCATION);
|
822
815
|
}
|
823
816
|
|
824
817
|
void OutlierDetectionLb::EjectionTimer::OnTimerLocked(grpc_error_handle error) {
|
825
|
-
if (
|
818
|
+
if (error.ok() && timer_pending_) {
|
826
819
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
|
827
820
|
gpr_log(GPR_INFO, "[outlier_detection_lb %p] ejection timer running",
|
828
821
|
parent_.get());
|
@@ -1005,7 +998,6 @@ void OutlierDetectionLb::EjectionTimer::OnTimerLocked(grpc_error_handle error) {
|
|
1005
998
|
MakeOrphanable<EjectionTimer>(parent_, Timestamp::Now());
|
1006
999
|
}
|
1007
1000
|
Unref(DEBUG_LOCATION, "Timer");
|
1008
|
-
GRPC_ERROR_UNREF(error);
|
1009
1001
|
}
|
1010
1002
|
|
1011
1003
|
//
|
@@ -1035,8 +1027,6 @@ class OutlierDetectionLbFactory : public LoadBalancingPolicyFactory {
|
|
1035
1027
|
OutlierDetectionConfig outlier_detection_config;
|
1036
1028
|
RefCountedPtr<LoadBalancingPolicy::Config> child_policy;
|
1037
1029
|
{
|
1038
|
-
ValidationErrors::ScopedField field(
|
1039
|
-
&errors, "[\"outlier_detection_experimental\"]");
|
1040
1030
|
outlier_detection_config =
|
1041
1031
|
LoadFromJson<OutlierDetectionConfig>(json, JsonArgs(), &errors);
|
1042
1032
|
// Parse childPolicy manually.
|
@@ -1085,6 +1075,14 @@ OutlierDetectionConfig::SuccessRateEjection::JsonLoader(const JsonArgs&) {
|
|
1085
1075
|
return loader;
|
1086
1076
|
}
|
1087
1077
|
|
1078
|
+
void OutlierDetectionConfig::SuccessRateEjection::JsonPostLoad(
|
1079
|
+
const Json&, const JsonArgs&, ValidationErrors* errors) {
|
1080
|
+
if (enforcement_percentage > 100) {
|
1081
|
+
ValidationErrors::ScopedField field(errors, ".enforcement_percentage");
|
1082
|
+
errors->AddError("value must be <= 100");
|
1083
|
+
}
|
1084
|
+
}
|
1085
|
+
|
1088
1086
|
const JsonLoaderInterface*
|
1089
1087
|
OutlierDetectionConfig::FailurePercentageEjection::JsonLoader(const JsonArgs&) {
|
1090
1088
|
static const auto* loader =
|
@@ -1100,6 +1098,18 @@ OutlierDetectionConfig::FailurePercentageEjection::JsonLoader(const JsonArgs&) {
|
|
1100
1098
|
return loader;
|
1101
1099
|
}
|
1102
1100
|
|
1101
|
+
void OutlierDetectionConfig::FailurePercentageEjection::JsonPostLoad(
|
1102
|
+
const Json&, const JsonArgs&, ValidationErrors* errors) {
|
1103
|
+
if (enforcement_percentage > 100) {
|
1104
|
+
ValidationErrors::ScopedField field(errors, ".enforcement_percentage");
|
1105
|
+
errors->AddError("value must be <= 100");
|
1106
|
+
}
|
1107
|
+
if (threshold > 100) {
|
1108
|
+
ValidationErrors::ScopedField field(errors, ".threshold");
|
1109
|
+
errors->AddError("value must be <= 100");
|
1110
|
+
}
|
1111
|
+
}
|
1112
|
+
|
1103
1113
|
const JsonLoaderInterface* OutlierDetectionConfig::JsonLoader(const JsonArgs&) {
|
1104
1114
|
static const auto* loader =
|
1105
1115
|
JsonObjectLoader<OutlierDetectionConfig>()
|
@@ -1119,11 +1129,15 @@ const JsonLoaderInterface* OutlierDetectionConfig::JsonLoader(const JsonArgs&) {
|
|
1119
1129
|
}
|
1120
1130
|
|
1121
1131
|
void OutlierDetectionConfig::JsonPostLoad(const Json& json, const JsonArgs&,
|
1122
|
-
ValidationErrors*
|
1132
|
+
ValidationErrors* errors) {
|
1123
1133
|
if (json.object_value().find("maxEjectionTime") ==
|
1124
1134
|
json.object_value().end()) {
|
1125
1135
|
max_ejection_time = std::max(base_ejection_time, Duration::Seconds(300));
|
1126
1136
|
}
|
1137
|
+
if (max_ejection_percent > 100) {
|
1138
|
+
ValidationErrors::ScopedField field(errors, ".max_ejection_percent");
|
1139
|
+
errors->AddError("value must be <= 100");
|
1140
|
+
}
|
1127
1141
|
}
|
1128
1142
|
|
1129
1143
|
//
|
@@ -1131,10 +1145,8 @@ void OutlierDetectionConfig::JsonPostLoad(const Json& json, const JsonArgs&,
|
|
1131
1145
|
//
|
1132
1146
|
|
1133
1147
|
void RegisterOutlierDetectionLbPolicy(CoreConfiguration::Builder* builder) {
|
1134
|
-
|
1135
|
-
|
1136
|
-
absl::make_unique<OutlierDetectionLbFactory>());
|
1137
|
-
}
|
1148
|
+
builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
|
1149
|
+
std::make_unique<OutlierDetectionLbFactory>());
|
1138
1150
|
}
|
1139
1151
|
|
1140
1152
|
} // namespace grpc_core
|
@@ -31,8 +31,6 @@
|
|
31
31
|
|
32
32
|
namespace grpc_core {
|
33
33
|
|
34
|
-
bool XdsOutlierDetectionEnabled();
|
35
|
-
|
36
34
|
struct OutlierDetectionConfig {
|
37
35
|
Duration interval = Duration::Seconds(10);
|
38
36
|
Duration base_ejection_time = Duration::Milliseconds(30000);
|
@@ -54,6 +52,7 @@ struct OutlierDetectionConfig {
|
|
54
52
|
}
|
55
53
|
|
56
54
|
static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
|
55
|
+
void JsonPostLoad(const Json&, const JsonArgs&, ValidationErrors* errors);
|
57
56
|
};
|
58
57
|
struct FailurePercentageEjection {
|
59
58
|
uint32_t threshold = 85;
|
@@ -71,6 +70,7 @@ struct OutlierDetectionConfig {
|
|
71
70
|
}
|
72
71
|
|
73
72
|
static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
|
73
|
+
void JsonPostLoad(const Json&, const JsonArgs&, ValidationErrors* errors);
|
74
74
|
};
|
75
75
|
absl::optional<SuccessRateEjection> success_rate_ejection;
|
76
76
|
absl::optional<FailurePercentageEjection> failure_percentage_ejection;
|