From 755b05aa100c118b65228cc0c3561db426a5ba74 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 20 May 2016 15:01:24 +0200 Subject: Don't report duplicates in a full scan. --- common/queryrunner.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'common/queryrunner.cpp') diff --git a/common/queryrunner.cpp b/common/queryrunner.cpp index 27ff476..ea17176 100644 --- a/common/queryrunner.cpp +++ b/common/queryrunner.cpp @@ -147,7 +147,9 @@ typename Sink::ResultEmitter::Ptr QueryRunner keys; + Trace() << "Looking for : " << bufferType; + //The scan can return duplicate results if we have multiple revisions, so we use a set to deduplicate. + QSet keys; Storage::mainDatabase(transaction, bufferType) .scan(QByteArray(), [&](const QByteArray &key, const QByteArray &value) -> bool { @@ -155,13 +157,17 @@ static inline ResultSet fullScan(const Sink::Storage::Transaction &transaction, if (Sink::Storage::isInternalKey(key)) { return true; } + if (keys.contains(Sink::Storage::uidFromKey(key))) { + //Not something that should persist if the replay works, so we keep a message for now. + Trace() << "Multiple revisions for key: " << key; + } keys << Sink::Storage::uidFromKey(key); return true; }, [](const Sink::Storage::Error &error) { Warning() << "Error during query: " << error.message; }); Trace() << "Full scan retrieved " << keys.size() << " results."; - return ResultSet(keys); + return ResultSet(keys.toList().toVector()); } -- cgit v1.2.3