From c4a3ff867e7a848b1b18342e2b20cfc58ee85adb Mon Sep 17 00:00:00 2001 From: Alyssa Wilk Date: Tue, 29 Nov 2022 09:05:39 -0500 Subject: [PATCH] Movigg more files into the listener manager directory. Signed-off-by: Alyssa Wilk --- envoy/server/factory_context.h | 7 ++ .../listener_managers/listener_manager/BUILD | 78 ++++++++++++++++- .../active_raw_udp_listener_config.cc | 2 +- .../active_raw_udp_listener_config.h | 0 .../filter_chain_factory_context_callback.h | 0 .../filter_chain_manager_impl.cc | 60 +------------- .../filter_chain_manager_impl.h | 54 +----------- .../listener_manager}/lds_api.cc | 2 +- .../listener_manager}/lds_api.h | 0 .../listener_manager/listener_impl.cc | 4 +- .../listener_manager/listener_impl.h | 2 +- .../listener_manager/listener_manager_impl.cc | 2 +- .../listener_manager/listener_manager_impl.h | 6 +- source/server/BUILD | 69 ++------------- source/server/api_listener_impl.cc | 1 - source/server/api_listener_impl.h | 2 +- source/server/factory_context_impl.cc | 66 +++++++++++++++ source/server/factory_context_impl.h | 61 ++++++++++++++ source/server/listener_stats.h | 2 + .../listener_managers/listener_manager/BUILD | 83 ++++++++++++++++++- .../filter_chain_benchmark_test.cc | 2 +- .../filter_chain_manager_impl_test.cc | 2 +- .../listener_manager}/lds_api_test.cc | 2 +- test/integration/BUILD | 2 +- test/integration/fake_upstream.h | 2 +- test/server/BUILD | 81 +----------------- test/server/connection_handler_test.cc | 2 +- 27 files changed, 318 insertions(+), 276 deletions(-) rename source/{server => extensions/listener_managers/listener_manager}/active_raw_udp_listener_config.cc (91%) rename source/{server => extensions/listener_managers/listener_manager}/active_raw_udp_listener_config.h (100%) rename source/{server => extensions/listener_managers/listener_manager}/filter_chain_factory_context_callback.h (100%) rename source/{server => extensions/listener_managers/listener_manager}/filter_chain_manager_impl.cc (91%) rename source/{server => extensions/listener_managers/listener_manager}/filter_chain_manager_impl.h (88%) rename source/{server => extensions/listener_managers/listener_manager}/lds_api.cc (98%) rename source/{server => extensions/listener_managers/listener_manager}/lds_api.h (100%) create mode 100644 source/server/factory_context_impl.cc create mode 100644 source/server/factory_context_impl.h rename test/{server => extensions/listener_managers/listener_manager}/filter_chain_benchmark_test.cc (99%) rename test/{server => extensions/listener_managers/listener_manager}/filter_chain_manager_impl_test.cc (99%) rename test/{server => extensions/listener_managers/listener_manager}/lds_api_test.cc (99%) diff --git a/envoy/server/factory_context.h b/envoy/server/factory_context.h index 3ecb7e0bcb8a7..ed4b946b3889c 100644 --- a/envoy/server/factory_context.h +++ b/envoy/server/factory_context.h @@ -290,8 +290,15 @@ class FilterChainFactoryContext : public virtual FactoryContext { using FilterChainFactoryContextPtr = std::unique_ptr; using FilterChainsByName = absl::flat_hash_map; +// This allows matchers to select the correct filter chain for a route. class FilterChainBaseAction : public Matcher::Action { public: + /** + * Get the filter chain for this request + * @param filter_chains_by_name the configured filter chains + * @param info the stream info for this request + * @ return Network::FilterChain* a pointer to the filter chain for this request. + */ virtual const Network::FilterChain* get(const FilterChainsByName& filter_chains_by_name, const StreamInfo::StreamInfo& info) const PURE; }; diff --git a/source/extensions/listener_managers/listener_manager/BUILD b/source/extensions/listener_managers/listener_manager/BUILD index 0dd385ad35247..64367c779c474 100644 --- a/source/extensions/listener_managers/listener_manager/BUILD +++ b/source/extensions/listener_managers/listener_manager/BUILD @@ -1,6 +1,7 @@ load( "//bazel:envoy_build_system.bzl", "envoy_cc_extension", + "envoy_cc_library", "envoy_extension_package", "envoy_select_enable_http3", ) @@ -29,11 +30,11 @@ envoy_cc_extension( deps = [ "//source/server:listener_manager_factory_lib", "//source/server:api_listener_lib", - "//source/server:active_raw_udp_listener_config", + ":active_raw_udp_listener_config", "//source/server:configuration_lib", "//source/server:drain_manager_lib", - "//source/server:filter_chain_manager_lib", - "//source/server:lds_api_lib", + ":filter_chain_manager_lib", + ":lds_api_lib", "//source/server:transport_socket_config_lib", "//envoy/access_log:access_log_interface", "//envoy/config:typed_metadata_interface", @@ -81,3 +82,74 @@ envoy_cc_extension( "//source/extensions/udp_packet_writer/gso:config", ]), ) + +envoy_cc_library( + name = "active_raw_udp_listener_config", + srcs = ["active_raw_udp_listener_config.cc"], + hdrs = ["active_raw_udp_listener_config.h"], + visibility = [ + "//test:__subpackages__", + ], + deps = [ + "//envoy/registry", + "//source/server:connection_handler_lib", + ], +) + +envoy_cc_library( + name = "filter_chain_manager_lib", + srcs = ["filter_chain_manager_impl.cc"], + hdrs = ["filter_chain_manager_impl.h"], + deps = [ + ":filter_chain_factory_context_callback", + "//envoy/config:typed_metadata_interface", + "//envoy/matcher:matcher_interface", + "//envoy/network:filter_interface", + "//envoy/server:instance_interface", + "//envoy/server:listener_manager_interface", + "//envoy/server:transport_socket_config_interface", + "//source/common/common:empty_string", + "//source/common/config:utility_lib", + "//source/common/init:manager_lib", + "//source/common/matcher:matcher_lib", + "//source/common/network:cidr_range_lib", + "//source/common/network:lc_trie_lib", + "//source/common/network/matching:data_impl_lib", + "//source/common/network/matching:inputs_lib", + "//source/server:configuration_lib", + "//source/server:factory_context_lib", + "@envoy_api//envoy/config/listener/v3:pkg_cc_proto", + ], +) + +envoy_cc_library( + name = "filter_chain_factory_context_callback", + hdrs = ["filter_chain_factory_context_callback.h"], + deps = [ + "//envoy/server:filter_config_interface", + "@envoy_api//envoy/config/listener/v3:pkg_cc_proto", + ], +) + +envoy_cc_library( + name = "lds_api_lib", + srcs = ["lds_api.cc"], + hdrs = ["lds_api.h"], + deps = [ + "//envoy/config:subscription_factory_interface", + "//envoy/config:subscription_interface", + "//envoy/init:manager_interface", + "//envoy/server:listener_manager_interface", + "//source/common/common:cleanup_lib", + "//source/common/config:api_version_lib", + "//source/common/config:subscription_base_interface", + "//source/common/config:utility_lib", + "//source/common/init:target_lib", + "//source/common/protobuf:utility_lib", + "@envoy_api//envoy/admin/v3:pkg_cc_proto", + "@envoy_api//envoy/config/core/v3:pkg_cc_proto", + "@envoy_api//envoy/config/listener/v3:pkg_cc_proto", + "@envoy_api//envoy/config/route/v3:pkg_cc_proto", + "@envoy_api//envoy/service/discovery/v3:pkg_cc_proto", + ], +) diff --git a/source/server/active_raw_udp_listener_config.cc b/source/extensions/listener_managers/listener_manager/active_raw_udp_listener_config.cc similarity index 91% rename from source/server/active_raw_udp_listener_config.cc rename to source/extensions/listener_managers/listener_manager/active_raw_udp_listener_config.cc index dca62508ed01e..265926b9228f2 100644 --- a/source/server/active_raw_udp_listener_config.cc +++ b/source/extensions/listener_managers/listener_manager/active_raw_udp_listener_config.cc @@ -1,4 +1,4 @@ -#include "source/server/active_raw_udp_listener_config.h" +#include "source/extensions/listener_managers/listener_manager/active_raw_udp_listener_config.h" #include #include diff --git a/source/server/active_raw_udp_listener_config.h b/source/extensions/listener_managers/listener_manager/active_raw_udp_listener_config.h similarity index 100% rename from source/server/active_raw_udp_listener_config.h rename to source/extensions/listener_managers/listener_manager/active_raw_udp_listener_config.h diff --git a/source/server/filter_chain_factory_context_callback.h b/source/extensions/listener_managers/listener_manager/filter_chain_factory_context_callback.h similarity index 100% rename from source/server/filter_chain_factory_context_callback.h rename to source/extensions/listener_managers/listener_manager/filter_chain_factory_context_callback.h diff --git a/source/server/filter_chain_manager_impl.cc b/source/extensions/listener_managers/listener_manager/filter_chain_manager_impl.cc similarity index 91% rename from source/server/filter_chain_manager_impl.cc rename to source/extensions/listener_managers/listener_manager/filter_chain_manager_impl.cc index 0bb563958d406..e94b7d3f5493f 100644 --- a/source/server/filter_chain_manager_impl.cc +++ b/source/extensions/listener_managers/listener_manager/filter_chain_manager_impl.cc @@ -1,4 +1,4 @@ -#include "source/server/filter_chain_manager_impl.h" +#include "source/extensions/listener_managers/listener_manager/filter_chain_manager_impl.h" #include "envoy/config/listener/v3/listener_components.pb.h" @@ -849,63 +849,5 @@ Configuration::FilterChainFactoryContextPtr FilterChainManagerImpl::createFilter return std::make_unique(parent_context_, init_manager_); } -FactoryContextImpl::FactoryContextImpl(Server::Instance& server, - const envoy::config::listener::v3::Listener& config, - Network::DrainDecision& drain_decision, - Stats::Scope& global_scope, Stats::Scope& listener_scope, - bool is_quic) - : server_(server), config_(config), drain_decision_(drain_decision), - global_scope_(global_scope), listener_scope_(listener_scope), is_quic_(is_quic) {} - -AccessLog::AccessLogManager& FactoryContextImpl::accessLogManager() { - return server_.accessLogManager(); -} -Upstream::ClusterManager& FactoryContextImpl::clusterManager() { return server_.clusterManager(); } -Event::Dispatcher& FactoryContextImpl::mainThreadDispatcher() { return server_.dispatcher(); } -const Server::Options& FactoryContextImpl::options() { return server_.options(); } -Grpc::Context& FactoryContextImpl::grpcContext() { return server_.grpcContext(); } -Router::Context& FactoryContextImpl::routerContext() { return server_.routerContext(); } -bool FactoryContextImpl::healthCheckFailed() { return server_.healthCheckFailed(); } -Http::Context& FactoryContextImpl::httpContext() { return server_.httpContext(); } -Init::Manager& FactoryContextImpl::initManager() { return server_.initManager(); } -const LocalInfo::LocalInfo& FactoryContextImpl::localInfo() const { return server_.localInfo(); } -Envoy::Runtime::Loader& FactoryContextImpl::runtime() { return server_.runtime(); } -Stats::Scope& FactoryContextImpl::scope() { return global_scope_; } -Singleton::Manager& FactoryContextImpl::singletonManager() { return server_.singletonManager(); } -OverloadManager& FactoryContextImpl::overloadManager() { return server_.overloadManager(); } -ThreadLocal::SlotAllocator& FactoryContextImpl::threadLocal() { return server_.threadLocal(); } -OptRef FactoryContextImpl::admin() { return server_.admin(); } -TimeSource& FactoryContextImpl::timeSource() { return server_.timeSource(); } -ProtobufMessage::ValidationContext& FactoryContextImpl::messageValidationContext() { - return server_.messageValidationContext(); -} -ProtobufMessage::ValidationVisitor& FactoryContextImpl::messageValidationVisitor() { - return server_.messageValidationContext().staticValidationVisitor(); -} -Api::Api& FactoryContextImpl::api() { return server_.api(); } -ServerLifecycleNotifier& FactoryContextImpl::lifecycleNotifier() { - return server_.lifecycleNotifier(); -} -ProcessContextOptRef FactoryContextImpl::processContext() { return server_.processContext(); } -Configuration::ServerFactoryContext& FactoryContextImpl::getServerFactoryContext() const { - return server_.serverFactoryContext(); -} -Configuration::TransportSocketFactoryContext& -FactoryContextImpl::getTransportSocketFactoryContext() const { - return server_.transportSocketFactoryContext(); -} -const envoy::config::core::v3::Metadata& FactoryContextImpl::listenerMetadata() const { - return config_.metadata(); -} -const Envoy::Config::TypedMetadata& FactoryContextImpl::listenerTypedMetadata() const { - // TODO(nareddyt): Needs an implementation for this context. Currently not used. - PANIC("not implemented"); -} -envoy::config::core::v3::TrafficDirection FactoryContextImpl::direction() const { - return config_.traffic_direction(); -} -Network::DrainDecision& FactoryContextImpl::drainDecision() { return drain_decision_; } -Stats::Scope& FactoryContextImpl::listenerScope() { return listener_scope_; } -bool FactoryContextImpl::isQuicListener() const { return is_quic_; } } // namespace Server } // namespace Envoy diff --git a/source/server/filter_chain_manager_impl.h b/source/extensions/listener_managers/listener_manager/filter_chain_manager_impl.h similarity index 88% rename from source/server/filter_chain_manager_impl.h rename to source/extensions/listener_managers/listener_manager/filter_chain_manager_impl.h index 56e6c53bfc2fa..64ca90a1a1f65 100644 --- a/source/server/filter_chain_manager_impl.h +++ b/source/extensions/listener_managers/listener_manager/filter_chain_manager_impl.h @@ -19,7 +19,8 @@ #include "source/common/init/manager_impl.h" #include "source/common/network/cidr_range.h" #include "source/common/network/lc_trie.h" -#include "source/server/filter_chain_factory_context_callback.h" +#include "source/extensions/listener_managers/listener_manager/filter_chain_factory_context_callback.h" +#include "source/server/factory_context_impl.h" #include "absl/container/flat_hash_map.h" @@ -141,57 +142,6 @@ class FilterChainImpl : public Network::DrainableFilterChain { const std::string name_; }; -/** - * Implementation of FactoryContext wrapping a Server::Instance and some listener components. - */ -class FactoryContextImpl : public Configuration::FactoryContext { -public: - FactoryContextImpl(Server::Instance& server, const envoy::config::listener::v3::Listener& config, - Network::DrainDecision& drain_decision, Stats::Scope& global_scope, - Stats::Scope& listener_scope, bool is_quic); - - // Configuration::FactoryContext - AccessLog::AccessLogManager& accessLogManager() override; - Upstream::ClusterManager& clusterManager() override; - Event::Dispatcher& mainThreadDispatcher() override; - const Server::Options& options() override; - Grpc::Context& grpcContext() override; - Router::Context& routerContext() override; - bool healthCheckFailed() override; - Http::Context& httpContext() override; - Init::Manager& initManager() override; - const LocalInfo::LocalInfo& localInfo() const override; - Envoy::Runtime::Loader& runtime() override; - Stats::Scope& scope() override; - Stats::Scope& serverScope() override { return server_.stats(); } - Singleton::Manager& singletonManager() override; - OverloadManager& overloadManager() override; - ThreadLocal::SlotAllocator& threadLocal() override; - OptRef admin() override; - TimeSource& timeSource() override; - ProtobufMessage::ValidationContext& messageValidationContext() override; - ProtobufMessage::ValidationVisitor& messageValidationVisitor() override; - Api::Api& api() override; - ServerLifecycleNotifier& lifecycleNotifier() override; - ProcessContextOptRef processContext() override; - Configuration::ServerFactoryContext& getServerFactoryContext() const override; - Configuration::TransportSocketFactoryContext& getTransportSocketFactoryContext() const override; - const envoy::config::core::v3::Metadata& listenerMetadata() const override; - const Envoy::Config::TypedMetadata& listenerTypedMetadata() const override; - envoy::config::core::v3::TrafficDirection direction() const override; - Network::DrainDecision& drainDecision() override; - Stats::Scope& listenerScope() override; - bool isQuicListener() const override; - -private: - Server::Instance& server_; - const envoy::config::listener::v3::Listener& config_; - Network::DrainDecision& drain_decision_; - Stats::Scope& global_scope_; - Stats::Scope& listener_scope_; - bool is_quic_; -}; - /** * Implementation of FilterChainManager. It owns and exchange filter chains. */ diff --git a/source/server/lds_api.cc b/source/extensions/listener_managers/listener_manager/lds_api.cc similarity index 98% rename from source/server/lds_api.cc rename to source/extensions/listener_managers/listener_manager/lds_api.cc index 94196a146b26f..e22c69c37044a 100644 --- a/source/server/lds_api.cc +++ b/source/extensions/listener_managers/listener_manager/lds_api.cc @@ -1,4 +1,4 @@ -#include "source/server/lds_api.h" +#include "source/extensions/listener_managers/listener_manager/lds_api.h" #include "envoy/admin/v3/config_dump.pb.h" #include "envoy/config/core/v3/config_source.pb.h" diff --git a/source/server/lds_api.h b/source/extensions/listener_managers/listener_manager/lds_api.h similarity index 100% rename from source/server/lds_api.h rename to source/extensions/listener_managers/listener_manager/lds_api.h diff --git a/source/extensions/listener_managers/listener_manager/listener_impl.cc b/source/extensions/listener_managers/listener_manager/listener_impl.cc index 3e7ab8f811574..4adff4845f8f9 100644 --- a/source/extensions/listener_managers/listener_manager/listener_impl.cc +++ b/source/extensions/listener_managers/listener_manager/listener_impl.cc @@ -27,11 +27,11 @@ #include "source/common/network/utility.h" #include "source/common/protobuf/utility.h" #include "source/common/runtime/runtime_features.h" +#include "source/extensions/listener_managers/listener_manager/active_raw_udp_listener_config.h" +#include "source/extensions/listener_managers/listener_manager/filter_chain_manager_impl.h" #include "source/extensions/listener_managers/listener_manager/listener_manager_impl.h" -#include "source/server/active_raw_udp_listener_config.h" #include "source/server/configuration_impl.h" #include "source/server/drain_manager_impl.h" -#include "source/server/filter_chain_manager_impl.h" #include "source/server/transport_socket_config_impl.h" #ifdef ENVOY_ENABLE_QUIC diff --git a/source/extensions/listener_managers/listener_manager/listener_impl.h b/source/extensions/listener_managers/listener_manager/listener_impl.h index 1d90f14ac64ba..5b0c8999b6f47 100644 --- a/source/extensions/listener_managers/listener_manager/listener_impl.h +++ b/source/extensions/listener_managers/listener_manager/listener_impl.h @@ -22,7 +22,7 @@ #include "source/common/init/manager_impl.h" #include "source/common/init/target_impl.h" #include "source/common/quic/quic_stat_names.h" -#include "source/server/filter_chain_manager_impl.h" +#include "source/extensions/listener_managers/listener_manager/filter_chain_manager_impl.h" #include "source/server/transport_socket_config_impl.h" namespace Envoy { diff --git a/source/extensions/listener_managers/listener_manager/listener_manager_impl.cc b/source/extensions/listener_managers/listener_manager/listener_manager_impl.cc index 8b93af0ac96f5..1c346cab1b2e1 100644 --- a/source/extensions/listener_managers/listener_manager/listener_manager_impl.cc +++ b/source/extensions/listener_managers/listener_manager/listener_manager_impl.cc @@ -33,7 +33,7 @@ #include "source/server/api_listener_impl.h" #include "source/server/configuration_impl.h" #include "source/server/drain_manager_impl.h" -#include "source/server/filter_chain_manager_impl.h" +#include "source/extensions/listener_managers/listener_manager/filter_chain_manager_impl.h" #include "source/server/transport_socket_config_impl.h" namespace Envoy { diff --git a/source/extensions/listener_managers/listener_manager/listener_manager_impl.h b/source/extensions/listener_managers/listener_manager/listener_manager_impl.h index c8d6ac92f90f1..72006c24478ec 100644 --- a/source/extensions/listener_managers/listener_manager/listener_manager_impl.h +++ b/source/extensions/listener_managers/listener_manager/listener_manager_impl.h @@ -21,10 +21,10 @@ #include "source/common/config/well_known_names.h" #include "source/common/filter/config_discovery_impl.h" #include "source/common/quic/quic_stat_names.h" +#include "source/extensions/listener_managers/listener_manager/filter_chain_factory_context_callback.h" +#include "source/extensions/listener_managers/listener_manager/filter_chain_manager_impl.h" +#include "source/extensions/listener_managers/listener_manager/lds_api.h" #include "source/extensions/listener_managers/listener_manager/listener_impl.h" -#include "source/server/filter_chain_factory_context_callback.h" -#include "source/server/filter_chain_manager_impl.h" -#include "source/server/lds_api.h" #include "source/server/listener_manager_factory.h" namespace Envoy { diff --git a/source/server/BUILD b/source/server/BUILD index a28b4a041377c..8ac3b74a2d75c 100644 --- a/source/server/BUILD +++ b/source/server/BUILD @@ -423,29 +423,6 @@ envoy_cc_library( ], ) -envoy_cc_library( - name = "lds_api_lib", - srcs = ["lds_api.cc"], - hdrs = ["lds_api.h"], - deps = [ - "//envoy/config:subscription_factory_interface", - "//envoy/config:subscription_interface", - "//envoy/init:manager_interface", - "//envoy/server:listener_manager_interface", - "//source/common/common:cleanup_lib", - "//source/common/config:api_version_lib", - "//source/common/config:subscription_base_interface", - "//source/common/config:utility_lib", - "//source/common/init:target_lib", - "//source/common/protobuf:utility_lib", - "@envoy_api//envoy/admin/v3:pkg_cc_proto", - "@envoy_api//envoy/config/core/v3:pkg_cc_proto", - "@envoy_api//envoy/config/listener/v3:pkg_cc_proto", - "@envoy_api//envoy/config/route/v3:pkg_cc_proto", - "@envoy_api//envoy/service/discovery/v3:pkg_cc_proto", - ], -) - envoy_cc_library( name = "api_listener_lib", srcs = [ @@ -456,8 +433,7 @@ envoy_cc_library( ], deps = [ ":configuration_lib", - ":filter_chain_manager_lib", - ":lds_api_lib", + ":factory_context_lib", ":transport_socket_config_lib", "//envoy/network:connection_interface", "//envoy/network:listener_interface", @@ -483,27 +459,12 @@ envoy_cc_library( ) envoy_cc_library( - name = "filter_chain_manager_lib", - srcs = ["filter_chain_manager_impl.cc"], - hdrs = ["filter_chain_manager_impl.h"], + name = "factory_context_lib", + srcs = ["factory_context_impl.cc"], + hdrs = ["factory_context_impl.h"], deps = [ - ":filter_chain_factory_context_callback", - "//envoy/config:typed_metadata_interface", - "//envoy/matcher:matcher_interface", - "//envoy/network:filter_interface", + "//envoy/server:factory_context_interface", "//envoy/server:instance_interface", - "//envoy/server:listener_manager_interface", - "//envoy/server:transport_socket_config_interface", - "//source/common/common:empty_string", - "//source/common/config:utility_lib", - "//source/common/init:manager_lib", - "//source/common/matcher:matcher_lib", - "//source/common/network:cidr_range_lib", - "//source/common/network:lc_trie_lib", - "//source/common/network/matching:data_impl_lib", - "//source/common/network/matching:inputs_lib", - "//source/server:configuration_lib", - "@envoy_api//envoy/config/listener/v3:pkg_cc_proto", ], ) @@ -559,7 +520,6 @@ envoy_cc_library( "abseil_optional", ], deps = [ - ":active_raw_udp_listener_config", ":api_listener_lib", ":configuration_lib", ":connection_handler_lib", @@ -676,25 +636,6 @@ envoy_cc_library( ], ) -envoy_cc_library( - name = "active_raw_udp_listener_config", - srcs = ["active_raw_udp_listener_config.cc"], - hdrs = ["active_raw_udp_listener_config.h"], - deps = [ - ":connection_handler_lib", - "//envoy/registry", - ], -) - -envoy_cc_library( - name = "filter_chain_factory_context_callback", - hdrs = ["filter_chain_factory_context_callback.h"], - deps = [ - "//envoy/server:filter_config_interface", - "@envoy_api//envoy/config/listener/v3:pkg_cc_proto", - ], -) - envoy_cc_library( name = "regex_engine_lib", srcs = ["regex_engine.cc"], diff --git a/source/server/api_listener_impl.cc b/source/server/api_listener_impl.cc index fc3d28728725c..93aa6e4a5ad71 100644 --- a/source/server/api_listener_impl.cc +++ b/source/server/api_listener_impl.cc @@ -7,7 +7,6 @@ #include "source/common/network/resolver_impl.h" #include "source/common/protobuf/utility.h" #include "source/extensions/filters/network/http_connection_manager/config.h" -#include "source/server/filter_chain_manager_impl.h" namespace Envoy { namespace Server { diff --git a/source/server/api_listener_impl.h b/source/server/api_listener_impl.h index 46a6571f76f21..79fcdc811929c 100644 --- a/source/server/api_listener_impl.h +++ b/source/server/api_listener_impl.h @@ -20,7 +20,7 @@ #include "source/common/init/manager_impl.h" #include "source/common/network/socket_impl.h" #include "source/common/stream_info/stream_info_impl.h" -#include "source/server/filter_chain_manager_impl.h" +#include "source/server/factory_context_impl.h" namespace Envoy { namespace Server { diff --git a/source/server/factory_context_impl.cc b/source/server/factory_context_impl.cc new file mode 100644 index 0000000000000..3d525653814c3 --- /dev/null +++ b/source/server/factory_context_impl.cc @@ -0,0 +1,66 @@ +#include "source/server/factory_context_impl.h" + +namespace Envoy { +namespace Server { + +FactoryContextImpl::FactoryContextImpl(Server::Instance& server, + const envoy::config::listener::v3::Listener& config, + Network::DrainDecision& drain_decision, + Stats::Scope& global_scope, Stats::Scope& listener_scope, + bool is_quic) + : server_(server), config_(config), drain_decision_(drain_decision), + global_scope_(global_scope), listener_scope_(listener_scope), is_quic_(is_quic) {} + +AccessLog::AccessLogManager& FactoryContextImpl::accessLogManager() { + return server_.accessLogManager(); +} +Upstream::ClusterManager& FactoryContextImpl::clusterManager() { return server_.clusterManager(); } +Event::Dispatcher& FactoryContextImpl::mainThreadDispatcher() { return server_.dispatcher(); } +const Server::Options& FactoryContextImpl::options() { return server_.options(); } +Grpc::Context& FactoryContextImpl::grpcContext() { return server_.grpcContext(); } +Router::Context& FactoryContextImpl::routerContext() { return server_.routerContext(); } +bool FactoryContextImpl::healthCheckFailed() { return server_.healthCheckFailed(); } +Http::Context& FactoryContextImpl::httpContext() { return server_.httpContext(); } +Init::Manager& FactoryContextImpl::initManager() { return server_.initManager(); } +const LocalInfo::LocalInfo& FactoryContextImpl::localInfo() const { return server_.localInfo(); } +Envoy::Runtime::Loader& FactoryContextImpl::runtime() { return server_.runtime(); } +Stats::Scope& FactoryContextImpl::scope() { return global_scope_; } +Singleton::Manager& FactoryContextImpl::singletonManager() { return server_.singletonManager(); } +OverloadManager& FactoryContextImpl::overloadManager() { return server_.overloadManager(); } +ThreadLocal::SlotAllocator& FactoryContextImpl::threadLocal() { return server_.threadLocal(); } +OptRef FactoryContextImpl::admin() { return server_.admin(); } +TimeSource& FactoryContextImpl::timeSource() { return server_.timeSource(); } +ProtobufMessage::ValidationContext& FactoryContextImpl::messageValidationContext() { + return server_.messageValidationContext(); +} +ProtobufMessage::ValidationVisitor& FactoryContextImpl::messageValidationVisitor() { + return server_.messageValidationContext().staticValidationVisitor(); +} +Api::Api& FactoryContextImpl::api() { return server_.api(); } +ServerLifecycleNotifier& FactoryContextImpl::lifecycleNotifier() { + return server_.lifecycleNotifier(); +} +ProcessContextOptRef FactoryContextImpl::processContext() { return server_.processContext(); } +Configuration::ServerFactoryContext& FactoryContextImpl::getServerFactoryContext() const { + return server_.serverFactoryContext(); +} +Configuration::TransportSocketFactoryContext& +FactoryContextImpl::getTransportSocketFactoryContext() const { + return server_.transportSocketFactoryContext(); +} +const envoy::config::core::v3::Metadata& FactoryContextImpl::listenerMetadata() const { + return config_.metadata(); +} +const Envoy::Config::TypedMetadata& FactoryContextImpl::listenerTypedMetadata() const { + // TODO(nareddyt): Needs an implementation for this context. Currently not used. + PANIC("not implemented"); +} +envoy::config::core::v3::TrafficDirection FactoryContextImpl::direction() const { + return config_.traffic_direction(); +} +Network::DrainDecision& FactoryContextImpl::drainDecision() { return drain_decision_; } +Stats::Scope& FactoryContextImpl::listenerScope() { return listener_scope_; } +bool FactoryContextImpl::isQuicListener() const { return is_quic_; } + +} // namespace Server +} // namespace Envoy diff --git a/source/server/factory_context_impl.h b/source/server/factory_context_impl.h new file mode 100644 index 0000000000000..9b99edff3b0de --- /dev/null +++ b/source/server/factory_context_impl.h @@ -0,0 +1,61 @@ +#pragma once + +#include "envoy/server/factory_context.h" +#include "envoy/server/instance.h" + +namespace Envoy { +namespace Server { + +/** + * Implementation of FactoryContext wrapping a Server::Instance and some listener components. + */ +class FactoryContextImpl : public Configuration::FactoryContext { +public: + FactoryContextImpl(Server::Instance& server, const envoy::config::listener::v3::Listener& config, + Network::DrainDecision& drain_decision, Stats::Scope& global_scope, + Stats::Scope& listener_scope, bool is_quic); + + // Configuration::FactoryContext + AccessLog::AccessLogManager& accessLogManager() override; + Upstream::ClusterManager& clusterManager() override; + Event::Dispatcher& mainThreadDispatcher() override; + const Server::Options& options() override; + Grpc::Context& grpcContext() override; + Router::Context& routerContext() override; + bool healthCheckFailed() override; + Http::Context& httpContext() override; + Init::Manager& initManager() override; + const LocalInfo::LocalInfo& localInfo() const override; + Envoy::Runtime::Loader& runtime() override; + Stats::Scope& scope() override; + Stats::Scope& serverScope() override { return server_.stats(); } + Singleton::Manager& singletonManager() override; + OverloadManager& overloadManager() override; + ThreadLocal::SlotAllocator& threadLocal() override; + OptRef admin() override; + TimeSource& timeSource() override; + ProtobufMessage::ValidationContext& messageValidationContext() override; + ProtobufMessage::ValidationVisitor& messageValidationVisitor() override; + Api::Api& api() override; + ServerLifecycleNotifier& lifecycleNotifier() override; + ProcessContextOptRef processContext() override; + Configuration::ServerFactoryContext& getServerFactoryContext() const override; + Configuration::TransportSocketFactoryContext& getTransportSocketFactoryContext() const override; + const envoy::config::core::v3::Metadata& listenerMetadata() const override; + const Envoy::Config::TypedMetadata& listenerTypedMetadata() const override; + envoy::config::core::v3::TrafficDirection direction() const override; + Network::DrainDecision& drainDecision() override; + Stats::Scope& listenerScope() override; + bool isQuicListener() const override; + +private: + Server::Instance& server_; + const envoy::config::listener::v3::Listener& config_; + Network::DrainDecision& drain_decision_; + Stats::Scope& global_scope_; + Stats::Scope& listener_scope_; + bool is_quic_; +}; + +} // namespace Server +} // namespace Envoy diff --git a/source/server/listener_stats.h b/source/server/listener_stats.h index c6e2b585fe04f..2824c438144d2 100644 --- a/source/server/listener_stats.h +++ b/source/server/listener_stats.h @@ -6,6 +6,7 @@ namespace Envoy { namespace Server { +// This macro defines the listener stats which each Envoy listener will have. #define ALL_LISTENER_STATS(COUNTER, GAUGE, HISTOGRAM) \ COUNTER(downstream_cx_destroy) \ COUNTER(downstream_cx_overflow) \ @@ -28,6 +29,7 @@ struct ListenerStats { ALL_LISTENER_STATS(GENERATE_COUNTER_STRUCT, GENERATE_GAUGE_STRUCT, GENERATE_HISTOGRAM_STRUCT) }; +// This macro defines the listener stats which each Envoy worker will have. #define ALL_PER_HANDLER_LISTENER_STATS(COUNTER, GAUGE) \ COUNTER(downstream_cx_total) \ GAUGE(downstream_cx_active, Accumulate) diff --git a/test/extensions/listener_managers/listener_manager/BUILD b/test/extensions/listener_managers/listener_manager/BUILD index 4beb2f0ed5c71..bc274c67de13b 100644 --- a/test/extensions/listener_managers/listener_manager/BUILD +++ b/test/extensions/listener_managers/listener_manager/BUILD @@ -1,5 +1,7 @@ load( "//bazel:envoy_build_system.bzl", + "envoy_benchmark_test", + "envoy_cc_benchmark_binary", "envoy_cc_test", "envoy_cc_test_library", "envoy_package", @@ -55,11 +57,11 @@ envoy_cc_test( "//source/extensions/filters/listener/tls_inspector:config", "//source/extensions/filters/network/http_connection_manager:config", "//source/extensions/filters/network/tcp_proxy:config", + "//source/extensions/listener_managers/listener_manager:active_raw_udp_listener_config", "//source/extensions/request_id/uuid:config", "//source/extensions/transport_sockets/raw_buffer:config", "//source/extensions/transport_sockets/tls:config", "//source/extensions/transport_sockets/tls:ssl_socket_lib", - "//source/server:active_raw_udp_listener_config", "//test/integration/filters:test_listener_filter_lib", "//test/server:utility_lib", "//test/test_common:network_utility_lib", @@ -89,3 +91,82 @@ envoy_cc_test( "@envoy_api//envoy/config/listener/v3:pkg_cc_proto", ], ) + +envoy_cc_test( + name = "filter_chain_manager_impl_test", + srcs = ["filter_chain_manager_impl_test.cc"], + data = ["//test/extensions/transport_sockets/tls/test_data:certs"], + deps = [ + "//source/common/api:os_sys_calls_lib", + "//source/common/config:metadata_lib", + "//source/common/network:addr_family_aware_socket_option_lib", + "//source/common/network:listen_socket_lib", + "//source/common/network:socket_option_lib", + "//source/common/network:utility_lib", + "//source/common/protobuf", + "//source/extensions/filters/network/http_connection_manager:config", + "//source/extensions/listener_managers/listener_manager:filter_chain_manager_lib", + "//source/extensions/listener_managers/listener_manager:listener_manager_lib", + "//source/extensions/transport_sockets/raw_buffer:config", + "//source/extensions/transport_sockets/tls:config", + "//source/extensions/transport_sockets/tls:ssl_socket_lib", + "//test/mocks/network:network_mocks", + "//test/mocks/server:drain_manager_mocks", + "//test/mocks/server:factory_context_mocks", + "//test/mocks/stream_info:stream_info_mocks", + "//test/server:utility_lib", + "//test/test_common:environment_lib", + "//test/test_common:registry_lib", + "//test/test_common:simulated_time_system_lib", + "//test/test_common:test_time_lib", + "//test/test_common:threadsafe_singleton_injector_lib", + "@envoy_api//envoy/config/listener/v3:pkg_cc_proto", + ], +) + +envoy_cc_test( + name = "lds_api_test", + srcs = ["lds_api_test.cc"], + data = [ + "//test/config/integration/certs", + ], + deps = [ + "//source/common/protobuf:utility_lib", + "//source/extensions/listener_managers/listener_manager:lds_api_lib", + "//test/mocks/config:config_mocks", + "//test/mocks/init:init_mocks", + "//test/mocks/protobuf:protobuf_mocks", + "//test/mocks/server:listener_manager_mocks", + "//test/mocks/upstream:upstream_mocks", + "//test/test_common:environment_lib", + "//test/test_common:utility_lib", + "@envoy_api//envoy/config/core/v3:pkg_cc_proto", + "@envoy_api//envoy/config/listener/v3:pkg_cc_proto", + "@envoy_api//envoy/service/discovery/v3:pkg_cc_proto", + ], +) + +envoy_cc_benchmark_binary( + name = "filter_chain_benchmark_test", + srcs = ["filter_chain_benchmark_test.cc"], + external_deps = [ + "benchmark", + "googletest", + ], + deps = [ + "@envoy_api//envoy/config/listener/v3:pkg_cc_proto", + "//source/extensions/listener_managers/listener_manager:filter_chain_manager_lib", + "//test/test_common:environment_lib", + "//test/mocks/network:network_mocks", + "//test/mocks/server:factory_context_mocks", + "//test/mocks/stream_info:stream_info_mocks", + # tranport socket config registration + "//source/extensions/transport_sockets/tls:config", + ], +) + +envoy_benchmark_test( + name = "filter_chain_benchmark_test_benchmark_test", + timeout = "long", + benchmark_binary = "filter_chain_benchmark_test", +) diff --git a/test/server/filter_chain_benchmark_test.cc b/test/extensions/listener_managers/listener_manager/filter_chain_benchmark_test.cc similarity index 99% rename from test/server/filter_chain_benchmark_test.cc rename to test/extensions/listener_managers/listener_manager/filter_chain_benchmark_test.cc index d4a3ea0bfbf61..b32b9ff1534fd 100644 --- a/test/server/filter_chain_benchmark_test.cc +++ b/test/extensions/listener_managers/listener_manager/filter_chain_benchmark_test.cc @@ -8,7 +8,7 @@ #include "envoy/protobuf/message_validator.h" #include "source/common/network/socket_impl.h" -#include "source/server/filter_chain_manager_impl.h" +#include "source/extensions/listener_managers/listener_manager/filter_chain_manager_impl.h" #include "test/benchmark/main.h" #include "test/mocks/network/mocks.h" diff --git a/test/server/filter_chain_manager_impl_test.cc b/test/extensions/listener_managers/listener_manager/filter_chain_manager_impl_test.cc similarity index 99% rename from test/server/filter_chain_manager_impl_test.cc rename to test/extensions/listener_managers/listener_manager/filter_chain_manager_impl_test.cc index fc844269a8ce9..b55c4d885406d 100644 --- a/test/server/filter_chain_manager_impl_test.cc +++ b/test/extensions/listener_managers/listener_manager/filter_chain_manager_impl_test.cc @@ -17,10 +17,10 @@ #include "source/common/network/socket_option_impl.h" #include "source/common/network/utility.h" #include "source/common/protobuf/protobuf.h" +#include "source/extensions/listener_managers/listener_manager/filter_chain_manager_impl.h" #include "source/extensions/listener_managers/listener_manager/listener_impl.h" #include "source/extensions/transport_sockets/tls/ssl_socket.h" #include "source/server/configuration_impl.h" -#include "source/server/filter_chain_manager_impl.h" #include "test/mocks/network/mocks.h" #include "test/mocks/server/drain_manager.h" diff --git a/test/server/lds_api_test.cc b/test/extensions/listener_managers/listener_manager/lds_api_test.cc similarity index 99% rename from test/server/lds_api_test.cc rename to test/extensions/listener_managers/listener_manager/lds_api_test.cc index 95045d81f2148..c47925dfdf03b 100644 --- a/test/server/lds_api_test.cc +++ b/test/extensions/listener_managers/listener_manager/lds_api_test.cc @@ -5,7 +5,7 @@ #include "envoy/service/discovery/v3/discovery.pb.h" #include "source/common/protobuf/utility.h" -#include "source/server/lds_api.h" +#include "source/extensions/listener_managers/listener_manager/lds_api.h" #include "test/mocks/config/mocks.h" #include "test/mocks/init/mocks.h" diff --git a/test/integration/BUILD b/test/integration/BUILD index 9132598bc380c..63a175f1069a7 100644 --- a/test/integration/BUILD +++ b/test/integration/BUILD @@ -873,7 +873,7 @@ envoy_cc_test_library( "//source/common/network:udp_packet_writer_handler_lib", "//source/common/network:utility_lib", "//source/common/stats:isolated_store_lib", - "//source/server:active_raw_udp_listener_config", + "//source/extensions/listener_managers/listener_manager:active_raw_udp_listener_config", "//source/server:connection_handler_lib", "//test/test_common:network_utility_lib", "//test/test_common:test_time_system_interface", diff --git a/test/integration/fake_upstream.h b/test/integration/fake_upstream.h index 72f670835b529..cd30a0e58d7a9 100644 --- a/test/integration/fake_upstream.h +++ b/test/integration/fake_upstream.h @@ -43,7 +43,7 @@ #include "source/common/quic/quic_stat_names.h" #endif -#include "source/server/active_raw_udp_listener_config.h" +#include "source/extensions/listener_managers/listener_manager/active_raw_udp_listener_config.h" #include "test/mocks/common.h" #include "test/mocks/runtime/mocks.h" diff --git a/test/server/BUILD b/test/server/BUILD index 5ee555853a1f0..0288a19514e79 100644 --- a/test/server/BUILD +++ b/test/server/BUILD @@ -82,7 +82,7 @@ envoy_cc_test( "//source/common/network:connection_balancer_lib", "//source/common/network:udp_packet_writer_handler_lib", "//source/common/stats:stats_lib", - "//source/server:active_raw_udp_listener_config", + "//source/extensions/listener_managers/listener_manager:active_raw_udp_listener_config", "//source/server:connection_handler_lib", "//test/mocks/access_log:access_log_mocks", "//test/mocks/api:api_mocks", @@ -246,60 +246,6 @@ envoy_cc_test( ], ) -envoy_cc_test( - name = "lds_api_test", - srcs = ["lds_api_test.cc"], - data = [ - "//test/config/integration/certs", - ], - deps = [ - "//source/common/protobuf:utility_lib", - "//source/server:lds_api_lib", - "//test/mocks/config:config_mocks", - "//test/mocks/init:init_mocks", - "//test/mocks/protobuf:protobuf_mocks", - "//test/mocks/server:listener_manager_mocks", - "//test/mocks/upstream:upstream_mocks", - "//test/test_common:environment_lib", - "//test/test_common:utility_lib", - "@envoy_api//envoy/config/core/v3:pkg_cc_proto", - "@envoy_api//envoy/config/listener/v3:pkg_cc_proto", - "@envoy_api//envoy/service/discovery/v3:pkg_cc_proto", - ], -) - -envoy_cc_test( - name = "filter_chain_manager_impl_test", - srcs = ["filter_chain_manager_impl_test.cc"], - data = ["//test/extensions/transport_sockets/tls/test_data:certs"], - deps = [ - ":utility_lib", - "//source/common/api:os_sys_calls_lib", - "//source/common/config:metadata_lib", - "//source/common/network:addr_family_aware_socket_option_lib", - "//source/common/network:listen_socket_lib", - "//source/common/network:socket_option_lib", - "//source/common/network:utility_lib", - "//source/common/protobuf", - "//source/extensions/filters/network/http_connection_manager:config", - "//source/extensions/listener_managers/listener_manager:listener_manager_lib", - "//source/extensions/transport_sockets/raw_buffer:config", - "//source/extensions/transport_sockets/tls:config", - "//source/extensions/transport_sockets/tls:ssl_socket_lib", - "//source/server:filter_chain_manager_lib", - "//test/mocks/network:network_mocks", - "//test/mocks/server:drain_manager_mocks", - "//test/mocks/server:factory_context_mocks", - "//test/mocks/stream_info:stream_info_mocks", - "//test/test_common:environment_lib", - "//test/test_common:registry_lib", - "//test/test_common:simulated_time_system_lib", - "//test/test_common:test_time_lib", - "//test/test_common:threadsafe_singleton_injector_lib", - "@envoy_api//envoy/config/listener/v3:pkg_cc_proto", - ], -) - envoy_cc_fuzz_test( name = "server_fuzz_test", srcs = ["server_fuzz_test.cc"], @@ -414,31 +360,6 @@ envoy_cc_test( ], ) -envoy_cc_benchmark_binary( - name = "filter_chain_benchmark_test", - srcs = ["filter_chain_benchmark_test.cc"], - external_deps = [ - "benchmark", - "googletest", - ], - deps = [ - "@envoy_api//envoy/config/listener/v3:pkg_cc_proto", - "//source/server:filter_chain_manager_lib", - "//test/test_common:environment_lib", - "//test/mocks/network:network_mocks", - "//test/mocks/server:factory_context_mocks", - "//test/mocks/stream_info:stream_info_mocks", - # tranport socket config registration - "//source/extensions/transport_sockets/tls:config", - ], -) - -envoy_benchmark_test( - name = "filter_chain_benchmark_test_benchmark_test", - timeout = "long", - benchmark_binary = "filter_chain_benchmark_test", -) - envoy_cc_benchmark_binary( name = "server_stats_flush_benchmark", srcs = ["server_stats_flush_benchmark_test.cc"], diff --git a/test/server/connection_handler_test.cc b/test/server/connection_handler_test.cc index 4256945b23647..f2378e1b0c568 100644 --- a/test/server/connection_handler_test.cc +++ b/test/server/connection_handler_test.cc @@ -20,7 +20,7 @@ #include "source/common/network/udp_listener_impl.h" #include "source/common/network/udp_packet_writer_handler_impl.h" #include "source/common/network/utility.h" -#include "source/server/active_raw_udp_listener_config.h" +#include "source/extensions/listener_managers/listener_manager/active_raw_udp_listener_config.h" #include "source/server/connection_handler_impl.h" #include "test/mocks/access_log/mocks.h"