summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-04-23 17:59:55 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-04-23 17:59:55 +0000
commitd77c5ebfc7f054b60c3f6d959d1f552bce9b1db3 (patch)
tree024ba62f60ad800cae4cfba8377eba2fd8bc88ae
parent980c1bf27c304dc3a58dd9f42504346440bd05cb (diff)
Run destruction of jobs in the master thread.
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.cpp27
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.h8
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.cpp22
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.h7
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 &notReady,
+ 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;
};