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
@@ -24,7 +24,6 @@
|
|
24
24
|
|
25
25
|
#include <algorithm>
|
26
26
|
#include <array>
|
27
|
-
#include <cstdint>
|
28
27
|
#include <map>
|
29
28
|
#include <memory>
|
30
29
|
#include <string>
|
@@ -32,10 +31,13 @@
|
|
32
31
|
|
33
32
|
#include "absl/strings/string_view.h"
|
34
33
|
#include "absl/types/optional.h"
|
34
|
+
#include "absl/types/variant.h"
|
35
35
|
#include "envoy/config/listener/v3/listener.upbdefs.h"
|
36
36
|
#include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h"
|
37
37
|
#include "upb/def.h"
|
38
38
|
|
39
|
+
#include "src/core/ext/xds/xds_bootstrap_grpc.h"
|
40
|
+
#include "src/core/ext/xds/xds_client.h"
|
39
41
|
#include "src/core/ext/xds/xds_common_types.h"
|
40
42
|
#include "src/core/ext/xds/xds_http_filters.h"
|
41
43
|
#include "src/core/ext/xds/xds_resource_type.h"
|
@@ -46,36 +48,14 @@
|
|
46
48
|
|
47
49
|
namespace grpc_core {
|
48
50
|
|
49
|
-
|
50
|
-
// here, to enforce the fact that only one of the two fields can be set.
|
51
|
-
struct XdsListenerResource {
|
52
|
-
struct DownstreamTlsContext {
|
53
|
-
CommonTlsContext common_tls_context;
|
54
|
-
bool require_client_certificate = false;
|
55
|
-
|
56
|
-
bool operator==(const DownstreamTlsContext& other) const {
|
57
|
-
return common_tls_context == other.common_tls_context &&
|
58
|
-
require_client_certificate == other.require_client_certificate;
|
59
|
-
}
|
60
|
-
|
61
|
-
std::string ToString() const;
|
62
|
-
bool Empty() const;
|
63
|
-
};
|
64
|
-
|
65
|
-
enum class ListenerType {
|
66
|
-
kTcpListener = 0,
|
67
|
-
kHttpApiListener,
|
68
|
-
} type;
|
69
|
-
|
51
|
+
struct XdsListenerResource : public XdsResourceType::ResourceData {
|
70
52
|
struct HttpConnectionManager {
|
71
|
-
// The
|
72
|
-
std::string
|
53
|
+
// The RDS resource name or inline RouteConfiguration.
|
54
|
+
absl::variant<std::string, XdsRouteConfigResource> route_config;
|
55
|
+
|
73
56
|
// Storing the Http Connection Manager Common Http Protocol Option
|
74
57
|
// max_stream_duration
|
75
58
|
Duration http_max_stream_duration;
|
76
|
-
// The RouteConfiguration to use for this listener.
|
77
|
-
// Present only if it is inlined in the LDS response.
|
78
|
-
absl::optional<XdsRouteConfigResource> rds_update;
|
79
59
|
|
80
60
|
struct HttpFilter {
|
81
61
|
std::string name;
|
@@ -90,21 +70,26 @@ struct XdsListenerResource {
|
|
90
70
|
std::vector<HttpFilter> http_filters;
|
91
71
|
|
92
72
|
bool operator==(const HttpConnectionManager& other) const {
|
93
|
-
return
|
73
|
+
return route_config == other.route_config &&
|
94
74
|
http_max_stream_duration == other.http_max_stream_duration &&
|
95
|
-
rds_update == other.rds_update &&
|
96
75
|
http_filters == other.http_filters;
|
97
76
|
}
|
98
77
|
|
99
78
|
std::string ToString() const;
|
100
79
|
};
|
101
80
|
|
102
|
-
|
103
|
-
|
81
|
+
struct DownstreamTlsContext {
|
82
|
+
CommonTlsContext common_tls_context;
|
83
|
+
bool require_client_certificate = false;
|
84
|
+
|
85
|
+
bool operator==(const DownstreamTlsContext& other) const {
|
86
|
+
return common_tls_context == other.common_tls_context &&
|
87
|
+
require_client_certificate == other.require_client_certificate;
|
88
|
+
}
|
104
89
|
|
105
|
-
|
106
|
-
|
107
|
-
|
90
|
+
std::string ToString() const;
|
91
|
+
bool Empty() const;
|
92
|
+
};
|
108
93
|
|
109
94
|
struct FilterChainData {
|
110
95
|
DownstreamTlsContext downstream_tls_context;
|
@@ -185,15 +170,26 @@ struct XdsListenerResource {
|
|
185
170
|
}
|
186
171
|
|
187
172
|
std::string ToString() const;
|
188
|
-
}
|
173
|
+
};
|
174
|
+
|
175
|
+
struct TcpListener {
|
176
|
+
std::string address; // host:port listening address
|
177
|
+
FilterChainMap filter_chain_map;
|
178
|
+
absl::optional<FilterChainData> default_filter_chain;
|
179
|
+
|
180
|
+
bool operator==(const TcpListener& other) const {
|
181
|
+
return address == other.address &&
|
182
|
+
filter_chain_map == other.filter_chain_map &&
|
183
|
+
default_filter_chain == other.default_filter_chain;
|
184
|
+
}
|
189
185
|
|
190
|
-
|
186
|
+
std::string ToString() const;
|
187
|
+
};
|
188
|
+
|
189
|
+
absl::variant<HttpConnectionManager, TcpListener> listener;
|
191
190
|
|
192
191
|
bool operator==(const XdsListenerResource& other) const {
|
193
|
-
return
|
194
|
-
address == other.address &&
|
195
|
-
filter_chain_map == other.filter_chain_map &&
|
196
|
-
default_filter_chain == other.default_filter_chain;
|
192
|
+
return listener == other.listener;
|
197
193
|
}
|
198
194
|
|
199
195
|
std::string ToString() const;
|
@@ -205,21 +201,21 @@ class XdsListenerResourceType
|
|
205
201
|
absl::string_view type_url() const override {
|
206
202
|
return "envoy.config.listener.v3.Listener";
|
207
203
|
}
|
208
|
-
absl::string_view v2_type_url() const override {
|
209
|
-
return "envoy.api.v2.Listener";
|
210
|
-
}
|
211
204
|
|
212
205
|
DecodeResult Decode(const XdsResourceType::DecodeContext& context,
|
213
|
-
absl::string_view serialized_resource
|
214
|
-
bool is_v2) const override;
|
206
|
+
absl::string_view serialized_resource) const override;
|
215
207
|
|
216
208
|
bool AllResourcesRequiredInSotW() const override { return true; }
|
217
209
|
|
218
|
-
void InitUpbSymtab(
|
210
|
+
void InitUpbSymtab(XdsClient* xds_client,
|
211
|
+
upb_DefPool* symtab) const override {
|
219
212
|
envoy_config_listener_v3_Listener_getmsgdef(symtab);
|
220
213
|
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_getmsgdef(
|
221
214
|
symtab);
|
222
|
-
|
215
|
+
const auto& http_filter_registry =
|
216
|
+
static_cast<const GrpcXdsBootstrap&>(xds_client->bootstrap())
|
217
|
+
.http_filter_registry();
|
218
|
+
http_filter_registry.PopulateSymtab(symtab);
|
223
219
|
}
|
224
220
|
};
|
225
221
|
|
@@ -69,13 +69,9 @@ class XdsResourceType {
|
|
69
69
|
// Returns v3 resource type.
|
70
70
|
virtual absl::string_view type_url() const = 0;
|
71
71
|
|
72
|
-
// Returns v2 resource type.
|
73
|
-
virtual absl::string_view v2_type_url() const = 0;
|
74
|
-
|
75
72
|
// Decodes and validates a serialized resource proto.
|
76
73
|
virtual DecodeResult Decode(const DecodeContext& context,
|
77
|
-
absl::string_view serialized_resource
|
78
|
-
bool is_v2) const = 0;
|
74
|
+
absl::string_view serialized_resource) const = 0;
|
79
75
|
|
80
76
|
// Returns true if r1 and r2 are equal.
|
81
77
|
// Must be invoked only on resources returned by this object's Decode()
|
@@ -99,12 +95,8 @@ class XdsResourceType {
|
|
99
95
|
// properly in logs.
|
100
96
|
// Note: This won't actually work properly until upb adds support for
|
101
97
|
// Any fields in textproto printing (internal b/178821188).
|
102
|
-
virtual void InitUpbSymtab(
|
103
|
-
|
104
|
-
// Convenience method for checking if resource_type matches this type.
|
105
|
-
// Checks against both type_url() and v2_type_url().
|
106
|
-
// If is_v2 is non-null, it will be set to true if matching v2_type_url().
|
107
|
-
bool IsType(absl::string_view resource_type, bool* is_v2) const;
|
98
|
+
virtual void InitUpbSymtab(XdsClient* xds_client,
|
99
|
+
upb_DefPool* symtab) const = 0;
|
108
100
|
};
|
109
101
|
|
110
102
|
} // namespace grpc_core
|
@@ -30,13 +30,11 @@ namespace grpc_core {
|
|
30
30
|
|
31
31
|
// Base class for XdsResourceType implementations.
|
32
32
|
// Handles all down-casting logic for a particular resource type struct.
|
33
|
+
// ResourceTypeStruct must inherit from XdsResourceType::ResourceData,
|
34
|
+
// must be copy-constructible, and must implement operator==().
|
33
35
|
template <typename Subclass, typename ResourceTypeStruct>
|
34
36
|
class XdsResourceTypeImpl : public XdsResourceType {
|
35
37
|
public:
|
36
|
-
struct ResourceDataSubclass : public ResourceData {
|
37
|
-
ResourceTypeStruct resource;
|
38
|
-
};
|
39
|
-
|
40
38
|
// XdsClient watcher that handles down-casting.
|
41
39
|
class WatcherInterface : public XdsClient::ResourceWatcherInterface {
|
42
40
|
public:
|
@@ -44,11 +42,10 @@ class XdsResourceTypeImpl : public XdsResourceType {
|
|
44
42
|
|
45
43
|
private:
|
46
44
|
// Get result from XdsClient generic watcher interface, perform
|
47
|
-
// down-casting, and invoke the caller's
|
45
|
+
// down-casting, and invoke the caller's OnResourceChanged() method.
|
48
46
|
void OnGenericResourceChanged(
|
49
47
|
const XdsResourceType::ResourceData* resource) override {
|
50
|
-
OnResourceChanged(
|
51
|
-
static_cast<const ResourceDataSubclass*>(resource)->resource);
|
48
|
+
OnResourceChanged(*static_cast<const ResourceTypeStruct*>(resource));
|
52
49
|
}
|
53
50
|
};
|
54
51
|
|
@@ -73,16 +70,14 @@ class XdsResourceTypeImpl : public XdsResourceType {
|
|
73
70
|
|
74
71
|
bool ResourcesEqual(const ResourceData* r1,
|
75
72
|
const ResourceData* r2) const override {
|
76
|
-
return static_cast<const
|
77
|
-
static_cast<const
|
73
|
+
return *static_cast<const ResourceTypeStruct*>(r1) ==
|
74
|
+
*static_cast<const ResourceTypeStruct*>(r2);
|
78
75
|
}
|
79
76
|
|
80
77
|
std::unique_ptr<ResourceData> CopyResource(
|
81
78
|
const ResourceData* resource) const override {
|
82
|
-
|
83
|
-
|
84
|
-
static_cast<const ResourceDataSubclass*>(resource)->resource;
|
85
|
-
return std::unique_ptr<ResourceData>(resource_copy);
|
79
|
+
return std::make_unique<ResourceTypeStruct>(
|
80
|
+
*static_cast<const ResourceTypeStruct*>(resource));
|
86
81
|
}
|
87
82
|
};
|
88
83
|
|
@@ -28,7 +28,6 @@
|
|
28
28
|
#include <utility>
|
29
29
|
#include <vector>
|
30
30
|
|
31
|
-
#include "absl/memory/memory.h"
|
32
31
|
#include "absl/status/status.h"
|
33
32
|
#include "absl/status/statusor.h"
|
34
33
|
#include "absl/strings/str_cat.h"
|
@@ -58,12 +57,10 @@
|
|
58
57
|
#include <grpc/support/log.h>
|
59
58
|
|
60
59
|
#include "src/core/ext/xds/upb_utils.h"
|
61
|
-
#include "src/core/ext/xds/xds_bootstrap.h"
|
62
60
|
#include "src/core/ext/xds/xds_cluster_specifier_plugin.h"
|
63
61
|
#include "src/core/ext/xds/xds_common_types.h"
|
64
62
|
#include "src/core/ext/xds/xds_http_filters.h"
|
65
63
|
#include "src/core/ext/xds/xds_resource_type.h"
|
66
|
-
#include "src/core/ext/xds/xds_resource_type_impl.h"
|
67
64
|
#include "src/core/ext/xds/xds_routing.h"
|
68
65
|
#include "src/core/lib/channel/status_util.h"
|
69
66
|
#include "src/core/lib/debug/trace.h"
|
@@ -71,20 +68,11 @@
|
|
71
68
|
#include "src/core/lib/gprpp/env.h"
|
72
69
|
#include "src/core/lib/gprpp/match.h"
|
73
70
|
#include "src/core/lib/gprpp/time.h"
|
74
|
-
#include "src/core/lib/
|
71
|
+
#include "src/core/lib/gprpp/validation_errors.h"
|
75
72
|
#include "src/core/lib/matchers/matchers.h"
|
76
73
|
|
77
74
|
namespace grpc_core {
|
78
75
|
|
79
|
-
// TODO(yashykt): Remove once RBAC is no longer experimental
|
80
|
-
bool XdsRbacEnabled() {
|
81
|
-
auto value = GetEnv("GRPC_XDS_EXPERIMENTAL_RBAC");
|
82
|
-
if (!value.has_value()) return false;
|
83
|
-
bool parsed_value;
|
84
|
-
bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value);
|
85
|
-
return parse_succeeded && parsed_value;
|
86
|
-
}
|
87
|
-
|
88
76
|
// TODO(donnadionne): Remove once RLS is no longer experimental
|
89
77
|
bool XdsRlsEnabled() {
|
90
78
|
auto value = GetEnv("GRPC_EXPERIMENTAL_XDS_RLS_LB");
|
@@ -144,7 +132,7 @@ XdsRouteConfigResource::Route::RouteAction::HashPolicy::HashPolicy(
|
|
144
132
|
regex_substitution(other.regex_substitution) {
|
145
133
|
if (other.regex != nullptr) {
|
146
134
|
regex =
|
147
|
-
|
135
|
+
std::make_unique<RE2>(other.regex->pattern(), other.regex->options());
|
148
136
|
}
|
149
137
|
}
|
150
138
|
|
@@ -155,7 +143,7 @@ XdsRouteConfigResource::Route::RouteAction::HashPolicy::operator=(
|
|
155
143
|
header_name = other.header_name;
|
156
144
|
if (other.regex != nullptr) {
|
157
145
|
regex =
|
158
|
-
|
146
|
+
std::make_unique<RE2>(other.regex->pattern(), other.regex->options());
|
159
147
|
}
|
160
148
|
regex_substitution = other.regex_substitution;
|
161
149
|
return *this;
|
@@ -243,6 +231,7 @@ XdsRouteConfigResource::Route::RouteAction::ClusterWeight::ToString() const {
|
|
243
231
|
|
244
232
|
std::string XdsRouteConfigResource::Route::RouteAction::ToString() const {
|
245
233
|
std::vector<std::string> contents;
|
234
|
+
contents.reserve(hash_policies.size());
|
246
235
|
for (const HashPolicy& hash_policy : hash_policies) {
|
247
236
|
contents.push_back(absl::StrCat("hash_policy=", hash_policy.ToString()));
|
248
237
|
}
|
@@ -345,45 +334,56 @@ ClusterSpecifierPluginParse(
|
|
345
334
|
const envoy_config_route_v3_RouteConfiguration* route_config) {
|
346
335
|
XdsRouteConfigResource::ClusterSpecifierPluginMap
|
347
336
|
cluster_specifier_plugin_map;
|
337
|
+
const auto& cluster_specifier_plugin_registry =
|
338
|
+
static_cast<const GrpcXdsBootstrap&>(context.client->bootstrap())
|
339
|
+
.cluster_specifier_plugin_registry();
|
348
340
|
size_t num_cluster_specifier_plugins;
|
349
341
|
const envoy_config_route_v3_ClusterSpecifierPlugin* const*
|
350
342
|
cluster_specifier_plugin =
|
351
343
|
envoy_config_route_v3_RouteConfiguration_cluster_specifier_plugins(
|
352
344
|
route_config, &num_cluster_specifier_plugins);
|
353
345
|
for (size_t i = 0; i < num_cluster_specifier_plugins; ++i) {
|
354
|
-
const envoy_config_core_v3_TypedExtensionConfig*
|
346
|
+
const envoy_config_core_v3_TypedExtensionConfig* typed_extension_config =
|
355
347
|
envoy_config_route_v3_ClusterSpecifierPlugin_extension(
|
356
348
|
cluster_specifier_plugin[i]);
|
357
349
|
std::string name = UpbStringToStdString(
|
358
|
-
envoy_config_core_v3_TypedExtensionConfig_name(
|
350
|
+
envoy_config_core_v3_TypedExtensionConfig_name(typed_extension_config));
|
359
351
|
if (cluster_specifier_plugin_map.find(name) !=
|
360
352
|
cluster_specifier_plugin_map.end()) {
|
361
353
|
return absl::InvalidArgumentError(absl::StrCat(
|
362
354
|
"Duplicated definition of cluster_specifier_plugin ", name));
|
363
355
|
}
|
364
356
|
const google_protobuf_Any* any =
|
365
|
-
envoy_config_core_v3_TypedExtensionConfig_typed_config(
|
357
|
+
envoy_config_core_v3_TypedExtensionConfig_typed_config(
|
358
|
+
typed_extension_config);
|
366
359
|
if (any == nullptr) {
|
367
360
|
return absl::InvalidArgumentError(
|
368
361
|
"Could not obtrain TypedExtensionConfig for plugin config.");
|
369
362
|
}
|
370
|
-
|
371
|
-
|
363
|
+
ValidationErrors validation_errors;
|
364
|
+
ValidationErrors::ScopedField field(
|
365
|
+
&validation_errors, absl::StrCat(".cluster_specifier_plugins[", i,
|
366
|
+
"].extension.typed_config"));
|
367
|
+
auto extension = ExtractXdsExtension(context, any, &validation_errors);
|
368
|
+
if (!validation_errors.ok()) {
|
369
|
+
return validation_errors.status("could not determine extension type");
|
370
|
+
}
|
371
|
+
GPR_ASSERT(extension.has_value());
|
372
372
|
bool is_optional = envoy_config_route_v3_ClusterSpecifierPlugin_is_optional(
|
373
373
|
cluster_specifier_plugin[i]);
|
374
374
|
const XdsClusterSpecifierPluginImpl* cluster_specifier_plugin_impl =
|
375
|
-
|
375
|
+
cluster_specifier_plugin_registry.GetPluginForType(extension->type);
|
376
376
|
std::string lb_policy_config;
|
377
377
|
if (cluster_specifier_plugin_impl == nullptr) {
|
378
378
|
if (!is_optional) {
|
379
379
|
return absl::InvalidArgumentError(absl::StrCat(
|
380
|
-
"Unknown ClusterSpecifierPlugin type ",
|
380
|
+
"Unknown ClusterSpecifierPlugin type ", extension->type));
|
381
381
|
}
|
382
382
|
// Optional plugin, leave lb_policy_config empty.
|
383
383
|
} else {
|
384
384
|
auto config =
|
385
385
|
cluster_specifier_plugin_impl->GenerateLoadBalancingPolicyConfig(
|
386
|
-
|
386
|
+
std::move(*extension), context.arena, context.symtab);
|
387
387
|
if (!config.ok()) return config.status();
|
388
388
|
lb_policy_config = std::move(*config);
|
389
389
|
}
|
@@ -581,7 +581,7 @@ absl::Status RouteRuntimeFractionParse(
|
|
581
581
|
route->matchers.fraction_per_million = numerator;
|
582
582
|
}
|
583
583
|
}
|
584
|
-
return
|
584
|
+
return absl::OkStatus();
|
585
585
|
}
|
586
586
|
|
587
587
|
template <typename ParentType, typename EntryType>
|
@@ -627,23 +627,31 @@ ParseTypedPerFilterConfig(
|
|
627
627
|
absl::StrCat("no filter config specified for filter name ", key));
|
628
628
|
}
|
629
629
|
}
|
630
|
-
|
631
|
-
|
630
|
+
ValidationErrors errors;
|
631
|
+
ValidationErrors::ScopedField field(
|
632
|
+
&errors, absl::StrCat(".typed_per_filter_config[", key, "]"));
|
633
|
+
auto extension = ExtractXdsExtension(context, any, &errors);
|
634
|
+
if (!errors.ok()) {
|
635
|
+
return errors.status("could not determine extension type");
|
636
|
+
}
|
637
|
+
GPR_ASSERT(extension.has_value());
|
638
|
+
const auto& http_filter_registry =
|
639
|
+
static_cast<const GrpcXdsBootstrap&>(context.client->bootstrap())
|
640
|
+
.http_filter_registry();
|
632
641
|
const XdsHttpFilterImpl* filter_impl =
|
633
|
-
|
642
|
+
http_filter_registry.GetFilterForType(extension->type);
|
634
643
|
if (filter_impl == nullptr) {
|
635
644
|
if (is_optional) continue;
|
636
|
-
return absl::InvalidArgumentError(
|
637
|
-
|
645
|
+
return absl::InvalidArgumentError(absl::StrCat(
|
646
|
+
"no filter registered for config type ", extension->type));
|
638
647
|
}
|
639
|
-
absl::
|
640
|
-
filter_impl->GenerateFilterConfigOverride(
|
641
|
-
|
642
|
-
if (!
|
643
|
-
return
|
644
|
-
absl::StrCat("filter config for type ", type->type,
|
645
|
-
" failed to parse: ", filter_config.status().message()));
|
648
|
+
absl::optional<XdsHttpFilterImpl::FilterConfig> filter_config =
|
649
|
+
filter_impl->GenerateFilterConfigOverride(std::move(*extension),
|
650
|
+
context.arena, &errors);
|
651
|
+
if (!errors.ok()) {
|
652
|
+
return errors.status("errors validation extension");
|
646
653
|
}
|
654
|
+
GPR_ASSERT(filter_config.has_value());
|
647
655
|
typed_per_filter_config[std::string(key)] = std::move(*filter_config);
|
648
656
|
}
|
649
657
|
return typed_per_filter_config;
|
@@ -698,14 +706,23 @@ absl::Status RetryPolicyParse(
|
|
698
706
|
errors.emplace_back(
|
699
707
|
"RouteAction RetryPolicy RetryBackoff missing base interval.");
|
700
708
|
} else {
|
709
|
+
ValidationErrors validation_errors;
|
701
710
|
retry_to_return.retry_back_off.base_interval =
|
702
|
-
ParseDuration(base_interval);
|
711
|
+
ParseDuration(base_interval, &validation_errors);
|
712
|
+
if (!validation_errors.ok()) {
|
713
|
+
errors.emplace_back(
|
714
|
+
validation_errors.status("base_interval").message());
|
715
|
+
}
|
703
716
|
}
|
704
717
|
const google_protobuf_Duration* max_interval =
|
705
718
|
envoy_config_route_v3_RetryPolicy_RetryBackOff_max_interval(backoff);
|
706
719
|
Duration max;
|
707
720
|
if (max_interval != nullptr) {
|
708
|
-
|
721
|
+
ValidationErrors validation_errors;
|
722
|
+
max = ParseDuration(max_interval, &validation_errors);
|
723
|
+
if (!validation_errors.ok()) {
|
724
|
+
errors.emplace_back(validation_errors.status("max_interval").message());
|
725
|
+
}
|
709
726
|
} else {
|
710
727
|
// if max interval is not set, it is 10x the base.
|
711
728
|
max = 10 * retry_to_return.retry_back_off.base_interval;
|
@@ -783,19 +800,17 @@ absl::StatusOr<XdsRouteConfigResource::Route::RouteAction> RouteActionParse(
|
|
783
800
|
cluster.weight = google_protobuf_UInt32Value_value(weight);
|
784
801
|
if (cluster.weight == 0) continue;
|
785
802
|
sum_of_weights += cluster.weight;
|
786
|
-
|
787
|
-
|
788
|
-
|
789
|
-
|
790
|
-
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
return typed_per_filter_config.status();
|
796
|
-
}
|
797
|
-
cluster.typed_per_filter_config = std::move(*typed_per_filter_config);
|
803
|
+
auto typed_per_filter_config = ParseTypedPerFilterConfig<
|
804
|
+
envoy_config_route_v3_WeightedCluster_ClusterWeight,
|
805
|
+
envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry>(
|
806
|
+
context, cluster_weight,
|
807
|
+
envoy_config_route_v3_WeightedCluster_ClusterWeight_typed_per_filter_config_next,
|
808
|
+
envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_key,
|
809
|
+
envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_value);
|
810
|
+
if (!typed_per_filter_config.ok()) {
|
811
|
+
return typed_per_filter_config.status();
|
798
812
|
}
|
813
|
+
cluster.typed_per_filter_config = std::move(*typed_per_filter_config);
|
799
814
|
action_weighted_clusters.emplace_back(std::move(cluster));
|
800
815
|
}
|
801
816
|
if (total_weight != sum_of_weights) {
|
@@ -847,7 +862,11 @@ absl::StatusOr<XdsRouteConfigResource::Route::RouteAction> RouteActionParse(
|
|
847
862
|
max_stream_duration);
|
848
863
|
}
|
849
864
|
if (duration != nullptr) {
|
850
|
-
|
865
|
+
ValidationErrors validation_errors;
|
866
|
+
route.max_stream_duration = ParseDuration(duration, &validation_errors);
|
867
|
+
if (!validation_errors.ok()) {
|
868
|
+
return validation_errors.status("max_stream_duration");
|
869
|
+
}
|
851
870
|
}
|
852
871
|
}
|
853
872
|
}
|
@@ -888,7 +907,7 @@ absl::StatusOr<XdsRouteConfigResource::Route::RouteAction> RouteActionParse(
|
|
888
907
|
continue;
|
889
908
|
}
|
890
909
|
RE2::Options options;
|
891
|
-
policy.regex =
|
910
|
+
policy.regex = std::make_unique<RE2>(
|
892
911
|
UpbStringToStdString(
|
893
912
|
envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher)),
|
894
913
|
options);
|
@@ -980,19 +999,17 @@ absl::StatusOr<XdsRouteConfigResource> XdsRouteConfigResource::Parse(
|
|
980
999
|
return absl::InvalidArgumentError("VirtualHost has no domains");
|
981
1000
|
}
|
982
1001
|
// Parse typed_per_filter_config.
|
983
|
-
|
984
|
-
|
985
|
-
|
986
|
-
|
987
|
-
|
988
|
-
|
989
|
-
|
990
|
-
|
991
|
-
|
992
|
-
return typed_per_filter_config.status();
|
993
|
-
}
|
994
|
-
vhost.typed_per_filter_config = std::move(*typed_per_filter_config);
|
1002
|
+
auto typed_per_filter_config = ParseTypedPerFilterConfig<
|
1003
|
+
envoy_config_route_v3_VirtualHost,
|
1004
|
+
envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry>(
|
1005
|
+
context, virtual_hosts[i],
|
1006
|
+
envoy_config_route_v3_VirtualHost_typed_per_filter_config_next,
|
1007
|
+
envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry_key,
|
1008
|
+
envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry_value);
|
1009
|
+
if (!typed_per_filter_config.ok()) {
|
1010
|
+
return typed_per_filter_config.status();
|
995
1011
|
}
|
1012
|
+
vhost.typed_per_filter_config = std::move(*typed_per_filter_config);
|
996
1013
|
// Parse retry policy.
|
997
1014
|
absl::optional<XdsRouteConfigResource::RetryPolicy>
|
998
1015
|
virtual_host_retry_policy;
|
@@ -1063,19 +1080,17 @@ absl::StatusOr<XdsRouteConfigResource> XdsRouteConfigResource::Parse(
|
|
1063
1080
|
route.action
|
1064
1081
|
.emplace<XdsRouteConfigResource::Route::NonForwardingAction>();
|
1065
1082
|
}
|
1066
|
-
|
1067
|
-
|
1068
|
-
|
1069
|
-
|
1070
|
-
|
1071
|
-
|
1072
|
-
|
1073
|
-
|
1074
|
-
|
1075
|
-
return typed_per_filter_config.status();
|
1076
|
-
}
|
1077
|
-
route.typed_per_filter_config = std::move(*typed_per_filter_config);
|
1083
|
+
auto typed_per_filter_config = ParseTypedPerFilterConfig<
|
1084
|
+
envoy_config_route_v3_Route,
|
1085
|
+
envoy_config_route_v3_Route_TypedPerFilterConfigEntry>(
|
1086
|
+
context, routes[j],
|
1087
|
+
envoy_config_route_v3_Route_typed_per_filter_config_next,
|
1088
|
+
envoy_config_route_v3_Route_TypedPerFilterConfigEntry_key,
|
1089
|
+
envoy_config_route_v3_Route_TypedPerFilterConfigEntry_value);
|
1090
|
+
if (!typed_per_filter_config.ok()) {
|
1091
|
+
return typed_per_filter_config.status();
|
1078
1092
|
}
|
1093
|
+
route.typed_per_filter_config = std::move(*typed_per_filter_config);
|
1079
1094
|
vhost.routes.emplace_back(std::move(route));
|
1080
1095
|
}
|
1081
1096
|
if (vhost.routes.empty()) {
|
@@ -1114,7 +1129,7 @@ void MaybeLogRouteConfiguration(
|
|
1114
1129
|
|
1115
1130
|
XdsResourceType::DecodeResult XdsRouteConfigResourceType::Decode(
|
1116
1131
|
const XdsResourceType::DecodeContext& context,
|
1117
|
-
absl::string_view serialized_resource
|
1132
|
+
absl::string_view serialized_resource) const {
|
1118
1133
|
DecodeResult result;
|
1119
1134
|
// Parse serialized proto.
|
1120
1135
|
auto* resource = envoy_config_route_v3_RouteConfiguration_parse(
|
@@ -1142,9 +1157,8 @@ XdsResourceType::DecodeResult XdsRouteConfigResourceType::Decode(
|
|
1142
1157
|
context.client, result.name->c_str(),
|
1143
1158
|
rds_update->ToString().c_str());
|
1144
1159
|
}
|
1145
|
-
|
1146
|
-
|
1147
|
-
result.resource = std::move(resource);
|
1160
|
+
result.resource =
|
1161
|
+
std::make_unique<XdsRouteConfigResource>(std::move(*rds_update));
|
1148
1162
|
}
|
1149
1163
|
return result;
|
1150
1164
|
}
|
@@ -36,6 +36,8 @@
|
|
36
36
|
#include "re2/re2.h"
|
37
37
|
#include "upb/def.h"
|
38
38
|
|
39
|
+
#include "src/core/ext/xds/xds_bootstrap_grpc.h"
|
40
|
+
#include "src/core/ext/xds/xds_client.h"
|
39
41
|
#include "src/core/ext/xds/xds_cluster_specifier_plugin.h"
|
40
42
|
#include "src/core/ext/xds/xds_http_filters.h"
|
41
43
|
#include "src/core/ext/xds/xds_resource_type.h"
|
@@ -46,9 +48,7 @@
|
|
46
48
|
|
47
49
|
namespace grpc_core {
|
48
50
|
|
49
|
-
|
50
|
-
|
51
|
-
struct XdsRouteConfigResource {
|
51
|
+
struct XdsRouteConfigResource : public XdsResourceType::ResourceData {
|
52
52
|
using TypedPerFilterConfig =
|
53
53
|
std::map<std::string, XdsHttpFilterImpl::FilterConfig>;
|
54
54
|
|
@@ -222,17 +222,17 @@ class XdsRouteConfigResourceType
|
|
222
222
|
absl::string_view type_url() const override {
|
223
223
|
return "envoy.config.route.v3.RouteConfiguration";
|
224
224
|
}
|
225
|
-
absl::string_view v2_type_url() const override {
|
226
|
-
return "envoy.api.v2.RouteConfiguration";
|
227
|
-
}
|
228
225
|
|
229
226
|
DecodeResult Decode(const XdsResourceType::DecodeContext& context,
|
230
|
-
absl::string_view serialized_resource
|
231
|
-
bool /*is_v2*/) const override;
|
227
|
+
absl::string_view serialized_resource) const override;
|
232
228
|
|
233
|
-
void InitUpbSymtab(
|
229
|
+
void InitUpbSymtab(XdsClient* xds_client,
|
230
|
+
upb_DefPool* symtab) const override {
|
234
231
|
envoy_config_route_v3_RouteConfiguration_getmsgdef(symtab);
|
235
|
-
|
232
|
+
const auto& cluster_specifier_plugin_registry =
|
233
|
+
static_cast<const GrpcXdsBootstrap&>(xds_client->bootstrap())
|
234
|
+
.cluster_specifier_plugin_registry();
|
235
|
+
cluster_specifier_plugin_registry.PopulateSymtab(symtab);
|
236
236
|
}
|
237
237
|
};
|
238
238
|
|
@@ -220,6 +220,7 @@ const XdsHttpFilterImpl::FilterConfig* FindFilterConfigOverride(
|
|
220
220
|
|
221
221
|
absl::StatusOr<XdsRouting::GeneratePerHttpFilterConfigsResult>
|
222
222
|
XdsRouting::GeneratePerHTTPFilterConfigs(
|
223
|
+
const XdsHttpFilterRegistry& http_filter_registry,
|
223
224
|
const std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>&
|
224
225
|
http_filters,
|
225
226
|
const XdsRouteConfigResource::VirtualHost& vhost,
|
@@ -233,7 +234,7 @@ XdsRouting::GeneratePerHTTPFilterConfigs(
|
|
233
234
|
// Find filter. This is guaranteed to succeed, because it's checked
|
234
235
|
// at config validation time in the XdsApi code.
|
235
236
|
const XdsHttpFilterImpl* filter_impl =
|
236
|
-
|
237
|
+
http_filter_registry.GetFilterForType(
|
237
238
|
http_filter.config.config_proto_type_name);
|
238
239
|
GPR_ASSERT(filter_impl != nullptr);
|
239
240
|
// If there is not actually any C-core filter associated with this
|
@@ -31,6 +31,7 @@
|
|
31
31
|
#include "absl/strings/string_view.h"
|
32
32
|
#include "absl/types/optional.h"
|
33
33
|
|
34
|
+
#include "src/core/ext/xds/xds_http_filters.h"
|
34
35
|
#include "src/core/ext/xds/xds_listener.h"
|
35
36
|
#include "src/core/ext/xds/xds_route_config.h"
|
36
37
|
#include "src/core/lib/channel/channel_args.h"
|
@@ -90,6 +91,7 @@ class XdsRouting {
|
|
90
91
|
// Generates a map of per_filter_configs. \a args is consumed.
|
91
92
|
static absl::StatusOr<GeneratePerHttpFilterConfigsResult>
|
92
93
|
GeneratePerHTTPFilterConfigs(
|
94
|
+
const XdsHttpFilterRegistry& http_filter_registry,
|
93
95
|
const std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>&
|
94
96
|
http_filters,
|
95
97
|
const XdsRouteConfigResource::VirtualHost& vhost,
|