LCOV - code coverage report
Current view: top level - root/contrail/src/contrail-common/config-client-mgr - config_db_client.h (source / functions) Hit Total Coverage
Test: OpenSDN C/C++ coverage (all TARGET_SET jobs) Lines: 32 37 86.5 %
Date: 2026-08-03 02:19:58 Functions: 14 16 87.5 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2016 Juniper Networks, Inc. All rights reserved.
       3             :  */
       4             : 
       5             : #ifndef config_db_client_h
       6             : #define config_db_client_h
       7             : 
       8             : #include <string>
       9             : #include <vector>
      10             : #include <atomic>
      11             : #include <tbb/spin_rw_mutex.h>
      12             : 
      13             : #include "base/regex.h"
      14             : #include "base/timer.h"
      15             : #include "base/task_annotations.h"
      16             : #include "config_client_manager.h"
      17             : 
      18             : struct ConfigClientOptions;
      19             : struct ConfigDBConnInfo;
      20             : struct ConfigDBUUIDCacheEntry;
      21             : struct ConfigDBFQNameCacheEntry;
      22             : 
      23             : class ObjectProcessReq {
      24             :  public:
      25      129610 :     ObjectProcessReq(std::string oper,
      26             :                      std::string uuid_str,
      27      129610 :                      std::string value) : oper_(oper),
      28      129610 :     uuid_str_(uuid_str), value_(value) {
      29      129610 :     }
      30             : 
      31             :     std::string oper_;
      32             :     std::string uuid_str_;
      33             :     std::string value_; // obj_type for Cassandra/json_value for ETCD
      34             : 
      35             :  private:
      36             :     DISALLOW_COPY_AND_ASSIGN(ObjectProcessReq);
      37             : };
      38             : 
      39             : /*
      40             :  * This is the base class for interactions with a database that stores the user
      41             :  * configuration.
      42             :  */
      43             : class ConfigDbClient {
      44             : public:
      45             :     // wait time before retrying in seconds
      46             :     static const uint64_t kInitRetryTimeUSec = 5000000;
      47             : 
      48             :     // Number of requests to handle in one config reader task execution
      49             :     static const int kMaxRequestsToYield = 512;
      50             : 
      51             :     // Number of config entries to read in one read request
      52             :     static const int kNumEntriesToRead = 4096;
      53             : 
      54             :     ConfigDbClient(ConfigClientManager *mgr,
      55             :                    EventManager *evm,
      56             :                    const ConfigClientOptions &options);
      57             :     virtual ~ConfigDbClient();
      58             : 
      59             :     typedef std::pair<std::string, std::string> ObjTypeFQNPair;
      60             : 
      61             :     const std::string& config_db_user() const;
      62             :     const std::string& config_db_password() const;
      63             :     const std::vector<std::string>& config_db_ips() const;
      64             :     int GetFirstConfigDbPort() const;
      65             :     virtual void PostShutdown() = 0;
      66             :     virtual void InitDatabase() = 0;
      67             :     virtual void EnqueueUUIDRequest(std::string uuid_str, std::string obj_type,
      68             :                                     std::string oper) = 0;
      69             : 
      70             :     virtual bool UUIDToObjCacheShow(
      71             :         const std::string &search_string, int inst_num,
      72             :         const std::string &last_uuid, uint32_t num_entries,
      73             :         std::vector<ConfigDBUUIDCacheEntry> *entries) const = 0;
      74             : 
      75             :     virtual bool IsListOrMapPropEmpty(const std::string &uuid_key,
      76             :                                    const std::string &lookup_key) = 0;
      77             : 
      78             :      // FQ Name Cache
      79             :     virtual void AddFQNameCache(const std::string &uuid,
      80             :                    const std::string &obj_type, const std::string &fq_name);
      81             :     virtual std::string FindFQName(const std::string &uuid) const;
      82             :     virtual void InvalidateFQNameCache(const std::string &uuid);
      83             :     virtual void PurgeFQNameCache(const std::string &uuid);
      84           0 :     virtual void ClearFQNameCache() {
      85           0 :         fq_name_cache_.clear();
      86           0 :     }
      87             :     ObjTypeFQNPair UUIDToFQName(const std::string &uuid_str,
      88             :                              bool deleted_ok = true) const;
      89             : 
      90             :     virtual bool UUIDToFQNameShow(
      91             :         const std::string &search_string, const std::string &last_uuid,
      92             :         uint32_t num_entries,
      93             :         std::vector<ConfigDBFQNameCacheEntry> *entries) const;
      94             : 
      95             :     virtual std::string uuid_str(const std::string &uuid);
      96      251957 :     virtual std::string GetUUID(const std::string &key) const {
      97      251957 :         return key;
      98             :     }
      99             : 
     100             :     virtual void InitConnectionInfo();
     101             :     virtual void UpdateConnectionInfo(bool success,
     102             :                                       bool force);
     103             :     virtual void GetConnectionInfo(ConfigDBConnInfo &status) const;
     104             : 
     105             :     virtual bool IsTaskTriggered() const;
     106             :     virtual void StartWatcher();
     107             : 
     108      272282 :     ConfigClientManager *mgr() { return mgr_; }
     109             :     const ConfigClientManager *mgr() const { return mgr_; }
     110             : 
     111             : protected:
     112             :    // UUID to FQName mapping
     113             :     struct FQNameCacheType {
     114       23642 :         FQNameCacheType(std::string in_obj_type, std::string in_fq_name)
     115       23642 :             : obj_type(in_obj_type), fq_name(in_fq_name), deleted(false) {
     116       23642 :         }
     117             :         std::string obj_type;
     118             :         std::string fq_name;
     119             :         bool deleted;
     120             :     };
     121             :     typedef std::map<std::string, FQNameCacheType> FQNameCacheMap;
     122             : 
     123             :     virtual void FillFQNameCacheInfo(
     124             :                           const std::string &uuid,
     125             :                           FQNameCacheMap::const_iterator it,
     126             :                           ConfigDBFQNameCacheEntry *entry) const;
     127             : 
     128        1115 :     virtual const int GetMaxRequestsToYield() const {
     129        1115 :         return kMaxRequestsToYield;
     130             :     }
     131           0 :     virtual const uint64_t GetInitRetryTimeUSec() const {
     132           0 :         return kInitRetryTimeUSec;
     133             :     }
     134             : 
     135             :     virtual uint32_t GetNumReadRequestToBunch() const;
     136           6 :     EventManager *event_manager() { return  evm_; }
     137             : 
     138             : private:
     139             :     ConfigClientManager *mgr_;
     140             :     EventManager *evm_;
     141             :     std::string config_db_user_;
     142             :     std::string config_db_password_;
     143             :     std::vector<std::string> config_db_ips_;
     144             :     std::vector<int> config_db_ports_;
     145             :     FQNameCacheMap fq_name_cache_;
     146             :     mutable tbb::spin_rw_mutex rw_mutex_;
     147             :     std::atomic<bool> client_connection_up_;
     148             :     std::atomic<uint64_t> connection_status_change_at_;
     149             : };
     150             : 
     151             : class ObjectCacheEntry {
     152             :  public:
     153       23487 :     ObjectCacheEntry(uint64_t last_read_tstamp)
     154       23487 :         : last_read_tstamp_(last_read_tstamp) {
     155       23487 :     }
     156             : 
     157       23487 :     ~ObjectCacheEntry() {};
     158             : 
     159       10709 :     virtual void SetLastReadTimeStamp(uint64_t ts) {
     160       10709 :         last_read_tstamp_ = ts;
     161       10709 :     }
     162          36 :     virtual uint64_t GetLastReadTimeStamp() const {
     163          36 :         return last_read_tstamp_;
     164             :     }
     165             : 
     166       34172 :     virtual void SetFQName(std::string fq_name) {
     167       34172 :         fq_name_ = fq_name;
     168       34172 :     }
     169          68 :     virtual const std::string &GetFQName() const {
     170          68 :         return fq_name_;
     171             :     }
     172             : 
     173       34172 :     virtual void SetObjType(std::string obj_type) {
     174       34172 :         obj_type_ = obj_type;
     175       34172 :     }
     176          76 :     virtual const std::string &GetObjType() const {
     177          76 :         return obj_type_;
     178             :     }
     179             : 
     180             :  private:
     181             :     std::string obj_type_;
     182             :     std::string fq_name_;
     183             :     uint64_t last_read_tstamp_;
     184             : };
     185             : #endif  // config_db_client_h

Generated by: LCOV version 1.14