summaryrefslogtreecommitdiffstats
path: root/common/sourcewriteback.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2016-07-20 09:31:25 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2016-09-15 16:14:19 +0200
commitdc6bc885b70d8dbada622c22f8d620084b798648 (patch)
treec12f3fdcbea12f172b48a8ba7485cacfd0fc86bf /common/sourcewriteback.cpp
parenta1b86c269f3d2a64d63f001df33bb3e1932423a0 (diff)
downloadsink-dc6bc885b70d8dbada622c22f8d620084b798648.tar.gz
sink-dc6bc885b70d8dbada622c22f8d620084b798648.zip
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.
Diffstat (limited to 'common/sourcewriteback.cpp')
-rw-r--r--common/sourcewriteback.cpp16
1 files changed, 12 insertions, 4 deletions
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()
55 return *mSyncStore; 55 return *mSyncStore;
56} 56}
57 57
58KAsync::Job<void> SourceWriteBack::replay(const QByteArray &type, const QByteArray &key, const QByteArray &value) 58bool SourceWriteBack::canReplay(const QByteArray &type, const QByteArray &key, const QByteArray &value)
59{ 59{
60 SinkTrace() << "Replaying" << type << key;
61
62 Sink::EntityBuffer buffer(value); 60 Sink::EntityBuffer buffer(value);
63 const Sink::Entity &entity = buffer.entity(); 61 const Sink::Entity &entity = buffer.entity();
64 const auto metadataBuffer = Sink::EntityBuffer::readBuffer<Sink::Metadata>(entity.metadata()); 62 const auto metadataBuffer = Sink::EntityBuffer::readBuffer<Sink::Metadata>(entity.metadata());
65 Q_ASSERT(metadataBuffer); 63 Q_ASSERT(metadataBuffer);
66 if (!metadataBuffer->replayToSource()) { 64 if (!metadataBuffer->replayToSource()) {
67 SinkTrace() << "Change is coming from the source"; 65 SinkTrace() << "Change is coming from the source";
68 return KAsync::null<void>();
69 } 66 }
67 return metadataBuffer->replayToSource();
68}
69
70KAsync::Job<void> SourceWriteBack::replay(const QByteArray &type, const QByteArray &key, const QByteArray &value)
71{
72 SinkTrace() << "Replaying" << type << key;
73
74 Sink::EntityBuffer buffer(value);
75 const Sink::Entity &entity = buffer.entity();
76 const auto metadataBuffer = Sink::EntityBuffer::readBuffer<Sink::Metadata>(entity.metadata());
77 Q_ASSERT(metadataBuffer);
70 Q_ASSERT(!mSyncStore); 78 Q_ASSERT(!mSyncStore);
71 Q_ASSERT(!mEntityStore); 79 Q_ASSERT(!mEntityStore);
72 Q_ASSERT(!mTransaction); 80 Q_ASSERT(!mTransaction);