diff options
-rw-r--r-- | common/storage/entitystore.cpp | 7 | ||||
-rw-r--r-- | common/storage/entitystore.h | 1 | ||||
-rw-r--r-- | common/synchronizer.cpp | 9 |
3 files changed, 13 insertions, 4 deletions
diff --git a/common/storage/entitystore.cpp b/common/storage/entitystore.cpp index 6c341e2..51e5da7 100644 --- a/common/storage/entitystore.cpp +++ b/common/storage/entitystore.cpp | |||
@@ -111,6 +111,7 @@ EntityStore::EntityStore(const ResourceContext &context, const Log::Context &ctx | |||
111 | void EntityStore::startTransaction(Sink::Storage::DataStore::AccessMode accessMode) | 111 | void EntityStore::startTransaction(Sink::Storage::DataStore::AccessMode accessMode) |
112 | { | 112 | { |
113 | SinkTraceCtx(d->logCtx) << "Starting transaction: " << accessMode; | 113 | SinkTraceCtx(d->logCtx) << "Starting transaction: " << accessMode; |
114 | Q_ASSERT(!d->transaction); | ||
114 | Sink::Storage::DataStore store(Sink::storageLocation(), d->resourceContext.instanceId(), accessMode); | 115 | Sink::Storage::DataStore store(Sink::storageLocation(), d->resourceContext.instanceId(), accessMode); |
115 | d->transaction = store.createTransaction(accessMode); | 116 | d->transaction = store.createTransaction(accessMode); |
116 | Q_ASSERT(d->transaction.validateNamedDatabases()); | 117 | Q_ASSERT(d->transaction.validateNamedDatabases()); |
@@ -119,6 +120,7 @@ void EntityStore::startTransaction(Sink::Storage::DataStore::AccessMode accessMo | |||
119 | void EntityStore::commitTransaction() | 120 | void EntityStore::commitTransaction() |
120 | { | 121 | { |
121 | SinkTraceCtx(d->logCtx) << "Committing transaction"; | 122 | SinkTraceCtx(d->logCtx) << "Committing transaction"; |
123 | Q_ASSERT(d->transaction); | ||
122 | d->transaction.commit(); | 124 | d->transaction.commit(); |
123 | d->transaction = Storage::DataStore::Transaction(); | 125 | d->transaction = Storage::DataStore::Transaction(); |
124 | } | 126 | } |
@@ -130,6 +132,11 @@ void EntityStore::abortTransaction() | |||
130 | d->transaction = Storage::DataStore::Transaction(); | 132 | d->transaction = Storage::DataStore::Transaction(); |
131 | } | 133 | } |
132 | 134 | ||
135 | bool EntityStore::hasTransaction() const | ||
136 | { | ||
137 | return d->transaction; | ||
138 | } | ||
139 | |||
133 | void EntityStore::copyBlobs(ApplicationDomain::ApplicationDomainType &entity, qint64 newRevision) | 140 | void EntityStore::copyBlobs(ApplicationDomain::ApplicationDomainType &entity, qint64 newRevision) |
134 | { | 141 | { |
135 | const auto directory = d->entityBlobStoragePath(entity.identifier()); | 142 | const auto directory = d->entityBlobStoragePath(entity.identifier()); |
diff --git a/common/storage/entitystore.h b/common/storage/entitystore.h index fe75a02..46410cd 100644 --- a/common/storage/entitystore.h +++ b/common/storage/entitystore.h | |||
@@ -51,6 +51,7 @@ public: | |||
51 | void startTransaction(Sink::Storage::DataStore::AccessMode); | 51 | void startTransaction(Sink::Storage::DataStore::AccessMode); |
52 | void commitTransaction(); | 52 | void commitTransaction(); |
53 | void abortTransaction(); | 53 | void abortTransaction(); |
54 | bool hasTransaction() const; | ||
54 | 55 | ||
55 | QVector<QByteArray> fullScan(const QByteArray &type); | 56 | QVector<QByteArray> fullScan(const QByteArray &type); |
56 | QVector<QByteArray> indexLookup(const QByteArray &type, const QueryBase &query, QSet<QByteArray> &appliedFilters, QByteArray &appliedSorting); | 57 | QVector<QByteArray> indexLookup(const QByteArray &type, const QueryBase &query, QSet<QByteArray> &appliedFilters, QByteArray &appliedSorting); |
diff --git a/common/synchronizer.cpp b/common/synchronizer.cpp index f731b31..3cd0cb6 100644 --- a/common/synchronizer.cpp +++ b/common/synchronizer.cpp | |||
@@ -62,7 +62,7 @@ void Synchronizer::enqueueCommand(int commandId, const QByteArray &data) | |||
62 | 62 | ||
63 | Storage::EntityStore &Synchronizer::store() | 63 | Storage::EntityStore &Synchronizer::store() |
64 | { | 64 | { |
65 | mEntityStore->startTransaction(Sink::Storage::DataStore::ReadOnly); | 65 | Q_ASSERT(mEntityStore->hasTransaction()); |
66 | return *mEntityStore; | 66 | return *mEntityStore; |
67 | } | 67 | } |
68 | 68 | ||
@@ -385,11 +385,13 @@ KAsync::Job<void> Synchronizer::processSyncQueue() | |||
385 | const auto request = mSyncRequestQueue.takeFirst(); | 385 | const auto request = mSyncRequestQueue.takeFirst(); |
386 | return KAsync::syncStart<void>([this] { | 386 | return KAsync::syncStart<void>([this] { |
387 | mMessageQueue->startTransaction(); | 387 | mMessageQueue->startTransaction(); |
388 | mEntityStore->startTransaction(Sink::Storage::DataStore::ReadOnly); | ||
388 | mSyncInProgress = true; | 389 | mSyncInProgress = true; |
389 | }) | 390 | }) |
390 | .then(processRequest(request)) | 391 | .then(processRequest(request)) |
391 | .then<void>([this](const KAsync::Error &error) { | 392 | .then<void>([this](const KAsync::Error &error) { |
392 | SinkTraceCtx(mLogCtx) << "Sync request processed"; | 393 | SinkTraceCtx(mLogCtx) << "Sync request processed"; |
394 | mEntityStore->abortTransaction(); | ||
393 | mSyncTransaction.abort(); | 395 | mSyncTransaction.abort(); |
394 | mMessageQueue->commit(); | 396 | mMessageQueue->commit(); |
395 | mSyncStore.clear(); | 397 | mSyncStore.clear(); |
@@ -409,7 +411,6 @@ KAsync::Job<void> Synchronizer::processSyncQueue() | |||
409 | void Synchronizer::commit() | 411 | void Synchronizer::commit() |
410 | { | 412 | { |
411 | mMessageQueue->commit(); | 413 | mMessageQueue->commit(); |
412 | mEntityStore->abortTransaction(); | ||
413 | mSyncTransaction.commit(); | 414 | mSyncTransaction.commit(); |
414 | mSyncStore.clear(); | 415 | mSyncStore.clear(); |
415 | if (mSyncInProgress) { | 416 | if (mSyncInProgress) { |
@@ -472,7 +473,8 @@ KAsync::Job<void> Synchronizer::replay(const QByteArray &type, const QByteArray | |||
472 | Q_ASSERT(metadataBuffer); | 473 | Q_ASSERT(metadataBuffer); |
473 | Q_ASSERT(!mSyncStore); | 474 | Q_ASSERT(!mSyncStore); |
474 | Q_ASSERT(!mSyncTransaction); | 475 | Q_ASSERT(!mSyncTransaction); |
475 | mEntityStore->startTransaction(Storage::DataStore::ReadOnly); | 476 | //The entitystore transaction is handled by processSyncQueue |
477 | Q_ASSERT(mEntityStore->hasTransaction()); | ||
476 | 478 | ||
477 | const auto operation = metadataBuffer ? metadataBuffer->operation() : Sink::Operation_Creation; | 479 | const auto operation = metadataBuffer ? metadataBuffer->operation() : Sink::Operation_Creation; |
478 | const auto uid = Sink::Storage::DataStore::uidFromKey(key); | 480 | const auto uid = Sink::Storage::DataStore::uidFromKey(key); |
@@ -525,7 +527,6 @@ KAsync::Job<void> Synchronizer::replay(const QByteArray &type, const QByteArray | |||
525 | } | 527 | } |
526 | mSyncStore.clear(); | 528 | mSyncStore.clear(); |
527 | mSyncTransaction.commit(); | 529 | mSyncTransaction.commit(); |
528 | mEntityStore->abortTransaction(); | ||
529 | }); | 530 | }); |
530 | } | 531 | } |
531 | 532 | ||