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
@@ -25,13 +25,14 @@
|
|
25
25
|
#include <utility>
|
26
26
|
#include <vector>
|
27
27
|
|
28
|
-
#include "absl/memory/memory.h"
|
29
28
|
#include "absl/status/status.h"
|
30
29
|
#include "absl/status/statusor.h"
|
31
30
|
#include "absl/strings/str_cat.h"
|
32
31
|
#include "absl/strings/str_join.h"
|
33
32
|
#include "absl/strings/string_view.h"
|
33
|
+
#include "absl/types/optional.h"
|
34
34
|
|
35
|
+
#include <grpc/event_engine/event_engine.h>
|
35
36
|
#include <grpc/impl/codegen/connectivity_state.h>
|
36
37
|
#include <grpc/support/log.h>
|
37
38
|
|
@@ -48,10 +49,8 @@
|
|
48
49
|
#include "src/core/lib/gprpp/time.h"
|
49
50
|
#include "src/core/lib/gprpp/validation_errors.h"
|
50
51
|
#include "src/core/lib/gprpp/work_serializer.h"
|
51
|
-
#include "src/core/lib/iomgr/
|
52
|
-
#include "src/core/lib/iomgr/error.h"
|
52
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
53
53
|
#include "src/core/lib/iomgr/pollset_set.h"
|
54
|
-
#include "src/core/lib/iomgr/timer.h"
|
55
54
|
#include "src/core/lib/json/json.h"
|
56
55
|
#include "src/core/lib/json/json_args.h"
|
57
56
|
#include "src/core/lib/json/json_object_loader.h"
|
@@ -62,14 +61,15 @@
|
|
62
61
|
#include "src/core/lib/resolver/server_address.h"
|
63
62
|
#include "src/core/lib/transport/connectivity_state.h"
|
64
63
|
|
65
|
-
#define GRPC_XDS_CLUSTER_MANAGER_CHILD_RETENTION_INTERVAL_MS (15 * 60 * 1000)
|
66
|
-
|
67
64
|
namespace grpc_core {
|
68
65
|
|
69
66
|
TraceFlag grpc_xds_cluster_manager_lb_trace(false, "xds_cluster_manager_lb");
|
70
67
|
|
71
68
|
namespace {
|
72
69
|
|
70
|
+
using ::grpc_event_engine::experimental::EventEngine;
|
71
|
+
|
72
|
+
constexpr Duration kChildRetentionInterval = Duration::Minutes(15);
|
73
73
|
constexpr absl::string_view kXdsClusterManager =
|
74
74
|
"xds_cluster_manager_experimental";
|
75
75
|
|
@@ -195,6 +195,7 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
|
|
195
195
|
std::unique_ptr<SubchannelPicker> picker) override;
|
196
196
|
void RequestReresolution() override;
|
197
197
|
absl::string_view GetAuthority() override;
|
198
|
+
EventEngine* GetEventEngine() override;
|
198
199
|
void AddTraceEvent(TraceSeverity severity,
|
199
200
|
absl::string_view message) override;
|
200
201
|
|
@@ -206,8 +207,7 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
|
|
206
207
|
OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
|
207
208
|
const ChannelArgs& args);
|
208
209
|
|
209
|
-
|
210
|
-
void OnDelayedRemovalTimerLocked(grpc_error_handle error);
|
210
|
+
void OnDelayedRemovalTimerLocked();
|
211
211
|
|
212
212
|
// The owning LB policy.
|
213
213
|
RefCountedPtr<XdsClusterManagerLb> xds_cluster_manager_policy_;
|
@@ -221,9 +221,7 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
|
|
221
221
|
grpc_connectivity_state connectivity_state_ = GRPC_CHANNEL_IDLE;
|
222
222
|
|
223
223
|
// States for delayed removal.
|
224
|
-
|
225
|
-
grpc_closure on_delayed_removal_timer_;
|
226
|
-
bool delayed_removal_timer_callback_pending_ = false;
|
224
|
+
absl::optional<EventEngine::TaskHandle> delayed_removal_timer_handle_;
|
227
225
|
bool shutdown_ = false;
|
228
226
|
};
|
229
227
|
|
@@ -376,7 +374,7 @@ void XdsClusterManagerLb::UpdateStateLocked() {
|
|
376
374
|
break;
|
377
375
|
}
|
378
376
|
default:
|
379
|
-
GPR_UNREACHABLE_CODE(return
|
377
|
+
GPR_UNREACHABLE_CODE(return);
|
380
378
|
}
|
381
379
|
}
|
382
380
|
// Determine aggregated connectivity state.
|
@@ -408,11 +406,11 @@ void XdsClusterManagerLb::UpdateStateLocked() {
|
|
408
406
|
}
|
409
407
|
child_picker = MakeRefCounted<ChildPickerWrapper>(
|
410
408
|
cluster_name,
|
411
|
-
|
409
|
+
std::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker")));
|
412
410
|
}
|
413
411
|
}
|
414
412
|
std::unique_ptr<SubchannelPicker> picker =
|
415
|
-
|
413
|
+
std::make_unique<ClusterPicker>(std::move(cluster_map));
|
416
414
|
absl::Status status;
|
417
415
|
if (connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
418
416
|
status = absl::Status(absl::StatusCode::kUnavailable,
|
@@ -436,8 +434,6 @@ XdsClusterManagerLb::ClusterChild::ClusterChild(
|
|
436
434
|
"[xds_cluster_manager_lb %p] created ClusterChild %p for %s",
|
437
435
|
xds_cluster_manager_policy_.get(), this, name_.c_str());
|
438
436
|
}
|
439
|
-
GRPC_CLOSURE_INIT(&on_delayed_removal_timer_, OnDelayedRemovalTimer, this,
|
440
|
-
grpc_schedule_on_exec_ctx);
|
441
437
|
}
|
442
438
|
|
443
439
|
XdsClusterManagerLb::ClusterChild::~ClusterChild() {
|
@@ -466,8 +462,10 @@ void XdsClusterManagerLb::ClusterChild::Orphan() {
|
|
466
462
|
// Drop our ref to the child's picker, in case it's holding a ref to
|
467
463
|
// the child.
|
468
464
|
picker_wrapper_.reset();
|
469
|
-
if (
|
470
|
-
|
465
|
+
if (delayed_removal_timer_handle_.has_value()) {
|
466
|
+
xds_cluster_manager_policy_->channel_control_helper()
|
467
|
+
->GetEventEngine()
|
468
|
+
->Cancel(*delayed_removal_timer_handle_);
|
471
469
|
}
|
472
470
|
shutdown_ = true;
|
473
471
|
Unref();
|
@@ -481,7 +479,7 @@ XdsClusterManagerLb::ClusterChild::CreateChildPolicyLocked(
|
|
481
479
|
xds_cluster_manager_policy_->work_serializer();
|
482
480
|
lb_policy_args.args = args;
|
483
481
|
lb_policy_args.channel_control_helper =
|
484
|
-
|
482
|
+
std::make_unique<Helper>(this->Ref(DEBUG_LOCATION, "Helper"));
|
485
483
|
OrphanablePtr<LoadBalancingPolicy> lb_policy =
|
486
484
|
MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
|
487
485
|
&grpc_xds_cluster_manager_lb_trace);
|
@@ -509,9 +507,11 @@ absl::Status XdsClusterManagerLb::ClusterChild::UpdateLocked(
|
|
509
507
|
if (xds_cluster_manager_policy_->shutting_down_) return absl::OkStatus();
|
510
508
|
// Update child weight.
|
511
509
|
// Reactivate if needed.
|
512
|
-
if (
|
513
|
-
|
514
|
-
|
510
|
+
if (delayed_removal_timer_handle_.has_value() &&
|
511
|
+
xds_cluster_manager_policy_->channel_control_helper()
|
512
|
+
->GetEventEngine()
|
513
|
+
->Cancel(*delayed_removal_timer_handle_)) {
|
514
|
+
delayed_removal_timer_handle_.reset();
|
515
515
|
}
|
516
516
|
// Create child policy if needed.
|
517
517
|
if (child_policy_ == nullptr) {
|
@@ -544,35 +544,30 @@ void XdsClusterManagerLb::ClusterChild::ResetBackoffLocked() {
|
|
544
544
|
|
545
545
|
void XdsClusterManagerLb::ClusterChild::DeactivateLocked() {
|
546
546
|
// If already deactivated, don't do that again.
|
547
|
-
if (
|
548
|
-
// Set the child weight to 0 so that future picker won't contain this child.
|
547
|
+
if (delayed_removal_timer_handle_.has_value()) return;
|
549
548
|
// Start a timer to delete the child.
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
DEBUG_LOCATION);
|
549
|
+
delayed_removal_timer_handle_ =
|
550
|
+
xds_cluster_manager_policy_->channel_control_helper()
|
551
|
+
->GetEventEngine()
|
552
|
+
->RunAfter(
|
553
|
+
kChildRetentionInterval,
|
554
|
+
[self = Ref(DEBUG_LOCATION, "ClusterChild+timer")]() mutable {
|
555
|
+
ApplicationCallbackExecCtx application_exec_ctx;
|
556
|
+
ExecCtx exec_ctx;
|
557
|
+
auto* self_ptr = self.get(); // Avoid use-after-move problem.
|
558
|
+
self_ptr->xds_cluster_manager_policy_->work_serializer()->Run(
|
559
|
+
[self = std::move(self)]() {
|
560
|
+
self->OnDelayedRemovalTimerLocked();
|
561
|
+
},
|
562
|
+
DEBUG_LOCATION);
|
563
|
+
});
|
566
564
|
}
|
567
565
|
|
568
|
-
void XdsClusterManagerLb::ClusterChild::OnDelayedRemovalTimerLocked(
|
569
|
-
|
570
|
-
|
571
|
-
if (GRPC_ERROR_IS_NONE(error) && !shutdown_) {
|
566
|
+
void XdsClusterManagerLb::ClusterChild::OnDelayedRemovalTimerLocked() {
|
567
|
+
delayed_removal_timer_handle_.reset();
|
568
|
+
if (!shutdown_) {
|
572
569
|
xds_cluster_manager_policy_->children_.erase(name_);
|
573
570
|
}
|
574
|
-
Unref(DEBUG_LOCATION, "ClusterChild+timer");
|
575
|
-
GRPC_ERROR_UNREF(error);
|
576
571
|
}
|
577
572
|
|
578
573
|
//
|
@@ -636,6 +631,12 @@ absl::string_view XdsClusterManagerLb::ClusterChild::Helper::GetAuthority() {
|
|
636
631
|
->GetAuthority();
|
637
632
|
}
|
638
633
|
|
634
|
+
EventEngine* XdsClusterManagerLb::ClusterChild::Helper::GetEventEngine() {
|
635
|
+
return xds_cluster_manager_child_->xds_cluster_manager_policy_
|
636
|
+
->channel_control_helper()
|
637
|
+
->GetEventEngine();
|
638
|
+
}
|
639
|
+
|
639
640
|
void XdsClusterManagerLb::ClusterChild::Helper::AddTraceEvent(
|
640
641
|
TraceSeverity severity, absl::string_view message) {
|
641
642
|
if (xds_cluster_manager_child_->xds_cluster_manager_policy_->shutting_down_) {
|
@@ -725,7 +726,7 @@ class XdsClusterManagerLbFactory : public LoadBalancingPolicyFactory {
|
|
725
726
|
|
726
727
|
void RegisterXdsClusterManagerLbPolicy(CoreConfiguration::Builder* builder) {
|
727
728
|
builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
|
728
|
-
|
729
|
+
std::make_unique<XdsClusterManagerLbFactory>());
|
729
730
|
}
|
730
731
|
|
731
732
|
} // namespace grpc_core
|
@@ -27,7 +27,6 @@
|
|
27
27
|
#include <utility>
|
28
28
|
#include <vector>
|
29
29
|
|
30
|
-
#include "absl/memory/memory.h"
|
31
30
|
#include "absl/status/status.h"
|
32
31
|
#include "absl/status/statusor.h"
|
33
32
|
#include "absl/strings/str_cat.h"
|
@@ -35,15 +34,14 @@
|
|
35
34
|
#include "absl/strings/string_view.h"
|
36
35
|
#include "absl/types/optional.h"
|
37
36
|
|
37
|
+
#include <grpc/event_engine/event_engine.h>
|
38
38
|
#include <grpc/impl/codegen/connectivity_state.h>
|
39
39
|
#include <grpc/impl/codegen/grpc_types.h>
|
40
40
|
#include <grpc/support/log.h>
|
41
41
|
|
42
42
|
#include "src/core/ext/filters/client_channel/lb_policy/address_filtering.h"
|
43
43
|
#include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
|
44
|
-
#include "src/core/ext/filters/client_channel/lb_policy/
|
45
|
-
#include "src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h"
|
46
|
-
#include "src/core/ext/filters/client_channel/lb_policy/xds/xds.h"
|
44
|
+
#include "src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h"
|
47
45
|
#include "src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h"
|
48
46
|
#include "src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h"
|
49
47
|
#include "src/core/ext/xds/xds_bootstrap.h"
|
@@ -52,7 +50,6 @@
|
|
52
50
|
#include "src/core/ext/xds/xds_client_grpc.h"
|
53
51
|
#include "src/core/ext/xds/xds_client_stats.h"
|
54
52
|
#include "src/core/ext/xds/xds_endpoint.h"
|
55
|
-
#include "src/core/ext/xds/xds_resource_type_impl.h"
|
56
53
|
#include "src/core/lib/channel/channel_args.h"
|
57
54
|
#include "src/core/lib/config/core_configuration.h"
|
58
55
|
#include "src/core/lib/debug/trace.h"
|
@@ -80,8 +77,6 @@ namespace grpc_core {
|
|
80
77
|
|
81
78
|
TraceFlag grpc_lb_xds_cluster_resolver_trace(false, "xds_cluster_resolver_lb");
|
82
79
|
|
83
|
-
const char* kXdsLocalityNameAttributeKey = "xds_locality_name";
|
84
|
-
|
85
80
|
namespace {
|
86
81
|
|
87
82
|
constexpr absl::string_view kXdsClusterResolver =
|
@@ -149,7 +144,7 @@ class XdsClusterResolverLbConfig : public LoadBalancingPolicy::Config {
|
|
149
144
|
|
150
145
|
private:
|
151
146
|
std::vector<DiscoveryMechanism> discovery_mechanisms_;
|
152
|
-
Json xds_lb_policy_
|
147
|
+
Json xds_lb_policy_;
|
153
148
|
};
|
154
149
|
|
155
150
|
// Xds Cluster Resolver LB policy.
|
@@ -383,6 +378,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
|
|
383
378
|
// client, which is a watch-based API.
|
384
379
|
void RequestReresolution() override {}
|
385
380
|
absl::string_view GetAuthority() override;
|
381
|
+
grpc_event_engine::experimental::EventEngine* GetEventEngine() override;
|
386
382
|
void AddTraceEvent(TraceSeverity severity,
|
387
383
|
absl::string_view message) override;
|
388
384
|
|
@@ -459,6 +455,12 @@ absl::string_view XdsClusterResolverLb::Helper::GetAuthority() {
|
|
459
455
|
return xds_cluster_resolver_policy_->channel_control_helper()->GetAuthority();
|
460
456
|
}
|
461
457
|
|
458
|
+
grpc_event_engine::experimental::EventEngine*
|
459
|
+
XdsClusterResolverLb::Helper::GetEventEngine() {
|
460
|
+
return xds_cluster_resolver_policy_->channel_control_helper()
|
461
|
+
->GetEventEngine();
|
462
|
+
}
|
463
|
+
|
462
464
|
void XdsClusterResolverLb::Helper::AddTraceEvent(TraceSeverity severity,
|
463
465
|
absl::string_view message) {
|
464
466
|
if (xds_cluster_resolver_policy_->shutting_down_) return;
|
@@ -515,7 +517,7 @@ void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::Start() {
|
|
515
517
|
resolver_ = CoreConfiguration::Get().resolver_registry().CreateResolver(
|
516
518
|
target.c_str(), args, parent()->interested_parties(),
|
517
519
|
parent()->work_serializer(),
|
518
|
-
|
520
|
+
std::make_unique<ResolverResultHandler>(
|
519
521
|
Ref(DEBUG_LOCATION, "LogicalDNSDiscoveryMechanism")));
|
520
522
|
if (resolver_ == nullptr) {
|
521
523
|
parent()->OnResourceDoesNotExist(
|
@@ -840,12 +842,12 @@ ServerAddressList XdsClusterResolverLb::CreateChildPolicyAddressesLocked() {
|
|
840
842
|
kHierarchicalPathAttributeKey,
|
841
843
|
MakeHierarchicalPathAttribute(hierarchical_path))
|
842
844
|
.WithAttribute(kXdsLocalityNameAttributeKey,
|
843
|
-
|
844
|
-
locality_name->Ref()))
|
845
|
+
std::make_unique<XdsLocalityAttribute>(
|
846
|
+
locality_name->Ref(), locality.lb_weight))
|
845
847
|
.WithAttribute(
|
846
848
|
ServerAddressWeightAttribute::
|
847
849
|
kServerAddressWeightAttributeKey,
|
848
|
-
|
850
|
+
std::make_unique<ServerAddressWeightAttribute>(weight)));
|
849
851
|
}
|
850
852
|
}
|
851
853
|
}
|
@@ -872,60 +874,13 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
|
|
872
874
|
for (size_t priority = 0;
|
873
875
|
priority < discovery_entry.latest_update->priorities.size();
|
874
876
|
++priority) {
|
875
|
-
const auto& priority_entry =
|
876
|
-
discovery_entry.latest_update->priorities[priority];
|
877
877
|
Json child_policy;
|
878
878
|
if (!discovery_entry.discovery_mechanism->override_child_policy()
|
879
879
|
.empty()) {
|
880
880
|
child_policy =
|
881
881
|
discovery_entry.discovery_mechanism->override_child_policy();
|
882
882
|
} else {
|
883
|
-
|
884
|
-
if (xds_lb_policy.find("ROUND_ROBIN") != xds_lb_policy.end()) {
|
885
|
-
const auto& localities = priority_entry.localities;
|
886
|
-
Json::Object weighted_targets;
|
887
|
-
for (const auto& p : localities) {
|
888
|
-
XdsLocalityName* locality_name = p.first;
|
889
|
-
const auto& locality = p.second;
|
890
|
-
// Add weighted target entry.
|
891
|
-
weighted_targets[locality_name->AsHumanReadableString()] =
|
892
|
-
Json::Object{
|
893
|
-
{"weight", locality.lb_weight},
|
894
|
-
{"childPolicy",
|
895
|
-
Json::Array{
|
896
|
-
Json::Object{
|
897
|
-
{"round_robin", Json::Object()},
|
898
|
-
},
|
899
|
-
}},
|
900
|
-
};
|
901
|
-
}
|
902
|
-
// Construct locality-picking policy.
|
903
|
-
// Start with field from our config and add the "targets" field.
|
904
|
-
child_policy = Json::Array{
|
905
|
-
Json::Object{
|
906
|
-
{"weighted_target_experimental",
|
907
|
-
Json::Object{
|
908
|
-
{"targets", Json::Object()},
|
909
|
-
}},
|
910
|
-
},
|
911
|
-
};
|
912
|
-
Json::Object& config =
|
913
|
-
*(*child_policy.mutable_array())[0].mutable_object();
|
914
|
-
auto it = config.begin();
|
915
|
-
GPR_ASSERT(it != config.end());
|
916
|
-
(*it->second.mutable_object())["targets"] =
|
917
|
-
std::move(weighted_targets);
|
918
|
-
} else {
|
919
|
-
auto it = xds_lb_policy.find("RING_HASH");
|
920
|
-
GPR_ASSERT(it != xds_lb_policy.end());
|
921
|
-
Json::Object ring_hash_experimental_policy =
|
922
|
-
it->second.object_value();
|
923
|
-
child_policy = Json::Array{
|
924
|
-
Json::Object{
|
925
|
-
{"ring_hash_experimental", ring_hash_experimental_policy},
|
926
|
-
},
|
927
|
-
};
|
928
|
-
}
|
883
|
+
child_policy = config_->xds_lb_policy();
|
929
884
|
}
|
930
885
|
// Wrap it in the drop policy.
|
931
886
|
Json::Array drop_categories;
|
@@ -952,27 +907,18 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
|
|
952
907
|
xds_cluster_impl_config["lrsLoadReportingServer"] =
|
953
908
|
discovery_config.lrs_load_reporting_server->ToJson();
|
954
909
|
}
|
955
|
-
Json
|
956
|
-
if (
|
957
|
-
|
958
|
-
|
959
|
-
outlier_detection_config =
|
960
|
-
discovery_entry.config().outlier_detection_lb_config.value();
|
961
|
-
}
|
962
|
-
outlier_detection_config["childPolicy"] = Json::Array{Json::Object{
|
963
|
-
{"xds_cluster_impl_experimental",
|
964
|
-
std::move(xds_cluster_impl_config)},
|
965
|
-
}};
|
966
|
-
locality_picking_policy = Json::Array{Json::Object{
|
967
|
-
{"outlier_detection_experimental",
|
968
|
-
std::move(outlier_detection_config)},
|
969
|
-
}};
|
970
|
-
} else {
|
971
|
-
locality_picking_policy = Json::Array{Json::Object{
|
972
|
-
{"xds_cluster_impl_experimental",
|
973
|
-
std::move(xds_cluster_impl_config)},
|
974
|
-
}};
|
910
|
+
Json::Object outlier_detection_config;
|
911
|
+
if (discovery_entry.config().outlier_detection_lb_config.has_value()) {
|
912
|
+
outlier_detection_config =
|
913
|
+
discovery_entry.config().outlier_detection_lb_config.value();
|
975
914
|
}
|
915
|
+
outlier_detection_config["childPolicy"] = Json::Array{Json::Object{
|
916
|
+
{"xds_cluster_impl_experimental", std::move(xds_cluster_impl_config)},
|
917
|
+
}};
|
918
|
+
Json locality_picking_policy = Json::Array{Json::Object{
|
919
|
+
{"outlier_detection_experimental",
|
920
|
+
std::move(outlier_detection_config)},
|
921
|
+
}};
|
976
922
|
// Add priority entry, with the appropriate child name.
|
977
923
|
std::string child_name = discovery_entry.GetChildPolicyName(priority);
|
978
924
|
priority_priorities.emplace_back(child_name);
|
@@ -1015,7 +961,7 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
|
|
1015
961
|
"config");
|
1016
962
|
channel_control_helper()->UpdateState(
|
1017
963
|
GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
1018
|
-
|
964
|
+
std::make_unique<TransientFailurePicker>(status));
|
1019
965
|
return nullptr;
|
1020
966
|
}
|
1021
967
|
return std::move(*config);
|
@@ -1052,7 +998,7 @@ XdsClusterResolverLb::CreateChildPolicyLocked(const ChannelArgs& args) {
|
|
1052
998
|
lb_policy_args.work_serializer = work_serializer();
|
1053
999
|
lb_policy_args.args = args;
|
1054
1000
|
lb_policy_args.channel_control_helper =
|
1055
|
-
|
1001
|
+
std::make_unique<Helper>(Ref(DEBUG_LOCATION, "Helper"));
|
1056
1002
|
OrphanablePtr<LoadBalancingPolicy> lb_policy =
|
1057
1003
|
CoreConfiguration::Get().lb_policy_registry().CreateLoadBalancingPolicy(
|
1058
1004
|
"priority_experimental", std::move(lb_policy_args));
|
@@ -1090,8 +1036,7 @@ XdsClusterResolverLbConfig::DiscoveryMechanism::JsonLoader(const JsonArgs&) {
|
|
1090
1036
|
.OptionalField("max_concurrent_requests",
|
1091
1037
|
&DiscoveryMechanism::max_concurrent_requests)
|
1092
1038
|
.OptionalField("outlierDetection",
|
1093
|
-
&DiscoveryMechanism::outlier_detection_lb_config
|
1094
|
-
"outlier_detection")
|
1039
|
+
&DiscoveryMechanism::outlier_detection_lb_config)
|
1095
1040
|
.Finish();
|
1096
1041
|
return loader;
|
1097
1042
|
}
|
@@ -1140,8 +1085,7 @@ const JsonLoaderInterface* XdsClusterResolverLbConfig::JsonLoader(
|
|
1140
1085
|
return loader;
|
1141
1086
|
}
|
1142
1087
|
|
1143
|
-
void XdsClusterResolverLbConfig::JsonPostLoad(const Json& json,
|
1144
|
-
const JsonArgs& args,
|
1088
|
+
void XdsClusterResolverLbConfig::JsonPostLoad(const Json& json, const JsonArgs&,
|
1145
1089
|
ValidationErrors* errors) {
|
1146
1090
|
// Validate discoveryMechanisms.
|
1147
1091
|
{
|
@@ -1154,37 +1098,14 @@ void XdsClusterResolverLbConfig::JsonPostLoad(const Json& json,
|
|
1154
1098
|
{
|
1155
1099
|
ValidationErrors::ScopedField field(errors, ".xdsLbPolicy");
|
1156
1100
|
auto it = json.object_value().find("xdsLbPolicy");
|
1157
|
-
if (it
|
1158
|
-
|
1159
|
-
|
1160
|
-
|
1161
|
-
|
1162
|
-
|
1163
|
-
|
1164
|
-
|
1165
|
-
if (array[i].type() != Json::Type::OBJECT) {
|
1166
|
-
errors->AddError("is not an object");
|
1167
|
-
continue;
|
1168
|
-
}
|
1169
|
-
const Json::Object& policy = array[i].object_value();
|
1170
|
-
auto policy_it = policy.find("ROUND_ROBIN");
|
1171
|
-
if (policy_it != policy.end()) {
|
1172
|
-
ValidationErrors::ScopedField field(errors, "[\"ROUND_ROBIN\"]");
|
1173
|
-
if (policy_it->second.type() != Json::Type::OBJECT) {
|
1174
|
-
errors->AddError("is not an object");
|
1175
|
-
}
|
1176
|
-
break;
|
1177
|
-
}
|
1178
|
-
{
|
1179
|
-
ValidationErrors::ScopedField field(errors, "[\"RING_HASH\"]");
|
1180
|
-
policy_it = policy.find("RING_HASH");
|
1181
|
-
if (policy_it != policy.end()) {
|
1182
|
-
LoadFromJson<RingHashConfig>(policy_it->second, args, errors);
|
1183
|
-
xds_lb_policy_ = array[i];
|
1184
|
-
}
|
1185
|
-
}
|
1186
|
-
}
|
1187
|
-
}
|
1101
|
+
if (it == json.object_value().end()) {
|
1102
|
+
errors->AddError("field not present");
|
1103
|
+
} else {
|
1104
|
+
auto lb_config = CoreConfiguration::Get()
|
1105
|
+
.lb_policy_registry()
|
1106
|
+
.ParseLoadBalancingConfig(it->second);
|
1107
|
+
if (!lb_config.ok()) errors->AddError(lb_config.status().message());
|
1108
|
+
xds_lb_policy_ = it->second;
|
1188
1109
|
}
|
1189
1110
|
}
|
1190
1111
|
}
|
@@ -1217,15 +1138,8 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
|
|
1217
1138
|
"requires configuration. "
|
1218
1139
|
"Please use loadBalancingConfig field of service config instead.");
|
1219
1140
|
}
|
1220
|
-
class XdsJsonArgs : public JsonArgs {
|
1221
|
-
public:
|
1222
|
-
bool IsEnabled(absl::string_view key) const override {
|
1223
|
-
if (key == "outlier_detection") return XdsOutlierDetectionEnabled();
|
1224
|
-
return true;
|
1225
|
-
}
|
1226
|
-
};
|
1227
1141
|
return LoadRefCountedFromJson<XdsClusterResolverLbConfig>(
|
1228
|
-
json,
|
1142
|
+
json, JsonArgs(),
|
1229
1143
|
"errors validating xds_cluster_resolver LB policy config");
|
1230
1144
|
}
|
1231
1145
|
|
@@ -1294,7 +1208,7 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
|
|
1294
1208
|
|
1295
1209
|
void RegisterXdsClusterResolverLbPolicy(CoreConfiguration::Builder* builder) {
|
1296
1210
|
builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
|
1297
|
-
|
1211
|
+
std::make_unique<XdsClusterResolverLbFactory>());
|
1298
1212
|
}
|
1299
1213
|
|
1300
1214
|
} // namespace grpc_core
|