Fix migration (hopefully)
This commit is contained in:
parent
ade905c881
commit
720bb164f7
@ -693,9 +693,56 @@ Cache::runMigrations()
|
|||||||
auto room_ids = getRoomIds(txn);
|
auto room_ids = getRoomIds(txn);
|
||||||
|
|
||||||
for (const auto &room_id : room_ids) {
|
for (const auto &room_id : room_ids) {
|
||||||
auto messagesDb = lmdb::dbi::open(
|
try {
|
||||||
txn, std::string(room_id + "/messages").c_str(), MDB_CREATE);
|
auto messagesDb = lmdb::dbi::open(
|
||||||
lmdb::dbi_drop(txn, messagesDb, true);
|
txn, std::string(room_id + "/messages").c_str());
|
||||||
|
|
||||||
|
// keep some old messages and batch token
|
||||||
|
{
|
||||||
|
auto roomsCursor =
|
||||||
|
lmdb::cursor::open(txn, messagesDb);
|
||||||
|
lmdb::val ts, stored_message;
|
||||||
|
bool start = true;
|
||||||
|
mtx::responses::Timeline oldMessages;
|
||||||
|
while (roomsCursor.get(ts,
|
||||||
|
stored_message,
|
||||||
|
start ? MDB_FIRST
|
||||||
|
: MDB_NEXT)) {
|
||||||
|
start = false;
|
||||||
|
|
||||||
|
auto j = json::parse(std::string_view(
|
||||||
|
stored_message.data(),
|
||||||
|
stored_message.size()));
|
||||||
|
|
||||||
|
if (oldMessages.prev_batch.empty())
|
||||||
|
oldMessages.prev_batch =
|
||||||
|
j["token"].get<std::string>();
|
||||||
|
else if (j["token"] !=
|
||||||
|
oldMessages.prev_batch)
|
||||||
|
break;
|
||||||
|
|
||||||
|
mtx::events::collections::TimelineEvent
|
||||||
|
te;
|
||||||
|
mtx::events::collections::from_json(
|
||||||
|
j["event"], te);
|
||||||
|
oldMessages.events.push_back(te.data);
|
||||||
|
}
|
||||||
|
// messages were stored in reverse order, so we
|
||||||
|
// need to reverse them
|
||||||
|
std::reverse(oldMessages.events.begin(),
|
||||||
|
oldMessages.events.end());
|
||||||
|
// save messages using the new method
|
||||||
|
saveTimelineMessages(txn, room_id, oldMessages);
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete old messages db
|
||||||
|
lmdb::dbi_drop(txn, messagesDb, true);
|
||||||
|
} catch (std::exception &e) {
|
||||||
|
nhlog::db()->error(
|
||||||
|
"While migrating messages from {}, ignoring error {}",
|
||||||
|
room_id,
|
||||||
|
e.what());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
txn.commit();
|
txn.commit();
|
||||||
} catch (const lmdb::error &) {
|
} catch (const lmdb::error &) {
|
||||||
|
Loading…
Reference in New Issue
Block a user