diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-07-20 09:31:25 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-09-15 16:14:19 +0200 |
commit | dc6bc885b70d8dbada622c22f8d620084b798648 (patch) | |
tree | c12f3fdcbea12f172b48a8ba7485cacfd0fc86bf /common/sourcewriteback.cpp | |
parent | a1b86c269f3d2a64d63f001df33bb3e1932423a0 (diff) | |
download | sink-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.cpp | 16 |
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 | ||
58 | KAsync::Job<void> SourceWriteBack::replay(const QByteArray &type, const QByteArray &key, const QByteArray &value) | 58 | bool 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 | |||
70 | KAsync::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); |