summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-04-10 18:22:03 +0200
committerGitHub <noreply@github.com>2021-04-10 18:22:03 +0200
commite92c40caa99348919c25d7ae9938401e538bb827 (patch)
tree930ad8e3ce537df12f17209df0472b16d9236c08
parent8ac23b7631bf41a61daf703bcc2a1edeaf4ff58b (diff)
parentd21c7941c94b6820a9f162bbc770d270ac9da628 (diff)
Merge pull request #17354 from vespa-engine/balder/force-shared-ptr-only-construction
Force that lid space compation job and bucket move job are constructe…
-rw-r--r--searchcore/src/tests/proton/documentdb/documentbucketmover/documentbucketmover_v2_test.cpp7
-rw-r--r--searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_jobtest.cpp6
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.h50
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.h19
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/maintenance_jobs_injector.cpp29
5 files changed, 68 insertions, 43 deletions
diff --git a/searchcore/src/tests/proton/documentdb/documentbucketmover/documentbucketmover_v2_test.cpp b/searchcore/src/tests/proton/documentdb/documentbucketmover/documentbucketmover_v2_test.cpp
index 866c3c45e02..450fa7e8318 100644
--- a/searchcore/src/tests/proton/documentdb/documentbucketmover/documentbucketmover_v2_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/documentbucketmover/documentbucketmover_v2_test.cpp
@@ -123,10 +123,9 @@ ControllerFixtureBase::ControllerFixtureBase(const BlockableMaintenanceJobConfig
_bucketExecutor(4),
_moveHandler(*_bucketDB, storeMoveDoneContexts),
_metrics("test", 1),
- _bmj(std::make_shared<BucketMoveJobV2>(_calc, _moveHandler, _modifiedHandler, _master, _bucketExecutor,
- _ready._subDb, _notReady._subDb, _bucketCreateNotifier,
- _clusterStateHandler, _bucketHandler, _diskMemUsageNotifier,
- blockableConfig, "test", makeBucketSpace())),
+ _bmj(BucketMoveJobV2::create(_calc, _moveHandler, _modifiedHandler, _master, _bucketExecutor, _ready._subDb,
+ _notReady._subDb, _bucketCreateNotifier,_clusterStateHandler, _bucketHandler,
+ _diskMemUsageNotifier, blockableConfig, "test", makeBucketSpace())),
_runner(*_bmj)
{
}
diff --git a/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_jobtest.cpp b/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_jobtest.cpp
index 683709317c2..f592aeab9d2 100644
--- a/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_jobtest.cpp
+++ b/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_jobtest.cpp
@@ -56,9 +56,9 @@ JobTestBase::init(uint32_t allowedLidBloat,
_singleExecutor = std::make_unique<vespalib::ThreadStackExecutor>(1, 0x10000);
_master = std::make_unique<proton::ExecutorThreadService> (*_singleExecutor);
_bucketExecutor = std::make_unique<storage::spi::dummy::DummyBucketExecutor>(4);
- _job = std::make_shared<lidspace::CompactionJob>(compactCfg, _handler, _storer, *_master, *_bucketExecutor,
- _diskMemUsageNotifier, blockableCfg, _clusterStateHandler, nodeRetired,
- document::BucketSpace::placeHolder());
+ _job = lidspace::CompactionJob::create(compactCfg, _handler, _storer, *_master, *_bucketExecutor,
+ _diskMemUsageNotifier, blockableCfg, _clusterStateHandler, nodeRetired,
+ document::BucketSpace::placeHolder());
} else {
_job = std::make_shared<LidSpaceCompactionJob>(compactCfg, _handler, _storer, _frozenHandler, _diskMemUsageNotifier,
blockableCfg, _clusterStateHandler, nodeRetired);
diff --git a/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.h b/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.h
index 871bbcca15a..6a9f28f0a01 100644
--- a/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.h
+++ b/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.h
@@ -78,6 +78,21 @@ private:
IBucketStateChangedNotifier &_bucketStateChangedNotifier;
IDiskMemUsageNotifier &_diskMemUsageNotifier;
+ BucketMoveJobV2(const std::shared_ptr<IBucketStateCalculator> &calc,
+ 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);
+
void startMove(BucketMoverSP mover, size_t maxDocsToMove);
static void prepareMove(std::shared_ptr<BucketMoveJobV2> job, BucketMoverSP mover,
std::vector<MoveKey> keysToMove, IDestructorCallbackSP context);
@@ -97,20 +112,27 @@ private:
void recompute(const bucketdb::Guard & guard);
class StartMove;
public:
- BucketMoveJobV2(const std::shared_ptr<IBucketStateCalculator> &calc,
- 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);
+ static std::shared_ptr<BucketMoveJobV2>
+ create(const std::shared_ptr<IBucketStateCalculator> &calc,
+ 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, moveHandler, modifiedHandler, master, bucketExecutor, ready, notReady,
+ bucketCreateNotifier, clusterStateChangedNotifier, bucketStateChangedNotifier,
+ diskMemUsageNotifier, blockableConfig, docTypeName, bucketSpace));
+ }
~BucketMoveJobV2() override;
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 bbf39e5adf6..12c0e30c61e 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
@@ -39,7 +39,7 @@ private:
std::shared_ptr<IDestructorCallback> onDone);
void onStop() override;
class MoveTask;
-public:
+
CompactionJob(const DocumentDBLidSpaceCompactionConfig &config,
std::shared_ptr<ILidSpaceCompactionHandler> handler,
IOperationStorer &opStorer,
@@ -50,6 +50,23 @@ public:
IClusterStateChangedNotifier &clusterStateChangedNotifier,
bool nodeRetired,
document::BucketSpace bucketSpace);
+public:
+ static std::shared_ptr<CompactionJob>
+ create(const DocumentDBLidSpaceCompactionConfig &config,
+ 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(handler), opStorer, master, bucketExecutor, diskMemUsageNotifier,
+ blockableConfig, clusterStateChangedNotifier, nodeRetired, bucketSpace));
+ }
~CompactionJob() override;
};
diff --git a/searchcore/src/vespa/searchcore/proton/server/maintenance_jobs_injector.cpp b/searchcore/src/vespa/searchcore/proton/server/maintenance_jobs_injector.cpp
index 7cf4412f533..a6f408a984c 100644
--- a/searchcore/src/vespa/searchcore/proton/server/maintenance_jobs_injector.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/maintenance_jobs_injector.cpp
@@ -41,14 +41,10 @@ injectLidSpaceCompactionJobs(MaintenanceController &controller,
for (auto &lidHandler : lscHandlers) {
std::shared_ptr<IMaintenanceJob> job;
if (config.getLidSpaceCompactionConfig().useBucketExecutor()) {
- job = std::make_shared<lidspace::CompactionJob>(
- config.getLidSpaceCompactionConfig(),
- std::move(lidHandler), opStorer, controller.masterThread(), bucketExecutor,
- diskMemUsageNotifier,
- config.getBlockableJobConfig(),
- clusterStateChangedNotifier,
- (calc ? calc->nodeRetired() : false),
- bucketSpace);
+ job = lidspace::CompactionJob::create(config.getLidSpaceCompactionConfig(), std::move(lidHandler), opStorer,
+ controller.masterThread(), bucketExecutor, diskMemUsageNotifier,
+ config.getBlockableJobConfig(), clusterStateChangedNotifier,
+ (calc ? calc->nodeRetired() : false), bucketSpace);
} else {
job = std::make_shared<LidSpaceCompactionJob>(
config.getLidSpaceCompactionConfig(),
@@ -80,19 +76,10 @@ injectBucketMoveJob(MaintenanceController &controller,
{
std::shared_ptr<IMaintenanceJob> bmj;
if (config.getBucketMoveConfig().useBucketExecutor()) {
- bmj = std::make_shared<BucketMoveJobV2>(calc,
- moveHandler,
- bucketModifiedHandler,
- controller.masterThread(),
- bucketExecutor,
- controller.getReadySubDB(),
- controller.getNotReadySubDB(),
- bucketCreateNotifier,
- clusterStateChangedNotifier,
- bucketStateChangedNotifier,
- diskMemUsageNotifier,
- config.getBlockableJobConfig(),
- docTypeName, bucketSpace);
+ bmj = BucketMoveJobV2::create(calc, moveHandler, bucketModifiedHandler, controller.masterThread(),
+ bucketExecutor, controller.getReadySubDB(), controller.getNotReadySubDB(),
+ bucketCreateNotifier, clusterStateChangedNotifier, bucketStateChangedNotifier,
+ diskMemUsageNotifier, config.getBlockableJobConfig(), docTypeName, bucketSpace);
} else {
bmj = std::make_shared<BucketMoveJob>(calc,
moveHandler,