diff options
Diffstat (limited to 'common/genericresource.cpp')
-rw-r--r-- | common/genericresource.cpp | 28 |
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 | } |