Optimize fetching olm session from the db

This commit is contained in:
Nicolas Werner 2022-11-01 21:13:11 +01:00
parent 676a6506cb
commit 54931cb21b
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9

View file

@ -962,19 +962,20 @@ Cache::getOlmSession(const std::string &curve25519, const std::string &session_i
{ {
using namespace mtx::crypto; using namespace mtx::crypto;
auto txn = lmdb::txn::begin(env_); try {
auto txn = ro_txn(env_);
auto db = getOlmSessionsDb(txn, curve25519); auto db = getOlmSessionsDb(txn, curve25519);
std::string_view pickled; std::string_view pickled;
bool found = db.get(txn, session_id, pickled); bool found = db.get(txn, session_id, pickled);
txn.commit();
if (found) { if (found) {
auto data = nlohmann::json::parse(pickled).get<StoredOlmSession>(); auto data = nlohmann::json::parse(pickled).get<StoredOlmSession>();
return unpickle<SessionObject>(data.pickled_session, pickle_secret_); return unpickle<SessionObject>(data.pickled_session, pickle_secret_);
} }
} catch (...) {
}
return std::nullopt; return std::nullopt;
} }
@ -983,7 +984,8 @@ Cache::getLatestOlmSession(const std::string &curve25519)
{ {
using namespace mtx::crypto; using namespace mtx::crypto;
auto txn = lmdb::txn::begin(env_); try {
auto txn = ro_txn(env_);
auto db = getOlmSessionsDb(txn, curve25519); auto db = getOlmSessionsDb(txn, curve25519);
std::string_view session_id, pickled_session; std::string_view session_id, pickled_session;
@ -998,11 +1000,12 @@ Cache::getLatestOlmSession(const std::string &curve25519)
} }
cursor.close(); cursor.close();
txn.commit();
return currentNewest ? std::optional(unpickle<SessionObject>(currentNewest->pickled_session, return currentNewest ? std::optional(unpickle<SessionObject>(currentNewest->pickled_session,
pickle_secret_)) pickle_secret_))
: std::nullopt; : std::nullopt;
} catch (...) {
return std::nullopt;
}
} }
std::vector<std::string> std::vector<std::string>