From d77c5ebfc7f054b60c3f6d959d1f552bce9b1db3 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Fri, 23 Apr 2021 17:59:55 +0000 Subject: Run destruction of jobs in the master thread. --- .../searchcore/proton/server/bucketmovejobv2.cpp | 27 ++++++++++++++++++++++ .../searchcore/proton/server/bucketmovejobv2.h | 8 +------ .../server/lid_space_compaction_job_take2.cpp | 22 ++++++++++++++++++ .../proton/server/lid_space_compaction_job_take2.h | 7 +----- 4 files changed, 51 insertions(+), 13 deletions(-) diff --git a/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.cpp b/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.cpp index 7d26644944a..576e608d24b 100644 --- a/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.cpp @@ -114,6 +114,33 @@ BucketMoveJobV2::~BucketMoveJobV2() _diskMemUsageNotifier.removeDiskMemUsageListener(this); } +std::shared_ptr +BucketMoveJobV2::create(const std::shared_ptr &calc, + RetainGuard dbRetainer, + IDocumentMoveHandler &moveHandler, + IBucketModifiedHandler &modifiedHandler, + IThreadService & master, + BucketExecutor & bucketExecutor, + const MaintenanceDocumentSubDB &ready, + const MaintenanceDocumentSubDB ¬Ready, + bucketdb::IBucketCreateNotifier &bucketCreateNotifier, + IClusterStateChangedNotifier &clusterStateChangedNotifier, + IBucketStateChangedNotifier &bucketStateChangedNotifier, + IDiskMemUsageNotifier &diskMemUsageNotifier, + const BlockableMaintenanceJobConfig &blockableConfig, + const vespalib::string &docTypeName, + document::BucketSpace bucketSpace) +{ + return std::shared_ptr( + new BucketMoveJobV2(calc, std::move(dbRetainer), moveHandler, modifiedHandler, master, bucketExecutor, ready, notReady, + bucketCreateNotifier, clusterStateChangedNotifier, bucketStateChangedNotifier, + diskMemUsageNotifier, blockableConfig, docTypeName, bucketSpace), + [&master](auto job) { + auto failed = master.execute(makeLambdaTask([job]() { delete job; })); + assert(!failed); + }); +} + BucketMoveJobV2::NeedResult BucketMoveJobV2::needMove(const ScanIterator &itr) const { NeedResult noMove(false, false); diff --git a/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.h b/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.h index 0f873c8b290..df75c8c9766 100644 --- a/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.h +++ b/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.h @@ -129,13 +129,7 @@ public: IDiskMemUsageNotifier &diskMemUsageNotifier, const BlockableMaintenanceJobConfig &blockableConfig, const vespalib::string &docTypeName, - document::BucketSpace bucketSpace) - { - return std::shared_ptr( - new BucketMoveJobV2(calc, std::move(dbRetainer), moveHandler, modifiedHandler, master, bucketExecutor, ready, notReady, - bucketCreateNotifier, clusterStateChangedNotifier, bucketStateChangedNotifier, - diskMemUsageNotifier, blockableConfig, docTypeName, bucketSpace)); - } + document::BucketSpace bucketSpace); ~BucketMoveJobV2() override; diff --git a/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.cpp b/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.cpp index 822d190feec..a4fa1195c79 100644 --- a/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.cpp @@ -136,6 +136,28 @@ CompactionJob::CompactionJob(const DocumentDBLidSpaceCompactionConfig &config, CompactionJob::~CompactionJob() = default; +std::shared_ptr +CompactionJob::create(const DocumentDBLidSpaceCompactionConfig &config, + RetainGuard dbRetainer, + std::shared_ptr handler, + IOperationStorer &opStorer, + IThreadService & master, + BucketExecutor & bucketExecutor, + IDiskMemUsageNotifier &diskMemUsageNotifier, + const BlockableMaintenanceJobConfig &blockableConfig, + IClusterStateChangedNotifier &clusterStateChangedNotifier, + bool nodeRetired, + document::BucketSpace bucketSpace) +{ + return std::shared_ptr( + new CompactionJob(config, std::move(dbRetainer), std::move(handler), opStorer, master, bucketExecutor, + diskMemUsageNotifier, blockableConfig, clusterStateChangedNotifier, nodeRetired, bucketSpace), + [&master](auto job) { + auto failed = master.execute(makeLambdaTask([job]() { delete job; })); + assert(!failed); + }); +} + void CompactionJob::onStop() { _stopped = true; diff --git a/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.h b/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.h index 02c9ccb8bcf..aa72d2e84bc 100644 --- a/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.h +++ b/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.h @@ -65,12 +65,7 @@ public: const BlockableMaintenanceJobConfig &blockableConfig, IClusterStateChangedNotifier &clusterStateChangedNotifier, bool nodeRetired, - document::BucketSpace bucketSpace) - { - return std::shared_ptr( - new CompactionJob(config, std::move(dbRetainer), std::move(handler), opStorer, master, bucketExecutor, - diskMemUsageNotifier, blockableConfig, clusterStateChangedNotifier, nodeRetired, bucketSpace)); - } + document::BucketSpace bucketSpace); ~CompactionJob() override; }; -- cgit v1.2.3