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

Generated by: LCOV version 1.14