diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-11-19 16:33:28 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-11-19 16:33:28 +0000 |
commit | 172b0ed11ee9121035b7c58b7e2c8cbd3e8d0102 (patch) | |
tree | 2377832f10f12ee29de5c12747cb8a8ce029a3b0 /searchcore | |
parent | 06884214e04c7ea6550b8a8c275cd9bd543c10e5 (diff) |
Use forcecommit instead of sync
Diffstat (limited to 'searchcore')
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/server/documentdb.cpp | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp index 5e46166b227..bfed17b6ffb 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp @@ -29,7 +29,6 @@ #include <vespa/searchcore/proton/persistenceengine/commit_and_wait_document_retriever.h> #include <vespa/searchcore/proton/reference/document_db_reference_resolver.h> #include <vespa/searchcore/proton/reference/i_document_db_reference_registry.h> -#include <vespa/searchlib/attribute/attributefactory.h> #include <vespa/searchlib/attribute/configconverter.h> #include <vespa/searchlib/engine/docsumreply.h> #include <vespa/searchlib/engine/searchreply.h> @@ -104,6 +103,23 @@ public: } }; +template<typename T> +void +forceCommitAndWait(std::shared_ptr<IFeedView> feedView, SerialNum serialNum, T keepAlive) { + vespalib::Gate gate; + using Keep = vespalib::KeepAlive<std::pair<T, std::shared_ptr<IDestructorCallback>>>; + feedView->forceCommit(CommitParam(serialNum), + std::make_shared<Keep>(std::make_pair(std::move(keepAlive), std::make_shared<GateCallback>(gate)))); + gate.await(); +} + +void +forceCommitAndWait(std::shared_ptr<IFeedView> feedView, SerialNum serialNum) { + vespalib::Gate gate; + feedView->forceCommit(CommitParam(serialNum), std::make_shared<GateCallback>(gate)); + gate.await(); +} + } template <typename FunctionType> @@ -469,11 +485,7 @@ DocumentDB::applyConfig(DocumentDBConfig::SP configSnapshot, SerialNum serialNum } { bool elidedConfigSave = equalReplayConfig && tlsReplayDone; - vespalib::Gate gate; - // Flush changes to attributes and memory index, cf. visibilityDelay - _feedView.get()->forceCommit(CommitParam(elidedConfigSave ? serialNum : serialNum - 1), - std::make_shared<vespalib::KeepAlive<std::pair<FeedHandler::CommitResult, std::shared_ptr<IDestructorCallback>>>>(std::make_pair(std::move(commit_result), std::make_shared<GateCallback>(gate)))); - gate.await(); + forceCommitAndWait(_feedView.get(), elidedConfigSave ? serialNum : serialNum - 1, std::move(commit_result)); } if (params.shouldMaintenanceControllerChange()) { _maintenanceController.killJobs(); @@ -556,8 +568,11 @@ DocumentDB::close() DocumentDBTaggedMetrics &metrics = getMetrics(); _metricsWireService.cleanAttributes(metrics.ready.attributes); _metricsWireService.cleanAttributes(metrics.notReady.attributes); - _writeService.sync_all_executors(); - masterExecute([this] () { closeSubDBs(); } ); + + masterExecute([this] () { + forceCommitAndWait(_feedView.get(), getCurrentSerialNumber()); + closeSubDBs(); + }); _writeService.sync_all_executors(); // What about queued tasks ? _writeService.shutdown(); @@ -888,7 +903,6 @@ void DocumentDB::syncFeedView() { assert(_writeService.master().isCurrentThread()); - IFeedView::SP oldFeedView(_feedView.get()); IFeedView::SP newFeedView(_subDBs.getFeedView()); _maintenanceController.killJobs(); |