From d21c7941c94b6820a9f162bbc770d270ac9da628 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Sat, 10 Apr 2021 12:47:37 +0000 Subject: Force that lid space compation job and bucket move job are constructed as shared_ptr since that is required for usage. --- .../documentbucketmover_v2_test.cpp | 7 ++- .../lid_space_compaction/lid_space_jobtest.cpp | 6 +-- .../searchcore/proton/server/bucketmovejobv2.h | 50 ++++++++++++++++------ .../proton/server/lid_space_compaction_job_take2.h | 19 +++++++- .../proton/server/maintenance_jobs_injector.cpp | 29 ++++--------- 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(_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(1, 0x10000); _master = std::make_unique (*_singleExecutor); _bucketExecutor = std::make_unique(4); - _job = std::make_shared(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(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 &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 job, BucketMoverSP mover, std::vector keysToMove, IDestructorCallbackSP context); @@ -97,20 +112,27 @@ private: void recompute(const bucketdb::Guard & guard); class StartMove; public: - BucketMoveJobV2(const std::shared_ptr &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 + create(const std::shared_ptr &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( + 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 onDone); void onStop() override; class MoveTask; -public: + CompactionJob(const DocumentDBLidSpaceCompactionConfig &config, std::shared_ptr handler, IOperationStorer &opStorer, @@ -50,6 +50,23 @@ public: IClusterStateChangedNotifier &clusterStateChangedNotifier, bool nodeRetired, document::BucketSpace bucketSpace); +public: + static std::shared_ptr + create(const DocumentDBLidSpaceCompactionConfig &config, + 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(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 job; if (config.getLidSpaceCompactionConfig().useBucketExecutor()) { - job = std::make_shared( - 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( config.getLidSpaceCompactionConfig(), @@ -80,19 +76,10 @@ injectBucketMoveJob(MaintenanceController &controller, { std::shared_ptr bmj; if (config.getBucketMoveConfig().useBucketExecutor()) { - bmj = std::make_shared(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(calc, moveHandler, -- cgit v1.2.3