7 #include <boost/tokenizer.hpp>
12 #include "config_client_log_types.h"
13 #include "config_client_show_types.h"
24 : mgr_(mgr), evm_(evm),
25 config_db_user_(options.config_db_username),
26 config_db_password_(options.config_db_password) {
28 for (vector<string>::const_iterator iter =
31 string server_info(*iter);
32 typedef boost::tokenizer<boost::char_separator<char> >
tokenizer;
33 boost::char_separator<char> sep(
":");
34 tokenizer tokens(server_info, sep);
35 tokenizer::iterator tit = tokens.begin();
39 string port_str(*tit);
70 static bool init_ =
false;
71 static uint32_t num_read_req_to_bunch = 0;
75 char *count_str = getenv(
"CONFIG_NUM_DB_READ_REQ_TO_BUNCH");
77 num_read_req_to_bunch = strtol(count_str, NULL, 0);
83 return num_read_req_to_bunch;
87 const string &obj_type,
88 const string &fq_name) {
89 tbb::spin_rw_mutex::scoped_lock write_lock(
rw_mutex_,
true);
96 tbb::spin_rw_mutex::scoped_lock write_lock(
rw_mutex_,
true);
99 it->second.deleted =
true;
105 tbb::spin_rw_mutex::scoped_lock write_lock(
rw_mutex_,
true);
111 return obj_type_fq_name_pair.second;
115 const string &
uuid,
bool deleted_ok)
const {
116 tbb::spin_rw_mutex::scoped_lock read_lock(
rw_mutex_,
false);
119 if (!it->second.deleted || (it->second.deleted && deleted_ok)) {
120 return make_pair(it->second.obj_type, it->second.fq_name);
123 return make_pair(
"ERROR",
"ERROR");
127 FQNameCacheMap::const_iterator it, ConfigDBFQNameCacheEntry *entry)
const {
128 entry->set_uuid(it->first);
129 entry->set_obj_type(it->second.obj_type);
130 entry->set_fq_name(it->second.fq_name);
131 entry->set_deleted(it->second.deleted);
135 const string &search_string,
const string &last_uuid,
136 uint32_t num_entries,
137 vector<ConfigDBFQNameCacheEntry> *entries)
const {
140 regex search_expr(search_string);
141 tbb::spin_rw_mutex::scoped_lock read_lock(
rw_mutex_,
false);
142 for (FQNameCacheMap::const_iterator it =
148 if (++count > num_entries) {
152 ConfigDBFQNameCacheEntry entry;
154 entries->push_back(entry);
167 bool previous_status =
169 if ((previous_status == success) && !force) {
177 status.cluster = boost::algorithm::join(
config_db_ips(),
", ");
179 status.connection_status_change_at =
virtual void InvalidateFQNameCache(const std::string &uuid)
virtual void GetConnectionInfo(ConfigDBConnInfo &status) const
virtual ~ConfigDbClient()
std::vector< int > config_db_ports_
bool stringToInteger(const std::string &str, NumberType &num)
const std::string & config_db_user() const
ConfigDbClient(ConfigClientManager *mgr, EventManager *evm, const ConfigClientOptions &options)
virtual void StartWatcher()
ObjTypeFQNPair UUIDToFQName(const std::string &uuid_str, bool deleted_ok=true) const
static const int kNumEntriesToRead
FQNameCacheMap fq_name_cache_
virtual void InitConnectionInfo()
virtual void UpdateConnectionInfo(bool success, bool force)
std::pair< std::string, std::string > ObjTypeFQNPair
virtual bool UUIDToFQNameShow(const std::string &search_string, const std::string &last_uuid, uint32_t num_entries, std::vector< ConfigDBFQNameCacheEntry > *entries) const
virtual std::string uuid_str(const std::string &uuid)
static bool regex_match(const std::string &input, const regex ®ex)
virtual void PurgeFQNameCache(const std::string &uuid)
std::string config_db_user_
virtual void FillFQNameCacheInfo(const std::string &uuid, FQNameCacheMap::const_iterator it, ConfigDBFQNameCacheEntry *entry) const
boost::tokenizer< boost::char_separator< char > > tokenizer
std::string config_db_password_
virtual bool IsTaskTriggered() const
const std::string & config_db_password() const
static bool regex_search(const std::string &input, const regex ®ex)
virtual void AddFQNameCache(const std::string &uuid, const std::string &obj_type, const std::string &fq_name)
const std::vector< std::string > & config_db_ips() const
tbb::atomic< uint64_t > connection_status_change_at_
static uint64_t UTCTimestampUsec()
std::vector< std::string > config_db_server_list
virtual std::string FindFQName(const std::string &uuid) const
std::vector< std::string > config_db_ips_
int GetFirstConfigDbPort() const
virtual uint32_t GetNumReadRequestToBunch() const
tbb::atomic< bool > client_connection_up_
tbb::spin_rw_mutex rw_mutex_
static std::string UTCUsecToString(uint64_t tstamp)