summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2018-02-11 22:44:51 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2018-02-11 22:53:34 +0100
commit8740a007515dcf1b315d69ab5c64fcfd40ec980c (patch)
treea6ba6ae6a7192ce68a53e03efdeae945592c93d9 /common
parent8a4b335cd2a1735880da7e850999b88f60e9585e (diff)
downloadsink-8740a007515dcf1b315d69ab5c64fcfd40ec980c.tar.gz
sink-8740a007515dcf1b315d69ab5c64fcfd40ec980c.zip
Return feedback on wether an upgrade has happened or not.
Diffstat (limited to 'common')
-rw-r--r--common/store.cpp31
-rw-r--r--common/store.h6
2 files changed, 26 insertions, 11 deletions
diff --git a/common/store.cpp b/common/store.cpp
index edca842..c102c45 100644
--- a/common/store.cpp
+++ b/common/store.cpp
@@ -297,13 +297,13 @@ KAsync::Job<void> Store::removeDataFromDisk(const QByteArray &identifier)
297 }); 297 });
298} 298}
299 299
300static KAsync::Job<void> upgrade(const QByteArray &resource) 300static KAsync::Job<Store::UpgradeResult> upgrade(const QByteArray &resource)
301{ 301{
302 SinkLog() << "Upgrading " << resource;
303 auto store = Sink::Storage::DataStore(Sink::storageLocation(), resource, Sink::Storage::DataStore::ReadOnly); 302 auto store = Sink::Storage::DataStore(Sink::storageLocation(), resource, Sink::Storage::DataStore::ReadOnly);
304 if (Storage::DataStore::databaseVersion(store.createTransaction(Storage::DataStore::ReadOnly)) >= Sink::latestDatabaseVersion()) { 303 if (Storage::DataStore::databaseVersion(store.createTransaction(Storage::DataStore::ReadOnly)) == Sink::latestDatabaseVersion()) {
305 return KAsync::null(); 304 return KAsync::value(Store::UpgradeResult{false});
306 } 305 }
306 SinkLog() << "Upgrading " << resource;
307 307
308 auto resourceAccess = ResourceAccessFactory::instance().getAccess(resource, ResourceConfig::getResourceType(resource)); 308 auto resourceAccess = ResourceAccessFactory::instance().getAccess(resource, ResourceConfig::getResourceType(resource));
309 return resourceAccess->sendCommand(Sink::Commands::UpgradeCommand) 309 return resourceAccess->sendCommand(Sink::Commands::UpgradeCommand)
@@ -315,18 +315,29 @@ static KAsync::Job<void> upgrade(const QByteArray &resource)
315 } 315 }
316 SinkTrace() << "Upgrade of resource " << resource << " complete."; 316 SinkTrace() << "Upgrade of resource " << resource << " complete.";
317 return KAsync::null(); 317 return KAsync::null();
318 }); 318 })
319 .then(KAsync::value(Store::UpgradeResult{true}));
319} 320}
320 321
321KAsync::Job<void> Store::upgrade() 322KAsync::Job<Store::UpgradeResult> Store::upgrade()
322{ 323{
323 SinkLog() << "Upgrading..."; 324 SinkLog() << "Upgrading...";
325 auto ret = QSharedPointer<bool>::create(false);
324 return fetchAll<ApplicationDomain::SinkResource>({}) 326 return fetchAll<ApplicationDomain::SinkResource>({})
325 .template each([](const ApplicationDomain::SinkResource::Ptr &resource) -> KAsync::Job<void> { 327 .template each([ret](const ApplicationDomain::SinkResource::Ptr &resource) -> KAsync::Job<void> {
326 return Sink::upgrade(resource->identifier()); 328 return Sink::upgrade(resource->identifier())
329 .then([ret](UpgradeResult returnValue) {
330 if (returnValue.upgradeExecuted) {
331 SinkLog() << "Upgrade executed.";
332 *ret = true;
333 }
334 });
327 }) 335 })
328 .then([] { 336 .then([ret] {
329 SinkLog() << "Upgrade complete."; 337 if (*ret) {
338 SinkLog() << "Upgrade complete.";
339 }
340 return Store::UpgradeResult{*ret};
330 }); 341 });
331} 342}
332 343
diff --git a/common/store.h b/common/store.h
index 62858c5..fb9c3fe 100644
--- a/common/store.h
+++ b/common/store.h
@@ -120,6 +120,10 @@ KAsync::Job<void> SINK_EXPORT synchronize(const Sink::SyncScope &query);
120 */ 120 */
121KAsync::Job<void> SINK_EXPORT removeDataFromDisk(const QByteArray &resourceIdentifier); 121KAsync::Job<void> SINK_EXPORT removeDataFromDisk(const QByteArray &resourceIdentifier);
122 122
123struct UpgradeResult {
124 bool upgradeExecuted;
125};
126
123/** 127/**
124 * Run upgrade jobs. 128 * Run upgrade jobs.
125 * 129 *
@@ -130,7 +134,7 @@ KAsync::Job<void> SINK_EXPORT removeDataFromDisk(const QByteArray &resourceIdent
130 * 134 *
131 * Note: The initial implementation simply calls removeDataFromDisk for all resources. 135 * Note: The initial implementation simply calls removeDataFromDisk for all resources.
132 */ 136 */
133KAsync::Job<void> SINK_EXPORT upgrade(); 137KAsync::Job<UpgradeResult> SINK_EXPORT upgrade();
134 138
135template <class DomainType> 139template <class DomainType>
136KAsync::Job<DomainType> SINK_EXPORT fetchOne(const Sink::Query &query); 140KAsync::Job<DomainType> SINK_EXPORT fetchOne(const Sink::Query &query);