diff options
| author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2017-04-24 19:16:36 -0700 |
|---|---|---|
| committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2017-04-24 19:16:36 -0700 |
| commit | cafbe44dde55e57115cc654610172556dff19bec (patch) | |
| tree | 3e6e22d491535e16e97c94388b7ec02e3b7f0c2a /controller/JSONDB.cpp | |
| parent | 6234bfd8bf47ad3fc1f5b87adea73c62839f2864 (diff) | |
| download | infinitytier-cafbe44dde55e57115cc654610172556dff19bec.tar.gz infinitytier-cafbe44dde55e57115cc654610172556dff19bec.zip | |
Controller optimizations -- make locking more fine-grained, use true hardware concurrency, etc.
Diffstat (limited to 'controller/JSONDB.cpp')
| -rw-r--r-- | controller/JSONDB.cpp | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/controller/JSONDB.cpp b/controller/JSONDB.cpp index d3e76fc1..dd8e3968 100644 --- a/controller/JSONDB.cpp +++ b/controller/JSONDB.cpp @@ -78,22 +78,29 @@ bool JSONDB::writeRaw(const std::string &n,const std::string &obj) bool JSONDB::put(const std::string &n,const nlohmann::json &obj) { const bool r = writeRaw(n,OSUtils::jsonDump(obj)); - _db[n].obj = obj; + { + Mutex::Lock _l(_db_m); + _db[n].obj = obj; + } return r; } -const nlohmann::json &JSONDB::get(const std::string &n) +nlohmann::json JSONDB::get(const std::string &n) { - while (!_ready) { - Thread::sleep(250); - _ready = _reload(_basePath,std::string()); - } + { + Mutex::Lock _l(_db_m); - if (!_isValidObjectName(n)) - return _EMPTY_JSON; - std::map<std::string,_E>::iterator e(_db.find(n)); - if (e != _db.end()) - return e->second.obj; + while (!_ready) { + Thread::sleep(250); + _ready = _reload(_basePath,std::string()); + } + + if (!_isValidObjectName(n)) + return _EMPTY_JSON; + std::map<std::string,_E>::iterator e(_db.find(n)); + if (e != _db.end()) + return e->second.obj; + } std::string buf; if (_httpAddr) { @@ -110,6 +117,7 @@ const nlohmann::json &JSONDB::get(const std::string &n) } try { + Mutex::Lock _l(_db_m); _E &e2 = _db[n]; e2.obj = OSUtils::jsonParse(buf); return e2.obj; @@ -135,11 +143,15 @@ void JSONDB::erase(const std::string &n) OSUtils::rm(path.c_str()); } - _db.erase(n); + { + Mutex::Lock _l(_db_m); + _db.erase(n); + } } bool JSONDB::_reload(const std::string &p,const std::string &b) { + // Assumes _db_m is locked if (_httpAddr) { std::string body; std::map<std::string,std::string> headers; |
