Add delete pending_receipts migration

This commit is contained in:
Nicolas Werner 2020-05-02 17:24:45 +02:00
parent dad2de7ba2
commit d6685e8d61

View file

@ -36,7 +36,7 @@
//! Should be changed when a breaking change occurs in the cache format. //! Should be changed when a breaking change occurs in the cache format.
//! This will reset client's data. //! This will reset client's data.
static const std::string CURRENT_CACHE_FORMAT_VERSION("2018.09.21"); static const std::string CURRENT_CACHE_FORMAT_VERSION("2020.05.01");
static const std::string SECRET("secret"); static const std::string SECRET("secret");
static lmdb::val NEXT_BATCH_KEY("next_batch"); static lmdb::val NEXT_BATCH_KEY("next_batch");
@ -669,6 +669,47 @@ Cache::deleteData()
bool bool
Cache::runMigrations() Cache::runMigrations()
{ {
auto txn = lmdb::txn::begin(env_, nullptr, MDB_RDONLY);
lmdb::val current_version;
bool res = lmdb::dbi_get(txn, syncStateDb_, CACHE_FORMAT_VERSION_KEY, current_version);
txn.commit();
if (!res)
return false;
std::string stored_version(current_version.data(), current_version.size());
std::vector<std::pair<std::string, std::function<bool()>>> migrations{
{"2020.05.01",
[this]() {
try {
auto txn = lmdb::txn::begin(env_, nullptr);
auto pending_receipts =
lmdb::dbi::open(txn, "pending_receipts", MDB_CREATE);
lmdb::dbi_drop(txn, pending_receipts, true);
txn.commit();
} catch (const lmdb::error &) {
nhlog::db()->critical(
"Failed to delete pending_receipts database in migration!");
return false;
}
nhlog::db()->info("Successfully deleted pending receipts database.");
return true;
}},
};
for (const auto &[target_version, migration] : migrations) {
if (target_version > stored_version)
if (!migration()) {
nhlog::db()->critical("migration failure!");
return false;
}
}
setCurrentFormat();
return true; return true;
} }