aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore/src/tests/proton/document_iterator
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2021-05-18 08:57:37 +0200
committerGitHub <noreply@github.com>2021-05-18 08:57:37 +0200
commit772fb65963a52f475e4f10364682c7c24e005c62 (patch)
treeddd2947ce0e982ef0fb52edb03b86bb4d61aa5e0 /searchcore/src/tests/proton/document_iterator
parent72e477e68f44ba210406b6dad8a80efcc4eab17d (diff)
Revert "Revert "Revert "Revert "Revert "Revert "Revert "Now that everything is controlled bucketwise by the bucket db we shou…"""""""
Diffstat (limited to 'searchcore/src/tests/proton/document_iterator')
-rw-r--r--searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp b/searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp
index 93ad4cc8324..7ee811e66bf 100644
--- a/searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp
+++ b/searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp
@@ -488,6 +488,62 @@ TEST("require that iterator ignoring maxbytes stops at the end, and does not aut
TEST_DO(verifyIterateIgnoringStopSignal(itr));
}
+void verifyReadConsistency(DocumentIterator & itr, ILidCommitState & lidCommitState) {
+ IDocumentRetriever::SP retriever = doc("id:ns:document::1", Timestamp(2), bucket(5));
+ auto commitAndWaitRetriever = std::make_shared<CommitAndWaitDocumentRetriever>(retriever, lidCommitState);
+ itr.add(commitAndWaitRetriever);
+
+ IterateResult res = itr.iterate(largeNum);
+ EXPECT_TRUE(res.isCompleted());
+ EXPECT_EQUAL(1u, res.getEntries().size());
+ TEST_DO(checkEntry(res, 0, Document(*DataType::DOCUMENT, DocumentId("id:ns:document::1")), Timestamp(2)));
+}
+
+class ILidCommitStateProxy : public ILidCommitState {
+public:
+ explicit ILidCommitStateProxy(ILidCommitState & lidState)
+ : _waitCompleteCount(0),
+ _lidState(lidState)
+ {}
+private:
+ State waitState(State state, uint32_t lid) const override {
+ assert(state == State::COMPLETED);
+ _lidState.waitComplete(lid);
+ _waitCompleteCount++;
+ return state;
+ }
+
+ State waitState(State state, const LidList &lids) const override {
+ assert(state == State::COMPLETED);
+ _lidState.waitComplete(lids);
+ _waitCompleteCount++;
+ return state;
+ }
+
+public:
+ mutable size_t _waitCompleteCount;
+private:
+ ILidCommitState & _lidState;
+};
+
+void verifyStrongReadConsistency(DocumentIterator & itr) {
+ PendingLidTracker lidTracker;
+
+ ILidCommitStateProxy lidCommitState(lidTracker);
+ TEST_DO(verifyReadConsistency(itr, lidCommitState));
+ EXPECT_EQUAL(1u, lidCommitState._waitCompleteCount);
+}
+
+TEST("require that default readconsistency does commit") {
+ DocumentIterator itr(bucket(5), std::make_shared<document::AllFields>(), selectAll(), newestV(), -1, false);
+ TEST_DO(verifyStrongReadConsistency(itr));
+}
+
+TEST("require that readconsistency::strong does commit") {
+ DocumentIterator itr(bucket(5), std::make_shared<document::AllFields>(), selectAll(), newestV(), -1, false, storage::spi::ReadConsistency::STRONG);
+ TEST_DO(verifyStrongReadConsistency(itr));
+}
+
TEST("require that docid limit is honoured") {
IDocumentRetriever::SP retriever = doc("id:ns:document::1", Timestamp(2), bucket(5));
auto & udr = dynamic_cast<UnitDR &>(*retriever);