LCOV - code coverage report
Current view: top level - source/common/rds - route_config_provider_manager.h (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 1 1 100.0 %
Date: 2024-01-05 06:35:25 Functions: 1 1 100.0 %

          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

Generated by: LCOV version 1.15