From dc6bc885b70d8dbada622c22f8d620084b798648 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 20 Jul 2016 09:31:25 +0200 Subject: Don't create a transaction for every revision that we don't replay. This had a significant performance impact when i.e. syncing a folder with 10k messages. --- common/sourcewriteback.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'common/sourcewriteback.cpp') diff --git a/common/sourcewriteback.cpp b/common/sourcewriteback.cpp index 7d21ea6..fe996cb 100644 --- a/common/sourcewriteback.cpp +++ b/common/sourcewriteback.cpp @@ -55,18 +55,26 @@ RemoteIdMap &SourceWriteBack::syncStore() return *mSyncStore; } -KAsync::Job SourceWriteBack::replay(const QByteArray &type, const QByteArray &key, const QByteArray &value) +bool SourceWriteBack::canReplay(const QByteArray &type, const QByteArray &key, const QByteArray &value) { - SinkTrace() << "Replaying" << type << key; - Sink::EntityBuffer buffer(value); const Sink::Entity &entity = buffer.entity(); const auto metadataBuffer = Sink::EntityBuffer::readBuffer(entity.metadata()); Q_ASSERT(metadataBuffer); if (!metadataBuffer->replayToSource()) { SinkTrace() << "Change is coming from the source"; - return KAsync::null(); } + return metadataBuffer->replayToSource(); +} + +KAsync::Job SourceWriteBack::replay(const QByteArray &type, const QByteArray &key, const QByteArray &value) +{ + SinkTrace() << "Replaying" << type << key; + + Sink::EntityBuffer buffer(value); + const Sink::Entity &entity = buffer.entity(); + const auto metadataBuffer = Sink::EntityBuffer::readBuffer(entity.metadata()); + Q_ASSERT(metadataBuffer); Q_ASSERT(!mSyncStore); Q_ASSERT(!mEntityStore); Q_ASSERT(!mTransaction); -- cgit v1.2.3