aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-08-28 14:17:34 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-08-28 14:23:09 +0000
commit9ccf88ec0a3f20fb81d80704f4a6ef1bf22d8413 (patch)
treebc207aba13740b933266064f681a45d0ee3a54a0
parent61e3586ef1f5050038f1bcb72a9a1f4ee6ba44c8 (diff)
- forceCommit feedview when documentdb closes.
- forceCommit feedview when the documentdb does syncViews. - Prevet chasing the nullptr. (Happens on startup for the initial syncViews
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb.cpp7
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/feedstates.cpp4
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/feedstates.h1
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/visibilityhandler.cpp14
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;
+ }
}
}