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
@@ -19,11 +19,13 @@
|
|
19
19
|
#include "src/core/ext/xds/xds_endpoint.h"
|
20
20
|
|
21
21
|
#include <stdlib.h>
|
22
|
+
#include <string.h>
|
22
23
|
|
23
24
|
#include <algorithm>
|
25
|
+
#include <limits>
|
26
|
+
#include <set>
|
24
27
|
#include <vector>
|
25
28
|
|
26
|
-
#include "absl/memory/memory.h"
|
27
29
|
#include "absl/status/status.h"
|
28
30
|
#include "absl/status/statusor.h"
|
29
31
|
#include "absl/strings/str_cat.h"
|
@@ -44,8 +46,11 @@
|
|
44
46
|
#include "src/core/ext/xds/upb_utils.h"
|
45
47
|
#include "src/core/ext/xds/xds_resource_type.h"
|
46
48
|
#include "src/core/lib/address_utils/parse_address.h"
|
49
|
+
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
47
50
|
#include "src/core/lib/channel/channel_args.h"
|
48
51
|
#include "src/core/lib/debug/trace.h"
|
52
|
+
#include "src/core/lib/gprpp/validation_errors.h"
|
53
|
+
#include "src/core/lib/iomgr/resolved_address.h"
|
49
54
|
|
50
55
|
namespace grpc_core {
|
51
56
|
|
@@ -78,6 +83,7 @@ bool XdsEndpointResource::Priority::operator==(const Priority& other) const {
|
|
78
83
|
|
79
84
|
std::string XdsEndpointResource::Priority::ToString() const {
|
80
85
|
std::vector<std::string> locality_strings;
|
86
|
+
locality_strings.reserve(localities.size());
|
81
87
|
for (const auto& p : localities) {
|
82
88
|
locality_strings.emplace_back(p.second.ToString());
|
83
89
|
}
|
@@ -140,47 +146,78 @@ void MaybeLogClusterLoadAssignment(
|
|
140
146
|
}
|
141
147
|
}
|
142
148
|
|
143
|
-
absl::
|
144
|
-
const envoy_config_endpoint_v3_LbEndpoint* lb_endpoint
|
145
|
-
|
149
|
+
absl::optional<ServerAddress> ServerAddressParse(
|
150
|
+
const envoy_config_endpoint_v3_LbEndpoint* lb_endpoint,
|
151
|
+
ValidationErrors* errors) {
|
152
|
+
// health_status
|
153
|
+
// If not HEALTHY or UNKNOWN, skip this endpoint.
|
146
154
|
const int32_t health_status =
|
147
155
|
envoy_config_endpoint_v3_LbEndpoint_health_status(lb_endpoint);
|
148
156
|
if (health_status != envoy_config_core_v3_UNKNOWN &&
|
149
157
|
health_status != envoy_config_core_v3_HEALTHY) {
|
150
158
|
return absl::nullopt;
|
151
159
|
}
|
152
|
-
//
|
153
|
-
const envoy_config_endpoint_v3_Endpoint* endpoint =
|
154
|
-
envoy_config_endpoint_v3_LbEndpoint_endpoint(lb_endpoint);
|
155
|
-
const envoy_config_core_v3_Address* address =
|
156
|
-
envoy_config_endpoint_v3_Endpoint_address(endpoint);
|
157
|
-
const envoy_config_core_v3_SocketAddress* socket_address =
|
158
|
-
envoy_config_core_v3_Address_socket_address(address);
|
159
|
-
std::string address_str = UpbStringToStdString(
|
160
|
-
envoy_config_core_v3_SocketAddress_address(socket_address));
|
161
|
-
uint32_t port = envoy_config_core_v3_SocketAddress_port_value(socket_address);
|
162
|
-
if (GPR_UNLIKELY(port >> 16) != 0) {
|
163
|
-
return absl::InvalidArgumentError("Invalid port.");
|
164
|
-
}
|
165
|
-
// Find load_balancing_weight for the endpoint.
|
160
|
+
// load_balancing_weight
|
166
161
|
uint32_t weight = 1;
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
if (
|
172
|
-
|
162
|
+
{
|
163
|
+
ValidationErrors::ScopedField field(errors, ".load_balancing_weight");
|
164
|
+
const google_protobuf_UInt32Value* load_balancing_weight =
|
165
|
+
envoy_config_endpoint_v3_LbEndpoint_load_balancing_weight(lb_endpoint);
|
166
|
+
if (load_balancing_weight != nullptr) {
|
167
|
+
weight = google_protobuf_UInt32Value_value(load_balancing_weight);
|
168
|
+
if (weight == 0) {
|
169
|
+
errors->AddError("must be greater than 0");
|
170
|
+
}
|
171
|
+
}
|
172
|
+
}
|
173
|
+
// endpoint
|
174
|
+
grpc_resolved_address grpc_address;
|
175
|
+
{
|
176
|
+
ValidationErrors::ScopedField field(errors, ".endpoint");
|
177
|
+
const envoy_config_endpoint_v3_Endpoint* endpoint =
|
178
|
+
envoy_config_endpoint_v3_LbEndpoint_endpoint(lb_endpoint);
|
179
|
+
if (endpoint == nullptr) {
|
180
|
+
errors->AddError("field not present");
|
181
|
+
return absl::nullopt;
|
182
|
+
}
|
183
|
+
ValidationErrors::ScopedField field2(errors, ".address");
|
184
|
+
const envoy_config_core_v3_Address* address =
|
185
|
+
envoy_config_endpoint_v3_Endpoint_address(endpoint);
|
186
|
+
if (address == nullptr) {
|
187
|
+
errors->AddError("field not present");
|
188
|
+
return absl::nullopt;
|
189
|
+
}
|
190
|
+
ValidationErrors::ScopedField field3(errors, ".socket_address");
|
191
|
+
const envoy_config_core_v3_SocketAddress* socket_address =
|
192
|
+
envoy_config_core_v3_Address_socket_address(address);
|
193
|
+
if (socket_address == nullptr) {
|
194
|
+
errors->AddError("field not present");
|
195
|
+
return absl::nullopt;
|
196
|
+
}
|
197
|
+
std::string address_str = UpbStringToStdString(
|
198
|
+
envoy_config_core_v3_SocketAddress_address(socket_address));
|
199
|
+
uint32_t port;
|
200
|
+
{
|
201
|
+
ValidationErrors::ScopedField field(errors, ".port_value");
|
202
|
+
port = envoy_config_core_v3_SocketAddress_port_value(socket_address);
|
203
|
+
if (GPR_UNLIKELY(port >> 16) != 0) {
|
204
|
+
errors->AddError("invalid port");
|
205
|
+
return absl::nullopt;
|
206
|
+
}
|
207
|
+
}
|
208
|
+
auto addr = StringToSockaddr(address_str, port);
|
209
|
+
if (!addr.ok()) {
|
210
|
+
errors->AddError(addr.status().message());
|
211
|
+
} else {
|
212
|
+
grpc_address = *addr;
|
173
213
|
}
|
174
214
|
}
|
175
|
-
//
|
176
|
-
auto addr = StringToSockaddr(address_str, port);
|
177
|
-
if (!addr.ok()) return addr.status();
|
178
|
-
// Append the address to the list.
|
215
|
+
// Convert to ServerAddress.
|
179
216
|
std::map<const char*, std::unique_ptr<ServerAddress::AttributeInterface>>
|
180
217
|
attributes;
|
181
218
|
attributes[ServerAddressWeightAttribute::kServerAddressWeightAttributeKey] =
|
182
|
-
|
183
|
-
return ServerAddress(
|
219
|
+
std::make_unique<ServerAddressWeightAttribute>(weight);
|
220
|
+
return ServerAddress(grpc_address, ChannelArgs(), std::move(attributes));
|
184
221
|
}
|
185
222
|
|
186
223
|
struct ParsedLocality {
|
@@ -188,156 +225,205 @@ struct ParsedLocality {
|
|
188
225
|
XdsEndpointResource::Priority::Locality locality;
|
189
226
|
};
|
190
227
|
|
191
|
-
|
192
|
-
|
228
|
+
struct ResolvedAddressLessThan {
|
229
|
+
bool operator()(const grpc_resolved_address& a1,
|
230
|
+
const grpc_resolved_address& a2) const {
|
231
|
+
if (a1.len != a2.len) return a1.len < a2.len;
|
232
|
+
return memcmp(a1.addr, a2.addr, a1.len) < 0;
|
233
|
+
}
|
234
|
+
};
|
235
|
+
using ResolvedAddressSet =
|
236
|
+
std::set<grpc_resolved_address, ResolvedAddressLessThan>;
|
237
|
+
|
238
|
+
absl::optional<ParsedLocality> LocalityParse(
|
239
|
+
const envoy_config_endpoint_v3_LocalityLbEndpoints* locality_lb_endpoints,
|
240
|
+
ResolvedAddressSet* address_set, ValidationErrors* errors) {
|
241
|
+
const size_t original_error_size = errors->size();
|
193
242
|
ParsedLocality parsed_locality;
|
194
|
-
//
|
243
|
+
// load_balancing_weight
|
244
|
+
// If LB weight is not specified or 0, it means this locality is assigned
|
245
|
+
// no load.
|
195
246
|
const google_protobuf_UInt32Value* lb_weight =
|
196
247
|
envoy_config_endpoint_v3_LocalityLbEndpoints_load_balancing_weight(
|
197
248
|
locality_lb_endpoints);
|
198
|
-
// If LB weight is not specified, it means this locality is assigned no load.
|
199
249
|
parsed_locality.locality.lb_weight =
|
200
250
|
lb_weight != nullptr ? google_protobuf_UInt32Value_value(lb_weight) : 0;
|
201
|
-
if (parsed_locality.locality.lb_weight == 0) return
|
202
|
-
//
|
251
|
+
if (parsed_locality.locality.lb_weight == 0) return absl::nullopt;
|
252
|
+
// locality
|
203
253
|
const envoy_config_core_v3_Locality* locality =
|
204
254
|
envoy_config_endpoint_v3_LocalityLbEndpoints_locality(
|
205
255
|
locality_lb_endpoints);
|
206
256
|
if (locality == nullptr) {
|
207
|
-
|
257
|
+
ValidationErrors::ScopedField field(errors, ".locality");
|
258
|
+
errors->AddError("field not present");
|
259
|
+
return absl::nullopt;
|
208
260
|
}
|
261
|
+
// region
|
209
262
|
std::string region =
|
210
263
|
UpbStringToStdString(envoy_config_core_v3_Locality_region(locality));
|
264
|
+
// zone
|
211
265
|
std::string zone =
|
212
266
|
UpbStringToStdString(envoy_config_core_v3_Locality_zone(locality));
|
267
|
+
// sub_zone
|
213
268
|
std::string sub_zone =
|
214
269
|
UpbStringToStdString(envoy_config_core_v3_Locality_sub_zone(locality));
|
215
270
|
parsed_locality.locality.name = MakeRefCounted<XdsLocalityName>(
|
216
271
|
std::move(region), std::move(zone), std::move(sub_zone));
|
217
|
-
//
|
272
|
+
// lb_endpoints
|
218
273
|
size_t size;
|
219
274
|
const envoy_config_endpoint_v3_LbEndpoint* const* lb_endpoints =
|
220
275
|
envoy_config_endpoint_v3_LocalityLbEndpoints_lb_endpoints(
|
221
276
|
locality_lb_endpoints, &size);
|
222
277
|
for (size_t i = 0; i < size; ++i) {
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
278
|
+
ValidationErrors::ScopedField field(errors,
|
279
|
+
absl::StrCat(".lb_endpoints[", i, "]"));
|
280
|
+
auto address = ServerAddressParse(lb_endpoints[i], errors);
|
281
|
+
if (address.has_value()) {
|
282
|
+
bool inserted = address_set->insert(address->address()).second;
|
283
|
+
if (!inserted) {
|
284
|
+
errors->AddError(absl::StrCat(
|
285
|
+
"duplicate endpoint address \"",
|
286
|
+
grpc_sockaddr_to_uri(&address->address()).value_or("<unknown>"),
|
287
|
+
"\""));
|
288
|
+
}
|
289
|
+
parsed_locality.locality.endpoints.push_back(std::move(*address));
|
227
290
|
}
|
228
291
|
}
|
229
|
-
//
|
292
|
+
// priority
|
230
293
|
parsed_locality.priority =
|
231
294
|
envoy_config_endpoint_v3_LocalityLbEndpoints_priority(
|
232
295
|
locality_lb_endpoints);
|
296
|
+
// Return result.
|
297
|
+
if (original_error_size != errors->size()) return absl::nullopt;
|
233
298
|
return parsed_locality;
|
234
299
|
}
|
235
300
|
|
236
|
-
|
301
|
+
void DropParseAndAppend(
|
237
302
|
const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload*
|
238
303
|
drop_overload,
|
239
|
-
XdsEndpointResource::DropConfig* drop_config) {
|
240
|
-
//
|
304
|
+
XdsEndpointResource::DropConfig* drop_config, ValidationErrors* errors) {
|
305
|
+
// category
|
241
306
|
std::string category = UpbStringToStdString(
|
242
307
|
envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload_category(
|
243
308
|
drop_overload));
|
244
309
|
if (category.empty()) {
|
245
|
-
|
310
|
+
ValidationErrors::ScopedField field(errors, ".category");
|
311
|
+
errors->AddError("empty drop category name");
|
246
312
|
}
|
247
|
-
//
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
313
|
+
// drop_percentage
|
314
|
+
uint32_t numerator;
|
315
|
+
{
|
316
|
+
ValidationErrors::ScopedField field(errors, ".drop_percentage");
|
317
|
+
const envoy_type_v3_FractionalPercent* drop_percentage =
|
318
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload_drop_percentage(
|
319
|
+
drop_overload);
|
320
|
+
if (drop_percentage == nullptr) {
|
321
|
+
errors->AddError("field not present");
|
322
|
+
return;
|
323
|
+
}
|
324
|
+
numerator = envoy_type_v3_FractionalPercent_numerator(drop_percentage);
|
325
|
+
{
|
326
|
+
ValidationErrors::ScopedField field(errors, ".denominator");
|
327
|
+
const int denominator =
|
328
|
+
envoy_type_v3_FractionalPercent_denominator(drop_percentage);
|
329
|
+
// Normalize to million.
|
330
|
+
switch (denominator) {
|
331
|
+
case envoy_type_v3_FractionalPercent_HUNDRED:
|
332
|
+
numerator *= 10000;
|
333
|
+
break;
|
334
|
+
case envoy_type_v3_FractionalPercent_TEN_THOUSAND:
|
335
|
+
numerator *= 100;
|
336
|
+
break;
|
337
|
+
case envoy_type_v3_FractionalPercent_MILLION:
|
338
|
+
break;
|
339
|
+
default:
|
340
|
+
errors->AddError("unknown denominator type");
|
341
|
+
}
|
342
|
+
}
|
343
|
+
// Cap numerator to 1000000.
|
344
|
+
numerator = std::min(numerator, 1000000u);
|
269
345
|
}
|
270
|
-
//
|
271
|
-
numerator = std::min(numerator, 1000000u);
|
346
|
+
// Add category.
|
272
347
|
drop_config->AddCategory(std::move(category), numerator);
|
273
|
-
return absl::OkStatus();
|
274
348
|
}
|
275
349
|
|
276
350
|
absl::StatusOr<XdsEndpointResource> EdsResourceParse(
|
277
351
|
const XdsResourceType::DecodeContext& /*context*/,
|
278
352
|
const envoy_config_endpoint_v3_ClusterLoadAssignment*
|
279
|
-
cluster_load_assignment
|
280
|
-
|
353
|
+
cluster_load_assignment) {
|
354
|
+
ValidationErrors errors;
|
281
355
|
XdsEndpointResource eds_resource;
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
errors
|
292
|
-
|
356
|
+
// endpoints
|
357
|
+
{
|
358
|
+
ValidationErrors::ScopedField field(&errors, "endpoints");
|
359
|
+
ResolvedAddressSet address_set;
|
360
|
+
size_t locality_size;
|
361
|
+
const envoy_config_endpoint_v3_LocalityLbEndpoints* const* endpoints =
|
362
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_endpoints(
|
363
|
+
cluster_load_assignment, &locality_size);
|
364
|
+
for (size_t i = 0; i < locality_size; ++i) {
|
365
|
+
ValidationErrors::ScopedField field(&errors, absl::StrCat("[", i, "]"));
|
366
|
+
auto parsed_locality = LocalityParse(endpoints[i], &address_set, &errors);
|
367
|
+
if (parsed_locality.has_value()) {
|
368
|
+
GPR_ASSERT(parsed_locality->locality.lb_weight != 0);
|
369
|
+
// Make sure prorities is big enough. Note that they might not
|
370
|
+
// arrive in priority order.
|
371
|
+
if (eds_resource.priorities.size() < parsed_locality->priority + 1) {
|
372
|
+
eds_resource.priorities.resize(parsed_locality->priority + 1);
|
373
|
+
}
|
374
|
+
auto& locality_map =
|
375
|
+
eds_resource.priorities[parsed_locality->priority].localities;
|
376
|
+
auto it = locality_map.find(parsed_locality->locality.name.get());
|
377
|
+
if (it != locality_map.end()) {
|
378
|
+
errors.AddError(absl::StrCat(
|
379
|
+
"duplicate locality ",
|
380
|
+
parsed_locality->locality.name->AsHumanReadableString(),
|
381
|
+
" found in priority ", parsed_locality->priority));
|
382
|
+
} else {
|
383
|
+
locality_map.emplace(parsed_locality->locality.name.get(),
|
384
|
+
std::move(parsed_locality->locality));
|
385
|
+
}
|
386
|
+
}
|
293
387
|
}
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
388
|
+
for (size_t i = 0; i < eds_resource.priorities.size(); ++i) {
|
389
|
+
const auto& priority = eds_resource.priorities[i];
|
390
|
+
if (priority.localities.empty()) {
|
391
|
+
errors.AddError(absl::StrCat("priority ", i, " empty"));
|
392
|
+
} else {
|
393
|
+
// Check that the sum of the locality weights in this priority
|
394
|
+
// does not exceed the max value for a uint32.
|
395
|
+
uint64_t total_weight = 0;
|
396
|
+
for (const auto& p : priority.localities) {
|
397
|
+
total_weight += p.second.lb_weight;
|
398
|
+
if (total_weight > std::numeric_limits<uint32_t>::max()) {
|
399
|
+
errors.AddError(
|
400
|
+
absl::StrCat("sum of locality weights for priority ", i,
|
401
|
+
" exceeds uint32 max"));
|
402
|
+
break;
|
403
|
+
}
|
404
|
+
}
|
405
|
+
}
|
312
406
|
}
|
313
407
|
}
|
314
|
-
|
315
|
-
if (priority.localities.empty()) {
|
316
|
-
errors.emplace_back("sparse priority list");
|
317
|
-
}
|
318
|
-
}
|
319
|
-
// Get the drop config.
|
408
|
+
// policy
|
320
409
|
eds_resource.drop_config = MakeRefCounted<XdsEndpointResource::DropConfig>();
|
321
|
-
const
|
322
|
-
|
323
|
-
cluster_load_assignment);
|
410
|
+
const auto* policy = envoy_config_endpoint_v3_ClusterLoadAssignment_policy(
|
411
|
+
cluster_load_assignment);
|
324
412
|
if (policy != nullptr) {
|
413
|
+
ValidationErrors::ScopedField field(&errors, "policy");
|
325
414
|
size_t drop_size;
|
326
|
-
const
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
415
|
+
const auto* const* drop_overload =
|
416
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_drop_overloads(
|
417
|
+
policy, &drop_size);
|
418
|
+
for (size_t i = 0; i < drop_size; ++i) {
|
419
|
+
ValidationErrors::ScopedField field(
|
420
|
+
&errors, absl::StrCat(".drop_overloads[", i, "]"));
|
421
|
+
DropParseAndAppend(drop_overload[i], eds_resource.drop_config.get(),
|
422
|
+
&errors);
|
334
423
|
}
|
335
424
|
}
|
336
425
|
// Return result.
|
337
|
-
if (!errors.
|
338
|
-
return absl::InvalidArgumentError(absl::StrCat(
|
339
|
-
"errors parsing EDS resource: [", absl::StrJoin(errors, "; "), "]"));
|
340
|
-
}
|
426
|
+
if (!errors.ok()) return errors.status("errors parsing EDS resource");
|
341
427
|
return eds_resource;
|
342
428
|
}
|
343
429
|
|
@@ -345,7 +431,7 @@ absl::StatusOr<XdsEndpointResource> EdsResourceParse(
|
|
345
431
|
|
346
432
|
XdsResourceType::DecodeResult XdsEndpointResourceType::Decode(
|
347
433
|
const XdsResourceType::DecodeContext& context,
|
348
|
-
absl::string_view serialized_resource
|
434
|
+
absl::string_view serialized_resource) const {
|
349
435
|
DecodeResult result;
|
350
436
|
// Parse serialized proto.
|
351
437
|
auto* resource = envoy_config_endpoint_v3_ClusterLoadAssignment_parse(
|
@@ -359,7 +445,7 @@ XdsResourceType::DecodeResult XdsEndpointResourceType::Decode(
|
|
359
445
|
// Validate resource.
|
360
446
|
result.name = UpbStringToStdString(
|
361
447
|
envoy_config_endpoint_v3_ClusterLoadAssignment_cluster_name(resource));
|
362
|
-
auto eds_resource = EdsResourceParse(context, resource
|
448
|
+
auto eds_resource = EdsResourceParse(context, resource);
|
363
449
|
if (!eds_resource.ok()) {
|
364
450
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
|
365
451
|
gpr_log(GPR_ERROR, "[xds_client %p] invalid ClusterLoadAssignment %s: %s",
|
@@ -373,9 +459,8 @@ XdsResourceType::DecodeResult XdsEndpointResourceType::Decode(
|
|
373
459
|
context.client, result.name->c_str(),
|
374
460
|
eds_resource->ToString().c_str());
|
375
461
|
}
|
376
|
-
|
377
|
-
|
378
|
-
result.resource = std::move(resource);
|
462
|
+
result.resource =
|
463
|
+
std::make_unique<XdsEndpointResource>(std::move(*eds_resource));
|
379
464
|
}
|
380
465
|
return result;
|
381
466
|
}
|
@@ -32,6 +32,7 @@
|
|
32
32
|
#include "envoy/config/endpoint/v3/endpoint.upbdefs.h"
|
33
33
|
#include "upb/def.h"
|
34
34
|
|
35
|
+
#include "src/core/ext/xds/xds_client.h"
|
35
36
|
#include "src/core/ext/xds/xds_client_stats.h"
|
36
37
|
#include "src/core/ext/xds/xds_resource_type.h"
|
37
38
|
#include "src/core/ext/xds/xds_resource_type_impl.h"
|
@@ -41,7 +42,7 @@
|
|
41
42
|
|
42
43
|
namespace grpc_core {
|
43
44
|
|
44
|
-
struct XdsEndpointResource {
|
45
|
+
struct XdsEndpointResource : public XdsResourceType::ResourceData {
|
45
46
|
struct Priority {
|
46
47
|
struct Locality {
|
47
48
|
RefCountedPtr<XdsLocalityName> name;
|
@@ -124,15 +125,11 @@ class XdsEndpointResourceType
|
|
124
125
|
absl::string_view type_url() const override {
|
125
126
|
return "envoy.config.endpoint.v3.ClusterLoadAssignment";
|
126
127
|
}
|
127
|
-
absl::string_view v2_type_url() const override {
|
128
|
-
return "envoy.api.v2.ClusterLoadAssignment";
|
129
|
-
}
|
130
128
|
|
131
129
|
DecodeResult Decode(const XdsResourceType::DecodeContext& context,
|
132
|
-
absl::string_view serialized_resource
|
133
|
-
bool is_v2) const override;
|
130
|
+
absl::string_view serialized_resource) const override;
|
134
131
|
|
135
|
-
void InitUpbSymtab(upb_DefPool* symtab) const override {
|
132
|
+
void InitUpbSymtab(XdsClient*, upb_DefPool* symtab) const override {
|
136
133
|
envoy_config_endpoint_v3_ClusterLoadAssignment_getmsgdef(symtab);
|
137
134
|
}
|
138
135
|
};
|