diff options
author | Harald Musum <musum@verizonmedia.com> | 2021-05-18 08:57:37 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-18 08:57:37 +0200 |
commit | 772fb65963a52f475e4f10364682c7c24e005c62 (patch) | |
tree | ddd2947ce0e982ef0fb52edb03b86bb4d61aa5e0 /searchcore/src/tests/proton/document_iterator | |
parent | 72e477e68f44ba210406b6dad8a80efcc4eab17d (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.cpp | 56 |
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); |