From 6b63820cf287b1a687f1373b45b4a74574c28195 Mon Sep 17 00:00:00 2001 From: code Date: Mon, 4 Dec 2023 21:57:19 +0800 Subject: [PATCH] router: remove deprecated runtime flag (#31151) Signed-off-by: wbpcode --- changelogs/current.yaml | 4 + envoy/router/route_config_provider_manager.h | 5 - source/common/router/config_impl.cc | 120 ++++------- source/common/router/config_impl.h | 19 +- source/common/router/rds_impl.cc | 32 ++- source/common/router/rds_impl.h | 2 - .../route_config_update_receiver_impl.cc | 4 +- .../route_config_update_receiver_impl.h | 11 +- source/common/router/scoped_rds.cc | 44 ++--- source/common/router/scoped_rds.h | 17 +- source/common/runtime/runtime_features.cc | 1 - .../config_impl_headermap_benchmark_test.cc | 4 +- test/common/router/config_impl_speed_test.cc | 2 +- test/common/router/config_impl_test.cc | 118 +---------- test/common/router/rds_impl_test.cc | 186 +----------------- test/common/router/route_fuzz_test.cc | 2 +- test/common/router/router_ratelimit_test.cc | 4 +- test/common/router/scoped_rds_test.cc | 49 +---- test/common/router/vhds_test.cc | 4 +- .../http_typed_per_filter_config_test.cc | 22 --- .../scoped_rds_integration_test.cc | 61 ------ test/mocks/router/mocks.h | 2 - test/tools/router_check/router.cc | 3 +- 23 files changed, 106 insertions(+), 610 deletions(-) diff --git a/changelogs/current.yaml b/changelogs/current.yaml index 3d399190bcf3..9fdb904d9407 100644 --- a/changelogs/current.yaml +++ b/changelogs/current.yaml @@ -129,6 +129,10 @@ removed_config_or_runtime: change: | Removed the deprecated ``envoy.reloadable_features.format_ports_as_numbers`` runtime flag and legacy code path. +- area: router + change: | + Removed the deprecated ``envoy.reloadable_features.ignore_optional_option_from_hcm_for_route_config`` + runtime flag and legacy code path. new_features: - area: filters diff --git a/envoy/router/route_config_provider_manager.h b/envoy/router/route_config_provider_manager.h index e83ad69225f1..67a184f2ba8e 100644 --- a/envoy/router/route_config_provider_manager.h +++ b/envoy/router/route_config_provider_manager.h @@ -25,7 +25,6 @@ namespace Router { class RouteConfigProviderManager { public: virtual ~RouteConfigProviderManager() = default; - using OptionalHttpFilters = absl::flat_hash_set; /** * Get a RouteConfigProviderPtr for a route from RDS. Ownership of the RouteConfigProvider is the @@ -34,7 +33,6 @@ class RouteConfigProviderManager { * the RouteConfigProvider. This method creates a RouteConfigProvider which may share the * underlying RDS subscription with the same (route_config_name, cluster). * @param rds supplies the proto configuration of an RDS-configured RouteConfigProvider. - * @param optional_http_filters a set of optional http filter names. * @param factory_context is the context to use for the route config provider. * @param stat_prefix supplies the stat_prefix to use for the provider stats. * @param init_manager the Init::Manager used to coordinate initialization of a the underlying RDS @@ -42,7 +40,6 @@ class RouteConfigProviderManager { */ virtual RouteConfigProviderSharedPtr createRdsRouteConfigProvider( const envoy::extensions::filters::network::http_connection_manager::v3::Rds& rds, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, const std::string& stat_prefix, Init::Manager& init_manager) PURE; @@ -50,13 +47,11 @@ class RouteConfigProviderManager { * Get a RouteConfigSharedPtr for a statically defined route. Ownership is as described for * getRdsRouteConfigProvider above. This method always create a new RouteConfigProvider. * @param route_config supplies the RouteConfiguration for this route - * @param optional_http_filters a set of optional http filter names. * @param factory_context is the context to use for the route config provider. * @param validator is the message validator for route config. */ virtual RouteConfigProviderPtr createStaticRouteConfigProvider(const envoy::config::route::v3::RouteConfiguration& route_config, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator) PURE; }; diff --git a/source/common/router/config_impl.cc b/source/common/router/config_impl.cc index 3978cc9050ac..a4f1fdbaaa87 100644 --- a/source/common/router/config_impl.cc +++ b/source/common/router/config_impl.cc @@ -75,7 +75,6 @@ void mergeTransforms(Http::HeaderTransforms& dest, const Http::HeaderTransforms& RouteEntryImplBaseConstSharedPtr createAndValidateRoute( const envoy::config::route::v3::Route& route_config, const CommonVirtualHostSharedPtr& vhost, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator, const absl::optional& validation_clusters) { @@ -83,28 +82,25 @@ RouteEntryImplBaseConstSharedPtr createAndValidateRoute( RouteEntryImplBaseConstSharedPtr route; switch (route_config.match().path_specifier_case()) { case envoy::config::route::v3::RouteMatch::PathSpecifierCase::kPrefix: - route = std::make_shared(vhost, route_config, optional_http_filters, - factory_context, validator); + route = std::make_shared(vhost, route_config, factory_context, validator); break; case envoy::config::route::v3::RouteMatch::PathSpecifierCase::kPath: - route = std::make_shared(vhost, route_config, optional_http_filters, - factory_context, validator); + route = std::make_shared(vhost, route_config, factory_context, validator); break; case envoy::config::route::v3::RouteMatch::PathSpecifierCase::kSafeRegex: - route = std::make_shared(vhost, route_config, optional_http_filters, - factory_context, validator); + route = std::make_shared(vhost, route_config, factory_context, validator); break; case envoy::config::route::v3::RouteMatch::PathSpecifierCase::kConnectMatcher: - route = std::make_shared(vhost, route_config, optional_http_filters, - factory_context, validator); + route = + std::make_shared(vhost, route_config, factory_context, validator); break; case envoy::config::route::v3::RouteMatch::PathSpecifierCase::kPathSeparatedPrefix: - route = std::make_shared( - vhost, route_config, optional_http_filters, factory_context, validator); + route = std::make_shared(vhost, route_config, + factory_context, validator); break; case envoy::config::route::v3::RouteMatch::PathSpecifierCase::kPathMatchPolicy: - route = std::make_shared( - vhost, route_config, optional_http_filters, factory_context, validator); + route = std::make_shared(vhost, route_config, factory_context, + validator); break; case envoy::config::route::v3::RouteMatch::PathSpecifierCase::PATH_SPECIFIER_NOT_SET: break; // throw the error below. @@ -480,7 +476,6 @@ const Tracing::CustomTagMap& RouteTracingImpl::getCustomTags() const { return cu RouteEntryImplBase::RouteEntryImplBase(const CommonVirtualHostSharedPtr& vhost, const envoy::config::route::v3::Route& route, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator) : prefix_rewrite_(route.route().prefix_rewrite()), @@ -520,8 +515,7 @@ RouteEntryImplBase::RouteEntryImplBase(const CommonVirtualHostSharedPtr& vhost, direct_response_body_(ConfigUtility::parseDirectResponseBody( route, factory_context.api(), vhost_->globalRouteConfig().maxDirectResponseBodySizeBytes())), - per_filter_configs_(route.typed_per_filter_config(), optional_http_filters, factory_context, - validator), + per_filter_configs_(route.typed_per_filter_config(), factory_context, validator), route_name_(route.name()), time_source_(factory_context.mainThreadDispatcher().timeSource()), retry_shadow_buffer_limit_(PROTOBUF_GET_WRAPPED_OR_DEFAULT( route, per_request_buffer_limit_bytes, vhost->retryShadowBufferLimit())), @@ -577,8 +571,7 @@ RouteEntryImplBase::RouteEntryImplBase(const CommonVirtualHostSharedPtr& vhost, weighted_clusters.reserve(route.route().weighted_clusters().clusters().size()); for (const auto& cluster : route.route().weighted_clusters().clusters()) { auto cluster_entry = std::make_unique( - this, runtime_key_prefix + "." + cluster.name(), factory_context, validator, cluster, - optional_http_filters); + this, runtime_key_prefix + "." + cluster.name(), factory_context, validator, cluster); weighted_clusters.emplace_back(std::move(cluster_entry)); total_weight += weighted_clusters.back()->clusterWeight(); if (total_weight > std::numeric_limits::max()) { @@ -1395,13 +1388,11 @@ RouteEntryImplBase::WeightedClusterEntry::WeightedClusterEntry( const RouteEntryImplBase* parent, const std::string& runtime_key, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator, - const envoy::config::route::v3::WeightedCluster::ClusterWeight& cluster, - const OptionalHttpFilters& optional_http_filters) + const envoy::config::route::v3::WeightedCluster::ClusterWeight& cluster) : DynamicRouteEntry(parent, nullptr, validateWeightedClusterSpecifier(cluster).name()), runtime_key_(runtime_key), loader_(factory_context.runtime()), cluster_weight_(PROTOBUF_GET_WRAPPED_REQUIRED(cluster, weight)), - per_filter_configs_(cluster.typed_per_filter_config(), optional_http_filters, factory_context, - validator), + per_filter_configs_(cluster.typed_per_filter_config(), factory_context, validator), host_rewrite_(cluster.host_rewrite_literal()), cluster_header_name_(cluster.cluster_header()) { if (!cluster.request_headers_to_add().empty() || !cluster.request_headers_to_remove().empty()) { @@ -1457,10 +1448,9 @@ void RouteEntryImplBase::WeightedClusterEntry::traversePerFilterConfig( UriTemplateMatcherRouteEntryImpl::UriTemplateMatcherRouteEntryImpl( const CommonVirtualHostSharedPtr& vhost, const envoy::config::route::v3::Route& route, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator) - : RouteEntryImplBase(vhost, route, optional_http_filters, factory_context, validator), + : RouteEntryImplBase(vhost, route, factory_context, validator), uri_template_(path_matcher_->uriTemplate()){}; void UriTemplateMatcherRouteEntryImpl::rewritePathHeader(Http::RequestHeaderMap& headers, @@ -1486,10 +1476,9 @@ UriTemplateMatcherRouteEntryImpl::matches(const Http::RequestHeaderMap& headers, PrefixRouteEntryImpl::PrefixRouteEntryImpl( const CommonVirtualHostSharedPtr& vhost, const envoy::config::route::v3::Route& route, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator) - : RouteEntryImplBase(vhost, route, optional_http_filters, factory_context, validator), + : RouteEntryImplBase(vhost, route, factory_context, validator), path_matcher_( Matchers::PathMatcher::createPrefix(route.match().prefix(), !case_sensitive())) {} @@ -1515,10 +1504,9 @@ RouteConstSharedPtr PrefixRouteEntryImpl::matches(const Http::RequestHeaderMap& PathRouteEntryImpl::PathRouteEntryImpl(const CommonVirtualHostSharedPtr& vhost, const envoy::config::route::v3::Route& route, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator) - : RouteEntryImplBase(vhost, route, optional_http_filters, factory_context, validator), + : RouteEntryImplBase(vhost, route, factory_context, validator), path_matcher_(Matchers::PathMatcher::createExact(route.match().path(), !case_sensitive())) {} void PathRouteEntryImpl::rewritePathHeader(Http::RequestHeaderMap& headers, @@ -1544,10 +1532,9 @@ RouteConstSharedPtr PathRouteEntryImpl::matches(const Http::RequestHeaderMap& he RegexRouteEntryImpl::RegexRouteEntryImpl( const CommonVirtualHostSharedPtr& vhost, const envoy::config::route::v3::Route& route, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator) - : RouteEntryImplBase(vhost, route, optional_http_filters, factory_context, validator), + : RouteEntryImplBase(vhost, route, factory_context, validator), path_matcher_(Matchers::PathMatcher::createSafeRegex(route.match().safe_regex())) { ASSERT(route.match().path_specifier_case() == envoy::config::route::v3::RouteMatch::PathSpecifierCase::kSafeRegex); @@ -1581,10 +1568,9 @@ RouteConstSharedPtr RegexRouteEntryImpl::matches(const Http::RequestHeaderMap& h ConnectRouteEntryImpl::ConnectRouteEntryImpl( const CommonVirtualHostSharedPtr& vhost, const envoy::config::route::v3::Route& route, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator) - : RouteEntryImplBase(vhost, route, optional_http_filters, factory_context, validator) {} + : RouteEntryImplBase(vhost, route, factory_context, validator) {} void ConnectRouteEntryImpl::rewritePathHeader(Http::RequestHeaderMap& headers, bool insert_envoy_original_path) const { @@ -1612,10 +1598,9 @@ RouteConstSharedPtr ConnectRouteEntryImpl::matches(const Http::RequestHeaderMap& PathSeparatedPrefixRouteEntryImpl::PathSeparatedPrefixRouteEntryImpl( const CommonVirtualHostSharedPtr& vhost, const envoy::config::route::v3::Route& route, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator) - : RouteEntryImplBase(vhost, route, optional_http_filters, factory_context, validator), + : RouteEntryImplBase(vhost, route, factory_context, validator), path_matcher_(Matchers::PathMatcher::createPrefix(route.match().path_separated_prefix(), !case_sensitive())) {} @@ -1649,14 +1634,12 @@ PathSeparatedPrefixRouteEntryImpl::matches(const Http::RequestHeaderMap& headers CommonVirtualHostImpl::CommonVirtualHostImpl( const envoy::config::route::v3::VirtualHost& virtual_host, - const OptionalHttpFilters& optional_http_filters, const CommonConfigSharedPtr& global_route_config, Server::Configuration::ServerFactoryContext& factory_context, Stats::Scope& scope, ProtobufMessage::ValidationVisitor& validator) : stat_name_storage_(virtual_host.name(), factory_context.scope().symbolTable()), global_route_config_(global_route_config), - per_filter_configs_(virtual_host.typed_per_filter_config(), optional_http_filters, - factory_context, validator), + per_filter_configs_(virtual_host.typed_per_filter_config(), factory_context, validator), retry_shadow_buffer_limit_(PROTOBUF_GET_WRAPPED_OR_DEFAULT( virtual_host, per_request_buffer_limit_bytes, std::numeric_limits::max())), include_attempt_count_in_request_(virtual_host.include_request_attempt_count()), @@ -1779,14 +1762,13 @@ const Envoy::Config::TypedMetadata& CommonVirtualHostImpl::typedMetadata() const VirtualHostImpl::VirtualHostImpl( const envoy::config::route::v3::VirtualHost& virtual_host, - const OptionalHttpFilters& optional_http_filters, const CommonConfigSharedPtr& global_route_config, Server::Configuration::ServerFactoryContext& factory_context, Stats::Scope& scope, ProtobufMessage::ValidationVisitor& validator, const absl::optional& validation_clusters) { - shared_virtual_host_ = std::make_shared( - virtual_host, optional_http_filters, global_route_config, factory_context, scope, validator); + shared_virtual_host_ = std::make_shared(virtual_host, global_route_config, + factory_context, scope, validator); switch (virtual_host.require_tls()) { PANIC_ON_PROTO_ENUM_SENTINEL_VALUES; @@ -1802,7 +1784,7 @@ VirtualHostImpl::VirtualHostImpl( } if (virtual_host.has_matcher()) { - RouteActionContext context{shared_virtual_host_, optional_http_filters, factory_context}; + RouteActionContext context{shared_virtual_host_, factory_context}; RouteActionValidationVisitor validation_visitor; Matcher::MatchTreeFactory factory( context, factory_context, validation_visitor); @@ -1817,9 +1799,8 @@ VirtualHostImpl::VirtualHostImpl( } } else { for (const auto& route : virtual_host.routes()) { - routes_.emplace_back(createAndValidateRoute(route, shared_virtual_host_, - optional_http_filters, factory_context, validator, - validation_clusters)); + routes_.emplace_back(createAndValidateRoute(route, shared_virtual_host_, factory_context, + validator, validation_clusters)); } } } @@ -1939,7 +1920,6 @@ const VirtualHostImpl* RouteMatcher::findWildcardVirtualHost( } RouteMatcher::RouteMatcher(const envoy::config::route::v3::RouteConfiguration& route_config, - const OptionalHttpFilters& optional_http_filters, const CommonConfigSharedPtr& global_route_config, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator, bool validate_clusters) @@ -1951,9 +1931,9 @@ RouteMatcher::RouteMatcher(const envoy::config::route::v3::RouteConfiguration& r validation_clusters = factory_context.clusterManager().clusters(); } for (const auto& virtual_host_config : route_config.virtual_hosts()) { - VirtualHostSharedPtr virtual_host = std::make_shared( - virtual_host_config, optional_http_filters, global_route_config, factory_context, - *vhost_scope_, validator, validation_clusters); + VirtualHostSharedPtr virtual_host = + std::make_shared(virtual_host_config, global_route_config, factory_context, + *vhost_scope_, validator, validation_clusters); for (const std::string& domain_name : virtual_host_config.domains()) { const Http::LowerCaseString lower_case_domain_name(domain_name); absl::string_view domain = lower_case_domain_name; @@ -2066,12 +2046,10 @@ CommonVirtualHostImpl::virtualClusterFromEntries(const Http::HeaderMap& headers) } CommonConfigImpl::CommonConfigImpl(const envoy::config::route::v3::RouteConfiguration& config, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator) : name_(config.name()), symbol_table_(factory_context.scope().symbolTable()), - per_filter_configs_(config.typed_per_filter_config(), optional_http_filters, factory_context, - validator), + per_filter_configs_(config.typed_per_filter_config(), factory_context, validator), max_direct_response_body_size_bytes_( PROTOBUF_GET_WRAPPED_OR_DEFAULT(config, max_direct_response_body_size_bytes, DEFAULT_MAX_DIRECT_RESPONSE_BODY_SIZE_BYTES)), @@ -2130,16 +2108,14 @@ const Envoy::Config::TypedMetadata& CommonConfigImpl::typedMetadata() const { } ConfigImpl::ConfigImpl(const envoy::config::route::v3::RouteConfiguration& config, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator, bool validate_clusters_default) { - shared_config_ = - std::make_shared(config, optional_http_filters, factory_context, validator); + shared_config_ = std::make_shared(config, factory_context, validator); route_matcher_ = std::make_unique( - config, optional_http_filters, shared_config_, factory_context, validator, + config, shared_config_, factory_context, validator, PROTOBUF_GET_WRAPPED_OR_DEFAULT(config, validate_clusters, validate_clusters_default)); } @@ -2197,13 +2173,9 @@ RouteSpecificFilterConfigConstSharedPtr PerFilterConfigs::createRouteSpecificFil PerFilterConfigs::PerFilterConfigs( const Protobuf::Map& typed_configs, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator) { - const bool ignore_optional_option_from_hcm_for_route_config(Runtime::runtimeFeatureEnabled( - "envoy.reloadable_features.ignore_optional_option_from_hcm_for_route_config")); - std::string filter_config_type = envoy::config::route::v3::FilterConfig::default_instance().GetTypeName(); @@ -2211,20 +2183,6 @@ PerFilterConfigs::PerFilterConfigs( const std::string& name = per_filter_config.first; RouteSpecificFilterConfigConstSharedPtr config; - // There are two ways to mark a route/virtual host per filter configuration as optional: - // 1. Mark it as optional in the HTTP filter of HCM. This way is deprecated but still works - // when the runtime flag - // `envoy.reloadable_features.ignore_optional_option_from_hcm_for_route_config` - // is explicitly set to false. - // 2. Mark it as optional in the route/virtual host per filter configuration. This way is - // recommended. - // - // We check the first way first to ensure if this filter configuration is marked as optional - // or not. This will be true if the runtime flag is explicitly reverted to false and the - // config name is in the optional http filter list. - bool is_optional_by_hcm = !ignore_optional_option_from_hcm_for_route_config && - (optional_http_filters.find(name) != optional_http_filters.end()); - if (TypeUtil::typeUrlToDescriptorFullName(per_filter_config.second.type_url()) == filter_config_type) { envoy::config::route::v3::FilterConfig filter_config; @@ -2250,11 +2208,10 @@ PerFilterConfigs::PerFilterConfigs( continue; } - config = createRouteSpecificFilterConfig(name, filter_config.config(), - is_optional_by_hcm || filter_config.is_optional(), - factory_context, validator); + config = createRouteSpecificFilterConfig( + name, filter_config.config(), filter_config.is_optional(), factory_context, validator); } else { - config = createRouteSpecificFilterConfig(name, per_filter_config.second, is_optional_by_hcm, + config = createRouteSpecificFilterConfig(name, per_filter_config.second, false, factory_context, validator); } @@ -2285,8 +2242,8 @@ Matcher::ActionFactoryCb RouteMatchActionFactory::createActionFactoryCb( const auto& route_config = MessageUtil::downcastAndValidate(config, validation_visitor); - auto route = createAndValidateRoute(route_config, context.vhost, context.optional_http_filters, - context.factory_context, validation_visitor, absl::nullopt); + auto route = createAndValidateRoute(route_config, context.vhost, context.factory_context, + validation_visitor, absl::nullopt); return [route]() { return std::make_unique(route); }; } @@ -2301,9 +2258,8 @@ Matcher::ActionFactoryCb RouteListMatchActionFactory::createActionFactoryCb( std::vector routes; for (const auto& route : route_config.routes()) { - routes.emplace_back(createAndValidateRoute(route, context.vhost, context.optional_http_filters, - context.factory_context, validation_visitor, - absl::nullopt)); + routes.emplace_back(createAndValidateRoute(route, context.vhost, context.factory_context, + validation_visitor, absl::nullopt)); } return [routes]() { return std::make_unique(routes); }; } diff --git a/source/common/router/config_impl.h b/source/common/router/config_impl.h index 67720677b342..1316733a0a49 100644 --- a/source/common/router/config_impl.h +++ b/source/common/router/config_impl.h @@ -80,8 +80,6 @@ class Matchable { virtual bool supportsPathlessHeaders() const { return false; } }; -using OptionalHttpFilters = absl::flat_hash_set; - class PerFilterConfigs : public Logger::Loggable { public: struct FilterConfig { @@ -90,7 +88,6 @@ class PerFilterConfigs : public Logger::Loggable { }; PerFilterConfigs(const Protobuf::Map& typed_configs, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator); @@ -238,7 +235,6 @@ using CommonConfigSharedPtr = std::shared_ptr; class CommonVirtualHostImpl : public VirtualHost, Logger::Loggable { public: CommonVirtualHostImpl(const envoy::config::route::v3::VirtualHost& virtual_host, - const OptionalHttpFilters& optional_http_filters, const CommonConfigSharedPtr& global_route_config, Server::Configuration::ServerFactoryContext& factory_context, Stats::Scope& scope, ProtobufMessage::ValidationVisitor& validator); @@ -366,7 +362,6 @@ class VirtualHostImpl : Logger::Loggable { public: VirtualHostImpl( const envoy::config::route::v3::VirtualHost& virtual_host, - const OptionalHttpFilters& optional_http_filters, const CommonConfigSharedPtr& global_route_config, Server::Configuration::ServerFactoryContext& factory_context, Stats::Scope& scope, ProtobufMessage::ValidationVisitor& validator, @@ -613,7 +608,6 @@ class RouteEntryImplBase : public RouteEntryAndRoute, */ RouteEntryImplBase(const CommonVirtualHostSharedPtr& vhost, const envoy::config::route::v3::Route& route, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator); @@ -955,8 +949,7 @@ class RouteEntryImplBase : public RouteEntryAndRoute, WeightedClusterEntry(const RouteEntryImplBase* parent, const std::string& rutime_key, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator, - const envoy::config::route::v3::WeightedCluster::ClusterWeight& cluster, - const OptionalHttpFilters& optional_http_filters); + const envoy::config::route::v3::WeightedCluster::ClusterWeight& cluster); uint64_t clusterWeight() const { return loader_.snapshot().getInteger(runtime_key_, cluster_weight_); @@ -1230,7 +1223,6 @@ class UriTemplateMatcherRouteEntryImpl : public RouteEntryImplBase { public: UriTemplateMatcherRouteEntryImpl(const CommonVirtualHostSharedPtr& vhost, const envoy::config::route::v3::Route& route, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator); @@ -1262,7 +1254,6 @@ class PrefixRouteEntryImpl : public RouteEntryImplBase { public: PrefixRouteEntryImpl(const CommonVirtualHostSharedPtr& vhost, const envoy::config::route::v3::Route& route, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator); @@ -1296,7 +1287,6 @@ class PathRouteEntryImpl : public RouteEntryImplBase { public: PathRouteEntryImpl(const CommonVirtualHostSharedPtr& vhost, const envoy::config::route::v3::Route& route, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator); @@ -1330,7 +1320,6 @@ class RegexRouteEntryImpl : public RouteEntryImplBase { public: RegexRouteEntryImpl(const CommonVirtualHostSharedPtr& vhost, const envoy::config::route::v3::Route& route, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator); @@ -1365,7 +1354,6 @@ class ConnectRouteEntryImpl : public RouteEntryImplBase { public: ConnectRouteEntryImpl(const CommonVirtualHostSharedPtr& vhost, const envoy::config::route::v3::Route& route, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator); @@ -1395,7 +1383,6 @@ class PathSeparatedPrefixRouteEntryImpl : public RouteEntryImplBase { public: PathSeparatedPrefixRouteEntryImpl(const CommonVirtualHostSharedPtr& vhost, const envoy::config::route::v3::Route& route, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator); @@ -1425,7 +1412,6 @@ class PathSeparatedPrefixRouteEntryImpl : public RouteEntryImplBase { // Contextual information used to construct the route actions for a match tree. struct RouteActionContext { const CommonVirtualHostSharedPtr& vhost; - const OptionalHttpFilters& optional_http_filters; Server::Configuration::ServerFactoryContext& factory_context; }; @@ -1487,7 +1473,6 @@ DECLARE_FACTORY(RouteListMatchActionFactory); class RouteMatcher { public: RouteMatcher(const envoy::config::route::v3::RouteConfiguration& config, - const OptionalHttpFilters& optional_http_filters, const CommonConfigSharedPtr& global_route_config, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator, bool validate_clusters); @@ -1530,7 +1515,6 @@ class RouteMatcher { class CommonConfigImpl : public CommonConfig { public: CommonConfigImpl(const envoy::config::route::v3::RouteConfiguration& config, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator); @@ -1598,7 +1582,6 @@ class CommonConfigImpl : public CommonConfig { class ConfigImpl : public Config { public: ConfigImpl(const envoy::config::route::v3::RouteConfiguration& config, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator, bool validate_clusters_default); diff --git a/source/common/router/rds_impl.cc b/source/common/router/rds_impl.cc index fe4cc2ba5bae..18475ae48d06 100644 --- a/source/common/router/rds_impl.cc +++ b/source/common/router/rds_impl.cc @@ -28,24 +28,18 @@ RouteConfigProviderSharedPtr RouteConfigProviderUtil::create( Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator, Init::Manager& init_manager, const std::string& stat_prefix, RouteConfigProviderManager& route_config_provider_manager) { - OptionalHttpFilters optional_http_filters; - auto& filters = config.http_filters(); - for (const auto& filter : filters) { - if (filter.is_optional()) { - optional_http_filters.insert(filter.name()); - } - } + switch (config.route_specifier_case()) { case envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager:: RouteSpecifierCase::kRouteConfig: return route_config_provider_manager.createStaticRouteConfigProvider( - config.route_config(), optional_http_filters, factory_context, validator); + config.route_config(), factory_context, validator); case envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager:: RouteSpecifierCase::kRds: return route_config_provider_manager.createRdsRouteConfigProvider( // At the creation of a RDS route config provider, the factory_context's initManager is // always valid, though the init manager may go away later when the listener goes away. - config.rds(), optional_http_filters, factory_context, stat_prefix, init_manager); + config.rds(), factory_context, stat_prefix, init_manager); case envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager:: RouteSpecifierCase::kScopedRoutes: FALLTHRU; // PANIC @@ -228,15 +222,13 @@ RouteConfigProviderManagerImpl::RouteConfigProviderManagerImpl(OptRef( - proto_traits_, factory_context, optional_http_filters); + [&factory_context, &rds, &stat_prefix, this](uint64_t manager_identifier) { + auto config_update = + std::make_unique(proto_traits_, factory_context); auto resource_decoder = std::make_shared< Envoy::Config::OpaqueResourceDecoderImpl>( factory_context.messageValidationContext().dynamicValidationVisitor(), "name"); @@ -253,15 +245,13 @@ Router::RouteConfigProviderSharedPtr RouteConfigProviderManagerImpl::createRdsRo RouteConfigProviderPtr RouteConfigProviderManagerImpl::createStaticRouteConfigProvider( const envoy::config::route::v3::RouteConfiguration& route_config, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator) { - auto provider = manager_.addStaticProvider( - [&optional_http_filters, &factory_context, &validator, &route_config, this]() { - ConfigTraitsImpl config_traits(optional_http_filters, validator); - return std::make_unique(route_config, config_traits, - factory_context, manager_); - }); + auto provider = manager_.addStaticProvider([&factory_context, &validator, &route_config, this]() { + ConfigTraitsImpl config_traits(validator); + return std::make_unique(route_config, config_traits, + factory_context, manager_); + }); ASSERT(dynamic_cast(provider.get())); return RouteConfigProviderPtr(static_cast(provider.release())); } diff --git a/source/common/router/rds_impl.h b/source/common/router/rds_impl.h index 643c06ff720e..5d5eb826d5c7 100644 --- a/source/common/router/rds_impl.h +++ b/source/common/router/rds_impl.h @@ -189,13 +189,11 @@ class RouteConfigProviderManagerImpl : public RouteConfigProviderManager, // RouteConfigProviderManager RouteConfigProviderSharedPtr createRdsRouteConfigProvider( const envoy::extensions::filters::network::http_connection_manager::v3::Rds& rds, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, const std::string& stat_prefix, Init::Manager& init_manager) override; RouteConfigProviderPtr createStaticRouteConfigProvider(const envoy::config::route::v3::RouteConfiguration& route_config, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator) override; diff --git a/source/common/router/route_config_update_receiver_impl.cc b/source/common/router/route_config_update_receiver_impl.cc index 62cafc189531..8a929aec5eb0 100644 --- a/source/common/router/route_config_update_receiver_impl.cc +++ b/source/common/router/route_config_update_receiver_impl.cc @@ -45,8 +45,8 @@ ConfigTraitsImpl::createConfig(const Protobuf::Message& rc, bool validate_clusters_default) const { ASSERT(dynamic_cast(&rc)); return std::make_shared( - static_cast(rc), optional_http_filters_, - factory_context, validator_, validate_clusters_default); + static_cast(rc), factory_context, + validator_, validate_clusters_default); } bool RouteConfigUpdateReceiverImpl::onRdsUpdate(const Protobuf::Message& rc, diff --git a/source/common/router/route_config_update_receiver_impl.h b/source/common/router/route_config_update_receiver_impl.h index 33d82c833f8e..ae0403ada20f 100644 --- a/source/common/router/route_config_update_receiver_impl.h +++ b/source/common/router/route_config_update_receiver_impl.h @@ -20,9 +20,7 @@ namespace Router { class ConfigTraitsImpl : public Rds::ConfigTraits { public: - ConfigTraitsImpl(const OptionalHttpFilters& optional_http_filters, - ProtobufMessage::ValidationVisitor& validator) - : optional_http_filters_(optional_http_filters), validator_(validator) {} + ConfigTraitsImpl(ProtobufMessage::ValidationVisitor& validator) : validator_(validator) {} Rds::ConfigConstSharedPtr createNullConfig() const override; Rds::ConfigConstSharedPtr createConfig(const Protobuf::Message& rc, @@ -30,17 +28,14 @@ class ConfigTraitsImpl : public Rds::ConfigTraits { bool validate_clusters_default) const override; private: - const OptionalHttpFilters optional_http_filters_; ProtobufMessage::ValidationVisitor& validator_; }; class RouteConfigUpdateReceiverImpl : public RouteConfigUpdateReceiver { public: RouteConfigUpdateReceiverImpl(Rds::ProtoTraits& proto_traits, - Server::Configuration::ServerFactoryContext& factory_context, - const OptionalHttpFilters& optional_http_filters) - : config_traits_(optional_http_filters, - factory_context.messageValidationContext().dynamicValidationVisitor()), + Server::Configuration::ServerFactoryContext& factory_context) + : config_traits_(factory_context.messageValidationContext().dynamicValidationVisitor()), base_(config_traits_, proto_traits, factory_context) {} using VirtualHostMap = std::map; diff --git a/source/common/router/scoped_rds.cc b/source/common/router/scoped_rds.cc index b39fbba09491..3e4c6526df49 100644 --- a/source/common/router/scoped_rds.cc +++ b/source/common/router/scoped_rds.cc @@ -42,13 +42,6 @@ ConfigProviderPtr create( ASSERT(config.route_specifier_case() == envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager:: RouteSpecifierCase::kScopedRoutes); - OptionalHttpFilters optional_http_filters; - auto& filters = config.http_filters(); - for (const auto& filter : filters) { - if (filter.is_optional()) { - optional_http_filters.insert(filter.name()); - } - } switch (config.scoped_routes().config_specifier_case()) { case envoy::extensions::filters::network::http_connection_manager::v3::ScopedRoutes:: ConfigSpecifierCase::kScopedRouteConfigurationsList: { @@ -61,16 +54,14 @@ ConfigProviderPtr create( ProtobufTypes::ConstMessagePtrVector>(scoped_route_list.scoped_route_configurations()), factory_context, ScopedRoutesConfigProviderManagerOptArg(config.scoped_routes().name(), - config.scoped_routes().rds_config_source(), - optional_http_filters)); + config.scoped_routes().rds_config_source())); } case envoy::extensions::filters::network::http_connection_manager::v3::ScopedRoutes:: ConfigSpecifierCase::kScopedRds: return scoped_routes_config_provider_manager.createXdsConfigProvider( config.scoped_routes().scoped_rds(), factory_context, init_manager, stat_prefix, ScopedRoutesConfigProviderManagerOptArg(config.scoped_routes().name(), - config.scoped_routes().rds_config_source(), - optional_http_filters)); + config.scoped_routes().rds_config_source())); case envoy::extensions::filters::network::http_connection_manager::v3::ScopedRoutes:: ConfigSpecifierCase::CONFIG_SPECIFIER_NOT_SET: PANIC("not implemented"); @@ -95,8 +86,7 @@ namespace { std::vector makeScopedRouteInfos(ProtobufTypes::ConstMessagePtrVector&& config_protos, Server::Configuration::ServerFactoryContext& factory_context, - ScopedRoutesConfigProviderManager& config_provider_manager, - const OptionalHttpFilters& optional_http_filters) { + ScopedRoutesConfigProviderManager& config_provider_manager) { std::vector scopes; for (std::unique_ptr& config_proto : config_protos) { auto scoped_route_config = @@ -113,7 +103,7 @@ makeScopedRouteInfos(ProtobufTypes::ConstMessagePtrVector&& config_protos, } RouteConfigProviderPtr route_config_provider = config_provider_manager.routeConfigProviderManager().createStaticRouteConfigProvider( - scoped_route_config.route_configuration(), optional_http_filters, factory_context, + scoped_route_config.route_configuration(), factory_context, factory_context.messageValidationContext().staticValidationVisitor()); scopes.push_back(std::make_shared(scoped_route_config, route_config_provider->configCast())); @@ -128,22 +118,21 @@ InlineScopedRoutesConfigProvider::InlineScopedRoutesConfigProvider( ProtobufTypes::ConstMessagePtrVector&& config_protos, std::string name, Server::Configuration::ServerFactoryContext& factory_context, ScopedRoutesConfigProviderManager& config_provider_manager, - envoy::config::core::v3::ConfigSource rds_config_source, - const OptionalHttpFilters& optional_http_filters) + envoy::config::core::v3::ConfigSource rds_config_source) : Envoy::Config::ImmutableConfigProviderBase(factory_context, config_provider_manager, ConfigProviderInstanceType::Inline, ConfigProvider::ApiType::Delta), name_(std::move(name)), - scopes_(makeScopedRouteInfos(std::move(config_protos), factory_context, - config_provider_manager, optional_http_filters)), + scopes_( + makeScopedRouteInfos(std::move(config_protos), factory_context, config_provider_manager)), config_(std::make_shared(scopes_)), rds_config_source_(std::move(rds_config_source)) {} ScopedRdsConfigSubscription::ScopedRdsConfigSubscription( const envoy::extensions::filters::network::http_connection_manager::v3::ScopedRds& scoped_rds, - const OptionalHttpFilters& optional_http_filters, const uint64_t manager_identifier, - const std::string& name, Server::Configuration::ServerFactoryContext& factory_context, - const std::string& stat_prefix, envoy::config::core::v3::ConfigSource rds_config_source, + const uint64_t manager_identifier, const std::string& name, + Server::Configuration::ServerFactoryContext& factory_context, const std::string& stat_prefix, + envoy::config::core::v3::ConfigSource rds_config_source, RouteConfigProviderManager& route_config_provider_manager, ScopedRoutesConfigProviderManager& config_provider_manager) : DeltaConfigSubscriptionInstance("SRDS", manager_identifier, config_provider_manager, @@ -154,8 +143,7 @@ ScopedRdsConfigSubscription::ScopedRdsConfigSubscription( scope_(factory_context.scope().createScope(stat_prefix + "scoped_rds." + name + ".")), stats_({ALL_SCOPED_RDS_STATS(POOL_COUNTER(*scope_), POOL_GAUGE(*scope_))}), rds_config_source_(std::move(rds_config_source)), stat_prefix_(stat_prefix), - route_config_provider_manager_(route_config_provider_manager), - optional_http_filters_(optional_http_filters) { + route_config_provider_manager_(route_config_provider_manager) { const auto resource_name = getResourceName(); if (scoped_rds.srds_resources_locator().empty()) { subscription_ = @@ -232,8 +220,7 @@ void ScopedRdsConfigSubscription::RdsRouteConfigProviderHelper::initRdsConfigPro Init::Manager& init_manager) { route_provider_ = std::dynamic_pointer_cast( parent_.route_config_provider_manager_.createRdsRouteConfigProvider( - rds, parent_.optional_http_filters_, parent_.factory_context_, parent_.stat_prefix_, - init_manager)); + rds, parent_.factory_context_, parent_.stat_prefix_, init_manager)); rds_update_callback_handle_ = route_provider_->subscription().addUpdateCallback([this]() { // Subscribe to RDS update. @@ -629,9 +616,8 @@ ConfigProviderPtr ScopedRoutesConfigProviderManager::createXdsConfigProvider( const envoy::extensions::filters::network::http_connection_manager::v3::ScopedRds&>( config_source_proto); return std::make_shared( - scoped_rds_config_source, typed_optarg.optional_http_filters_, manager_identifier, - typed_optarg.scoped_routes_name_, factory_context, stat_prefix, - typed_optarg.rds_config_source_, + scoped_rds_config_source, manager_identifier, typed_optarg.scoped_routes_name_, + factory_context, stat_prefix, typed_optarg.rds_config_source_, static_cast(config_provider_manager) .routeConfigProviderManager(), static_cast(config_provider_manager)); @@ -647,7 +633,7 @@ ConfigProviderPtr ScopedRoutesConfigProviderManager::createStaticConfigProvider( const auto& typed_optarg = static_cast(optarg); return std::make_unique( std::move(config_protos), typed_optarg.scoped_routes_name_, factory_context, *this, - typed_optarg.rds_config_source_, typed_optarg.optional_http_filters_); + typed_optarg.rds_config_source_); } } // namespace Router diff --git a/source/common/router/scoped_rds.h b/source/common/router/scoped_rds.h index 3dc1b7e615ae..b10b518493ba 100644 --- a/source/common/router/scoped_rds.h +++ b/source/common/router/scoped_rds.h @@ -57,8 +57,7 @@ class InlineScopedRoutesConfigProvider : public Envoy::Config::ImmutableConfigPr std::string name, Server::Configuration::ServerFactoryContext& factory_context, ScopedRoutesConfigProviderManager& config_provider_manager, - envoy::config::core::v3::ConfigSource rds_config_source, - const OptionalHttpFilters& optional_http_filters); + envoy::config::core::v3::ConfigSource rds_config_source); ~InlineScopedRoutesConfigProvider() override = default; @@ -117,9 +116,9 @@ class ScopedRdsConfigSubscription ScopedRdsConfigSubscription( const envoy::extensions::filters::network::http_connection_manager::v3::ScopedRds& scoped_rds, - const OptionalHttpFilters& optional_http_filters, const uint64_t manager_identifier, - const std::string& name, Server::Configuration::ServerFactoryContext& factory_context, - const std::string& stat_prefix, envoy::config::core::v3::ConfigSource rds_config_source, + const uint64_t manager_identifier, const std::string& name, + Server::Configuration::ServerFactoryContext& factory_context, const std::string& stat_prefix, + envoy::config::core::v3::ConfigSource rds_config_source, RouteConfigProviderManager& route_config_provider_manager, ScopedRoutesConfigProviderManager& config_provider_manager); @@ -242,7 +241,6 @@ class ScopedRdsConfigSubscription absl::flat_hash_map route_provider_by_scope_; // A map of (hash, scope-name), used to detect the key conflict between scopes. absl::flat_hash_map scope_name_by_hash_; - const OptionalHttpFilters optional_http_filters_; }; using ScopedRdsConfigSubscriptionSharedPtr = std::shared_ptr; @@ -315,14 +313,11 @@ class ScopedRoutesConfigProviderManagerOptArg public: ScopedRoutesConfigProviderManagerOptArg( std::string scoped_routes_name, - const envoy::config::core::v3::ConfigSource& rds_config_source, - const OptionalHttpFilters& optional_http_filters) - : scoped_routes_name_(std::move(scoped_routes_name)), rds_config_source_(rds_config_source), - optional_http_filters_(optional_http_filters) {} + const envoy::config::core::v3::ConfigSource& rds_config_source) + : scoped_routes_name_(std::move(scoped_routes_name)), rds_config_source_(rds_config_source) {} const std::string scoped_routes_name_; const envoy::config::core::v3::ConfigSource& rds_config_source_; - const OptionalHttpFilters& optional_http_filters_; }; } // namespace Router diff --git a/source/common/runtime/runtime_features.cc b/source/common/runtime/runtime_features.cc index 420a56ba0693..b09f29b34121 100644 --- a/source/common/runtime/runtime_features.cc +++ b/source/common/runtime/runtime_features.cc @@ -56,7 +56,6 @@ RUNTIME_GUARD(envoy_reloadable_features_http_allow_partial_urls_in_referer); RUNTIME_GUARD(envoy_reloadable_features_http_filter_avoid_reentrant_local_reply); // Delay deprecation and decommission until UHV is enabled. RUNTIME_GUARD(envoy_reloadable_features_http_reject_path_with_fragment); -RUNTIME_GUARD(envoy_reloadable_features_ignore_optional_option_from_hcm_for_route_config); RUNTIME_GUARD(envoy_reloadable_features_immediate_response_use_filter_mutation_rule); RUNTIME_GUARD(envoy_reloadable_features_initialize_upstream_filters); RUNTIME_GUARD(envoy_reloadable_features_keep_endpoint_active_hc_status_on_locality_update); diff --git a/test/common/router/config_impl_headermap_benchmark_test.cc b/test/common/router/config_impl_headermap_benchmark_test.cc index b8281af1fecf..18c2092a8a2d 100644 --- a/test/common/router/config_impl_headermap_benchmark_test.cc +++ b/test/common/router/config_impl_headermap_benchmark_test.cc @@ -56,8 +56,8 @@ static void manyCountryRoutesLongHeaders(benchmark::State& state) { Api::ApiPtr api(Api::createApiForTest()); NiceMock factory_context; ON_CALL(factory_context, api()).WillByDefault(ReturnRef(*api)); - ConfigImpl config(proto_config, OptionalHttpFilters(), factory_context, - ProtobufMessage::getNullValidationVisitor(), true); + ConfigImpl config(proto_config, factory_context, ProtobufMessage::getNullValidationVisitor(), + true); const auto stream_info = NiceMock(); auto req_headers = Http::TestRequestHeaderMapImpl{ diff --git a/test/common/router/config_impl_speed_test.cc b/test/common/router/config_impl_speed_test.cc index 8ef1fadf2eed..f7b492215e43 100644 --- a/test/common/router/config_impl_speed_test.cc +++ b/test/common/router/config_impl_speed_test.cc @@ -93,7 +93,7 @@ static void bmRouteTableSize(benchmark::State& state, RouteMatch::PathSpecifierC ON_CALL(factory_context, api()).WillByDefault(ReturnRef(*api)); // Create router config. - ConfigImpl config(genRouteConfig(state, match_type), OptionalHttpFilters(), factory_context, + ConfigImpl config(genRouteConfig(state, match_type), factory_context, ProtobufMessage::getNullValidationVisitor(), true); for (auto _ : state) { // NOLINT diff --git a/test/common/router/config_impl_test.cc b/test/common/router/config_impl_test.cc index c51415e5b8dc..a0746ef558b8 100644 --- a/test/common/router/config_impl_test.cc +++ b/test/common/router/config_impl_test.cc @@ -63,10 +63,9 @@ class TestConfigImpl : public ConfigImpl { public: TestConfigImpl(const envoy::config::route::v3::RouteConfiguration& config, Server::Configuration::ServerFactoryContext& factory_context, - bool validate_clusters_default, - const OptionalHttpFilters& optional_http_filters = OptionalHttpFilters()) - : ConfigImpl(config, optional_http_filters, factory_context, - ProtobufMessage::getNullValidationVisitor(), validate_clusters_default), + bool validate_clusters_default) + : ConfigImpl(config, factory_context, ProtobufMessage::getNullValidationVisitor(), + validate_clusters_default), config_(config) {} void setupRouteConfig(const Http::RequestHeaderMap& headers, uint64_t random_value) const { @@ -10360,11 +10359,8 @@ class PerFilterConfigsTest : public testing::Test, public ConfigImplTestBase { << "config value does not match expected for source: " << source; } - void - checkNoPerFilterConfig(const std::string& yaml, const std::string& route_config_name, - const OptionalHttpFilters& optional_http_filters = OptionalHttpFilters()) { - const TestConfigImpl config(parseRouteConfigurationFromYaml(yaml), factory_context_, true, - optional_http_filters); + void checkNoPerFilterConfig(const std::string& yaml, const std::string& route_config_name) { + const TestConfigImpl config(parseRouteConfigurationFromYaml(yaml), factory_context_, true); const auto route = config.route(genHeaders("www.foo.com", "/", "GET"), 0); absl::InlinedVector traveled_cfg; @@ -10426,31 +10422,6 @@ TEST_F(PerFilterConfigsTest, DefaultFilterImplementationAnyWithCheckPerVirtualHo "configurations"); } -TEST_F(PerFilterConfigsTest, OptionalDefaultFilterImplementationAnyWithCheckPerVirtualHost) { - // TODO(wbpcode): This test should be removed once the deprecated flag is removed. - TestScopedRuntime scoped_runtime; - scoped_runtime.mergeValues( - {{"envoy.reloadable_features.ignore_optional_option_from_hcm_for_route_config", "false"}}); - - const std::string yaml = R"EOF( -virtual_hosts: - - name: bar - domains: ["*"] - routes: - - match: { prefix: "/" } - route: { cluster: baz } - typed_per_filter_config: - test.default.filter: - "@type": type.googleapis.com/google.protobuf.Struct - value: - seconds: 123 -)EOF"; - - OptionalHttpFilters optional_http_filters = {"test.default.filter"}; - factory_context_.cluster_manager_.initializeClusters({"baz"}, {}); - checkNoPerFilterConfig(yaml, "test.default.filter", optional_http_filters); -} - TEST_F(PerFilterConfigsTest, DefaultFilterImplementationAnyWithCheckPerRoute) { const std::string yaml = R"EOF( virtual_hosts: @@ -10473,31 +10444,6 @@ TEST_F(PerFilterConfigsTest, DefaultFilterImplementationAnyWithCheckPerRoute) { "configurations"); } -TEST_F(PerFilterConfigsTest, OptionalDefaultFilterImplementationAnyWithCheckPerRoute) { - // TODO(wbpcode): This test should be removed once the deprecated flag is removed. - TestScopedRuntime scoped_runtime; - scoped_runtime.mergeValues( - {{"envoy.reloadable_features.ignore_optional_option_from_hcm_for_route_config", "false"}}); - - const std::string yaml = R"EOF( -virtual_hosts: - - name: bar - domains: ["*"] - routes: - - match: { prefix: "/" } - route: { cluster: baz } - typed_per_filter_config: - test.default.filter: - "@type": type.googleapis.com/google.protobuf.Struct - value: - seconds: 123 -)EOF"; - - OptionalHttpFilters optional_http_filters = {"test.default.filter"}; - factory_context_.cluster_manager_.initializeClusters({"baz"}, {}); - checkNoPerFilterConfig(yaml, "test.default.filter", optional_http_filters); -} - TEST_F(PerFilterConfigsTest, PerVirtualHostWithUnknownFilter) { const std::string yaml = R"EOF( virtual_hosts: @@ -10517,30 +10463,6 @@ TEST_F(PerFilterConfigsTest, PerVirtualHostWithUnknownFilter) { "'google.protobuf.BoolValue'"); } -TEST_F(PerFilterConfigsTest, PerVirtualHostWithOptionalUnknownFilter) { - // TODO(wbpcode): This test should be removed once the deprecated flag is removed. - TestScopedRuntime scoped_runtime; - scoped_runtime.mergeValues( - {{"envoy.reloadable_features.ignore_optional_option_from_hcm_for_route_config", "false"}}); - - const std::string yaml = R"EOF( -virtual_hosts: - - name: bar - domains: ["*"] - routes: - - match: { prefix: "/" } - route: { cluster: baz } - typed_per_filter_config: - filter.unknown: - "@type": type.googleapis.com/google.protobuf.BoolValue -)EOF"; - - factory_context_.cluster_manager_.initializeClusters({"baz"}, {}); - OptionalHttpFilters optional_http_filters; - optional_http_filters.insert("filter.unknown"); - checkNoPerFilterConfig(yaml, "filter.unknown", optional_http_filters); -} - TEST_F(PerFilterConfigsTest, PerRouteWithUnknownFilter) { const std::string yaml = R"EOF( virtual_hosts: @@ -10560,30 +10482,6 @@ TEST_F(PerFilterConfigsTest, PerRouteWithUnknownFilter) { "'google.protobuf.BoolValue'"); } -TEST_F(PerFilterConfigsTest, PerRouteWithHcmOptionalUnknownFilterLegacy) { - // TODO(wbpcode): This test should be removed once the deprecated flag is removed. - TestScopedRuntime scoped_runtime; - scoped_runtime.mergeValues( - {{"envoy.reloadable_features.ignore_optional_option_from_hcm_for_route_config", "false"}}); - - const std::string yaml = R"EOF( -virtual_hosts: - - name: bar - domains: ["*"] - routes: - - match: { prefix: "/" } - route: { cluster: baz } - typed_per_filter_config: - filter.unknown: - "@type": type.googleapis.com/google.protobuf.BoolValue -)EOF"; - - factory_context_.cluster_manager_.initializeClusters({"baz"}, {}); - OptionalHttpFilters optional_http_filters; - optional_http_filters.insert("filter.unknown"); - checkNoPerFilterConfig(yaml, "filter.unknown", optional_http_filters); -} - TEST_F(PerFilterConfigsTest, PerRouteWithHcmOptionalUnknownFilter) { const std::string yaml = R"EOF( virtual_hosts: @@ -10598,13 +10496,9 @@ TEST_F(PerFilterConfigsTest, PerRouteWithHcmOptionalUnknownFilter) { )EOF"; factory_context_.cluster_manager_.initializeClusters({"baz"}, {}); - OptionalHttpFilters optional_http_filters; - optional_http_filters.insert("filter.unknown"); EXPECT_THROW_WITH_MESSAGE( - TestConfigImpl(parseRouteConfigurationFromYaml(yaml), factory_context_, true, - optional_http_filters), - EnvoyException, + TestConfigImpl(parseRouteConfigurationFromYaml(yaml), factory_context_, true), EnvoyException, "Didn't find a registered implementation for 'filter.unknown' with type URL: " "'google.protobuf.BoolValue'"); } diff --git a/test/common/router/rds_impl_test.cc b/test/common/router/rds_impl_test.cc index c90e0689796e..3464c5e41575 100644 --- a/test/common/router/rds_impl_test.cc +++ b/test/common/router/rds_impl_test.cc @@ -180,36 +180,6 @@ stat_prefix: foo "'google.protobuf.Struct'"); } -TEST_F(RdsImplTest, RdsAndStaticWithHcmOptionalUnknownFilterPerVirtualHostConfig) { - // TODO(wbpcode): This test should be removed once the deprecated flag is removed. - TestScopedRuntime scoped_runtime; - scoped_runtime.mergeValues( - {{"envoy.reloadable_features.ignore_optional_option_from_hcm_for_route_config", "false"}}); - - const std::string config_yaml = R"EOF( -route_config: - virtual_hosts: - - name: bar - domains: ["*"] - routes: - - match: { prefix: "/" } - typed_per_filter_config: - filter.unknown: - "@type": type.googleapis.com/google.protobuf.Struct - value: - seconds: 123 -codec_type: auto -stat_prefix: foo -http_filters: -- name: filter.unknown - is_optional: true - )EOF"; - - RouteConfigProviderUtil::create(parseHttpConnectionManagerFromYaml(config_yaml), - server_factory_context_, validation_visitor_, outer_init_manager_, - "foo.", *route_config_provider_manager_); -} - TEST_F(RdsImplTest, RdsAndStaticWithOptionalUnknownFilterPerVirtualHostConfig) { const std::string config_yaml = R"EOF( route_config: @@ -394,76 +364,6 @@ TEST_F(RdsImplTest, UnknownFacotryForPerVirtualHostTypedConfig) { "'google.protobuf.Struct'"); } -// validate the optional unknown factory will be ignored for per virtualhost typed config. -TEST_F(RdsImplTest, HcmOptionalUnknownFacotryForPerVirtualHostTypedConfig) { - // TODO(wbpcode): This test should be removed once the deprecated flag is removed. - TestScopedRuntime scoped_runtime; - scoped_runtime.mergeValues( - {{"envoy.reloadable_features.ignore_optional_option_from_hcm_for_route_config", "false"}}); - - InSequence s; - const std::string config_yaml = R"EOF( -rds: - config_source: - api_config_source: - api_type: REST - cluster_names: - - foo_cluster - refresh_delay: 1s - route_config_name: foo_route_config -codec_type: auto -stat_prefix: foo -http_filters: -- name: filter.unknown - is_optional: true - )EOF"; - - setup(config_yaml); - - const std::string response1_json = R"EOF( -{ - "version_info": "1", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "foo_route_config", - "virtual_hosts": [ - { - "name": "integration", - "domains": [ - "*" - ], - "routes": [ - { - "match": { - "prefix": "/foo" - }, - "route": { - "cluster_header": ":authority" - } - } - ], - "typed_per_filter_config": { - "filter.unknown": { - "@type": "type.googleapis.com/google.protobuf.Struct" - } - } - } - ] - } - ] -} -)EOF"; - auto response1 = - TestUtility::parseYaml(response1_json); - const auto decoded_resources = - TestUtility::decodeResources(response1); - - EXPECT_CALL(init_watcher_, ready()); - EXPECT_TRUE( - rds_callbacks_->onConfigUpdate(decoded_resources.refvec_, response1.version_info()).ok()); -} - // Validate the optional unknown factory will be ignored for per virtualhost typed config. TEST_F(RdsImplTest, OptionalUnknownFacotryForPerVirtualHostTypedConfig) { InSequence s; @@ -587,76 +487,6 @@ TEST_F(RdsImplTest, UnknownFacotryForPerRouteTypedConfig) { "'google.protobuf.Struct'"); } -// validate the optional unknown factory will be ignored for per route typed config. -TEST_F(RdsImplTest, OptionalUnknownFacotryForPerRouteTypedConfig) { - // TODO(wbpcode): This test should be removed once the deprecated flag is removed. - TestScopedRuntime scoped_runtime; - scoped_runtime.mergeValues( - {{"envoy.reloadable_features.ignore_optional_option_from_hcm_for_route_config", "false"}}); - - InSequence s; - const std::string config_yaml = R"EOF( -rds: - config_source: - api_config_source: - api_type: REST - cluster_names: - - foo_cluster - refresh_delay: 1s - route_config_name: foo_route_config -codec_type: auto -stat_prefix: foo -http_filters: -- name: filter.unknown - is_optional: true - )EOF"; - - setup(config_yaml); - - const std::string response1_json = R"EOF( -{ - "version_info": "1", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "foo_route_config", - "virtual_hosts": [ - { - "name": "integration", - "domains": [ - "*" - ], - "routes": [ - { - "match": { - "prefix": "/foo" - }, - "route": { - "cluster_header": ":authority" - }, - "typed_per_filter_config": { - "filter.unknown": { - "@type": "type.googleapis.com/google.protobuf.Struct" - } - } - } - ], - } - ] - } - ] -} -)EOF"; - auto response1 = - TestUtility::parseYaml(response1_json); - const auto decoded_resources = - TestUtility::decodeResources(response1); - - EXPECT_CALL(init_watcher_, ready()); - EXPECT_TRUE( - rds_callbacks_->onConfigUpdate(decoded_resources.refvec_, response1.version_info()).ok()); -} - // Validates behavior when the config is delivered but it fails PGV validation. // The invalid config won't affect existing valid config. TEST_F(RdsImplTest, FailureInvalidConfig) { @@ -871,7 +701,7 @@ TEST_F(RdsRouteConfigSubscriptionTest, CreatesNoopInitManager) { TestUtility::parseYaml( rds_config); const auto route_config_provider = route_config_provider_manager_->createRdsRouteConfigProvider( - rds, OptionalHttpFilters(), server_factory_context_, "stat_prefix", outer_init_manager_); + rds, server_factory_context_, "stat_prefix", outer_init_manager_); RdsRouteConfigSubscription& subscription = (dynamic_cast(route_config_provider.get()))->subscription(); init_watcher_.expectReady(); // The parent_init_target_ will call once. @@ -900,7 +730,7 @@ class RouteConfigProviderManagerImplTest : public RdsTestBase { rds_.set_route_config_name("foo_route_config"); rds_.mutable_config_source()->set_path("foo_path"); provider_ = route_config_provider_manager_->createRdsRouteConfigProvider( - rds_, OptionalHttpFilters(), server_factory_context_, "foo_prefix.", outer_init_manager_); + rds_, server_factory_context_, "foo_prefix.", outer_init_manager_); rds_callbacks_ = server_factory_context_.cluster_manager_.subscription_factory_.callbacks_; } @@ -959,8 +789,8 @@ name: foo server_factory_context_.cluster_manager_.initializeClusters({"baz"}, {}); RouteConfigProviderPtr static_config = route_config_provider_manager_->createStaticRouteConfigProvider( - parseRouteConfigurationFromV3Yaml(config_yaml), OptionalHttpFilters(), - server_factory_context_, validation_visitor_); + parseRouteConfigurationFromV3Yaml(config_yaml), server_factory_context_, + validation_visitor_); message_ptr = server_factory_context_.admin_.config_tracker_.config_tracker_callbacks_["routes"]( universal_name_matcher); const auto& route_config_dump2 = @@ -1112,7 +942,7 @@ name: foo_route_config RouteConfigProviderSharedPtr provider2 = route_config_provider_manager_->createRdsRouteConfigProvider( - rds_, OptionalHttpFilters(), server_factory_context_, "foo_prefix", outer_init_manager_); + rds_, server_factory_context_, "foo_prefix", outer_init_manager_); // provider2 should have route config immediately after create EXPECT_TRUE(provider2->configInfo().has_value()); @@ -1129,7 +959,7 @@ name: foo_route_config rds2.mutable_config_source()->set_path("bar_path"); RouteConfigProviderSharedPtr provider3 = route_config_provider_manager_->createRdsRouteConfigProvider( - rds2, OptionalHttpFilters(), server_factory_context_, "foo_prefix", outer_init_manager_); + rds2, server_factory_context_, "foo_prefix", outer_init_manager_); EXPECT_NE(provider3, provider_); EXPECT_TRUE(server_factory_context_.cluster_manager_.subscription_factory_.callbacks_ ->onConfigUpdate(decoded_resources.refvec_, "provider3") @@ -1172,8 +1002,8 @@ TEST_F(RouteConfigProviderManagerImplTest, SameProviderOnTwoInitManager) { Init::ManagerImpl real_init_manager("real"); RouteConfigProviderSharedPtr provider2 = - route_config_provider_manager_->createRdsRouteConfigProvider( - rds_, OptionalHttpFilters(), mock_factory_context2, "foo_prefix", real_init_manager); + route_config_provider_manager_->createRdsRouteConfigProvider(rds_, mock_factory_context2, + "foo_prefix", real_init_manager); EXPECT_FALSE(provider2->configInfo().has_value()); diff --git a/test/common/router/route_fuzz_test.cc b/test/common/router/route_fuzz_test.cc index a26031f9ac55..93d545f9b58e 100644 --- a/test/common/router/route_fuzz_test.cc +++ b/test/common/router/route_fuzz_test.cc @@ -148,7 +148,7 @@ DEFINE_PROTO_FUZZER(const test::common::router::RouteTestCase& input) { TestUtility::validate(input); const auto cleaned_route_config = cleanRouteConfig(input.config()); ENVOY_LOG_MISC(debug, "cleaned route config: {}", cleaned_route_config.DebugString()); - ConfigImpl config(cleaned_route_config, OptionalHttpFilters(), factory_context, + ConfigImpl config(cleaned_route_config, factory_context, ProtobufMessage::getNullValidationVisitor(), true); auto headers = Fuzz::fromHeaders(input.headers()); auto route = config.route(headers, stream_info, input.random_value()); diff --git a/test/common/router/router_ratelimit_test.cc b/test/common/router/router_ratelimit_test.cc index 236b674966b7..65eea8fbe583 100644 --- a/test/common/router/router_ratelimit_test.cc +++ b/test/common/router/router_ratelimit_test.cc @@ -82,8 +82,8 @@ class RateLimitConfiguration : public testing::Test { void setupTest(const std::string& yaml) { envoy::config::route::v3::RouteConfiguration route_config; TestUtility::loadFromYaml(yaml, route_config); - config_ = std::make_unique(route_config, OptionalHttpFilters(), factory_context_, - any_validation_visitor_, true); + config_ = + std::make_unique(route_config, factory_context_, any_validation_visitor_, true); stream_info_.downstream_connection_info_provider_->setRemoteAddress(default_remote_address_); } diff --git a/test/common/router/scoped_rds_test.cc b/test/common/router/scoped_rds_test.cc index 21bda9810dc8..3be2ef5c9ab2 100644 --- a/test/common/router/scoped_rds_test.cc +++ b/test/common/router/scoped_rds_test.cc @@ -331,7 +331,7 @@ TEST_F(InlineScopedRoutesTest, ConfigLoadAndDump) { class ScopedRdsTest : public ScopedRoutesTestBase { protected: - void setup(const OptionalHttpFilters optional_http_filters = OptionalHttpFilters()) { + void setup() { ON_CALL(server_factory_context_.cluster_manager_, adsMux()) .WillByDefault(Return(std::make_shared<::Envoy::Config::NullGrpcMuxImpl>())); @@ -400,8 +400,7 @@ name: foo_scoped_routes provider_ = config_provider_manager_->createXdsConfigProvider( scoped_routes_config.scoped_rds(), server_factory_context_, context_init_manager_, "foo.", ScopedRoutesConfigProviderManagerOptArg(scoped_routes_config.name(), - scoped_routes_config.rds_config_source(), - optional_http_filters)); + scoped_routes_config.rds_config_source())); srds_subscription_ = server_factory_context_.cluster_manager_.subscription_factory_.callbacks_; } @@ -570,47 +569,6 @@ route_configuration_name: foo_routes .value()); } -// Test ignoring the optional unknown factory in the per-virtualhost typed config. -TEST_F(ScopedRdsTest, OptionalUnknownFactoryForPerVirtualHostTypedConfig) { - // TODO(wbpcode): This test should be removed once the deprecated flag is removed. - TestScopedRuntime scoped_runtime; - scoped_runtime.mergeValues( - {{"envoy.reloadable_features.ignore_optional_option_from_hcm_for_route_config", "false"}}); - - OptionalHttpFilters optional_http_filters; - optional_http_filters.insert("filter.unknown"); - setup(optional_http_filters); - init_watcher_.expectReady(); - const std::string config_yaml = R"EOF( -name: foo_scope -route_configuration_name: foo_routes -key: - fragments: - - string_key: x-foo-key -)EOF"; - - const auto resource = parseScopedRouteConfigurationFromYaml(config_yaml); - const auto decoded_resources = TestUtility::decodeResources({resource}); - - context_init_manager_.initialize(init_watcher_); - EXPECT_TRUE(srds_subscription_->onConfigUpdate(decoded_resources.refvec_, "1").ok()); - - constexpr absl::string_view route_config_tmpl = R"EOF( - name: {} - virtual_hosts: - - name: test - domains: ["*"] - routes: - - match: {{ prefix: "/" }} - route: {{ cluster: bluh }} - typed_per_filter_config: - filter.unknown: - "@type": type.googleapis.com/google.protobuf.Struct -)EOF"; - - pushRdsConfig({"foo_routes"}, "111", route_config_tmpl); -} - // Tests that multiple uniquely named non-conflict resources are allowed in config updates. TEST_F(ScopedRdsTest, MultipleResourcesSotw) { setup(); @@ -1814,8 +1772,7 @@ name: foo_scoped_routes provider_ = config_provider_manager_->createXdsConfigProvider( scoped_routes_config.scoped_rds(), server_factory_context_, context_init_manager_, "foo.", ScopedRoutesConfigProviderManagerOptArg(scoped_routes_config.name(), - scoped_routes_config.rds_config_source(), - OptionalHttpFilters())); + scoped_routes_config.rds_config_source())); srds_subscription_ = server_factory_context_.cluster_manager_.subscription_factory_.callbacks_; const std::string config_yaml = R"EOF( diff --git a/test/common/router/vhds_test.cc b/test/common/router/vhds_test.cc index 4b72efce6331..4b2f65be16c5 100644 --- a/test/common/router/vhds_test.cc +++ b/test/common/router/vhds_test.cc @@ -77,8 +77,8 @@ name: my_route } RouteConfigUpdatePtr makeRouteConfigUpdate(const envoy::config::route::v3::RouteConfiguration& rc) { - RouteConfigUpdatePtr config_update_info = std::make_unique( - proto_traits_, factory_context_, OptionalHttpFilters()); + RouteConfigUpdatePtr config_update_info = + std::make_unique(proto_traits_, factory_context_); config_update_info->onRdsUpdate(rc, "1"); return config_update_info; } diff --git a/test/integration/http_typed_per_filter_config_test.cc b/test/integration/http_typed_per_filter_config_test.cc index 7235c40f65ae..6c9ceaf46883 100644 --- a/test/integration/http_typed_per_filter_config_test.cc +++ b/test/integration/http_typed_per_filter_config_test.cc @@ -48,28 +48,6 @@ TEST_F(HTTPTypedPerFilterConfigTest, RejectUnknownHttpFilterInTypedPerFilterConf "'google.protobuf.Struct'"); } -TEST_F(HTTPTypedPerFilterConfigTest, HcmIgnoreUnknownOptionalHttpFilterInTypedPerFilterConfig) { - // TODO(wbpcode): This test should be removed once the deprecated flag is removed. - config_helper_.addRuntimeOverride( - "envoy.reloadable_features.ignore_optional_option_from_hcm_for_route_config", "false"); - - config_helper_.addConfigModifier( - [&](envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager& - hcm) { - auto* virtual_host = hcm.mutable_route_config()->mutable_virtual_hosts(0); - auto* config = virtual_host->mutable_typed_per_filter_config(); - (*config)["filter.unknown"].PackFrom(Envoy::ProtobufWkt::Struct()); - - auto* filter = hcm.mutable_http_filters()->Add(); - filter->set_name("filter.unknown"); - filter->set_is_optional(true); - // keep router the last - auto size = hcm.http_filters_size(); - hcm.mutable_http_filters()->SwapElements(size - 2, size - 1); - }); - initialize(); -} - TEST_F(HTTPTypedPerFilterConfigTest, IgnoreUnknownOptionalHttpFilterInTypedPerFilterConfig) { config_helper_.addConfigModifier( [&](envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager& diff --git a/test/integration/scoped_rds_integration_test.cc b/test/integration/scoped_rds_integration_test.cc index 118725693f2b..2ecfe70f5839 100644 --- a/test/integration/scoped_rds_integration_test.cc +++ b/test/integration/scoped_rds_integration_test.cc @@ -434,67 +434,6 @@ route_configuration_name: {} cleanupUpstreamAndDownstream(); } -TEST_P(ScopedRdsIntegrationTest, IgnoreUnknownOptionalHttpFilterInPerFilterTypedConfig) { - constexpr absl::string_view scope_tmpl = R"EOF( -name: {} -route_configuration_name: {} -key: - fragments: - - string_key: {} -)EOF"; - const std::string scope_route = fmt::format(scope_tmpl, "foo_scope1", "foo_route", "foo-route"); - - constexpr absl::string_view route_config_tmpl = R"EOF( - name: {} - virtual_hosts: - - name: integration - domains: ["*"] - routes: - - match: {{ prefix: "/" }} - route: {{ cluster: {} }} - typed_per_filter_config: - filter.unknown: - "@type": type.googleapis.com/google.protobuf.Struct -)EOF"; - - on_server_init_function_ = [&]() { - createScopedRdsStream(); - sendSrdsResponse({scope_route}, {scope_route}, {}, "1"); - createRdsStream("foo_route"); - // CreateRdsStream waits for connection which is fired by RDS subscription. - sendRdsResponse(fmt::format(route_config_tmpl, "foo_route", "cluster_0"), "1"); - }; - - // TODO(wbpcode): This test should be removed once the deprecated flag is removed. - config_helper_.addRuntimeOverride( - "envoy.reloadable_features.ignore_optional_option_from_hcm_for_route_config", "false"); - - config_helper_.addConfigModifier( - [](envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager& - http_connection_manager) { - auto* filter = http_connection_manager.mutable_http_filters()->Add(); - filter->set_name("filter.unknown"); - filter->set_is_optional(true); - // keep router the last - auto size = http_connection_manager.http_filters_size(); - http_connection_manager.mutable_http_filters()->SwapElements(size - 2, size - 1); - }); - - initialize(); - registerTestServerPorts({"http"}); - - test_server_->waitForCounterGe("http.config_test.rds.foo_route.update_attempt", 1); - sendRequestAndVerifyResponse( - Http::TestRequestHeaderMapImpl{{":method", "GET"}, - {":path", "/meh"}, - {":authority", "host"}, - {":scheme", "http"}, - {"Addr", "x-foo-key=foo-route"}}, - 456, Http::TestResponseHeaderMapImpl{{":status", "200"}, {"service", "bluh"}}, 123, - /*cluster_0*/ 0); - cleanupUpstreamAndDownstream(); -} - TEST_P(ScopedRdsIntegrationTest, RejectKeyConflictInDeltaUpdate) { if (!isDelta()) { return; diff --git a/test/mocks/router/mocks.h b/test/mocks/router/mocks.h index 8096994da567..44d872bcf841 100644 --- a/test/mocks/router/mocks.h +++ b/test/mocks/router/mocks.h @@ -582,12 +582,10 @@ class MockRouteConfigProviderManager : public RouteConfigProviderManager { MOCK_METHOD(RouteConfigProviderSharedPtr, createRdsRouteConfigProvider, (const envoy::extensions::filters::network::http_connection_manager::v3::Rds& rds, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, const std::string& stat_prefix, Init::Manager& init_manager)); MOCK_METHOD(RouteConfigProviderPtr, createStaticRouteConfigProvider, (const envoy::config::route::v3::RouteConfiguration& route_config, - const OptionalHttpFilters& optional_http_filters, Server::Configuration::ServerFactoryContext& factory_context, ProtobufMessage::ValidationVisitor& validator)); }; diff --git a/test/tools/router_check/router.cc b/test/tools/router_check/router.cc index 01f3bb79830a..b2ad4182ed79 100644 --- a/test/tools/router_check/router.cc +++ b/test/tools/router_check/router.cc @@ -136,8 +136,7 @@ RouterCheckTool RouterCheckTool::create(const std::string& router_config_file, auto factory_context = std::make_unique>(); auto config = std::make_unique( - route_config, Router::OptionalHttpFilters(), *factory_context, - ProtobufMessage::getNullValidationVisitor(), false); + route_config, *factory_context, ProtobufMessage::getNullValidationVisitor(), false); if (!disable_deprecation_check) { ProtobufMessage::StrictValidationVisitorImpl visitor; visitor.setRuntime(factory_context->runtime_loader_);