summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2018-03-29 17:52:08 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2018-03-29 17:52:08 +0200
commit9f35ec4fc9b00d004e6dca563b1f3e044d25b1a0 (patch)
tree0f36e9aed43198e6e532b25220a3cdb39882c47d
parenta0ae06878597bddc8fcf2d0283f9d2c45613c7dd (diff)
downloadsink-9f35ec4fc9b00d004e6dca563b1f3e044d25b1a0.tar.gz
sink-9f35ec4fc9b00d004e6dca563b1f3e044d25b1a0.zip
Prepare upgrade paths that don't nuke everything
-rw-r--r--common/genericresource.cpp28
1 files changed, 17 insertions, 11 deletions
diff --git a/common/genericresource.cpp b/common/genericresource.cpp
index 5f49814..9cf91da 100644
--- a/common/genericresource.cpp
+++ b/common/genericresource.cpp
@@ -65,18 +65,24 @@ bool GenericResource::checkForUpgrade()
65 if (currentDatabaseVersion != Sink::latestDatabaseVersion()) { 65 if (currentDatabaseVersion != Sink::latestDatabaseVersion()) {
66 SinkLog() << "Starting database upgrade from " << currentDatabaseVersion << " to " << Sink::latestDatabaseVersion(); 66 SinkLog() << "Starting database upgrade from " << currentDatabaseVersion << " to " << Sink::latestDatabaseVersion();
67 67
68 //Right now upgrading just means removing all local storage so we will resync 68 bool nukeDatabases = false;
69 Sink::Storage::DataStore(Sink::storageLocation(), mResourceContext.instanceId(), Sink::Storage::DataStore::ReadWrite).removeFromDisk(); 69 //Only apply the necessary updates.
70 Sink::Storage::DataStore(Sink::storageLocation(), mResourceContext.instanceId() + ".userqueue", Sink::Storage::DataStore::ReadWrite).removeFromDisk(); 70 for (int i = currentDatabaseVersion; i < Sink::latestDatabaseVersion(); i++) {
71 Sink::Storage::DataStore(Sink::storageLocation(), mResourceContext.instanceId() + ".synchronizerqueue", Sink::Storage::DataStore::ReadWrite).removeFromDisk(); 71 //TODO implement specific upgrade paths where applicable, and only nuke otherwise
72 Sink::Storage::DataStore(Sink::storageLocation(), mResourceContext.instanceId() + ".changereplay", Sink::Storage::DataStore::ReadWrite).removeFromDisk(); 72 nukeDatabases = true;
73 Sink::Storage::DataStore(Sink::storageLocation(), mResourceContext.instanceId() + ".synchronization", Sink::Storage::DataStore::ReadWrite).removeFromDisk();
74
75 {
76 auto store = Sink::Storage::DataStore(Sink::storageLocation(), mResourceContext.instanceId(), Sink::Storage::DataStore::ReadWrite);
77 auto t = store.createTransaction(Storage::DataStore::ReadWrite);
78 Storage::DataStore::setDatabaseVersion(t, Sink::latestDatabaseVersion());
79 } 73 }
74 if (nukeDatabases) {
75 SinkLog() << "Wiping all databases during upgrade, you will have to resync.";
76 //Right now upgrading just means removing all local storage so we will resync
77 Sink::Storage::DataStore(Sink::storageLocation(), mResourceContext.instanceId(), Sink::Storage::DataStore::ReadWrite).removeFromDisk();
78 Sink::Storage::DataStore(Sink::storageLocation(), mResourceContext.instanceId() + ".userqueue", Sink::Storage::DataStore::ReadWrite).removeFromDisk();
79 Sink::Storage::DataStore(Sink::storageLocation(), mResourceContext.instanceId() + ".synchronizerqueue", Sink::Storage::DataStore::ReadWrite).removeFromDisk();
80 Sink::Storage::DataStore(Sink::storageLocation(), mResourceContext.instanceId() + ".changereplay", Sink::Storage::DataStore::ReadWrite).removeFromDisk();
81 Sink::Storage::DataStore(Sink::storageLocation(), mResourceContext.instanceId() + ".synchronization", Sink::Storage::DataStore::ReadWrite).removeFromDisk();
82 }
83 auto store = Sink::Storage::DataStore(Sink::storageLocation(), mResourceContext.instanceId(), Sink::Storage::DataStore::ReadWrite);
84 auto t = store.createTransaction(Storage::DataStore::ReadWrite);
85 Storage::DataStore::setDatabaseVersion(t, Sink::latestDatabaseVersion());
80 SinkLog() << "Finished database upgrade to " << Sink::latestDatabaseVersion(); 86 SinkLog() << "Finished database upgrade to " << Sink::latestDatabaseVersion();
81 return true; 87 return true;
82 } 88 }