diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-08-28 14:17:34 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2020-08-28 14:23:09 +0000 |
commit | 9ccf88ec0a3f20fb81d80704f4a6ef1bf22d8413 (patch) | |
tree | bc207aba13740b933266064f681a45d0ee3a54a0 | |
parent | 61e3586ef1f5050038f1bcb72a9a1f4ee6ba44c8 (diff) |
- forceCommit feedview when documentdb closes.
- forceCommit feedview when the documentdb does syncViews.
- Prevet chasing the nullptr. (Happens on startup for the initial syncViews
4 files changed, 19 insertions, 7 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp index 96a93f0ac16..efb79997f86 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp @@ -564,6 +564,9 @@ DocumentDB::close() // Abort any ongoing maintenance stopMaintenance(); + _visibility.commit(); + _writeService.sync(); + // The attributes in the ready sub db is also the total set of attributes. DocumentDBTaggedMetrics &metrics = getMetrics(); _metricsWireService.cleanAttributes(metrics.ready.attributes); @@ -905,6 +908,10 @@ DocumentDB::syncFeedView() return; IFeedView::SP oldFeedView(_feedView.get()); IFeedView::SP newFeedView(_subDBs.getFeedView()); + + _visibility.commit(); + _writeService.sync(); + _feedView.set(newFeedView); _feedHandler.setActiveFeedView(newFeedView.get()); _subDBs.createRetrievers(); diff --git a/searchcore/src/vespa/searchcore/proton/server/feedstates.cpp b/searchcore/src/vespa/searchcore/proton/server/feedstates.cpp index c14ed3bb1d9..d01c25d9c1e 100644 --- a/searchcore/src/vespa/searchcore/proton/server/feedstates.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/feedstates.cpp @@ -82,6 +82,8 @@ public: _commitTimeTracker(100ms) { } + ~TransactionLogReplayPacketHandler() override = default; + void replay(const PutOperation &op) override { _feed_view_ptr->handlePut(FeedToken(), op); } @@ -153,6 +155,8 @@ ReplayTransactionLogState::ReplayTransactionLogState( _packet_handler(std::make_unique<TransactionLogReplayPacketHandler>(feed_view_ptr, bucketDBHandler, replay_config, config_store)) { } +ReplayTransactionLogState::~ReplayTransactionLogState() = default; + void ReplayTransactionLogState::receive(const PacketWrapper::SP &wrap, Executor &executor) { EntryHandler closure = makeClosure(&startDispatch, _packet_handler.get()); diff --git a/searchcore/src/vespa/searchcore/proton/server/feedstates.h b/searchcore/src/vespa/searchcore/proton/server/feedstates.h index bf376bb8065..2cf0ee1a4dd 100644 --- a/searchcore/src/vespa/searchcore/proton/server/feedstates.h +++ b/searchcore/src/vespa/searchcore/proton/server/feedstates.h @@ -55,6 +55,7 @@ public: IReplayConfig &replay_config, FeedConfigStore &config_store); + ~ReplayTransactionLogState() override; void handleOperation(FeedToken, FeedOperationUP op) override { throwExceptionInHandleOperation(_doc_type_name, *op); } diff --git a/searchcore/src/vespa/searchcore/proton/server/visibilityhandler.cpp b/searchcore/src/vespa/searchcore/proton/server/visibilityhandler.cpp index a3524ae79f3..3a44af517ee 100644 --- a/searchcore/src/vespa/searchcore/proton/server/visibilityhandler.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/visibilityhandler.cpp @@ -2,10 +2,9 @@ #include "visibilityhandler.h" #include <vespa/vespalib/util/isequencedtaskexecutor.h> -#include <vespa/vespalib/util/closuretask.h> +#include <vespa/vespalib/util/lambdatask.h> -using vespalib::makeTask; -using vespalib::makeClosure; +using vespalib::makeLambdaTask; namespace proton { @@ -81,8 +80,7 @@ VisibilityHandler::startCommit(const std::lock_guard<std::mutex> &unused, bool f (void) unused; SerialNum current = _serial.getSerialNum(); if ((current > _lastCommitSerialNum) || force) { - _writeService.master().execute(makeTask(makeClosure(this, - &VisibilityHandler::performCommit, force))); + _writeService.master().execute(makeLambdaTask([this, force]() { performCommit(force);})); return true; } return false; @@ -95,8 +93,10 @@ VisibilityHandler::performCommit(bool force) SerialNum current = _serial.getSerialNum(); if ((current > _lastCommitSerialNum) || force) { IFeedView::SP feedView(_feedView.get()); - feedView->forceCommit(current); - _lastCommitSerialNum = current; + if (feedView) { + feedView->forceCommit(current); + _lastCommitSerialNum = current; + } } } |