summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2017-09-06 16:43:01 +0200
committerGitHub <noreply@github.com>2017-09-06 16:43:01 +0200
commitf0727265fb2a36c1664beca309a7c9aa83dc41ac (patch)
treea1381da7b97b483e925045c483f5f35b4f9a0912 /searchcore
parent6904c661f29763762c84f672bca812b3339f912e (diff)
Revert "Use gid to lid change handler interface directly"
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/tests/proton/documentdb/configurer/configurer_test.cpp12
-rw-r--r--searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp4
-rw-r--r--searchcore/src/tests/proton/documentdb/storeonlyfeedview/storeonlyfeedview_test.cpp15
-rw-r--r--searchcore/src/vespa/searchcore/proton/reference/CMakeLists.txt1
-rw-r--r--searchcore/src/vespa/searchcore/proton/reference/dummy_gid_to_lid_change_handler.cpp43
-rw-r--r--searchcore/src/vespa/searchcore/proton/reference/dummy_gid_to_lid_change_handler.h35
-rw-r--r--searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_handler.h12
-rw-r--r--searchcore/src/vespa/searchcore/proton/reference/i_gid_to_lid_change_handler.h11
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb_configurer.cpp1
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/putdonecontext.cpp19
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/putdonecontext.h17
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp12
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/removedonecontext.h11
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/searchable_doc_subdb_configurer.cpp3
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp28
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.h12
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp10
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp5
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h1
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp100
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h16
23 files changed, 122 insertions, 250 deletions
diff --git a/searchcore/src/tests/proton/documentdb/configurer/configurer_test.cpp b/searchcore/src/tests/proton/documentdb/configurer/configurer_test.cpp
index d76117df4c2..f0a91a101eb 100644
--- a/searchcore/src/tests/proton/documentdb/configurer/configurer_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/configurer/configurer_test.cpp
@@ -24,7 +24,6 @@
#include <vespa/searchcore/proton/test/documentdb_config_builder.h>
#include <vespa/searchcore/proton/test/mock_summary_adapter.h>
#include <vespa/searchcore/proton/test/mock_gid_to_lid_change_handler.h>
-#include <vespa/searchcore/proton/reference/dummy_gid_to_lid_change_handler.h>
#include <vespa/searchlib/index/dummyfileheadercontext.h>
#include <vespa/searchlib/transactionlog/nosyncproxy.h>
#include <vespa/vespalib/io/fileutil.h>
@@ -96,7 +95,6 @@ struct ViewSet
search::transactionlog::NoSyncProxy _noTlSyncer;
ISummaryManager::SP _summaryMgr;
IDocumentMetaStoreContext::SP _dmsc;
- std::shared_ptr<IGidToLidChangeHandler> _gidToLidChangeHandler;
std::unique_ptr<documentmetastore::ILidReuseDelayer> _lidReuseDelayer;
CommitTimeTracker _commitTimeTracker;
VarHolder<SearchView::SP> searchView;
@@ -125,7 +123,6 @@ ViewSet::ViewSet()
_noTlSyncer(),
_summaryMgr(),
_dmsc(),
- _gidToLidChangeHandler(),
_lidReuseDelayer(),
_commitTimeTracker(TimeStamp()),
searchView(),
@@ -214,7 +211,7 @@ Fixture::initViewSet(ViewSet &views)
IIndexWriter::SP indexWriter(new IndexWriter(indexMgr));
AttributeWriter::SP attrWriter(new AttributeWriter(attrMgr));
ISummaryAdapter::SP summaryAdapter(new SummaryAdapter(summaryMgr));
- views._gidToLidChangeHandler = std::make_shared<MockGidToLidChangeHandler>();
+ std::shared_ptr<IGidToLidChangeHandler> gidToLidChangeHandler(std::make_shared<MockGidToLidChangeHandler>());
Schema::SP schema(new Schema());
views._summaryMgr = summaryMgr;
views._dmsc = metaStore;
@@ -239,7 +236,6 @@ Fixture::initViewSet(ViewSet &views)
new SearchableFeedView(StoreOnlyFeedView::Context(summaryAdapter,
schema,
views.searchView.get()->getDocumentMetaStore(),
- *views._gidToLidChangeHandler,
views.repo,
views._writeService,
*views._lidReuseDelayer,
@@ -252,7 +248,7 @@ Fixture::initViewSet(ViewSet &views)
0u /* subDbId */,
SubDbType::READY),
FastAccessFeedView::Context(attrWriter, views._docIdLimit),
- SearchableFeedView::Context(indexWriter))));
+ SearchableFeedView::Context(indexWriter, gidToLidChangeHandler))));
}
@@ -267,7 +263,6 @@ struct MyFastAccessFeedView
HwInfo _hwInfo;
IDocumentMetaStoreContext::SP _dmsc;
- std::shared_ptr<IGidToLidChangeHandler> _gidToLidChangeHandler;
std::unique_ptr<documentmetastore::ILidReuseDelayer> _lidReuseDelayer;
CommitTimeTracker _commitTimeTracker;
VarHolder<FastAccessFeedView::SP> _feedView;
@@ -279,7 +274,6 @@ struct MyFastAccessFeedView
_writeService(writeService),
_hwInfo(),
_dmsc(),
- _gidToLidChangeHandler(std::make_shared<DummyGidToLidChangeHandler>()),
_lidReuseDelayer(),
_commitTimeTracker(TimeStamp()),
_feedView()
@@ -299,7 +293,7 @@ struct MyFastAccessFeedView
new documentmetastore::LidReuseDelayer(_writeService,
docMetaCtx->get()));
DocumentTypeRepo::SP repo = createRepo();
- StoreOnlyFeedView::Context storeOnlyCtx(summaryAdapter, schema, docMetaCtx, *_gidToLidChangeHandler, repo, _writeService, *_lidReuseDelayer, _commitTimeTracker);
+ StoreOnlyFeedView::Context storeOnlyCtx(summaryAdapter, schema, docMetaCtx, repo, _writeService, *_lidReuseDelayer, _commitTimeTracker);
StoreOnlyFeedView::PersistentParams params(1, 1, DocTypeName(DOC_TYPE), _metrics, 0, SubDbType::NOTREADY);
AttributeManager::SP mgr(new AttributeManager(BASE_DIR, "test.subdb",
TuneFileAttributes(),
diff --git a/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp b/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp
index 8af365d6327..2ed60f3c078 100644
--- a/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp
@@ -755,14 +755,13 @@ struct SearchableFeedViewFixture : public FixtureBase
fv(StoreOnlyFeedView::Context(sa,
sc._schema,
_dmsc,
- *_gidToLidChangeHandler,
sc.getRepo(),
_writeService,
_lidReuseDelayer,
_commitTimeTracker),
pc.getParams(),
FastAccessFeedView::Context(aw, _docIdLimit),
- SearchableFeedView::Context(iw))
+ SearchableFeedView::Context(iw, _gidToLidChangeHandler))
{
runInMaster([&]() { _lidReuseDelayer.setHasIndexedOrAttributeFields(true); });
}
@@ -777,7 +776,6 @@ struct FastAccessFeedViewFixture : public FixtureBase
fv(StoreOnlyFeedView::Context(sa,
sc._schema,
_dmsc,
- *_gidToLidChangeHandler,
sc.getRepo(),
_writeService,
_lidReuseDelayer,
diff --git a/searchcore/src/tests/proton/documentdb/storeonlyfeedview/storeonlyfeedview_test.cpp b/searchcore/src/tests/proton/documentdb/storeonlyfeedview/storeonlyfeedview_test.cpp
index 1ec201fdbd2..15bd55441d4 100644
--- a/searchcore/src/tests/proton/documentdb/storeonlyfeedview/storeonlyfeedview_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/storeonlyfeedview/storeonlyfeedview_test.cpp
@@ -12,7 +12,6 @@
#include <vespa/searchcore/proton/server/putdonecontext.h>
#include <vespa/searchcore/proton/server/removedonecontext.h>
#include <vespa/searchcore/proton/server/storeonlyfeedview.h>
-#include <vespa/searchcore/proton/reference/dummy_gid_to_lid_change_handler.h>
#include <vespa/searchcore/proton/test/mock_summary_adapter.h>
#include <vespa/searchcore/proton/test/thread_utils.h>
#include <vespa/searchlib/common/idestructorcallback.h>
@@ -68,17 +67,7 @@ DocumentTypeRepo::SP myGetDocumentTypeRepo() {
return repo;
}
-struct MyMinimalFeedViewBase
-{
- std::shared_ptr<IGidToLidChangeHandler> gidToLidChangeHandler;
-
- MyMinimalFeedViewBase()
- : gidToLidChangeHandler(std::make_shared<DummyGidToLidChangeHandler>())
- {
- }
-};
-
-struct MyMinimalFeedView : public MyMinimalFeedViewBase, public StoreOnlyFeedView {
+struct MyMinimalFeedView : public StoreOnlyFeedView {
using UP = std::unique_ptr<MyMinimalFeedView>;
int removeMultiAttributesCount;
@@ -94,12 +83,10 @@ struct MyMinimalFeedView : public MyMinimalFeedViewBase, public StoreOnlyFeedVie
CommitTimeTracker &commitTimeTracker,
const PersistentParams &params,
int &outstandingMoveOps_) :
- MyMinimalFeedViewBase(),
StoreOnlyFeedView(StoreOnlyFeedView::Context(summaryAdapter,
search::index::Schema::SP(),
DocumentMetaStoreContext::SP(
new DocumentMetaStoreContext(metaStore)),
- *gidToLidChangeHandler,
myGetDocumentTypeRepo(),
writeService,
lidReuseDelayer,
diff --git a/searchcore/src/vespa/searchcore/proton/reference/CMakeLists.txt b/searchcore/src/vespa/searchcore/proton/reference/CMakeLists.txt
index fe2ca7a7a88..ca55b44c13d 100644
--- a/searchcore/src/vespa/searchcore/proton/reference/CMakeLists.txt
+++ b/searchcore/src/vespa/searchcore/proton/reference/CMakeLists.txt
@@ -4,7 +4,6 @@ vespa_add_library(searchcore_reference STATIC
document_db_reference.cpp
document_db_reference_registry.cpp
document_db_reference_resolver.cpp
- dummy_gid_to_lid_change_handler.cpp
gid_to_lid_change_handler.cpp
gid_to_lid_change_listener.cpp
gid_to_lid_change_registrator.cpp
diff --git a/searchcore/src/vespa/searchcore/proton/reference/dummy_gid_to_lid_change_handler.cpp b/searchcore/src/vespa/searchcore/proton/reference/dummy_gid_to_lid_change_handler.cpp
deleted file mode 100644
index c3c516a51dc..00000000000
--- a/searchcore/src/vespa/searchcore/proton/reference/dummy_gid_to_lid_change_handler.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include "dummy_gid_to_lid_change_handler.h"
-
-namespace proton {
-
-DummyGidToLidChangeHandler::DummyGidToLidChangeHandler()
- : IGidToLidChangeHandler()
-
-{
-}
-
-DummyGidToLidChangeHandler::~DummyGidToLidChangeHandler()
-{
-}
-
-void
-DummyGidToLidChangeHandler::notifyPut(GlobalId, uint32_t, SerialNum)
-{
-}
-
-void
-DummyGidToLidChangeHandler::notifyRemove(GlobalId, SerialNum)
-{
-}
-
-void
-DummyGidToLidChangeHandler::notifyRemoveDone(GlobalId, SerialNum)
-{
-}
-
-void
-DummyGidToLidChangeHandler::addListener(std::unique_ptr<IGidToLidChangeListener>)
-{
-}
-
-void
-DummyGidToLidChangeHandler::removeListeners(const vespalib::string &,
- const std::set<vespalib::string> &)
-{
-}
-
-} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/reference/dummy_gid_to_lid_change_handler.h b/searchcore/src/vespa/searchcore/proton/reference/dummy_gid_to_lid_change_handler.h
deleted file mode 100644
index 24773924aaa..00000000000
--- a/searchcore/src/vespa/searchcore/proton/reference/dummy_gid_to_lid_change_handler.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#pragma once
-
-#include "i_gid_to_lid_change_handler.h"
-#include <vector>
-#include <mutex>
-#include <vespa/vespalib/stllike/hash_map.h>
-#include <vespa/document/base/globalid.h>
-
-namespace searchcorespi { namespace index { class IThreadService; } }
-
-namespace proton {
-
-/*
- * Dummy class for registering listeners that get notification when
- * gid to lid mapping changes.
- */
-class DummyGidToLidChangeHandler : public IGidToLidChangeHandler
-{
- bool _closed;
-
-public:
- DummyGidToLidChangeHandler();
- virtual ~DummyGidToLidChangeHandler();
-
- virtual void notifyPut(GlobalId gid, uint32_t lid, SerialNum serialNum) override;
- virtual void notifyRemove(GlobalId gid, SerialNum serialNum) override;
- virtual void notifyRemoveDone(GlobalId gid, SerialNum serialNum) override;
- virtual void addListener(std::unique_ptr<IGidToLidChangeListener> listener) override;
- virtual void removeListeners(const vespalib::string &docTypeName,
- const std::set<vespalib::string> &keepNames) override;
-};
-
-} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_handler.h b/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_handler.h
index 840cb61cc2a..736a34aba76 100644
--- a/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_handler.h
+++ b/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_handler.h
@@ -33,6 +33,9 @@ public:
GidToLidChangeHandler();
virtual ~GidToLidChangeHandler();
+ /**
+ * Notify gid to lid mapping change.
+ */
virtual void notifyPut(GlobalId gid, uint32_t lid, SerialNum serialNum) override;
virtual void notifyRemove(GlobalId gid, SerialNum serialNum) override;
virtual void notifyRemoveDone(GlobalId gid, SerialNum serialNum) override;
@@ -42,7 +45,16 @@ public:
*/
void close();
+ /*
+ * Add listener unless a listener with matching docTypeName and
+ * name already exists.
+ */
virtual void addListener(std::unique_ptr<IGidToLidChangeListener> listener) override;
+
+ /**
+ * Remove listeners with matching docTypeName unless name is present in
+ * keepNames.
+ */
virtual void removeListeners(const vespalib::string &docTypeName,
const std::set<vespalib::string> &keepNames) override;
};
diff --git a/searchcore/src/vespa/searchcore/proton/reference/i_gid_to_lid_change_handler.h b/searchcore/src/vespa/searchcore/proton/reference/i_gid_to_lid_change_handler.h
index 53ade83ff32..a3b1db59abd 100644
--- a/searchcore/src/vespa/searchcore/proton/reference/i_gid_to_lid_change_handler.h
+++ b/searchcore/src/vespa/searchcore/proton/reference/i_gid_to_lid_change_handler.h
@@ -25,21 +25,10 @@ public:
virtual ~IGidToLidChangeHandler() { }
- /*
- * Add listener unless a listener with matching docTypeName and
- * name already exists.
- */
virtual void addListener(std::unique_ptr<IGidToLidChangeListener> listener) = 0;
- /**
- * Remove listeners with matching docTypeName unless name is present in
- * keepNames.
- */
virtual void removeListeners(const vespalib::string &docTypeName,
const std::set<vespalib::string> &keepNames) = 0;
- /**
- * Notify gid to lid mapping change.
- */
virtual void notifyPut(GlobalId gid, uint32_t lid, SerialNum serialNum) = 0;
virtual void notifyRemove(GlobalId gid, SerialNum serialNum) = 0;
virtual void notifyRemoveDone(GlobalId gid, SerialNum serialNum) = 0;
diff --git a/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb_configurer.cpp b/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb_configurer.cpp
index 2b9a37fac0b..94663273414 100644
--- a/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb_configurer.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb_configurer.cpp
@@ -24,7 +24,6 @@ FastAccessDocSubDBConfigurer::reconfigureFeedView(const FastAccessFeedView::SP &
StoreOnlyFeedView::Context(curr->getSummaryAdapter(),
schema,
curr->getDocumentMetaStore(),
- curr->getGidToLidChangeHandler(),
repo,
curr->getWriteService(),
curr->getLidReuseDelayer(),
diff --git a/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.cpp b/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.cpp
index 5c304a1c7fc..a48c6373c00 100644
--- a/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.cpp
@@ -44,7 +44,7 @@ FastAccessFeedView::putAttributes(SerialNum serialNum,
{
_attributeWriter->put(serialNum, doc, lid, immediateCommit, onWriteDone);
if (immediateCommit && onWriteDone) {
- onWriteDone->registerPutLid(&_docIdLimit);
+ onWriteDone->registerPutLid(lid, &_docIdLimit);
}
}
diff --git a/searchcore/src/vespa/searchcore/proton/server/putdonecontext.cpp b/searchcore/src/vespa/searchcore/proton/server/putdonecontext.cpp
index 8462e3d0a77..ad50e3a92aa 100644
--- a/searchcore/src/vespa/searchcore/proton/server/putdonecontext.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/putdonecontext.cpp
@@ -3,25 +3,15 @@
#include "putdonecontext.h"
#include <vespa/searchcore/proton/common/feedtoken.h>
#include <vespa/searchcore/proton/common/docid_limit.h>
-#include <vespa/searchcore/proton/reference/i_gid_to_lid_change_handler.h>
namespace proton {
PutDoneContext::PutDoneContext(std::unique_ptr<FeedToken> token,
const FeedOperation::Type opType,
- PerDocTypeFeedMetrics &metrics,
- IGidToLidChangeHandler &gidToLidChangeHandler,
- const document::GlobalId &gid,
- uint32_t lid,
- search::SerialNum serialNum,
- bool changedDbdId)
+ PerDocTypeFeedMetrics &metrics)
: OperationDoneContext(std::move(token), opType, metrics),
- _lid(lid),
- _docIdLimit(nullptr),
- _gidToLidChangeHandler(gidToLidChangeHandler),
- _gid(gid),
- _serialNum(serialNum),
- _changedDbdId(changedDbdId)
+ _lid(0),
+ _docIdLimit(nullptr)
{
}
@@ -30,9 +20,6 @@ PutDoneContext::~PutDoneContext()
if (_docIdLimit != nullptr) {
_docIdLimit->bumpUpLimit(_lid + 1);
}
- if (_changedDbdId) {
- _gidToLidChangeHandler.notifyPut(_gid, _lid, _serialNum);
- }
}
} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/server/putdonecontext.h b/searchcore/src/vespa/searchcore/proton/server/putdonecontext.h
index 5a5ff849ac7..ba94891fd6e 100644
--- a/searchcore/src/vespa/searchcore/proton/server/putdonecontext.h
+++ b/searchcore/src/vespa/searchcore/proton/server/putdonecontext.h
@@ -3,15 +3,12 @@
#pragma once
#include "operationdonecontext.h"
-#include <vespa/document/base/globalid.h>
-#include <vespa/searchlib/common/serialnum.h>
namespace proton
{
class DocIdLimit;
-class IGidToLidChangeHandler;
/**
* Context class for document put operations that acks operation when
@@ -24,25 +21,17 @@ class PutDoneContext : public OperationDoneContext
{
uint32_t _lid;
DocIdLimit *_docIdLimit;
- IGidToLidChangeHandler &_gidToLidChangeHandler;
- document::GlobalId _gid;
- search::SerialNum _serialNum;
- bool _changedDbdId; // lid or document subdb changed
public:
PutDoneContext(std::unique_ptr<FeedToken> token,
const FeedOperation::Type opType,
- PerDocTypeFeedMetrics &metrics,
- IGidToLidChangeHandler &gidToLidChangeHandler,
- const document::GlobalId &gid,
- uint32_t lid,
- search::SerialNum serialNum,
- bool changedDbdId);
+ PerDocTypeFeedMetrics &metrics);
virtual ~PutDoneContext();
- void registerPutLid(DocIdLimit *docIdLimit)
+ void registerPutLid(uint32_t lid, DocIdLimit *docIdLimit)
{
+ _lid = lid;
_docIdLimit = docIdLimit;
}
};
diff --git a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp
index 301224cf134..219d7482853 100644
--- a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp
@@ -3,7 +3,6 @@
#include "removedonecontext.h"
#include "removedonetask.h"
#include <vespa/searchcore/proton/common/feedtoken.h>
-#include <vespa/searchcore/proton/reference/i_gid_to_lid_change_handler.h>
namespace proton {
@@ -12,16 +11,10 @@ RemoveDoneContext::RemoveDoneContext(std::unique_ptr<FeedToken> token,
PerDocTypeFeedMetrics &metrics,
vespalib::Executor &executor,
IDocumentMetaStore &documentMetaStore,
- IGidToLidChangeHandler &gidToLidChangeHandler,
- const document::GlobalId &gid,
- uint32_t lid,
- search::SerialNum serialNum)
+ uint32_t lid)
: OperationDoneContext(std::move(token), opType, metrics),
_executor(executor),
- _task(),
- _gidToLidChangeHandler(gidToLidChangeHandler),
- _gid(gid),
- _serialNum(serialNum)
+ _task()
{
if (lid != 0) {
_task = std::make_unique<RemoveDoneTask>(documentMetaStore, lid);
@@ -30,7 +23,6 @@ RemoveDoneContext::RemoveDoneContext(std::unique_ptr<FeedToken> token,
RemoveDoneContext::~RemoveDoneContext()
{
- _gidToLidChangeHandler.notifyRemoveDone(_gid, _serialNum);
ack();
if (_task) {
vespalib::Executor::Task::UP res = _executor.execute(std::move(_task));
diff --git a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h
index ccd480a5a91..b59219fc8c9 100644
--- a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h
+++ b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h
@@ -4,14 +4,11 @@
#include "operationdonecontext.h"
#include <vespa/vespalib/util/executor.h>
-#include <vespa/document/base/globalid.h>
-#include <vespa/searchlib/common/serialnum.h>
namespace proton
{
class IDocumentMetaStore;
-class IGidToLidChangeHandler;
/**
@@ -26,9 +23,6 @@ class RemoveDoneContext : public OperationDoneContext
{
vespalib::Executor &_executor;
std::unique_ptr<vespalib::Executor::Task> _task;
- IGidToLidChangeHandler &_gidToLidChangeHandler;
- document::GlobalId _gid;
- search::SerialNum _serialNum;
public:
RemoveDoneContext(std::unique_ptr<FeedToken> token,
@@ -36,10 +30,7 @@ public:
PerDocTypeFeedMetrics &metrics,
vespalib::Executor &executor,
IDocumentMetaStore &documentMetaStore,
- IGidToLidChangeHandler &gidToLidChangeHandler,
- const document::GlobalId &gid,
- uint32_t lid,
- search::SerialNum serialNum);
+ uint32_t lid);
virtual ~RemoveDoneContext();
};
diff --git a/searchcore/src/vespa/searchcore/proton/server/searchable_doc_subdb_configurer.cpp b/searchcore/src/vespa/searchcore/proton/server/searchable_doc_subdb_configurer.cpp
index 571e64e104c..1127f73a778 100644
--- a/searchcore/src/vespa/searchcore/proton/server/searchable_doc_subdb_configurer.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/searchable_doc_subdb_configurer.cpp
@@ -47,13 +47,12 @@ SearchableDocSubDBConfigurer::reconfigureFeedView(const IIndexWriter::SP &indexW
StoreOnlyFeedView::Context(summaryAdapter,
schema,
searchView->getDocumentMetaStore(),
- curr->getGidToLidChangeHandler(),
repo,
curr->getWriteService(),
curr->getLidReuseDelayer(), curr->getCommitTimeTracker()),
curr->getPersistentParams(),
FastAccessFeedView::Context(attrWriter, curr->getDocIdLimit()),
- SearchableFeedView::Context(indexWriter))));
+ SearchableFeedView::Context(indexWriter, curr->getGidToLidChangeHandler()))));
}
void
diff --git a/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp b/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp
index 14556c86c18..913956c509f 100644
--- a/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp
@@ -7,6 +7,7 @@
#include <vespa/searchcore/proton/common/feedtoken.h>
#include <vespa/searchcore/proton/metrics/feed_metrics.h>
#include <vespa/searchcore/proton/documentmetastore/ilidreusedelayer.h>
+#include <vespa/searchcore/proton/reference/i_gid_to_lid_change_handler.h>
#include <vespa/vespalib/text/stringtokenizer.h>
#include <vespa/vespalib/util/closuretask.h>
#include <vespa/vespalib/util/exceptions.h>
@@ -36,8 +37,10 @@ bool shouldTrace(StoreOnlyFeedView::OnOperationDoneType onWriteDone, uint32_t tr
}
-SearchableFeedView::Context::Context(const IIndexWriter::SP &indexWriter)
- : _indexWriter(indexWriter)
+SearchableFeedView::Context::Context(const IIndexWriter::SP &indexWriter,
+ const std::shared_ptr<IGidToLidChangeHandler> &gidToLidChangeHandler)
+ : _indexWriter(indexWriter),
+ _gidToLidChangeHandler(gidToLidChangeHandler)
{}
@@ -49,7 +52,8 @@ SearchableFeedView::SearchableFeedView(const StoreOnlyFeedView::Context &storeOn
Context ctx)
: Parent(storeOnlyCtx, params, fastUpdateCtx),
_indexWriter(ctx._indexWriter),
- _hasIndexedFields(_schema->getNumIndexFields() > 0)
+ _hasIndexedFields(_schema->getNumIndexFields() > 0),
+ _gidToLidChangeHandler(ctx._gidToLidChangeHandler)
{ }
SearchableFeedView::~SearchableFeedView() {}
@@ -257,4 +261,22 @@ SearchableFeedView::forceCommit(SerialNum serialNum, OnForceCommitDoneType onCom
_writeService.index().execute(makeLambdaTask([=]() { performIndexForceCommit(serialNum, onCommitDone); }));
}
+void
+SearchableFeedView::notifyPutGidToLidChange(const document::GlobalId &gid, uint32_t lid, SerialNum serialNum)
+{
+ _gidToLidChangeHandler->notifyPut(gid, lid, serialNum);
+}
+
+void
+SearchableFeedView::notifyRemoveGidToLidChange(const document::GlobalId &gid, SerialNum serialNum)
+{
+ _gidToLidChangeHandler->notifyRemove(gid, serialNum);
+}
+
+void
+SearchableFeedView::notifyRemoveDoneGidToLidChange(const document::GlobalId &gid, SerialNum serialNum)
+{
+ _gidToLidChangeHandler->notifyRemoveDone(gid, serialNum);
+}
+
} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.h b/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.h
index 81d81a6cc27..4b536d0adde 100644
--- a/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.h
+++ b/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.h
@@ -8,6 +8,8 @@
namespace proton {
+class IGidToLidChangeHandler;
+
/**
* The feed view used by the searchable sub database.
*
@@ -23,14 +25,17 @@ public:
struct Context {
const IIndexWriter::SP &_indexWriter;
+ const std::shared_ptr<IGidToLidChangeHandler> &_gidToLidChangeHandler;
- Context(const IIndexWriter::SP &indexWriter);
+ Context(const IIndexWriter::SP &indexWriter,
+ const std::shared_ptr<IGidToLidChangeHandler> &gidToLidChangeHandler);
~Context();
};
private:
const IIndexWriter::SP _indexWriter;
const bool _hasIndexedFields;
+ const std::shared_ptr<IGidToLidChangeHandler> _gidToLidChangeHandler;
bool hasIndexedFields() const { return _hasIndexedFields; }
@@ -81,12 +86,17 @@ private:
void performIndexForceCommit(SerialNum serialNum, OnForceCommitDoneType onCommitDone);
void forceCommit(SerialNum serialNum, OnForceCommitDoneType onCommitDone) override;
+ virtual void notifyPutGidToLidChange(const document::GlobalId &gid, uint32_t lid, SerialNum serialNum) override;
+ virtual void notifyRemoveGidToLidChange(const document::GlobalId &gid, SerialNum serialNum) override;
+ virtual void notifyRemoveDoneGidToLidChange(const document::GlobalId &gid, SerialNum serialNum) override;
+
public:
SearchableFeedView(const StoreOnlyFeedView::Context &storeOnlyCtx, const PersistentParams &params,
const FastAccessFeedView::Context &fastUpdateCtx, Context ctx);
virtual ~SearchableFeedView();
const IIndexWriter::SP &getIndexWriter() const { return _indexWriter; }
+ const std::shared_ptr<IGidToLidChangeHandler> &getGidToLidChangeHandler() const { return _gidToLidChangeHandler; }
void sync() override;
};
diff --git a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp
index f88fb07ab29..e9e0120dac1 100644
--- a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp
@@ -49,10 +49,8 @@ SearchableDocSubDB::SearchableDocSubDB(const Config &cfg, const Context &ctx)
getSubDbName(), ctx._fastUpdCtx._storeOnlyCtx._owner.getDistributionKey()),
_numSearcherThreads(cfg._numSearcherThreads),
_warmupExecutor(ctx._warmupExecutor),
- _realGidToLidChangeHandler(std::make_shared<GidToLidChangeHandler>())
-{
- _gidToLidChangeHandler = _realGidToLidChangeHandler;
-}
+ _gidToLidChangeHandler(std::make_shared<GidToLidChangeHandler>())
+{ }
SearchableDocSubDB::~SearchableDocSubDB()
{
@@ -246,7 +244,7 @@ SearchableDocSubDB::initFeedView(const IAttributeWriter::SP &attrWriter,
SearchableFeedView::UP feedView(new SearchableFeedView(getStoreOnlyFeedViewContext(configSnapshot),
getFeedViewPersistentParams(),
FastAccessFeedView::Context(attrWriter, _docIdLimit),
- SearchableFeedView::Context(getIndexWriter())));
+ SearchableFeedView::Context(getIndexWriter(), _gidToLidChangeHandler)));
// XXX: Not exception safe.
_rFeedView.set(SearchableFeedView::SP(feedView.release()));
@@ -353,7 +351,7 @@ SearchableDocSubDB::updateLidReuseDelayer(const LidReuseDelayerConfig &config)
void
SearchableDocSubDB::close()
{
- _realGidToLidChangeHandler->close();
+ _gidToLidChangeHandler->close();
Parent::close();
}
diff --git a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.h b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.h
index 91ce868937b..fa3ded56c97 100644
--- a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.h
+++ b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.h
@@ -83,7 +83,7 @@ private:
SearchableDocSubDBConfigurer _configurer;
const size_t _numSearcherThreads;
vespalib::ThreadExecutor &_warmupExecutor;
- std::shared_ptr<GidToLidChangeHandler> _realGidToLidChangeHandler;
+ std::shared_ptr<GidToLidChangeHandler> _gidToLidChangeHandler;
// Note: lifetime of indexManager must be handled by caller.
std::shared_ptr<initializer::InitializerTask>
diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp
index 5fbae951536..b3f98b2a8ac 100644
--- a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp
@@ -19,7 +19,6 @@
#include <vespa/searchcore/proton/index/index_writer.h>
#include <vespa/searchcore/proton/metrics/legacy_documentdb_metrics.h>
#include <vespa/searchcore/proton/metrics/metricswireservice.h>
-#include <vespa/searchcore/proton/reference/dummy_gid_to_lid_change_handler.h>
#include <vespa/searchlib/attribute/configconverter.h>
#include <vespa/searchlib/docstore/document_store_visitor_progress.h>
#include <vespa/searchlib/util/fileheadertk.h>
@@ -136,8 +135,7 @@ StoreOnlyDocSubDB::StoreOnlyDocSubDB(const Config &cfg, const Context &ctx)
_subDbType(cfg._subDbType),
_fileHeaderContext(*this, ctx._fileHeaderContext, _docTypeName, _baseDir),
_lidReuseDelayer(),
- _commitTimeTracker(TimeStamp::Seconds(3600.0)),
- _gidToLidChangeHandler(std::make_shared<DummyGidToLidChangeHandler>())
+ _commitTimeTracker(TimeStamp::Seconds(3600.0))
{
vespalib::mkdir(_baseDir, false); // Assume parent is created.
}
@@ -389,7 +387,6 @@ StoreOnlyDocSubDB::getStoreOnlyFeedViewContext(const DocumentDBConfig &configSna
return StoreOnlyFeedView::Context(getSummaryAdapter(),
configSnapshot.getSchemaSP(),
_metaStoreCtx,
- *_gidToLidChangeHandler,
configSnapshot.getDocumentTypeRepoSP(),
_writeService,
*_lidReuseDelayer, _commitTimeTracker);
diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h
index ed540053de3..b9e23e2436c 100644
--- a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h
+++ b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h
@@ -176,7 +176,6 @@ protected:
StoreOnlySubDBFileHeaderContext _fileHeaderContext;
std::unique_ptr<documentmetastore::ILidReuseDelayer> _lidReuseDelayer;
CommitTimeTracker _commitTimeTracker;
- std::shared_ptr<IGidToLidChangeHandler> _gidToLidChangeHandler;
std::shared_ptr<initializer::InitializerTask>
createSummaryManagerInitializer(const ProtonConfig::Summary protonSummaryCfg,
diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp
index 749078c56ba..3e7e3d6ddfa 100644
--- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp
@@ -12,7 +12,6 @@
#include <vespa/searchcore/proton/common/feedtoken.h>
#include <vespa/searchcore/proton/documentmetastore/ilidreusedelayer.h>
#include <vespa/searchcore/proton/metrics/feed_metrics.h>
-#include <vespa/searchcore/proton/reference/i_gid_to_lid_change_handler.h>
#include <vespa/searchlib/common/scheduletaskcallback.h>
#include <vespa/vespalib/util/exceptions.h>
@@ -27,7 +26,6 @@ using document::DocumentUpdate;
using search::index::Schema;
using search::makeLambdaTask;
using search::IDestructorCallback;
-using search::SerialNum;
using storage::spi::BucketInfoResult;
using storage::spi::Timestamp;
using vespalib::IllegalStateException;
@@ -58,37 +56,32 @@ private:
public:
PutDoneContextForMove(std::unique_ptr<FeedToken> token, const FeedOperation::Type opType,
- PerDocTypeFeedMetrics &metrics,
- IGidToLidChangeHandler &gidToLidChangeHandler,
- const document::GlobalId &gid,
- uint32_t lid, search::SerialNum serialNum, bool changedDbdId, IDestructorCallback::SP moveDoneCtx)
- : PutDoneContext(std::move(token), opType, metrics, gidToLidChangeHandler, gid, lid, serialNum, changedDbdId),
+ PerDocTypeFeedMetrics &metrics, IDestructorCallback::SP moveDoneCtx)
+ : PutDoneContext(std::move(token), opType, metrics),
_moveDoneCtx(std::move(moveDoneCtx))
{}
virtual ~PutDoneContextForMove() {}
};
std::shared_ptr<PutDoneContext>
-createPutDoneContext(FeedToken::UP &token, FeedOperation::Type opType, PerDocTypeFeedMetrics &metrics,
- IGidToLidChangeHandler &gidToLidChangeHandler,
- const document::GlobalId &gid, uint32_t lid,
- SerialNum serialNum, bool changedDbdId,
+createPutDoneContext(FeedToken::UP &token, FeedOperation::Type opType, PerDocTypeFeedMetrics &metrics, bool force,
IDestructorCallback::SP moveDoneCtx)
{
std::shared_ptr<PutDoneContext> result;
- if (moveDoneCtx) {
- result = std::make_shared<PutDoneContextForMove>(std::move(token), opType, metrics, gidToLidChangeHandler, gid, lid, serialNum, changedDbdId, std::move(moveDoneCtx));
- } else {
- result = std::make_shared<PutDoneContext>(std::move(token), opType, metrics, gidToLidChangeHandler, gid, lid, serialNum, changedDbdId);
+ if (token || force) {
+ if (moveDoneCtx) {
+ result = std::make_shared<PutDoneContextForMove>(std::move(token), opType, metrics, std::move(moveDoneCtx));
+ } else {
+ result = std::make_shared<PutDoneContext>(std::move(token), opType, metrics);
+ }
}
return result;
}
std::shared_ptr<PutDoneContext>
-createPutDoneContext(FeedToken::UP &token, FeedOperation::Type opType, PerDocTypeFeedMetrics &metrics, IGidToLidChangeHandler &gidToLidChangeHandler,
- const document::GlobalId &gid, uint32_t lid, SerialNum serialNum, bool changedDbdId)
+createPutDoneContext(FeedToken::UP &token, FeedOperation::Type opType, PerDocTypeFeedMetrics &metrics, bool force)
{
- return createPutDoneContext(token, opType, metrics, gidToLidChangeHandler, gid, lid, serialNum, changedDbdId, IDestructorCallback::SP());
+ return createPutDoneContext(token, opType, metrics, force, IDestructorCallback::SP());
}
std::shared_ptr<UpdateDoneContext>
@@ -115,13 +108,9 @@ private:
public:
RemoveDoneContextForMove(std::unique_ptr<FeedToken> token, const FeedOperation::Type opType,
PerDocTypeFeedMetrics &metrics, vespalib::Executor &executor,
- IDocumentMetaStore &documentMetaStore,
- IGidToLidChangeHandler &gidToLidChangeHandler,
- const document::GlobalId &gid,
- uint32_t lid,
- SerialNum serialNum,
+ IDocumentMetaStore &documentMetaStore, uint32_t lid,
IDestructorCallback::SP moveDoneCtx)
- : RemoveDoneContext(std::move(token), opType, metrics, executor, documentMetaStore, gidToLidChangeHandler, gid, lid, serialNum),
+ : RemoveDoneContext(std::move(token), opType, metrics, executor, documentMetaStore, lid),
_moveDoneCtx(std::move(moveDoneCtx))
{}
virtual ~RemoveDoneContextForMove() {}
@@ -130,19 +119,15 @@ public:
std::shared_ptr<RemoveDoneContext>
createRemoveDoneContext(std::unique_ptr<FeedToken> token, const FeedOperation::Type opType,
PerDocTypeFeedMetrics &metrics, vespalib::Executor &executor,
- IDocumentMetaStore &documentMetaStore,
- IGidToLidChangeHandler &gidToLidChangeHandler,
- const document::GlobalId &gid,
- uint32_t lid,
- SerialNum serialNum,
+ IDocumentMetaStore &documentMetaStore, uint32_t lid,
IDestructorCallback::SP moveDoneCtx)
{
if (moveDoneCtx) {
return std::make_shared<RemoveDoneContextForMove>
- (std::move(token), opType, metrics, executor, documentMetaStore, gidToLidChangeHandler, gid, lid, serialNum, std::move(moveDoneCtx));
+ (std::move(token), opType, metrics, executor, documentMetaStore, lid, std::move(moveDoneCtx));
} else {
return std::make_shared<RemoveDoneContext>
- (std::move(token), opType, metrics, executor, documentMetaStore, gidToLidChangeHandler, gid, lid, serialNum);
+ (std::move(token), opType, metrics, executor, documentMetaStore, lid);
}
}
@@ -217,8 +202,7 @@ StoreOnlyFeedView::StoreOnlyFeedView(const Context &ctx, const PersistentParams
_schema(ctx._schema),
_writeService(ctx._writeService),
_params(params),
- _metaStore(_documentMetaStoreContext->get()),
- _gidToLidChangeHandler(ctx._gidToLidChangeHandler)
+ _metaStore(_documentMetaStoreContext->get())
{
_docType = _repo->getDocumentType(_params._docTypeName.getName());
}
@@ -295,6 +279,7 @@ StoreOnlyFeedView::internalPut(FeedToken::UP token, const PutOperation &putOp)
putOp.getSubDbId(), putOp.getLid(), putOp.getPrevSubDbId(), putOp.getPrevLid(),
_params._subDbId, doc->toString(true).size(), doc->toString(true).c_str());
+ uint32_t oldDocIdLimit = _metaStore.getCommittedDocIdLimit();
adjustMetaStore(putOp, docId);
considerEarlyAck(token, putOp.getType());
@@ -302,18 +287,16 @@ StoreOnlyFeedView::internalPut(FeedToken::UP token, const PutOperation &putOp)
if (putOp.getValidDbdId(_params._subDbId)) {
bool immediateCommit = _commitTimeTracker.needCommit();
- const document::GlobalId &gid = docId.getGlobalId();
std::shared_ptr<PutDoneContext> onWriteDone =
createPutDoneContext(token, putOp.getType(), _params._metrics,
- _gidToLidChangeHandler, gid, putOp.getLid(), serialNum, putOp.changedDbdId());
+ immediateCommit && putOp.getLid() >= oldDocIdLimit);
putSummary(serialNum, putOp.getLid(), doc, onWriteDone);
putAttributes(serialNum, putOp.getLid(), *doc, immediateCommit, onWriteDone);
putIndexedFields(serialNum, putOp.getLid(), doc, immediateCommit, onWriteDone);
}
if (docAlreadyExists && putOp.changedDbdId()) {
assert(!putOp.getValidDbdId(_params._subDbId));
- const document::GlobalId &gid = docId.getGlobalId();
- internalRemove(std::move(token), serialNum, gid, putOp.getPrevLid(), putOp.getType(), IDestructorCallback::SP());
+ internalRemove(std::move(token), serialNum, putOp.getPrevLid(), putOp.getType(), IDestructorCallback::SP());
}
if (token.get() != NULL) {
token->ack(putOp.getType(), _params._metrics);
@@ -590,8 +573,7 @@ StoreOnlyFeedView::internalRemove(FeedToken::UP token, const RemoveOperation &rm
if (rmOp.getValidPrevDbdId(_params._subDbId)) {
if (rmOp.changedDbdId()) {
assert(!rmOp.getValidDbdId(_params._subDbId));
- const document::GlobalId &gid = docId.getGlobalId();
- internalRemove(std::move(token), serialNum, gid, rmOp.getPrevLid(), rmOp.getType(), IDestructorCallback::SP());
+ internalRemove(std::move(token), serialNum, rmOp.getPrevLid(), rmOp.getType(), IDestructorCallback::SP());
}
}
if (token.get() != NULL) {
@@ -600,7 +582,7 @@ StoreOnlyFeedView::internalRemove(FeedToken::UP token, const RemoveOperation &rm
}
void
-StoreOnlyFeedView::internalRemove(FeedToken::UP token, SerialNum serialNum, const document::GlobalId &gid, Lid lid,
+StoreOnlyFeedView::internalRemove(FeedToken::UP token, SerialNum serialNum, Lid lid,
FeedOperation::Type opType, IDestructorCallback::SP moveDoneCtx)
{
removeSummary(serialNum, lid);
@@ -608,10 +590,10 @@ StoreOnlyFeedView::internalRemove(FeedToken::UP token, SerialNum serialNum, cons
std::shared_ptr<RemoveDoneContext> onWriteDone;
if (explicitReuseLid || token) {
onWriteDone = createRemoveDoneContext(std::move(token), opType, _params._metrics, _writeService.master(),
- _metaStore, _gidToLidChangeHandler, gid, (explicitReuseLid ? lid : 0u), serialNum, moveDoneCtx);
+ _metaStore, (explicitReuseLid ? lid : 0u), moveDoneCtx);
} else if (moveDoneCtx) {
onWriteDone = createRemoveDoneContext(FeedToken::UP(), opType, _params._metrics, _writeService.master(),
- _metaStore, _gidToLidChangeHandler, gid, 0u, serialNum, moveDoneCtx);
+ _metaStore, 0u, moveDoneCtx);
}
bool immediateCommit = _commitTimeTracker.needCommit();
removeAttributes(serialNum, lid, immediateCommit, onWriteDone);
@@ -629,12 +611,17 @@ StoreOnlyFeedView::adjustMetaStore(const DocumentOperation &op, const DocumentId
op.getLid() != op.getPrevLid())
{
moveMetaData(_metaStore, docId, op);
+ notifyPutGidToLidChange(docId.getGlobalId(), op.getLid(), serialNum);
} else {
putMetaData(_metaStore, docId, op, _params._subDbType == SubDbType::REMOVED);
+ if (op.getDbDocumentId() != op.getPrevDbDocumentId()) {
+ notifyPutGidToLidChange(docId.getGlobalId(), op.getLid(), serialNum);
+ }
}
} else if (op.getValidPrevDbdId(_params._subDbId)) {
- _gidToLidChangeHandler.notifyRemove(docId.getGlobalId(), serialNum);
removeMetaData(_metaStore, docId, op, _params._subDbType == SubDbType::REMOVED);
+ notifyRemoveGidToLidChange(docId.getGlobalId(), serialNum);
+ notifyRemoveDoneGidToLidChange(docId.getGlobalId(), serialNum);
}
_metaStore.commit(serialNum, serialNum);
}
@@ -663,14 +650,12 @@ StoreOnlyFeedView::removeDocuments(const RemoveDocumentsOperation &op, bool remo
bool explicitReuseLids = false;
if (useDMS) {
std::vector<document::GlobalId> gidsToRemove(getGidsToRemove(_metaStore, lidsToRemove));
- for (const auto &gid : gidsToRemove) {
- _gidToLidChangeHandler.notifyRemove(gid, serialNum);
- }
_metaStore.removeBatch(lidsToRemove, ctx->getDocIdLimit());
- _metaStore.commit(serialNum, serialNum);
for (const auto &gid : gidsToRemove) {
- _gidToLidChangeHandler.notifyRemoveDone(gid, serialNum);
+ notifyRemoveGidToLidChange(gid, serialNum);
+ notifyRemoveDoneGidToLidChange(gid, serialNum);
}
+ _metaStore.commit(serialNum, serialNum);
explicitReuseLids = _lidReuseDelayer.delayReuse(lidsToRemove);
}
std::shared_ptr<search::IDestructorCallback> onWriteDone;
@@ -754,28 +739,26 @@ StoreOnlyFeedView::handleMove(const MoveOperation &moveOp, IDestructorCallback::
moveOp.getSubDbId(), moveOp.getLid(), moveOp.getPrevSubDbId(), moveOp.getPrevLid(),
_params._subDbId, doc->toString(true).size(), doc->toString(true).c_str());
+ uint32_t oldDocIdLimit = _metaStore.getCommittedDocIdLimit();
adjustMetaStore(moveOp, docId);
bool docAlreadyExists = moveOp.getValidPrevDbdId(_params._subDbId);
if (moveOp.getValidDbdId(_params._subDbId)) {
bool immediateCommit = _commitTimeTracker.needCommit();
- const document::GlobalId &gid = docId.getGlobalId();
FeedToken::UP token;
std::shared_ptr<PutDoneContext> onWriteDone =
createPutDoneContext(token, moveOp.getType(), _params._metrics,
- _gidToLidChangeHandler, gid, moveOp.getLid(),
- serialNum, moveOp.changedDbdId(), doneCtx);
+ immediateCommit && (moveOp.getLid() >= oldDocIdLimit), doneCtx);
putSummary(serialNum, moveOp.getLid(), doc, onWriteDone);
putAttributes(serialNum, moveOp.getLid(), *doc, immediateCommit, onWriteDone);
putIndexedFields(serialNum, moveOp.getLid(), doc, immediateCommit, onWriteDone);
}
if (docAlreadyExists && moveOp.changedDbdId()) {
- const document::GlobalId &gid = docId.getGlobalId();
- internalRemove(FeedToken::UP(), serialNum, gid, moveOp.getPrevLid(), moveOp.getType(), doneCtx);
+ internalRemove(FeedToken::UP(), serialNum, moveOp.getPrevLid(), moveOp.getType(), doneCtx);
}
}
void
-StoreOnlyFeedView::heartBeat(SerialNum serialNum)
+StoreOnlyFeedView::heartBeat(search::SerialNum serialNum)
{
assert(_writeService.master().isCurrentThread());
_metaStore.removeAllOldGenerations();
@@ -824,4 +807,13 @@ StoreOnlyFeedView::getDocumentMetaStorePtr() const
return &_documentMetaStoreContext->get();
}
+void
+StoreOnlyFeedView::notifyPutGidToLidChange(const document::GlobalId &, uint32_t, SerialNum) {}
+
+void
+StoreOnlyFeedView::notifyRemoveGidToLidChange(const document::GlobalId &, SerialNum) {}
+
+void
+StoreOnlyFeedView::notifyRemoveDoneGidToLidChange(const document::GlobalId &, SerialNum) {}
+
} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h
index 3b3a5efbe24..ec3003fb5d6 100644
--- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h
+++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h
@@ -22,8 +22,6 @@
namespace search { class IDestructorCallback; }
-namespace document { class GLobalId; }
-
namespace proton {
class IReplayConfig;
@@ -33,7 +31,6 @@ class OperationDoneContext;
class PutDoneContext;
class RemoveDoneContext;
class CommitTimeTracker;
-class IGidToLidChangeHandler;
namespace documentmetastore { class ILidReuseDelayer; }
@@ -71,7 +68,6 @@ public:
const ISummaryAdapter::SP &_summaryAdapter;
const search::index::Schema::SP &_schema;
const IDocumentMetaStoreContext::SP &_documentMetaStoreContext;
- IGidToLidChangeHandler &_gidToLidChangeHandler;
const document::DocumentTypeRepo::SP &_repo;
searchcorespi::index::IThreadingService &_writeService;
documentmetastore::ILidReuseDelayer &_lidReuseDelayer;
@@ -80,7 +76,6 @@ public:
Context(const ISummaryAdapter::SP &summaryAdapter,
const search::index::Schema::SP &schema,
const IDocumentMetaStoreContext::SP &documentMetaStoreContext,
- IGidToLidChangeHandler &gidToLidChangeHandler,
const document::DocumentTypeRepo::SP &repo,
searchcorespi::index::IThreadingService &writeService,
documentmetastore::ILidReuseDelayer &lidReuseDelayer,
@@ -88,7 +83,6 @@ public:
: _summaryAdapter(summaryAdapter),
_schema(schema),
_documentMetaStoreContext(documentMetaStoreContext),
- _gidToLidChangeHandler(gidToLidChangeHandler),
_repo(repo),
_writeService(writeService),
_lidReuseDelayer(lidReuseDelayer),
@@ -149,7 +143,6 @@ protected:
searchcorespi::index::IThreadingService &_writeService;
PersistentParams _params;
IDocumentMetaStore &_metaStore;
- IGidToLidChangeHandler &_gidToLidChangeHandler;
private:
searchcorespi::index::IThreadService & summaryExecutor() {
@@ -172,7 +165,7 @@ private:
void internalPut(FeedTokenUP token, const PutOperation &putOp);
void internalUpdate(FeedTokenUP token, const UpdateOperation &updOp);
- bool lookupDocId(const document::DocumentId &docId, Lid & lid) const;
+ bool lookupDocId(const document::DocumentId &gid, Lid & lid) const;
void internalRemove(FeedTokenUP token, const RemoveOperation &rmOp);
// Removes documents from meta store and document store.
@@ -180,12 +173,16 @@ private:
size_t removeDocuments(const RemoveDocumentsOperation &op, bool remove_index_and_attribute_fields,
bool immediateCommit);
- void internalRemove(FeedTokenUP token, SerialNum serialNum, const document::GlobalId &gid, Lid lid,
+ void internalRemove(FeedTokenUP token, SerialNum serialNum, Lid lid,
FeedOperation::Type opType, std::shared_ptr<search::IDestructorCallback> moveDoneCtx);
// Ack token early if visibility delay is nonzero
void considerEarlyAck(FeedTokenUP &token, FeedOperation::Type opType);
+ virtual void notifyPutGidToLidChange(const document::GlobalId &gid, uint32_t lid, SerialNum serialNum);
+ virtual void notifyRemoveGidToLidChange(const document::GlobalId &gid, SerialNum serialNum);
+ virtual void notifyRemoveDoneGidToLidChange(const document::GlobalId &gid, SerialNum serialNum);
+
void makeUpdatedDocument(SerialNum serialNum, Lid lid, DocumentUpdate::SP upd,
OnOperationDoneType onWriteDone,PromisedDoc promisedDoc, PromisedStream promisedStream);
@@ -232,7 +229,6 @@ public:
searchcorespi::index::IThreadingService &getWriteService() { return _writeService; }
documentmetastore::ILidReuseDelayer &getLidReuseDelayer() { return _lidReuseDelayer; }
CommitTimeTracker &getCommitTimeTracker() { return _commitTimeTracker; }
- IGidToLidChangeHandler &getGidToLidChangeHandler() const { return _gidToLidChangeHandler; }
/**
* Implements IFeedView.