diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-04-23 17:59:55 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-04-23 17:59:55 +0000 |
commit | d77c5ebfc7f054b60c3f6d959d1f552bce9b1db3 (patch) | |
tree | 024ba62f60ad800cae4cfba8377eba2fd8bc88ae | |
parent | 980c1bf27c304dc3a58dd9f42504346440bd05cb (diff) |
Run destruction of jobs in the master thread.
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> +BucketMoveJobV2::create(const std::shared_ptr<IBucketStateCalculator> &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<BucketMoveJobV2>( + 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<BucketMoveJobV2>( - 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> +CompactionJob::create(const DocumentDBLidSpaceCompactionConfig &config, + RetainGuard dbRetainer, + std::shared_ptr<ILidSpaceCompactionHandler> handler, + IOperationStorer &opStorer, + IThreadService & master, + BucketExecutor & bucketExecutor, + IDiskMemUsageNotifier &diskMemUsageNotifier, + const BlockableMaintenanceJobConfig &blockableConfig, + IClusterStateChangedNotifier &clusterStateChangedNotifier, + bool nodeRetired, + document::BucketSpace bucketSpace) +{ + return std::shared_ptr<CompactionJob>( + 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<CompactionJob>( - new CompactionJob(config, std::move(dbRetainer), std::move(handler), opStorer, master, bucketExecutor, - diskMemUsageNotifier, blockableConfig, clusterStateChangedNotifier, nodeRetired, bucketSpace)); - } + document::BucketSpace bucketSpace); ~CompactionJob() override; }; |