diff options
| author | Grant Limberg <[email protected]> | 2023-05-23 12:11:26 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-05-23 12:11:26 -0700 |
| commit | 17f6b3a10b1f1b3bc18c950f762d87fd64a8ce09 (patch) | |
| tree | 88b6cfd31b4c41cdd0feb41b783862e7f2c5f753 /controller/DBMirrorSet.cpp | |
| parent | da71e2524c343f563ea9c37e9668eec7c5719aaa (diff) | |
central controller metrics & request path updates (#2012)
* internal db metrics
* use shared mutexes for read/write locks
* remove this lock. only used for a metric
* more metrics
* remove exploratory metrics
place controller request benchmarks behind ifdef
Diffstat (limited to 'controller/DBMirrorSet.cpp')
| -rw-r--r-- | controller/DBMirrorSet.cpp | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/controller/DBMirrorSet.cpp b/controller/DBMirrorSet.cpp index 5d64ebf0..9372eef6 100644 --- a/controller/DBMirrorSet.cpp +++ b/controller/DBMirrorSet.cpp @@ -32,7 +32,7 @@ DBMirrorSet::DBMirrorSet(DB::ChangeListener *listener) std::vector< std::shared_ptr<DB> > dbs; { - std::lock_guard<std::mutex> l(_dbs_l); + std::unique_lock<std::shared_mutex> l(_dbs_l); if (_dbs.size() <= 1) continue; // no need to do this if there's only one DB, so skip the iteration dbs = _dbs; @@ -79,7 +79,7 @@ DBMirrorSet::~DBMirrorSet() bool DBMirrorSet::hasNetwork(const uint64_t networkId) const { - std::lock_guard<std::mutex> l(_dbs_l); + std::shared_lock<std::shared_mutex> l(_dbs_l); for(auto d=_dbs.begin();d!=_dbs.end();++d) { if ((*d)->hasNetwork(networkId)) return true; @@ -89,7 +89,7 @@ bool DBMirrorSet::hasNetwork(const uint64_t networkId) const bool DBMirrorSet::get(const uint64_t networkId,nlohmann::json &network) { - std::lock_guard<std::mutex> l(_dbs_l); + std::shared_lock<std::shared_mutex> l(_dbs_l); for(auto d=_dbs.begin();d!=_dbs.end();++d) { if ((*d)->get(networkId,network)) { return true; @@ -100,7 +100,7 @@ bool DBMirrorSet::get(const uint64_t networkId,nlohmann::json &network) bool DBMirrorSet::get(const uint64_t networkId,nlohmann::json &network,const uint64_t memberId,nlohmann::json &member) { - std::lock_guard<std::mutex> l(_dbs_l); + std::shared_lock<std::shared_mutex> l(_dbs_l); for(auto d=_dbs.begin();d!=_dbs.end();++d) { if ((*d)->get(networkId,network,memberId,member)) return true; @@ -110,7 +110,7 @@ bool DBMirrorSet::get(const uint64_t networkId,nlohmann::json &network,const uin bool DBMirrorSet::get(const uint64_t networkId,nlohmann::json &network,const uint64_t memberId,nlohmann::json &member,DB::NetworkSummaryInfo &info) { - std::lock_guard<std::mutex> l(_dbs_l); + std::shared_lock<std::shared_mutex> l(_dbs_l); for(auto d=_dbs.begin();d!=_dbs.end();++d) { if ((*d)->get(networkId,network,memberId,member,info)) return true; @@ -120,7 +120,7 @@ bool DBMirrorSet::get(const uint64_t networkId,nlohmann::json &network,const uin bool DBMirrorSet::get(const uint64_t networkId,nlohmann::json &network,std::vector<nlohmann::json> &members) { - std::lock_guard<std::mutex> l(_dbs_l); + std::shared_lock<std::shared_mutex> l(_dbs_l); for(auto d=_dbs.begin();d!=_dbs.end();++d) { if ((*d)->get(networkId,network,members)) return true; @@ -130,7 +130,7 @@ bool DBMirrorSet::get(const uint64_t networkId,nlohmann::json &network,std::vect AuthInfo DBMirrorSet::getSSOAuthInfo(const nlohmann::json &member, const std::string &redirectURL) { - std::lock_guard<std::mutex> l(_dbs_l); + std::shared_lock<std::shared_mutex> l(_dbs_l); for(auto d=_dbs.begin();d!=_dbs.end();++d) { AuthInfo info = (*d)->getSSOAuthInfo(member, redirectURL); if (info.enabled) { @@ -142,7 +142,7 @@ AuthInfo DBMirrorSet::getSSOAuthInfo(const nlohmann::json &member, const std::st void DBMirrorSet::networks(std::set<uint64_t> &networks) { - std::lock_guard<std::mutex> l(_dbs_l); + std::shared_lock<std::shared_mutex> l(_dbs_l); for(auto d=_dbs.begin();d!=_dbs.end();++d) { (*d)->networks(networks); } @@ -151,7 +151,7 @@ void DBMirrorSet::networks(std::set<uint64_t> &networks) bool DBMirrorSet::waitForReady() { bool r = false; - std::lock_guard<std::mutex> l(_dbs_l); + std::shared_lock<std::shared_mutex> l(_dbs_l); for(auto d=_dbs.begin();d!=_dbs.end();++d) { r |= (*d)->waitForReady(); } @@ -160,7 +160,7 @@ bool DBMirrorSet::waitForReady() bool DBMirrorSet::isReady() { - std::lock_guard<std::mutex> l(_dbs_l); + std::shared_lock<std::shared_mutex> l(_dbs_l); for(auto d=_dbs.begin();d!=_dbs.end();++d) { if (!(*d)->isReady()) return false; @@ -172,7 +172,7 @@ bool DBMirrorSet::save(nlohmann::json &record,bool notifyListeners) { std::vector< std::shared_ptr<DB> > dbs; { - std::lock_guard<std::mutex> l(_dbs_l); + std::unique_lock<std::shared_mutex> l(_dbs_l); dbs = _dbs; } if (notifyListeners) { @@ -192,7 +192,7 @@ bool DBMirrorSet::save(nlohmann::json &record,bool notifyListeners) void DBMirrorSet::eraseNetwork(const uint64_t networkId) { - std::lock_guard<std::mutex> l(_dbs_l); + std::unique_lock<std::shared_mutex> l(_dbs_l); for(auto d=_dbs.begin();d!=_dbs.end();++d) { (*d)->eraseNetwork(networkId); } @@ -200,7 +200,7 @@ void DBMirrorSet::eraseNetwork(const uint64_t networkId) void DBMirrorSet::eraseMember(const uint64_t networkId,const uint64_t memberId) { - std::lock_guard<std::mutex> l(_dbs_l); + std::unique_lock<std::shared_mutex> l(_dbs_l); for(auto d=_dbs.begin();d!=_dbs.end();++d) { (*d)->eraseMember(networkId,memberId); } @@ -208,7 +208,7 @@ void DBMirrorSet::eraseMember(const uint64_t networkId,const uint64_t memberId) void DBMirrorSet::nodeIsOnline(const uint64_t networkId,const uint64_t memberId,const InetAddress &physicalAddress) { - std::lock_guard<std::mutex> l(_dbs_l); + std::shared_lock<std::shared_mutex> l(_dbs_l); for(auto d=_dbs.begin();d!=_dbs.end();++d) { (*d)->nodeIsOnline(networkId,memberId,physicalAddress); } @@ -217,7 +217,7 @@ void DBMirrorSet::nodeIsOnline(const uint64_t networkId,const uint64_t memberId, void DBMirrorSet::onNetworkUpdate(const void *db,uint64_t networkId,const nlohmann::json &network) { nlohmann::json record(network); - std::lock_guard<std::mutex> l(_dbs_l); + std::unique_lock<std::shared_mutex> l(_dbs_l); for(auto d=_dbs.begin();d!=_dbs.end();++d) { if (d->get() != db) { (*d)->save(record,false); @@ -229,7 +229,7 @@ void DBMirrorSet::onNetworkUpdate(const void *db,uint64_t networkId,const nlohma void DBMirrorSet::onNetworkMemberUpdate(const void *db,uint64_t networkId,uint64_t memberId,const nlohmann::json &member) { nlohmann::json record(member); - std::lock_guard<std::mutex> l(_dbs_l); + std::unique_lock<std::shared_mutex> l(_dbs_l); for(auto d=_dbs.begin();d!=_dbs.end();++d) { if (d->get() != db) { (*d)->save(record,false); |
