diff --git a/golpe b/golpe index c95388c..e938a71 160000 --- a/golpe +++ b/golpe @@ -1 +1 @@ -Subproject commit c95388c4619fffad4ff6632ccafc2780a6d32663 +Subproject commit e938a71c0d5bda1bf89594d3f745056af70ff7ec diff --git a/golpe.yaml b/golpe.yaml index 013acf6..e1c1262 100644 --- a/golpe.yaml +++ b/golpe.yaml @@ -1,5 +1,4 @@ appName: strfry -quadrable: true onAppStartup: true useGlobalH: true customLMDBSetup: true diff --git a/src/RelayCron.cpp b/src/RelayCron.cpp index 5d41802..7e19d81 100644 --- a/src/RelayCron.cpp +++ b/src/RelayCron.cpp @@ -42,11 +42,9 @@ void RelayServer::cleanupOldEvents() { } if (expiredLevIds.size() > 0) { - auto txn = env.txn_rw(); + auto qdb = getQdbInstance(); - quadrable::Quadrable qdb; - qdb.init(txn); - qdb.checkout("events"); + auto txn = env.txn_rw(); uint64_t numDeleted = 0; auto changes = qdb.change(); @@ -67,12 +65,7 @@ void RelayServer::cleanupOldEvents() { } void RelayServer::garbageCollect() { - quadrable::Quadrable qdb; - { - auto txn = env.txn_ro(); - qdb.init(txn); - } - qdb.checkout("events"); + auto qdb = getQdbInstance(); quadrableGarbageCollect(qdb, 1); } diff --git a/src/RelayWriter.cpp b/src/RelayWriter.cpp index 7810a69..94a1413 100644 --- a/src/RelayWriter.cpp +++ b/src/RelayWriter.cpp @@ -2,12 +2,7 @@ void RelayServer::runWriter(ThreadPool::Thread &thr) { - quadrable::Quadrable qdb; - { - auto txn = env.txn_ro(); - qdb.init(txn); - } - qdb.checkout("events"); + auto qdb = getQdbInstance(); while(1) { auto newMsgs = thr.inbox.pop_all(); diff --git a/src/RelayYesstr.cpp b/src/RelayYesstr.cpp index 4d5f2c5..fef3eb8 100644 --- a/src/RelayYesstr.cpp +++ b/src/RelayYesstr.cpp @@ -6,12 +6,7 @@ void RelayServer::runYesstr(ThreadPool::Thread &thr) { - quadrable::Quadrable qdb; - { - auto txn = env.txn_ro(); - qdb.init(txn); - } - + auto qdb = getQdbInstance(); struct SyncState { quadrable::MemStore m; diff --git a/src/WriterPipeline.h b/src/WriterPipeline.h index 6eb4011..0fd041f 100644 --- a/src/WriterPipeline.h +++ b/src/WriterPipeline.h @@ -58,12 +58,7 @@ struct WriterPipeline { writerThread = std::thread([&]() { setThreadName("Writer"); - quadrable::Quadrable qdb; - { - auto txn = env.txn_ro(); - qdb.init(txn); - } - qdb.checkout("events"); + auto qdb = getQdbInstance(); while (1) { // Debounce diff --git a/src/cmd_compact.cpp b/src/cmd_compact.cpp index 2f994fd..7d009d9 100644 --- a/src/cmd_compact.cpp +++ b/src/cmd_compact.cpp @@ -32,12 +32,7 @@ void cmd_compact(const std::vector &subArgs) { env.copy_fd(::fileno(f)); } } else if (args["quad-gc"].asBool()) { - quadrable::Quadrable qdb; - { - auto txn = env.txn_ro(); - qdb.init(txn); - } - qdb.checkout("events"); + auto qdb = getQdbInstance(); quadrableGarbageCollect(qdb, 2); } diff --git a/src/cmd_import.cpp b/src/cmd_import.cpp index cb0f1df..f9ba6f9 100644 --- a/src/cmd_import.cpp +++ b/src/cmd_import.cpp @@ -23,12 +23,7 @@ void cmd_import(const std::vector &subArgs) { if (noVerify) LW << "not verifying event IDs or signatures!"; - quadrable::Quadrable qdb; - { - auto txn = env.txn_ro(); - qdb.init(txn); - } - qdb.checkout("events"); + auto qdb = getQdbInstance(); auto txn = env.txn_rw(); diff --git a/src/cmd_info.cpp b/src/cmd_info.cpp index df9b9cd..dfcdc71 100644 --- a/src/cmd_info.cpp +++ b/src/cmd_info.cpp @@ -14,12 +14,7 @@ R"( void cmd_info(const std::vector &subArgs) { std::map args = docopt::docopt(USAGE, subArgs, true, ""); - quadrable::Quadrable qdb; - { - auto txn = env.txn_ro(); - qdb.init(txn); - } - qdb.checkout("events"); + auto qdb = getQdbInstance(); auto txn = env.txn_ro(); diff --git a/src/cmd_sync.cpp b/src/cmd_sync.cpp index 25b3d4e..cf1dc71 100644 --- a/src/cmd_sync.cpp +++ b/src/cmd_sync.cpp @@ -133,20 +133,12 @@ void cmd_sync(const std::vector &subArgs) { std::unique_ptr controller; WriterPipeline writer; WSConnection ws(url); - - quadrable::Quadrable qdb; - { - auto txn = env.txn_ro(); - qdb.init(txn); - } - qdb.checkout("events"); - + auto qdb = getQdbInstance(); ws.reconnect = false; - if (filterStr.size()) { std::vector levIds; diff --git a/src/global.h b/src/global.h index a7a4ce7..222d363 100644 --- a/src/global.h +++ b/src/global.h @@ -4,3 +4,9 @@ #include using namespace phmap; + + +#include + +quadrable::Quadrable getQdbInstance(lmdb::txn &txn); +quadrable::Quadrable getQdbInstance(); diff --git a/src/onAppStartup.cpp b/src/onAppStartup.cpp index a5cc4f6..6127a1f 100644 --- a/src/onAppStartup.cpp +++ b/src/onAppStartup.cpp @@ -67,7 +67,24 @@ static void setRLimits() { if (setrlimit(RLIMIT_NOFILE, &curr)) throw herr("Failed setting NOFILES limit to ", cfg().relay__nofiles, ": ", strerror(errno)); } + + +quadrable::Quadrable getQdbInstance(lmdb::txn &txn) { + quadrable::Quadrable qdb; + qdb.init(txn); + qdb.checkout("events"); + return qdb; +} + +quadrable::Quadrable getQdbInstance() { + auto txn = env.txn_ro(); + return getQdbInstance(txn); +} + void onAppStartup(lmdb::txn &txn, const std::string &cmd) { dbCheck(txn, cmd); + setRLimits(); + + (void)getQdbInstance(txn); }