summaryrefslogtreecommitdiffstats
path: root/common/genericresource.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'common/genericresource.cpp')
-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 }