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
@@ -22,12 +22,12 @@
|
|
22
22
|
|
23
23
|
#include <utility>
|
24
24
|
|
25
|
-
#include "absl/memory/memory.h"
|
26
25
|
#include "absl/status/status.h"
|
27
26
|
#include "absl/status/statusor.h"
|
28
27
|
#include "absl/strings/str_cat.h"
|
29
28
|
#include "absl/strings/str_join.h"
|
30
29
|
#include "absl/strings/strip.h"
|
30
|
+
#include "absl/types/variant.h"
|
31
31
|
#include "envoy/config/cluster/v3/circuit_breaker.upb.h"
|
32
32
|
#include "envoy/config/cluster/v3/cluster.upb.h"
|
33
33
|
#include "envoy/config/cluster/v3/cluster.upbdefs.h"
|
@@ -48,14 +48,32 @@
|
|
48
48
|
#include <grpc/support/log.h>
|
49
49
|
|
50
50
|
#include "src/core/ext/xds/upb_utils.h"
|
51
|
+
#include "src/core/ext/xds/xds_client.h"
|
51
52
|
#include "src/core/ext/xds/xds_common_types.h"
|
53
|
+
#include "src/core/ext/xds/xds_lb_policy_registry.h"
|
52
54
|
#include "src/core/ext/xds/xds_resource_type.h"
|
55
|
+
#include "src/core/lib/config/core_configuration.h"
|
53
56
|
#include "src/core/lib/debug/trace.h"
|
57
|
+
#include "src/core/lib/gpr/string.h"
|
58
|
+
#include "src/core/lib/gprpp/env.h"
|
54
59
|
#include "src/core/lib/gprpp/host_port.h"
|
60
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
55
61
|
#include "src/core/lib/gprpp/time.h"
|
62
|
+
#include "src/core/lib/gprpp/validation_errors.h"
|
63
|
+
#include "src/core/lib/load_balancing/lb_policy_registry.h"
|
64
|
+
#include "src/core/lib/matchers/matchers.h"
|
56
65
|
|
57
66
|
namespace grpc_core {
|
58
67
|
|
68
|
+
// TODO(roth): Remove once custom LB policy support is no longer experimental.
|
69
|
+
bool XdsCustomLbPolicyEnabled() {
|
70
|
+
auto value = GetEnv("GRPC_EXPERIMENTAL_XDS_CUSTOM_LB_CONFIG");
|
71
|
+
if (!value.has_value()) return false;
|
72
|
+
bool parsed_value;
|
73
|
+
bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value);
|
74
|
+
return parse_succeeded && parsed_value;
|
75
|
+
}
|
76
|
+
|
59
77
|
//
|
60
78
|
// XdsClusterResource
|
61
79
|
//
|
@@ -87,11 +105,8 @@ std::string XdsClusterResource::ToString() const {
|
|
87
105
|
contents.push_back(absl::StrCat("lrs_load_reporting_server_name=",
|
88
106
|
lrs_load_reporting_server->server_uri()));
|
89
107
|
}
|
90
|
-
contents.push_back(
|
91
|
-
|
92
|
-
contents.push_back(absl::StrCat("min_ring_size=", min_ring_size));
|
93
|
-
contents.push_back(absl::StrCat("max_ring_size=", max_ring_size));
|
94
|
-
}
|
108
|
+
contents.push_back(
|
109
|
+
absl::StrCat("lb_policy_config=", Json{lb_policy_config}.Dump()));
|
95
110
|
contents.push_back(
|
96
111
|
absl::StrCat("max_concurrent_requests=", max_concurrent_requests));
|
97
112
|
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
@@ -103,260 +118,338 @@ std::string XdsClusterResource::ToString() const {
|
|
103
118
|
|
104
119
|
namespace {
|
105
120
|
|
106
|
-
|
121
|
+
CommonTlsContext UpstreamTlsContextParse(
|
107
122
|
const XdsResourceType::DecodeContext& context,
|
108
|
-
const envoy_config_core_v3_TransportSocket* transport_socket
|
109
|
-
|
123
|
+
const envoy_config_core_v3_TransportSocket* transport_socket,
|
124
|
+
ValidationErrors* errors) {
|
125
|
+
ValidationErrors::ScopedField field(errors, ".typed_config");
|
126
|
+
const auto* typed_config =
|
110
127
|
envoy_config_core_v3_TransportSocket_typed_config(transport_socket);
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
absl::string_view type_url = absl::StripPrefix(
|
115
|
-
UpbStringToAbsl(google_protobuf_Any_type_url(typed_config)),
|
116
|
-
"type.googleapis.com/");
|
117
|
-
if (type_url !=
|
128
|
+
auto extension = ExtractXdsExtension(context, typed_config, errors);
|
129
|
+
if (!extension.has_value()) return {};
|
130
|
+
if (extension->type !=
|
118
131
|
"envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext") {
|
119
|
-
|
120
|
-
|
132
|
+
ValidationErrors::ScopedField field(errors, ".type_url");
|
133
|
+
errors->AddError("unsupported transport socket type");
|
134
|
+
return {};
|
121
135
|
}
|
122
|
-
|
123
|
-
|
124
|
-
|
136
|
+
absl::string_view* serialized_upstream_tls_context =
|
137
|
+
absl::get_if<absl::string_view>(&extension->value);
|
138
|
+
if (serialized_upstream_tls_context == nullptr) {
|
139
|
+
errors->AddError("can't decode UpstreamTlsContext");
|
140
|
+
return {};
|
141
|
+
}
|
142
|
+
const auto* upstream_tls_context =
|
125
143
|
envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_parse(
|
126
|
-
|
127
|
-
context.arena);
|
144
|
+
serialized_upstream_tls_context->data(),
|
145
|
+
serialized_upstream_tls_context->size(), context.arena);
|
128
146
|
if (upstream_tls_context == nullptr) {
|
129
|
-
|
147
|
+
errors->AddError("can't decode UpstreamTlsContext");
|
148
|
+
return {};
|
130
149
|
}
|
131
|
-
|
150
|
+
ValidationErrors::ScopedField field3(errors, ".common_tls_context");
|
151
|
+
const auto* common_tls_context_proto =
|
132
152
|
envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_common_tls_context(
|
133
153
|
upstream_tls_context);
|
134
154
|
CommonTlsContext common_tls_context;
|
135
155
|
if (common_tls_context_proto != nullptr) {
|
136
|
-
|
137
|
-
CommonTlsContext::Parse(context, common_tls_context_proto);
|
138
|
-
if (!common_context.ok()) {
|
139
|
-
return absl::InvalidArgumentError(
|
140
|
-
absl::StrCat("Error parsing UpstreamTlsContext: ",
|
141
|
-
common_context.status().message()));
|
142
|
-
}
|
143
|
-
common_tls_context = std::move(*common_context);
|
156
|
+
common_tls_context =
|
157
|
+
CommonTlsContext::Parse(context, common_tls_context_proto, errors);
|
144
158
|
}
|
145
159
|
if (common_tls_context.certificate_validation_context
|
146
160
|
.ca_certificate_provider_instance.instance_name.empty()) {
|
147
|
-
|
148
|
-
"UpstreamTlsContext: TLS configuration provided but no "
|
149
|
-
"ca_certificate_provider_instance found.");
|
161
|
+
errors->AddError("no CA certificate provider instance configured");
|
150
162
|
}
|
151
163
|
return common_tls_context;
|
152
164
|
}
|
153
165
|
|
154
|
-
|
155
|
-
|
166
|
+
void EdsConfigParse(const envoy_config_cluster_v3_Cluster* cluster,
|
167
|
+
XdsClusterResource* cds_update, ValidationErrors* errors) {
|
168
|
+
ValidationErrors::ScopedField field(errors, ".eds_cluster_config");
|
169
|
+
const envoy_config_cluster_v3_Cluster_EdsClusterConfig* eds_cluster_config =
|
170
|
+
envoy_config_cluster_v3_Cluster_eds_cluster_config(cluster);
|
171
|
+
if (eds_cluster_config == nullptr) {
|
172
|
+
errors->AddError("field not present");
|
173
|
+
} else {
|
174
|
+
ValidationErrors::ScopedField field(errors, ".eds_config");
|
175
|
+
const envoy_config_core_v3_ConfigSource* eds_config =
|
176
|
+
envoy_config_cluster_v3_Cluster_EdsClusterConfig_eds_config(
|
177
|
+
eds_cluster_config);
|
178
|
+
if (eds_config == nullptr) {
|
179
|
+
errors->AddError("field not present");
|
180
|
+
} else {
|
181
|
+
if (!envoy_config_core_v3_ConfigSource_has_ads(eds_config) &&
|
182
|
+
!envoy_config_core_v3_ConfigSource_has_self(eds_config)) {
|
183
|
+
errors->AddError("ConfigSource is not ads or self");
|
184
|
+
}
|
185
|
+
// Record EDS service_name (if any).
|
186
|
+
upb_StringView service_name =
|
187
|
+
envoy_config_cluster_v3_Cluster_EdsClusterConfig_service_name(
|
188
|
+
eds_cluster_config);
|
189
|
+
if (service_name.size != 0) {
|
190
|
+
cds_update->eds_service_name = UpbStringToStdString(service_name);
|
191
|
+
}
|
192
|
+
}
|
193
|
+
}
|
194
|
+
}
|
195
|
+
|
196
|
+
void LogicalDnsParse(const envoy_config_cluster_v3_Cluster* cluster,
|
197
|
+
XdsClusterResource* cds_update, ValidationErrors* errors) {
|
198
|
+
ValidationErrors::ScopedField field(errors, ".load_assignment");
|
156
199
|
const auto* load_assignment =
|
157
200
|
envoy_config_cluster_v3_Cluster_load_assignment(cluster);
|
158
201
|
if (load_assignment == nullptr) {
|
159
|
-
|
160
|
-
|
202
|
+
errors->AddError("field not present for LOGICAL_DNS cluster");
|
203
|
+
return;
|
161
204
|
}
|
205
|
+
ValidationErrors::ScopedField field2(errors, ".endpoints");
|
162
206
|
size_t num_localities;
|
163
207
|
const auto* const* localities =
|
164
208
|
envoy_config_endpoint_v3_ClusterLoadAssignment_endpoints(load_assignment,
|
165
209
|
&num_localities);
|
166
210
|
if (num_localities != 1) {
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
211
|
+
errors->AddError(absl::StrCat(
|
212
|
+
"must contain exactly one locality for LOGICAL_DNS cluster, found ",
|
213
|
+
num_localities));
|
214
|
+
return;
|
171
215
|
}
|
216
|
+
ValidationErrors::ScopedField field3(errors, "[0].lb_endpoints");
|
172
217
|
size_t num_endpoints;
|
173
218
|
const auto* const* endpoints =
|
174
219
|
envoy_config_endpoint_v3_LocalityLbEndpoints_lb_endpoints(localities[0],
|
175
220
|
&num_endpoints);
|
176
221
|
if (num_endpoints != 1) {
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
222
|
+
errors->AddError(absl::StrCat(
|
223
|
+
"must contain exactly one endpoint for LOGICAL_DNS cluster, found ",
|
224
|
+
num_endpoints));
|
225
|
+
return;
|
181
226
|
}
|
227
|
+
ValidationErrors::ScopedField field4(errors, "[0].endpoint");
|
182
228
|
const auto* endpoint =
|
183
229
|
envoy_config_endpoint_v3_LbEndpoint_endpoint(endpoints[0]);
|
184
230
|
if (endpoint == nullptr) {
|
185
|
-
|
231
|
+
errors->AddError("field not present");
|
232
|
+
return;
|
186
233
|
}
|
234
|
+
ValidationErrors::ScopedField field5(errors, ".address");
|
187
235
|
const auto* address = envoy_config_endpoint_v3_Endpoint_address(endpoint);
|
188
236
|
if (address == nullptr) {
|
189
|
-
|
237
|
+
errors->AddError("field not present");
|
238
|
+
return;
|
190
239
|
}
|
240
|
+
ValidationErrors::ScopedField field6(errors, ".socket_address");
|
191
241
|
const auto* socket_address =
|
192
242
|
envoy_config_core_v3_Address_socket_address(address);
|
193
243
|
if (socket_address == nullptr) {
|
194
|
-
|
244
|
+
errors->AddError("field not present");
|
245
|
+
return;
|
195
246
|
}
|
196
247
|
if (envoy_config_core_v3_SocketAddress_resolver_name(socket_address).size !=
|
197
248
|
0) {
|
198
|
-
|
249
|
+
ValidationErrors::ScopedField field(errors, ".resolver_name");
|
250
|
+
errors->AddError(
|
199
251
|
"LOGICAL_DNS clusters must NOT have a custom resolver name set");
|
200
252
|
}
|
201
253
|
absl::string_view address_str = UpbStringToAbsl(
|
202
254
|
envoy_config_core_v3_SocketAddress_address(socket_address));
|
203
255
|
if (address_str.empty()) {
|
204
|
-
|
256
|
+
ValidationErrors::ScopedField field(errors, ".address");
|
257
|
+
errors->AddError("field not present");
|
205
258
|
}
|
206
259
|
if (!envoy_config_core_v3_SocketAddress_has_port_value(socket_address)) {
|
207
|
-
|
260
|
+
ValidationErrors::ScopedField field(errors, ".port_value");
|
261
|
+
errors->AddError("field not present");
|
208
262
|
}
|
209
263
|
cds_update->dns_hostname = JoinHostPort(
|
210
264
|
address_str,
|
211
265
|
envoy_config_core_v3_SocketAddress_port_value(socket_address));
|
212
|
-
return absl::OkStatus();
|
213
266
|
}
|
214
267
|
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
errors
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
errors.
|
260
|
-
} else {
|
261
|
-
absl::string_view type_url = absl::StripPrefix(
|
262
|
-
UpbStringToAbsl(google_protobuf_Any_type_url(typed_config)),
|
263
|
-
"type.googleapis.com/");
|
264
|
-
if (type_url !=
|
265
|
-
"envoy.extensions.clusters.aggregate.v3.ClusterConfig") {
|
266
|
-
errors.push_back(
|
267
|
-
absl::StrCat("unknown cluster_type extension: ", type_url));
|
268
|
-
} else {
|
269
|
-
cds_update.cluster_type = XdsClusterResource::ClusterType::AGGREGATE;
|
270
|
-
// Retrieve aggregate clusters.
|
271
|
-
const upb_StringView aggregate_cluster_config_upb_stringview =
|
272
|
-
google_protobuf_Any_value(typed_config);
|
273
|
-
const auto* aggregate_cluster_config =
|
274
|
-
envoy_extensions_clusters_aggregate_v3_ClusterConfig_parse(
|
275
|
-
aggregate_cluster_config_upb_stringview.data,
|
276
|
-
aggregate_cluster_config_upb_stringview.size, context.arena);
|
277
|
-
if (aggregate_cluster_config == nullptr) {
|
278
|
-
errors.emplace_back("Can't parse aggregate cluster.");
|
279
|
-
} else {
|
280
|
-
size_t size;
|
281
|
-
const upb_StringView* clusters =
|
282
|
-
envoy_extensions_clusters_aggregate_v3_ClusterConfig_clusters(
|
283
|
-
aggregate_cluster_config, &size);
|
284
|
-
for (size_t i = 0; i < size; ++i) {
|
285
|
-
const upb_StringView cluster = clusters[i];
|
286
|
-
cds_update.prioritized_cluster_names.emplace_back(
|
287
|
-
UpbStringToStdString(cluster));
|
288
|
-
}
|
289
|
-
}
|
290
|
-
}
|
268
|
+
void AggregateClusterParse(const XdsResourceType::DecodeContext& context,
|
269
|
+
absl::string_view serialized_config,
|
270
|
+
XdsClusterResource* cds_update,
|
271
|
+
ValidationErrors* errors) {
|
272
|
+
const auto* aggregate_cluster_config =
|
273
|
+
envoy_extensions_clusters_aggregate_v3_ClusterConfig_parse(
|
274
|
+
serialized_config.data(), serialized_config.size(), context.arena);
|
275
|
+
if (aggregate_cluster_config == nullptr) {
|
276
|
+
errors->AddError("can't parse aggregate cluster config");
|
277
|
+
return;
|
278
|
+
}
|
279
|
+
size_t size;
|
280
|
+
const upb_StringView* clusters =
|
281
|
+
envoy_extensions_clusters_aggregate_v3_ClusterConfig_clusters(
|
282
|
+
aggregate_cluster_config, &size);
|
283
|
+
for (size_t i = 0; i < size; ++i) {
|
284
|
+
cds_update->prioritized_cluster_names.emplace_back(
|
285
|
+
UpbStringToStdString(clusters[i]));
|
286
|
+
}
|
287
|
+
}
|
288
|
+
|
289
|
+
void ParseLbPolicyConfig(const XdsResourceType::DecodeContext& context,
|
290
|
+
const envoy_config_cluster_v3_Cluster* cluster,
|
291
|
+
XdsClusterResource* cds_update,
|
292
|
+
ValidationErrors* errors) {
|
293
|
+
// First, check the new load_balancing_policy field.
|
294
|
+
if (XdsCustomLbPolicyEnabled()) {
|
295
|
+
const auto* load_balancing_policy =
|
296
|
+
envoy_config_cluster_v3_Cluster_load_balancing_policy(cluster);
|
297
|
+
if (load_balancing_policy != nullptr) {
|
298
|
+
const auto& registry =
|
299
|
+
static_cast<const GrpcXdsBootstrap&>(context.client->bootstrap())
|
300
|
+
.lb_policy_registry();
|
301
|
+
ValidationErrors::ScopedField field(errors, ".load_balancing_policy");
|
302
|
+
const size_t original_error_count = errors->size();
|
303
|
+
cds_update->lb_policy_config = registry.ConvertXdsLbPolicyConfig(
|
304
|
+
context, load_balancing_policy, errors);
|
305
|
+
// If there were no conversion errors, validate that the converted config
|
306
|
+
// parses with the gRPC LB policy registry.
|
307
|
+
if (original_error_count == errors->size()) {
|
308
|
+
auto config =
|
309
|
+
CoreConfiguration::Get()
|
310
|
+
.lb_policy_registry()
|
311
|
+
.ParseLoadBalancingConfig(cds_update->lb_policy_config);
|
312
|
+
if (!config.ok()) errors->AddError(config.status().message());
|
291
313
|
}
|
314
|
+
return;
|
292
315
|
}
|
293
316
|
}
|
294
|
-
//
|
317
|
+
// Didn't find load_balancing_policy field, so fall back to the old
|
318
|
+
// lb_policy enum field.
|
295
319
|
if (envoy_config_cluster_v3_Cluster_lb_policy(cluster) ==
|
296
320
|
envoy_config_cluster_v3_Cluster_ROUND_ROBIN) {
|
297
|
-
cds_update
|
321
|
+
cds_update->lb_policy_config = {
|
322
|
+
Json::Object{
|
323
|
+
{"xds_wrr_locality_experimental",
|
324
|
+
Json::Object{
|
325
|
+
{"childPolicy",
|
326
|
+
Json::Array{
|
327
|
+
Json::Object{
|
328
|
+
{"round_robin", Json::Object()},
|
329
|
+
},
|
330
|
+
}},
|
331
|
+
}},
|
332
|
+
},
|
333
|
+
};
|
298
334
|
} else if (envoy_config_cluster_v3_Cluster_lb_policy(cluster) ==
|
299
335
|
envoy_config_cluster_v3_Cluster_RING_HASH) {
|
300
|
-
cds_update.lb_policy = "RING_HASH";
|
301
336
|
// Record ring hash lb config
|
302
337
|
auto* ring_hash_config =
|
303
338
|
envoy_config_cluster_v3_Cluster_ring_hash_lb_config(cluster);
|
339
|
+
uint64_t min_ring_size = 1024;
|
340
|
+
uint64_t max_ring_size = 8388608;
|
304
341
|
if (ring_hash_config != nullptr) {
|
305
|
-
|
342
|
+
ValidationErrors::ScopedField field(errors, ".ring_hash_lb_config");
|
343
|
+
const google_protobuf_UInt64Value* uint64_value =
|
306
344
|
envoy_config_cluster_v3_Cluster_RingHashLbConfig_maximum_ring_size(
|
307
345
|
ring_hash_config);
|
308
|
-
if (
|
309
|
-
|
310
|
-
|
311
|
-
if (
|
312
|
-
|
313
|
-
errors.emplace_back(
|
314
|
-
"max_ring_size is not in the range of 1 to 8388608.");
|
346
|
+
if (uint64_value != nullptr) {
|
347
|
+
ValidationErrors::ScopedField field(errors, ".maximum_ring_size");
|
348
|
+
max_ring_size = google_protobuf_UInt64Value_value(uint64_value);
|
349
|
+
if (max_ring_size > 8388608 || max_ring_size == 0) {
|
350
|
+
errors->AddError("must be in the range of 1 to 8388608");
|
315
351
|
}
|
316
352
|
}
|
317
|
-
|
353
|
+
uint64_value =
|
318
354
|
envoy_config_cluster_v3_Cluster_RingHashLbConfig_minimum_ring_size(
|
319
355
|
ring_hash_config);
|
320
|
-
if (
|
321
|
-
|
322
|
-
|
323
|
-
if (
|
324
|
-
|
325
|
-
errors.emplace_back(
|
326
|
-
"min_ring_size is not in the range of 1 to 8388608.");
|
356
|
+
if (uint64_value != nullptr) {
|
357
|
+
ValidationErrors::ScopedField field(errors, ".minimum_ring_size");
|
358
|
+
min_ring_size = google_protobuf_UInt64Value_value(uint64_value);
|
359
|
+
if (min_ring_size > 8388608 || min_ring_size == 0) {
|
360
|
+
errors->AddError("must be in the range of 1 to 8388608");
|
327
361
|
}
|
328
|
-
if (
|
329
|
-
errors
|
330
|
-
"min_ring_size cannot be greater than max_ring_size.");
|
362
|
+
if (min_ring_size > max_ring_size) {
|
363
|
+
errors->AddError("cannot be greater than maximum_ring_size");
|
331
364
|
}
|
332
365
|
}
|
333
366
|
if (envoy_config_cluster_v3_Cluster_RingHashLbConfig_hash_function(
|
334
367
|
ring_hash_config) !=
|
335
368
|
envoy_config_cluster_v3_Cluster_RingHashLbConfig_XX_HASH) {
|
336
|
-
errors
|
369
|
+
ValidationErrors::ScopedField field(errors, ".hash_function");
|
370
|
+
errors->AddError("invalid hash function");
|
337
371
|
}
|
338
372
|
}
|
373
|
+
cds_update->lb_policy_config = {
|
374
|
+
Json::Object{
|
375
|
+
{"ring_hash_experimental",
|
376
|
+
Json::Object{
|
377
|
+
{"minRingSize", min_ring_size},
|
378
|
+
{"maxRingSize", max_ring_size},
|
379
|
+
}},
|
380
|
+
},
|
381
|
+
};
|
339
382
|
} else {
|
340
|
-
errors
|
383
|
+
ValidationErrors::ScopedField field(errors, ".lb_policy");
|
384
|
+
errors->AddError("LB policy is not supported");
|
341
385
|
}
|
386
|
+
}
|
387
|
+
|
388
|
+
absl::StatusOr<XdsClusterResource> CdsResourceParse(
|
389
|
+
const XdsResourceType::DecodeContext& context,
|
390
|
+
const envoy_config_cluster_v3_Cluster* cluster) {
|
391
|
+
XdsClusterResource cds_update;
|
392
|
+
ValidationErrors errors;
|
393
|
+
// Check the cluster discovery type.
|
394
|
+
if (envoy_config_cluster_v3_Cluster_type(cluster) ==
|
395
|
+
envoy_config_cluster_v3_Cluster_EDS) {
|
396
|
+
cds_update.cluster_type = XdsClusterResource::ClusterType::EDS;
|
397
|
+
EdsConfigParse(cluster, &cds_update, &errors);
|
398
|
+
} else if (envoy_config_cluster_v3_Cluster_type(cluster) ==
|
399
|
+
envoy_config_cluster_v3_Cluster_LOGICAL_DNS) {
|
400
|
+
cds_update.cluster_type = XdsClusterResource::ClusterType::LOGICAL_DNS;
|
401
|
+
LogicalDnsParse(cluster, &cds_update, &errors);
|
402
|
+
} else if (envoy_config_cluster_v3_Cluster_has_cluster_type(cluster)) {
|
403
|
+
ValidationErrors::ScopedField field(&errors, ".cluster_type");
|
404
|
+
const auto* custom_cluster_type =
|
405
|
+
envoy_config_cluster_v3_Cluster_cluster_type(cluster);
|
406
|
+
GPR_ASSERT(custom_cluster_type != nullptr);
|
407
|
+
ValidationErrors::ScopedField field2(&errors, ".typed_config");
|
408
|
+
const auto* typed_config =
|
409
|
+
envoy_config_cluster_v3_Cluster_CustomClusterType_typed_config(
|
410
|
+
custom_cluster_type);
|
411
|
+
if (typed_config == nullptr) {
|
412
|
+
errors.AddError("field not present");
|
413
|
+
} else {
|
414
|
+
absl::string_view type_url = absl::StripPrefix(
|
415
|
+
UpbStringToAbsl(google_protobuf_Any_type_url(typed_config)),
|
416
|
+
"type.googleapis.com/");
|
417
|
+
if (type_url != "envoy.extensions.clusters.aggregate.v3.ClusterConfig") {
|
418
|
+
ValidationErrors::ScopedField field(&errors, ".type_url");
|
419
|
+
errors.AddError(
|
420
|
+
absl::StrCat("unknown cluster_type extension: ", type_url));
|
421
|
+
} else {
|
422
|
+
cds_update.cluster_type = XdsClusterResource::ClusterType::AGGREGATE;
|
423
|
+
// Retrieve aggregate clusters.
|
424
|
+
ValidationErrors::ScopedField field(
|
425
|
+
&errors,
|
426
|
+
".value[envoy.extensions.clusters.aggregate.v3.ClusterConfig]");
|
427
|
+
absl::string_view serialized_config =
|
428
|
+
UpbStringToAbsl(google_protobuf_Any_value(typed_config));
|
429
|
+
AggregateClusterParse(context, serialized_config, &cds_update, &errors);
|
430
|
+
}
|
431
|
+
}
|
432
|
+
} else {
|
433
|
+
ValidationErrors::ScopedField field(&errors, ".type");
|
434
|
+
errors.AddError("unknown discovery type");
|
435
|
+
}
|
436
|
+
// Check the LB policy.
|
437
|
+
ParseLbPolicyConfig(context, cluster, &cds_update, &errors);
|
438
|
+
// transport_socket
|
342
439
|
auto* transport_socket =
|
343
440
|
envoy_config_cluster_v3_Cluster_transport_socket(cluster);
|
344
441
|
if (transport_socket != nullptr) {
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
errors.emplace_back(absl::StrCat("Error parsing security configuration: ",
|
349
|
-
common_tls_context.status().message()));
|
350
|
-
} else {
|
351
|
-
cds_update.common_tls_context = std::move(*common_tls_context);
|
352
|
-
}
|
442
|
+
ValidationErrors::ScopedField field(&errors, ".transport_socket");
|
443
|
+
cds_update.common_tls_context =
|
444
|
+
UpstreamTlsContextParse(context, transport_socket, &errors);
|
353
445
|
}
|
354
446
|
// Record LRS server name (if any).
|
355
447
|
const envoy_config_core_v3_ConfigSource* lrs_server =
|
356
448
|
envoy_config_cluster_v3_Cluster_lrs_server(cluster);
|
357
449
|
if (lrs_server != nullptr) {
|
358
450
|
if (!envoy_config_core_v3_ConfigSource_has_self(lrs_server)) {
|
359
|
-
errors
|
451
|
+
ValidationErrors::ScopedField field(&errors, ".lrs_server");
|
452
|
+
errors.AddError("ConfigSource is not self");
|
360
453
|
}
|
361
454
|
cds_update.lrs_load_reporting_server.emplace(
|
362
455
|
static_cast<const GrpcXdsBootstrap::GrpcXdsServer&>(context.server));
|
@@ -387,30 +480,31 @@ absl::StatusOr<XdsClusterResource> CdsResourceParse(
|
|
387
480
|
}
|
388
481
|
}
|
389
482
|
}
|
390
|
-
//
|
391
|
-
|
392
|
-
|
393
|
-
// for outlier detection will be based on fields received and
|
394
|
-
// default values.
|
395
|
-
if (XdsOutlierDetectionEnabled() &&
|
396
|
-
envoy_config_cluster_v3_Cluster_has_outlier_detection(cluster)) {
|
483
|
+
// Outlier detection config.
|
484
|
+
if (envoy_config_cluster_v3_Cluster_has_outlier_detection(cluster)) {
|
485
|
+
ValidationErrors::ScopedField field(&errors, ".outlier_detection");
|
397
486
|
OutlierDetectionConfig outlier_detection_update;
|
398
487
|
const envoy_config_cluster_v3_OutlierDetection* outlier_detection =
|
399
488
|
envoy_config_cluster_v3_Cluster_outlier_detection(cluster);
|
400
489
|
const google_protobuf_Duration* duration =
|
401
490
|
envoy_config_cluster_v3_OutlierDetection_interval(outlier_detection);
|
402
491
|
if (duration != nullptr) {
|
403
|
-
|
492
|
+
ValidationErrors::ScopedField field(&errors, ".interval");
|
493
|
+
outlier_detection_update.interval = ParseDuration(duration, &errors);
|
404
494
|
}
|
405
495
|
duration = envoy_config_cluster_v3_OutlierDetection_base_ejection_time(
|
406
496
|
outlier_detection);
|
407
497
|
if (duration != nullptr) {
|
408
|
-
|
498
|
+
ValidationErrors::ScopedField field(&errors, ".base_ejection_time");
|
499
|
+
outlier_detection_update.base_ejection_time =
|
500
|
+
ParseDuration(duration, &errors);
|
409
501
|
}
|
410
502
|
duration = envoy_config_cluster_v3_OutlierDetection_max_ejection_time(
|
411
503
|
outlier_detection);
|
412
504
|
if (duration != nullptr) {
|
413
|
-
|
505
|
+
ValidationErrors::ScopedField field(&errors, ".max_ejection_time");
|
506
|
+
outlier_detection_update.max_ejection_time =
|
507
|
+
ParseDuration(duration, &errors);
|
414
508
|
}
|
415
509
|
const google_protobuf_UInt32Value* max_ejection_percent =
|
416
510
|
envoy_config_cluster_v3_OutlierDetection_max_ejection_percent(
|
@@ -418,6 +512,10 @@ absl::StatusOr<XdsClusterResource> CdsResourceParse(
|
|
418
512
|
if (max_ejection_percent != nullptr) {
|
419
513
|
outlier_detection_update.max_ejection_percent =
|
420
514
|
google_protobuf_UInt32Value_value(max_ejection_percent);
|
515
|
+
if (outlier_detection_update.max_ejection_percent > 100) {
|
516
|
+
ValidationErrors::ScopedField field(&errors, ".max_ejection_percent");
|
517
|
+
errors.AddError("value must be <= 100");
|
518
|
+
}
|
421
519
|
}
|
422
520
|
const google_protobuf_UInt32Value* enforcing_success_rate =
|
423
521
|
envoy_config_cluster_v3_OutlierDetection_enforcing_success_rate(
|
@@ -425,6 +523,10 @@ absl::StatusOr<XdsClusterResource> CdsResourceParse(
|
|
425
523
|
if (enforcing_success_rate != nullptr) {
|
426
524
|
uint32_t enforcement_percentage =
|
427
525
|
google_protobuf_UInt32Value_value(enforcing_success_rate);
|
526
|
+
if (enforcement_percentage > 100) {
|
527
|
+
ValidationErrors::ScopedField field(&errors, ".enforcing_success_rate");
|
528
|
+
errors.AddError("value must be <= 100");
|
529
|
+
}
|
428
530
|
if (enforcement_percentage != 0) {
|
429
531
|
OutlierDetectionConfig::SuccessRateEjection success_rate_ejection;
|
430
532
|
success_rate_ejection.enforcement_percentage = enforcement_percentage;
|
@@ -458,6 +560,11 @@ absl::StatusOr<XdsClusterResource> CdsResourceParse(
|
|
458
560
|
if (enforcing_failure_percentage != nullptr) {
|
459
561
|
uint32_t enforcement_percentage =
|
460
562
|
google_protobuf_UInt32Value_value(enforcing_failure_percentage);
|
563
|
+
if (enforcement_percentage > 100) {
|
564
|
+
ValidationErrors::ScopedField field(&errors,
|
565
|
+
".enforcing_failure_percentage");
|
566
|
+
errors.AddError("value must be <= 100");
|
567
|
+
}
|
461
568
|
if (enforcement_percentage != 0) {
|
462
569
|
OutlierDetectionConfig::FailurePercentageEjection
|
463
570
|
failure_percentage_ejection;
|
@@ -483,6 +590,11 @@ absl::StatusOr<XdsClusterResource> CdsResourceParse(
|
|
483
590
|
if (threshold != nullptr) {
|
484
591
|
failure_percentage_ejection.threshold =
|
485
592
|
google_protobuf_UInt32Value_value(threshold);
|
593
|
+
if (enforcement_percentage > 100) {
|
594
|
+
ValidationErrors::ScopedField field(
|
595
|
+
&errors, ".failure_percentage_threshold");
|
596
|
+
errors.AddError("value must be <= 100");
|
597
|
+
}
|
486
598
|
}
|
487
599
|
outlier_detection_update.failure_percentage_ejection =
|
488
600
|
failure_percentage_ejection;
|
@@ -491,10 +603,7 @@ absl::StatusOr<XdsClusterResource> CdsResourceParse(
|
|
491
603
|
cds_update.outlier_detection = outlier_detection_update;
|
492
604
|
}
|
493
605
|
// Return result.
|
494
|
-
if (!errors.
|
495
|
-
return absl::InvalidArgumentError(absl::StrCat(
|
496
|
-
"errors parsing CDS resource: [", absl::StrJoin(errors, "; "), "]"));
|
497
|
-
}
|
606
|
+
if (!errors.ok()) return errors.status("errors validating Cluster resource");
|
498
607
|
return cds_update;
|
499
608
|
}
|
500
609
|
|
@@ -514,7 +623,7 @@ void MaybeLogCluster(const XdsResourceType::DecodeContext& context,
|
|
514
623
|
|
515
624
|
XdsResourceType::DecodeResult XdsClusterResourceType::Decode(
|
516
625
|
const XdsResourceType::DecodeContext& context,
|
517
|
-
absl::string_view serialized_resource
|
626
|
+
absl::string_view serialized_resource) const {
|
518
627
|
DecodeResult result;
|
519
628
|
// Parse serialized proto.
|
520
629
|
auto* resource = envoy_config_cluster_v3_Cluster_parse(
|
@@ -528,7 +637,7 @@ XdsResourceType::DecodeResult XdsClusterResourceType::Decode(
|
|
528
637
|
// Validate resource.
|
529
638
|
result.name =
|
530
639
|
UpbStringToStdString(envoy_config_cluster_v3_Cluster_name(resource));
|
531
|
-
auto cds_resource = CdsResourceParse(context, resource
|
640
|
+
auto cds_resource = CdsResourceParse(context, resource);
|
532
641
|
if (!cds_resource.ok()) {
|
533
642
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
|
534
643
|
gpr_log(GPR_ERROR, "[xds_client %p] invalid Cluster %s: %s",
|
@@ -541,9 +650,8 @@ XdsResourceType::DecodeResult XdsClusterResourceType::Decode(
|
|
541
650
|
gpr_log(GPR_INFO, "[xds_client %p] parsed Cluster %s: %s", context.client,
|
542
651
|
result.name->c_str(), cds_resource->ToString().c_str());
|
543
652
|
}
|
544
|
-
|
545
|
-
|
546
|
-
result.resource = std::move(resource);
|
653
|
+
result.resource =
|
654
|
+
std::make_unique<XdsClusterResource>(std::move(*cds_resource));
|
547
655
|
}
|
548
656
|
return result;
|
549
657
|
}
|