summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@vespa.ai>2023-11-08 16:50:16 +0000
committerTor Brede Vekterli <vekterli@vespa.ai>2023-11-08 16:52:26 +0000
commitc37f2cec2392622d818922d3d80d00cfb30cc309 (patch)
treed56ba27bc1c3a5257c97e513c7048b66c9def8b6 /searchcore
parentc2d44adc32d40aaab08b9bd041f8518d2d574c07 (diff)
Simplify by passing in and storing the `DocTypeName` verbatim
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp46
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/document_iterator.cpp11
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/document_iterator.h9
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp3
4 files changed, 15 insertions, 54 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 5f4f6d61c38..85883324080 100644
--- a/searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp
+++ b/searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp
@@ -5,7 +5,6 @@
#include <vespa/searchcore/proton/common/pendinglidtracker.h>
#include <vespa/searchcore/proton/persistenceengine/document_iterator.h>
#include <vespa/searchcore/proton/persistenceengine/commit_and_wait_document_retriever.h>
-#include <vespa/searchcore/proton/persistenceengine/ipersistencehandler.h>
#include <vespa/searchlib/attribute/attributecontext.h>
#include <vespa/searchlib/attribute/attributefactory.h>
#include <vespa/searchlib/test/mock_attribute_manager.h>
@@ -177,41 +176,6 @@ UnitDR::UnitDR(const document::DocumentType &dt, document::Document::UP d, Times
{}
UnitDR::~UnitDR() = default;
-struct MockPersistenceHandler : IPersistenceHandler {
- DocTypeName _doc_type_name;
-
- explicit MockPersistenceHandler(vespalib::stringref type_name)
- : _doc_type_name(type_name)
- {
- }
- ~MockPersistenceHandler() override = default;
-
- void initialize() override { abort(); }
- void handlePut(FeedToken, const storage::spi::Bucket&, storage::spi::Timestamp, DocumentSP ) override { abort(); }
- void handleUpdate(FeedToken, const storage::spi::Bucket&,
- storage::spi::Timestamp, DocumentUpdateSP) override { abort(); }
- void handleRemove(FeedToken, const storage::spi::Bucket&,
- storage::spi::Timestamp, const document::DocumentId&) override { abort(); }
- void handleRemoveByGid(FeedToken, const storage::spi::Bucket&, storage::spi::Timestamp,
- vespalib::stringref, const document::GlobalId&) override { abort(); }
- void handleListBuckets(IBucketIdListResultHandler&) override { abort(); }
- void handleSetClusterState(const storage::spi::ClusterState&, IGenericResultHandler&) override { abort(); }
- void handleSetActiveState(const storage::spi::Bucket&, storage::spi::BucketInfo::ActiveState,
- std::shared_ptr<IGenericResultHandler>) override { abort(); }
- void handleGetBucketInfo(const storage::spi::Bucket&, IBucketInfoResultHandler&) override { abort(); }
- void handleCreateBucket(FeedToken, const storage::spi::Bucket&) override { abort(); };
- void handleDeleteBucket(FeedToken, const storage::spi::Bucket&) override { abort(); }
- void handleGetModifiedBuckets(IBucketIdListResultHandler&) override { abort(); }
- void handleSplit(FeedToken, const storage::spi::Bucket&,
- const storage::spi::Bucket&, const storage::spi::Bucket&) override { abort(); }
- void handleJoin(FeedToken, const storage::spi::Bucket&, const storage::spi::Bucket&,
- const storage::spi::Bucket&) override { abort(); }
- RetrieversSP getDocumentRetrievers(storage::spi::ReadConsistency) override { abort(); }
- void handleListActiveBuckets(IBucketIdListResultHandler&) override { abort(); }
- void handlePopulateActiveBuckets(document::BucketId::List, IGenericResultHandler&) override { abort(); }
- const DocTypeName &doc_type_name() const noexcept override { return _doc_type_name; }
-};
-
struct VisitRecordingUnitDR : UnitDR {
using VisitedLIDs = std::unordered_set<DocumentIdT>;
VisitedLIDs& visited_lids;
@@ -655,11 +619,9 @@ TEST("require that iterating all versions returns both documents and removes") {
TEST("require that using an empty field set returns meta-data only") {
DocumentIterator itr(bucket(5), std::make_shared<document::NoFields>(), selectAll(), newestV(), -1, false);
- MockPersistenceHandler foo_handler("foo");
- MockPersistenceHandler doc_handler("document");
- itr.add(&foo_handler, doc_with_fields("id:ns:foo::1", Timestamp(2), bucket(5)));
- itr.add(&doc_handler, cat(doc("id:ns:document::2", Timestamp(3), bucket(5)),
- rem("id:ns:document::3", Timestamp(4), bucket(5))));
+ itr.add(DocTypeName("foo"), doc_with_fields("id:ns:foo::1", Timestamp(2), bucket(5)));
+ itr.add(DocTypeName("document"), cat(doc("id:ns:document::2", Timestamp(3), bucket(5)),
+ rem("id:ns:document::3", Timestamp(4), bucket(5))));
IterateResult res = itr.iterate(largeNum);
EXPECT_TRUE(res.isCompleted());
EXPECT_EQUAL(3u, res.getEntries().size());
@@ -708,7 +670,7 @@ TEST("require that maxBytes splits iteration results for meta-data only iteratio
IterateResult res1 = itr.iterate(2 * sizeof(DocEntry));
EXPECT_TRUE(!res1.isCompleted());
EXPECT_EQUAL(2u, res1.getEntries().size());
- // Note: empty doc types since we did not pass in a handler alongside the retrievers
+ // Note: empty doc types since we did not pass in an explicit doc type alongside the retrievers
TEST_DO(checkEntry(res1, 0, Timestamp(2), DocumentMetaEnum::NONE, gid_of("id:ns:document::1"), ""));
TEST_DO(checkEntry(res1, 1, Timestamp(3), DocumentMetaEnum::REMOVE_ENTRY, gid_of("id:ns:document::2"), ""));
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/document_iterator.cpp b/searchcore/src/vespa/searchcore/proton/persistenceengine/document_iterator.cpp
index bfcb2724592..e9d233ef6ec 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/document_iterator.cpp
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/document_iterator.cpp
@@ -101,15 +101,15 @@ DocumentIterator::DocumentIterator(const storage::spi::Bucket &bucket,
DocumentIterator::~DocumentIterator() = default;
void
-DocumentIterator::add(const IPersistenceHandler *handler, IDocumentRetriever::SP retriever)
+DocumentIterator::add(const DocTypeName &doc_type_name, IDocumentRetriever::SP retriever)
{
- _sources.emplace_back(handler, std::move(retriever));
+ _sources.emplace_back(doc_type_name, std::move(retriever));
}
void
DocumentIterator::add(IDocumentRetriever::SP retriever)
{
- add(nullptr, std::move(retriever));
+ add(DocTypeName(""), std::move(retriever));
}
IterateResult
@@ -250,7 +250,7 @@ private:
}
void
-DocumentIterator::fetchCompleteSource(const IPersistenceHandler * handler,
+DocumentIterator::fetchCompleteSource(const DocTypeName & doc_type_name,
const IDocumentRetriever & source,
IterateResult::List & list)
{
@@ -283,11 +283,10 @@ DocumentIterator::fetchCompleteSource(const IPersistenceHandler * handler,
list.reserve(lidsToFetch.size());
if ( _metaOnly ) {
- stringref doc_type = (handler ? stringref(handler->doc_type_name().getName()) : stringref());
for (uint32_t lid : lidsToFetch) {
const search::DocumentMetaData & meta = metaData[lidIndexMap[lid]];
assert(lid == meta.lid);
- list.push_back(createDocEntry(storage::spi::Timestamp(meta.timestamp), meta.removed, doc_type, meta.gid));
+ list.push_back(createDocEntry(storage::spi::Timestamp(meta.timestamp), meta.removed, doc_type_name.getName(), meta.gid));
}
} else {
MatchVisitor visitor(matcher, metaData, lidIndexMap, _fields.get(), list, _defaultSerializedSize);
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/document_iterator.h b/searchcore/src/vespa/searchcore/proton/persistenceengine/document_iterator.h
index dd4891def45..5d2b2af24b9 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/document_iterator.h
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/document_iterator.h
@@ -4,6 +4,7 @@
#include "i_document_retriever.h"
#include <vespa/searchlib/common/idocumentmetastore.h>
+#include <vespa/searchcore/proton/common/doctypename.h>
#include <vespa/persistence/spi/bucket.h>
#include <vespa/persistence/spi/selection.h>
#include <vespa/persistence/spi/result.h>
@@ -18,7 +19,7 @@ class DocumentIterator
{
private:
using ReadConsistency = storage::spi::ReadConsistency;
- using HandlerWithRetriever = std::pair<const IPersistenceHandler*, IDocumentRetriever::SP>;
+ using DocTypeNameAndRetriever = std::pair<DocTypeName, IDocumentRetriever::SP>;
const storage::spi::Bucket _bucket;;
const storage::spi::Selection _selection;
@@ -29,13 +30,13 @@ private:
const bool _metaOnly;
const bool _ignoreMaxBytes;
bool _fetchedData;
- std::vector<HandlerWithRetriever> _sources;
+ std::vector<DocTypeNameAndRetriever> _sources;
size_t _nextItem;
storage::spi::IterateResult::List _list;
[[nodiscard]] bool checkMeta(const search::DocumentMetaData &meta) const;
- void fetchCompleteSource(const IPersistenceHandler * handler,
+ void fetchCompleteSource(const DocTypeName & doc_type_name,
const IDocumentRetriever & source,
storage::spi::IterateResult::List & list);
[[nodiscard]] bool isWeakRead() const { return _readConsistency == ReadConsistency::WEAK; }
@@ -46,7 +47,7 @@ public:
ssize_t defaultSerializedSize, bool ignoreMaxBytes,
ReadConsistency readConsistency=ReadConsistency::STRONG);
~DocumentIterator();
- void add(const IPersistenceHandler *handler, IDocumentRetriever::SP retriever);
+ void add(const DocTypeName & doc_type_name, IDocumentRetriever::SP retriever);
void add(IDocumentRetriever::SP retriever);
storage::spi::IterateResult iterate(size_t maxBytes);
};
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
index 0bae2e70785..4208e696a08 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
@@ -547,8 +547,7 @@ PersistenceEngine::createIterator(const Bucket &bucket, FieldSetSP fields, const
auto *handler = snap.handlers().get();
IPersistenceHandler::RetrieversSP retrievers = handler->getDocumentRetrievers(context.getReadConsistency());
for (const auto & retriever : *retrievers) {
- // Handler ptr validity and lifetime is maintained by handler snapshot owned by iterator
- entry->it.add(handler, retriever);
+ entry->it.add(handler->doc_type_name(), retriever);
}
}
entry->handler_sequence = HandlerSnapshot::release(std::move(snap));