diff options
author | Konstantinos Sideris <sideris.konstantin@gmail.com> | 2017-12-10 12:51:44 +0200 |
---|---|---|
committer | Konstantinos Sideris <sideris.konstantin@gmail.com> | 2017-12-10 12:51:44 +0200 |
commit | d872b1060bb362d439f971fa5f9f04e1907d7410 (patch) | |
tree | 224a02cb0305bd82bf34705eda4ce312dc077073 /src | |
parent | bbe69a4fb63aa7173ef767ddd8212c213ac2c3dd (diff) |
Reset cache on breaking changes
fixes #154
Diffstat (limited to 'src')
-rw-r--r-- | src/Cache.cc | 42 | ||||
-rw-r--r-- | src/ChatPage.cc | 6 |
2 files changed, 47 insertions, 1 deletions
diff --git a/src/Cache.cc b/src/Cache.cc index 087dd4bc..7d044e8f 100644 --- a/src/Cache.cc +++ b/src/Cache.cc @@ -24,8 +24,10 @@ #include "Cache.h" #include "RoomState.h" +static const std::string CURRENT_CACHE_FORMAT_VERSION("2017.12.10"); + static const lmdb::val NEXT_BATCH_KEY("next_batch"); -static const lmdb::val transactionID("transaction_id"); +static const lmdb::val CACHE_FORMAT_VERSION_KEY("cache_format_version"); Cache::Cache(const QString &userId) : env_{nullptr} @@ -270,3 +272,41 @@ Cache::deleteData() if (!cacheDirectory_.isEmpty()) QDir(cacheDirectory_).removeRecursively(); } + +bool +Cache::isFormatValid() +{ + auto txn = lmdb::txn::begin(env_, nullptr, MDB_RDONLY); + + lmdb::val current_version; + bool res = lmdb::dbi_get(txn, stateDb_, CACHE_FORMAT_VERSION_KEY, current_version); + + txn.commit(); + + if (!res) + return false; + + std::string stored_version(current_version.data(), current_version.size()); + + if (stored_version != CURRENT_CACHE_FORMAT_VERSION) { + qWarning() << "Stored format version" << QString::fromStdString(stored_version); + qWarning() << "There are breaking changes in the cache format."; + return false; + } + + return true; +} + +void +Cache::setCurrentFormat() +{ + auto txn = lmdb::txn::begin(env_); + + lmdb::dbi_put( + txn, + stateDb_, + CACHE_FORMAT_VERSION_KEY, + lmdb::val(CURRENT_CACHE_FORMAT_VERSION.data(), CURRENT_CACHE_FORMAT_VERSION.size())); + + txn.commit(); +} diff --git a/src/ChatPage.cc b/src/ChatPage.cc index ab5aa263..100c18f4 100644 --- a/src/ChatPage.cc +++ b/src/ChatPage.cc @@ -334,6 +334,12 @@ ChatPage::bootstrap(QString userid, QString homeserver, QString token) try { cache_->setup(); + if (!cache_->isFormatValid()) { + cache_->deleteData(); + cache_->setup(); + cache_->setCurrentFormat(); + } + if (cache_->isInitialized()) { loadStateFromCache(); return; |