diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-04-10 18:22:03 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-10 18:22:03 +0200 |
commit | e92c40caa99348919c25d7ae9938401e538bb827 (patch) | |
tree | 930ad8e3ce537df12f17209df0472b16d9236c08 | |
parent | 8ac23b7631bf41a61daf703bcc2a1edeaf4ff58b (diff) | |
parent | d21c7941c94b6820a9f162bbc770d270ac9da628 (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…
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 ¬Ready, + 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 ¬Ready, - 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 ¬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, 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, |