Skip to content

Commit

Permalink
Merge "Introspect for config client"
Browse files Browse the repository at this point in the history
  • Loading branch information
Zuul authored and opencontrail-ci-admin committed Apr 11, 2017
2 parents a6677dd + 129ba5c commit 67b9063
Show file tree
Hide file tree
Showing 7 changed files with 908 additions and 4 deletions.
100 changes: 98 additions & 2 deletions src/ifmap/client/config_cassandra_client.cc
Expand Up @@ -107,6 +107,18 @@ ConfigCassandraPartition *ConfigCassandraClient::GetPartition(const string &uuid
return partitions_[worker_id];
}

const ConfigCassandraPartition *ConfigCassandraClient::GetPartition(
const string &uuid) const {
int worker_id = HashUUID(uuid);
return partitions_[worker_id];
}

const ConfigCassandraPartition *ConfigCassandraClient::GetPartition(
int worker_id) const {
assert(worker_id < num_workers_);
return partitions_[worker_id];
}

int ConfigCassandraClient::HashUUID(const string &uuid_str) const {
boost::hash<string> string_hash;
return string_hash(uuid_str) % num_workers_;
Expand Down Expand Up @@ -427,7 +439,7 @@ void ConfigCassandraClient::AddFQNameCache(const string &uuid,

void ConfigCassandraClient::InvalidateFQNameCache(const string &uuid) {
tbb::spin_rw_mutex::scoped_lock write_lock(rw_mutex_, true);
map<string, FQNameCacheType>::iterator it = fq_name_cache_.find(uuid);
FQNameCacheMap::iterator it = fq_name_cache_.find(uuid);
if (it != fq_name_cache_.end()) {
it->second.deleted = true;
}
Expand All @@ -442,7 +454,7 @@ void ConfigCassandraClient::PurgeFQNameCache(const string &uuid) {
ConfigCassandraClient::ObjTypeFQNPair ConfigCassandraClient::UUIDToFQName(
const string &uuid, bool deleted_ok) const {
tbb::spin_rw_mutex::scoped_lock read_lock(rw_mutex_, false);
map<string, FQNameCacheType>::const_iterator it = fq_name_cache_.find(uuid);
FQNameCacheMap::const_iterator it = fq_name_cache_.find(uuid);
if (it != fq_name_cache_.end()) {
if (!it->second.deleted || (it->second.deleted && deleted_ok)) {
return make_pair(it->second.obj_type, it->second.obj_name);
Expand All @@ -451,6 +463,51 @@ ConfigCassandraClient::ObjTypeFQNPair ConfigCassandraClient::UUIDToFQName(
return make_pair("ERROR", "ERROR");
}

void ConfigCassandraClient::FillFQNameCacheInfo(const string &uuid,
FQNameCacheMap::const_iterator it, ConfigDBFQNameCacheEntry &entry) const {
entry.set_uuid(it->first);
entry.set_obj_type(it->second.obj_type);
entry.set_fq_name(it->second.obj_name);
entry.set_deleted(it->second.deleted);
}

bool ConfigCassandraClient::UUIDToFQNameShow(const string &uuid,
ConfigDBFQNameCacheEntry &entry) const {
tbb::spin_rw_mutex::scoped_lock read_lock(rw_mutex_, false);
FQNameCacheMap::const_iterator it = fq_name_cache_.find(uuid);
if (it == fq_name_cache_.end()) {
return false;
}
FillFQNameCacheInfo(uuid, it, entry);
return true;
}

bool ConfigCassandraClient::UUIDToFQNameShow(const string &start_uuid,
uint32_t num_entries, vector<ConfigDBFQNameCacheEntry> &entries) const {
uint32_t count = 0;
tbb::spin_rw_mutex::scoped_lock read_lock(rw_mutex_, false);
for(FQNameCacheMap::const_iterator it =
fq_name_cache_.upper_bound(start_uuid);
count < num_entries && it != fq_name_cache_.end(); it++, count++) {
ConfigDBFQNameCacheEntry entry;
FillFQNameCacheInfo(it->first, it, entry);
entries.push_back(entry);
}
return true;
}

bool ConfigCassandraClient::UUIDToObjCacheShow(int inst_num, const string &uuid,
ConfigDBUUIDCacheEntry &entry) const {
return GetPartition(inst_num)->UUIDToObjCacheShow(uuid, entry);
}

bool ConfigCassandraClient::UUIDToObjCacheShow(int inst_num,
const string &start_uuid, uint32_t num_entries,
vector<ConfigDBUUIDCacheEntry> &entries) const {
return GetPartition(inst_num)->UUIDToObjCacheShow(start_uuid,
num_entries, entries);
}

void ConfigCassandraClient::EnqueueUUIDRequest(string oper, string obj_type,
string uuid_str) {
ObjectProcessReq *req = new ObjectProcessReq(oper, obj_type, uuid_str);
Expand Down Expand Up @@ -823,3 +880,42 @@ void ConfigCassandraPartition::MarkCacheDirty(const string &uuid) {
it->second.second = false;
}
}

void ConfigCassandraPartition::FillUUIDToObjCacheInfo(const string &uuid,
ObjectCacheMap::const_iterator uuid_iter,
ConfigDBUUIDCacheEntry &entry) const {
entry.set_uuid(uuid);
vector<ConfigDBUUIDCacheData> fields;
for (FieldDetailMap::const_iterator it = uuid_iter->second.begin();
it != uuid_iter->second.end(); it++) {
ConfigDBUUIDCacheData each_field;
each_field.set_refresh(it->second.second);
each_field.set_field_name(it->first);
each_field.set_timestamp(UTCUsecToString(it->second.first));
fields.push_back(each_field);
}
entry.set_field_list(fields);
}

bool ConfigCassandraPartition::UUIDToObjCacheShow(const string &uuid,
ConfigDBUUIDCacheEntry &entry) const {
ObjectCacheMap::const_iterator uuid_iter = object_cache_map_.find(uuid);
if (uuid_iter == object_cache_map_.end()) {
return false;
}
FillUUIDToObjCacheInfo(uuid, uuid_iter, entry);
return true;
}

bool ConfigCassandraPartition::UUIDToObjCacheShow(const string &start_uuid,
uint32_t num_entries, vector<ConfigDBUUIDCacheEntry> &entries) const {
uint32_t count = 0;
for(ObjectCacheMap::const_iterator it =
object_cache_map_.upper_bound(start_uuid);
count < num_entries && it != object_cache_map_.end(); it++, count++) {
ConfigDBUUIDCacheEntry entry;
FillUUIDToObjCacheInfo(it->first, it, entry);
entries.push_back(entry);
}
return true;
}
31 changes: 31 additions & 0 deletions src/ifmap/client/config_cassandra_client.h
Expand Up @@ -21,6 +21,8 @@ struct ConfigDBConnInfo;
class TaskTrigger;
class ConfigCassandraClient;
struct ConfigCassandraParseContext;
class ConfigDBFQNameCacheEntry;
class ConfigDBUUIDCacheEntry;

class ObjectProcessReq {
public:
Expand Down Expand Up @@ -60,6 +62,13 @@ class ConfigCassandraPartition {

void Enqueue(ObjectProcessReq *req);

bool UUIDToObjCacheShow(const std::string &uuid,
ConfigDBUUIDCacheEntry &entry) const;

bool UUIDToObjCacheShow(const std::string &start_uuid,
uint32_t num_entries,
std::vector<ConfigDBUUIDCacheEntry> &entries) const;

private:
friend class ConfigCassandraClient;

Expand Down Expand Up @@ -97,6 +106,10 @@ class ConfigCassandraPartition {
return config_client_;
}

void FillUUIDToObjCacheInfo(const std::string &uuid,
ObjectCacheMap::const_iterator uuid_iter,
ConfigDBUUIDCacheEntry &entry) const;

ObjProcessWorkQType obj_process_queue_;
UUIDProcessSet uuid_read_set_;
ObjectCacheMap object_cache_map_;
Expand Down Expand Up @@ -148,6 +161,8 @@ class ConfigCassandraClient : public ConfigDbClient {
ConfigClientManager *mgr() { return mgr_; }
const ConfigClientManager *mgr() const { return mgr_; }
ConfigCassandraPartition *GetPartition(const std::string &uuid);
const ConfigCassandraPartition *GetPartition(const std::string &uuid) const;
const ConfigCassandraPartition *GetPartition(int worker_id) const;

void EnqueueUUIDRequest(std::string oper, std::string obj_type,
std::string uuid_str);
Expand All @@ -164,6 +179,20 @@ class ConfigCassandraClient : public ConfigDbClient {
virtual void InvalidateFQNameCache(const std::string &uuid);
void PurgeFQNameCache(const std::string &uuid);

virtual bool UUIDToFQNameShow(const std::string &uuid,
ConfigDBFQNameCacheEntry &entry) const;

virtual bool UUIDToFQNameShow(const std::string &start_uuid,
uint32_t num_entries,
std::vector<ConfigDBFQNameCacheEntry> &entries) const;

virtual bool UUIDToObjCacheShow(int inst_num, const std::string &uuid,
ConfigDBUUIDCacheEntry &entry) const;

virtual bool UUIDToObjCacheShow(int inst_num, const std::string &start_uuid,
uint32_t num_entries,
std::vector<ConfigDBUUIDCacheEntry> &entries) const;

protected:
typedef std::pair<std::string, std::string> ObjTypeUUIDType;
typedef std::list<ObjTypeUUIDType> ObjTypeUUIDList;
Expand Down Expand Up @@ -233,6 +262,8 @@ class ConfigCassandraClient : public ConfigDbClient {
std::string *last_column);

void HandleCassandraConnectionStatus(bool success);
void FillFQNameCacheInfo(const std::string &uuid,
FQNameCacheMap::const_iterator it, ConfigDBFQNameCacheEntry &entry) const;

ConfigClientManager *mgr_;
EventManager *evm_;
Expand Down
13 changes: 13 additions & 0 deletions src/ifmap/client/config_db_client.h
Expand Up @@ -13,6 +13,8 @@

struct IFMapConfigOptions;
struct ConfigDBConnInfo;
struct ConfigDBFQNameCacheEntry;
struct ConfigDBUUIDCacheEntry;
/*
* This is the base class for interactions with a database that stores the user
* configuration.
Expand All @@ -35,9 +37,20 @@ class ConfigDbClient {
virtual void AddFQNameCache(const std::string &uuid,
const std::string &obj_type, const std::string &fq_name) = 0;
virtual void InvalidateFQNameCache(const std::string &uuid) = 0;
virtual bool UUIDToFQNameShow(const std::string &uuid,
ConfigDBFQNameCacheEntry &entry) const = 0;
virtual bool UUIDToFQNameShow(const std::string &start_uuid,
uint32_t num_entries,
std::vector<ConfigDBFQNameCacheEntry> &entries) const = 0;

virtual void GetConnectionInfo(ConfigDBConnInfo &status) const = 0;

virtual bool UUIDToObjCacheShow(int inst_num, const std::string &uuid,
ConfigDBUUIDCacheEntry &entry) const = 0;
virtual bool UUIDToObjCacheShow(int inst_num, const std::string &start_uuid,
uint32_t num_entries,
std::vector<ConfigDBUUIDCacheEntry> &entries) const = 0;

private:
std::string config_db_user_;
std::string config_db_password_;
Expand Down

0 comments on commit 67b9063

Please sign in to comment.