summaryrefslogtreecommitdiffstats
path: root/common/queryrunner.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2018-06-25 10:57:46 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2018-06-25 11:08:29 +0200
commit121c3bc96a273790414ae114082053cb649fc49a (patch)
tree262f994aaa0f7008aa9acf7589fc99a4447740f7 /common/queryrunner.cpp
parented17c92c9f3be95e9b280f2abc67f1c0ba48e8c4 (diff)
downloadsink-121c3bc96a273790414ae114082053cb649fc49a.tar.gz
sink-121c3bc96a273790414ae114082053cb649fc49a.zip
Fixed the lost update scenario
If we get a fetchMore right between when the revision was updated and the incrementalQuery actually running, we ended up loosing the update because the result provider ended up with a too recent revision after the additional initial query.
Diffstat (limited to 'common/queryrunner.cpp')
-rw-r--r--common/queryrunner.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/common/queryrunner.cpp b/common/queryrunner.cpp
index 0977940..9ac3517 100644
--- a/common/queryrunner.cpp
+++ b/common/queryrunner.cpp
@@ -152,7 +152,11 @@ void QueryRunner<DomainType>::fetch(const Sink::Query &query, const QByteArray &
152 if (query.liveQuery()) { 152 if (query.liveQuery()) {
153 mResourceAccess->sendRevisionReplayedCommand(result.newRevision); 153 mResourceAccess->sendRevisionReplayedCommand(result.newRevision);
154 } 154 }
155 mResultProvider->setRevision(result.newRevision); 155 //Initial queries do not fetch updates, so avoid updating the revision when fetching more content.
156 //Otherwise we end up breaking incremental updates.
157 if (!mResultProvider->revision()) {
158 mResultProvider->setRevision(result.newRevision);
159 }
156 mResultProvider->initialResultSetComplete(result.replayedAll); 160 mResultProvider->initialResultSetComplete(result.replayedAll);
157 if (mRequestFetchMore) { 161 if (mRequestFetchMore) {
158 mRequestFetchMore = false; 162 mRequestFetchMore = false;