From 2b500f23e6c07a884063517986d89636e6c5466d Mon Sep 17 00:00:00 2001 From: Tor Egge Date: Tue, 5 Jun 2018 10:25:48 +0000 Subject: Keep document live during attribute population until attribute write threads no longer uses fields retrieved from the document. --- .../document_store_visitor/document_store_visitor_test.cpp | 14 +++++++------- searchlib/src/vespa/searchlib/docstore/documentstore.cpp | 4 ++-- searchlib/src/vespa/searchlib/docstore/idocumentstore.h | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) (limited to 'searchlib') diff --git a/searchlib/src/tests/docstore/document_store_visitor/document_store_visitor_test.cpp b/searchlib/src/tests/docstore/document_store_visitor/document_store_visitor_test.cpp index 247ee134854..ac645998198 100644 --- a/searchlib/src/tests/docstore/document_store_visitor/document_store_visitor_test.cpp +++ b/searchlib/src/tests/docstore/document_store_visitor/document_store_visitor_test.cpp @@ -114,18 +114,18 @@ class MyVisitor : public MyVisitorBase, public: using MyVisitorBase::MyVisitorBase; - void visit(uint32_t lid, const Document &doc) override; + void visit(uint32_t lid, const std::shared_ptr &doc) override; void visit(uint32_t lid) override; }; void -MyVisitor::visit(uint32_t lid, const Document &doc) +MyVisitor::visit(uint32_t lid, const std::shared_ptr &doc) { ++_visitCount; assert(lid < _docIdLimit); Document::UP expDoc(makeDoc(_repo, lid, _before)); - EXPECT_TRUE(*expDoc == doc); + EXPECT_TRUE(*expDoc == *doc); _valid->slowSetBit(lid); } @@ -146,19 +146,19 @@ public: using MyVisitorBase::MyVisitorBase; virtual void - visit(uint32_t lid, Document &doc) override; + visit(uint32_t lid, const std::shared_ptr &doc) override; }; void -MyRewriteVisitor::visit(uint32_t lid, Document &doc) +MyRewriteVisitor::visit(uint32_t lid, const std::shared_ptr &doc) { ++_visitCount; assert(lid < _docIdLimit); Document::UP expDoc(makeDoc(_repo, lid, _before)); - EXPECT_TRUE(*expDoc == doc); + EXPECT_TRUE(*expDoc == *doc); _valid->slowSetBit(lid); - doc.set("extra", "foo"); + doc->set("extra", "foo"); } diff --git a/searchlib/src/vespa/searchlib/docstore/documentstore.cpp b/searchlib/src/vespa/searchlib/docstore/documentstore.cpp index 6345e414b99..9b88383bbf1 100644 --- a/searchlib/src/vespa/searchlib/docstore/documentstore.cpp +++ b/searchlib/src/vespa/searchlib/docstore/documentstore.cpp @@ -447,8 +447,8 @@ DocumentStore::WrapVisitor::visit(uint32_t lid, value.set(std::move(buf), len); } if (! value.empty()) { - document::Document::UP doc(value.deserializeDocument(_repo)); - _visitor.visit(lid, *doc); + std::shared_ptr doc(value.deserializeDocument(_repo)); + _visitor.visit(lid, doc); rewrite(lid, *doc); } else { visitRemove(lid); diff --git a/searchlib/src/vespa/searchlib/docstore/idocumentstore.h b/searchlib/src/vespa/searchlib/docstore/idocumentstore.h index 62b7b2891fc..a7302c9c1a5 100644 --- a/searchlib/src/vespa/searchlib/docstore/idocumentstore.h +++ b/searchlib/src/vespa/searchlib/docstore/idocumentstore.h @@ -16,7 +16,7 @@ class IDocumentStoreReadVisitor { public: virtual ~IDocumentStoreReadVisitor() { } - virtual void visit(uint32_t lid, const document::Document &doc) = 0; + virtual void visit(uint32_t lid, const std::shared_ptr &doc) = 0; virtual void visit(uint32_t lid) = 0; }; @@ -24,7 +24,7 @@ class IDocumentStoreRewriteVisitor { public: virtual ~IDocumentStoreRewriteVisitor() { } - virtual void visit(uint32_t lid, document::Document &doc) = 0; + virtual void visit(uint32_t lid, const std::shared_ptr &doc) = 0; }; class IDocumentStoreVisitorProgress -- cgit v1.2.3