Line data Source code
1 : #pragma once 2 : 3 : #include <memory> 4 : #include <string> 5 : 6 : #include "envoy/admin/v3/config_dump.pb.h" 7 : #include "envoy/init/manager.h" 8 : #include "envoy/init/target.h" 9 : #include "envoy/rds/config_traits.h" 10 : #include "envoy/rds/route_config_provider.h" 11 : #include "envoy/server/admin.h" 12 : 13 : #include "source/common/common/matchers.h" 14 : #include "source/common/protobuf/utility.h" 15 : 16 : #include "absl/container/node_hash_map.h" 17 : #include "absl/container/node_hash_set.h" 18 : 19 : namespace Envoy { 20 : namespace Rds { 21 : 22 : class RouteConfigProviderManager { 23 : public: 24 : RouteConfigProviderManager(OptRef<Server::Admin> admin, const std::string& config_tracker_key, 25 : ProtoTraits& proto_traits); 26 : 27 : void eraseStaticProvider(RouteConfigProvider* provider); 28 : void eraseDynamicProvider(uint64_t manager_identifier); 29 : 30 324 : ProtoTraits& protoTraits() { return proto_traits_; } 31 : 32 : std::unique_ptr<envoy::admin::v3::RoutesConfigDump> 33 : dumpRouteConfigs(const Matchers::StringMatcher& name_matcher) const; 34 : 35 : RouteConfigProviderPtr 36 : addStaticProvider(std::function<RouteConfigProviderPtr()> create_static_provider); 37 : RouteConfigProviderSharedPtr 38 : addDynamicProvider(const Protobuf::Message& rds, const std::string& route_config_name, 39 : Init::Manager& init_manager, 40 : std::function<std::pair<RouteConfigProviderSharedPtr, const Init::Target*>( 41 : uint64_t manager_identifier)> 42 : create_dynamic_provider); 43 : 44 : private: 45 : // TODO(jsedgwick) These two members are prime candidates for the owned-entry list/map 46 : // as in ConfigTracker. I.e. the ProviderImpls would have an EntryOwner for these lists 47 : // Then the lifetime management stuff is centralized and opaque. 48 : absl::node_hash_map<uint64_t, std::pair<std::weak_ptr<RouteConfigProvider>, const Init::Target*>> 49 : dynamic_route_config_providers_; 50 : absl::node_hash_set<RouteConfigProvider*> static_route_config_providers_; 51 : Server::ConfigTracker::EntryOwnerPtr config_tracker_entry_; 52 : ProtoTraits& proto_traits_; 53 : 54 : RouteConfigProviderSharedPtr reuseDynamicProvider(uint64_t manager_identifier, 55 : Init::Manager& init_manager, 56 : const std::string& route_config_name); 57 : }; 58 : 59 : } // namespace Rds 60 : } // namespace Envoy