mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-22 11:00:48 +03:00
Reduce db writes a bit
This commit is contained in:
parent
fafb9cc4a6
commit
eb1a900ed2
1 changed files with 32 additions and 7 deletions
|
@ -1893,6 +1893,14 @@ Cache::saveState(const mtx::responses::Sync &res)
|
|||
auto membersdb = getMembersDb(txn, room.first);
|
||||
auto eventsDb = getEventsDb(txn, room.first);
|
||||
|
||||
// nhlog::db()->critical(
|
||||
// "Saving events for room: {}, state {}, timeline {}, account {}, ephemeral {}",
|
||||
// room.first,
|
||||
// room.second.state.events.size(),
|
||||
// room.second.timeline.events.size(),
|
||||
// room.second.account_data.events.size(),
|
||||
// room.second.ephemeral.events.size());
|
||||
|
||||
saveStateEvents(
|
||||
txn, statesdb, stateskeydb, membersdb, eventsDb, room.first, room.second.state.events);
|
||||
saveStateEvents(
|
||||
|
@ -1901,13 +1909,12 @@ Cache::saveState(const mtx::responses::Sync &res)
|
|||
saveTimelineMessages(txn, eventsDb, room.first, room.second.timeline);
|
||||
|
||||
RoomInfo updatedInfo;
|
||||
std::string_view originalRoomInfoDump;
|
||||
{
|
||||
// retrieve the old tags and modification ts
|
||||
std::string_view data;
|
||||
if (roomsDb_.get(txn, room.first, data)) {
|
||||
if (roomsDb_.get(txn, room.first, originalRoomInfoDump)) {
|
||||
try {
|
||||
RoomInfo tmp = nlohmann::json::parse(std::string_view(data.data(), data.size()))
|
||||
.get<RoomInfo>();
|
||||
RoomInfo tmp = nlohmann::json::parse(originalRoomInfoDump).get<RoomInfo>();
|
||||
updatedInfo.tags = std::move(tmp.tags);
|
||||
|
||||
updatedInfo.approximate_last_modification_ts =
|
||||
|
@ -1915,7 +1922,7 @@ Cache::saveState(const mtx::responses::Sync &res)
|
|||
} catch (const nlohmann::json::exception &e) {
|
||||
nhlog::db()->warn("failed to parse room info: room_id ({}), {}: {}",
|
||||
room.first,
|
||||
std::string(data.data(), data.size()),
|
||||
originalRoomInfoDump,
|
||||
e.what());
|
||||
}
|
||||
}
|
||||
|
@ -2004,7 +2011,12 @@ Cache::saveState(const mtx::responses::Sync &res)
|
|||
std::visit([](const auto &e) -> uint64_t { return e.origin_server_ts; }, e);
|
||||
}
|
||||
|
||||
roomsDb_.put(txn, room.first, nlohmann::json(updatedInfo).dump());
|
||||
if (auto newRoomInfoDump = nlohmann::json(updatedInfo).dump();
|
||||
newRoomInfoDump != originalRoomInfoDump) {
|
||||
nhlog::db()->critical(
|
||||
"Writing out new room info:\n{}\n{}", originalRoomInfoDump, newRoomInfoDump);
|
||||
roomsDb_.put(txn, room.first, newRoomInfoDump);
|
||||
}
|
||||
|
||||
for (const auto &e : room.second.ephemeral.events) {
|
||||
if (auto receiptsEv =
|
||||
|
@ -2135,7 +2147,20 @@ Cache::savePresence(
|
|||
const std::vector<mtx::events::Event<mtx::events::presence::Presence>> &presenceUpdates)
|
||||
{
|
||||
for (const auto &update : presenceUpdates) {
|
||||
presenceDb_.put(txn, update.sender, nlohmann::json(update.content).dump());
|
||||
auto toWrite = nlohmann::json(update.content);
|
||||
// Nheko currently doesn't use those and it causes lots of db writes :)
|
||||
toWrite.erase("currently_active");
|
||||
toWrite.erase("last_active_ago");
|
||||
auto toWriteStr = toWrite.dump();
|
||||
|
||||
std::string_view oldPresenceVal;
|
||||
|
||||
presenceDb_.get(txn, update.sender, oldPresenceVal);
|
||||
if (oldPresenceVal != toWriteStr) {
|
||||
// nhlog::db()->critical(
|
||||
// "Presence update for {}: {} -> {}", update.sender, oldPresenceVal, toWriteStr);
|
||||
presenceDb_.put(txn, update.sender, toWriteStr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue