diff options
8 files changed, 22 insertions, 18 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.cpp b/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.cpp index 24a4d6d5dee..fc2eeaab661 100644 --- a/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.cpp @@ -73,6 +73,7 @@ BucketMoveJobV2::BucketMoveJobV2(const std::shared_ptr<IBucketStateCalculator> & bucketdb::IBucketCreateListener(), IBucketStateChangedHandler(), IDiskMemUsageListener(), + std::enable_shared_from_this<BucketMoveJobV2>(), _calc(calc), _moveHandler(moveHandler), _modifiedHandler(modifiedHandler), diff --git a/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.h b/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.h index 620b76ac81c..eba8fd9a62c 100644 --- a/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.h +++ b/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.h @@ -37,7 +37,8 @@ class BucketMoveJobV2 : public BlockableMaintenanceJob, public IClusterStateChangedHandler, public bucketdb::IBucketCreateListener, public IBucketStateChangedHandler, - public IDiskMemUsageListener + public IDiskMemUsageListener, + public std::enable_shared_from_this<BucketMoveJobV2> { private: using BucketExecutor = storage::spi::BucketExecutor; diff --git a/searchcore/src/vespa/searchcore/proton/server/i_maintenance_job.h b/searchcore/src/vespa/searchcore/proton/server/i_maintenance_job.h index d0175d69e71..3972072b41d 100644 --- a/searchcore/src/vespa/searchcore/proton/server/i_maintenance_job.h +++ b/searchcore/src/vespa/searchcore/proton/server/i_maintenance_job.h @@ -23,7 +23,8 @@ private: const vespalib::duration _interval; public: - typedef std::unique_ptr<IMaintenanceJob> UP; + using UP = std::unique_ptr<IMaintenanceJob>; + using SP = std::shared_ptr<IMaintenanceJob>; IMaintenanceJob(const vespalib::string &name, vespalib::duration delay, diff --git a/searchcore/src/vespa/searchcore/proton/server/job_tracked_maintenance_job.cpp b/searchcore/src/vespa/searchcore/proton/server/job_tracked_maintenance_job.cpp index 59324cc9fe2..aa078376ece 100644 --- a/searchcore/src/vespa/searchcore/proton/server/job_tracked_maintenance_job.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/job_tracked_maintenance_job.cpp @@ -4,10 +4,10 @@ namespace proton { -JobTrackedMaintenanceJob::JobTrackedMaintenanceJob(const IJobTracker::SP &tracker, - IMaintenanceJob::UP job) +JobTrackedMaintenanceJob::JobTrackedMaintenanceJob(IJobTracker::SP tracker, + IMaintenanceJob::SP job) : IMaintenanceJob(job->getName(), job->getDelay(), job->getInterval()), - _tracker(tracker), + _tracker(std::move(tracker)), _job(std::move(job)), _running(false) { diff --git a/searchcore/src/vespa/searchcore/proton/server/job_tracked_maintenance_job.h b/searchcore/src/vespa/searchcore/proton/server/job_tracked_maintenance_job.h index 9acdee557fd..0e1b2b00ce5 100644 --- a/searchcore/src/vespa/searchcore/proton/server/job_tracked_maintenance_job.h +++ b/searchcore/src/vespa/searchcore/proton/server/job_tracked_maintenance_job.h @@ -13,11 +13,11 @@ class JobTrackedMaintenanceJob : public IMaintenanceJob { private: IJobTracker::SP _tracker; - IMaintenanceJob::UP _job; + IMaintenanceJob::SP _job; bool _running; public: - JobTrackedMaintenanceJob(const IJobTracker::SP &tracker, IMaintenanceJob::UP job); + JobTrackedMaintenanceJob(IJobTracker::SP tracker, IMaintenanceJob::SP job); ~JobTrackedMaintenanceJob() override; bool isBlocked() const override { return _job->isBlocked(); } 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 042cd70f7e0..70a63a4a4eb 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 @@ -121,6 +121,7 @@ CompactionJob::CompactionJob(const DocumentDBLidSpaceCompactionConfig &config, document::BucketSpace bucketSpace) : LidSpaceCompactionJobBase(config, std::move(handler), opStorer, diskMemUsageNotifier, blockableConfig, clusterStateChangedNotifier, nodeRetired), + std::enable_shared_from_this<CompactionJob>(), _master(master), _bucketExecutor(bucketExecutor), _bucketSpace(bucketSpace), 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 b73f971f8ee..21445de8d85 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 @@ -21,7 +21,7 @@ namespace proton::lidspace { * Moves documents from higher lids to lower lids. It uses a BucketExecutor that ensures that the bucket * is locked for changes while the document is moved. */ -class CompactionJob : public LidSpaceCompactionJobBase +class CompactionJob : public LidSpaceCompactionJobBase, public std::enable_shared_from_this<CompactionJob> { private: using BucketExecutor = storage::spi::BucketExecutor; 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 3d8348f3591..e31adc45888 100644 --- a/searchcore/src/vespa/searchcore/proton/server/maintenance_jobs_injector.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/maintenance_jobs_injector.cpp @@ -20,9 +20,9 @@ namespace proton { namespace { IMaintenanceJob::UP -trackJob(const IJobTracker::SP &tracker, IMaintenanceJob::UP job) +trackJob(IJobTracker::SP tracker, std::shared_ptr<IMaintenanceJob> job) { - return std::make_unique<JobTrackedMaintenanceJob>(tracker, std::move(job)); + return std::make_unique<JobTrackedMaintenanceJob>(std::move(tracker), std::move(job)); } void @@ -32,16 +32,16 @@ injectLidSpaceCompactionJobs(MaintenanceController &controller, ILidSpaceCompactionHandler::Vector lscHandlers, IOperationStorer &opStorer, IFrozenBucketHandler &fbHandler, - const IJobTracker::SP &tracker, + IJobTracker::SP tracker, IDiskMemUsageNotifier &diskMemUsageNotifier, IClusterStateChangedNotifier &clusterStateChangedNotifier, const std::shared_ptr<IBucketStateCalculator> &calc, document::BucketSpace bucketSpace) { for (auto &lidHandler : lscHandlers) { - std::unique_ptr<IMaintenanceJob> job; + std::shared_ptr<IMaintenanceJob> job; if (config.getLidSpaceCompactionConfig().useBucketExecutor()) { - job = std::make_unique<lidspace::CompactionJob>( + job = std::make_shared<lidspace::CompactionJob>( config.getLidSpaceCompactionConfig(), std::move(lidHandler), opStorer, controller.masterThread(), bucketExecutor, diskMemUsageNotifier, @@ -50,7 +50,7 @@ injectLidSpaceCompactionJobs(MaintenanceController &controller, (calc ? calc->nodeRetired() : false), bucketSpace); } else { - job = std::make_unique<LidSpaceCompactionJob>( + job = std::make_shared<LidSpaceCompactionJob>( config.getLidSpaceCompactionConfig(), std::move(lidHandler), opStorer, fbHandler, diskMemUsageNotifier, @@ -58,7 +58,7 @@ injectLidSpaceCompactionJobs(MaintenanceController &controller, clusterStateChangedNotifier, (calc ? calc->nodeRetired() : false)); } - controller.registerJobInMasterThread(trackJob(tracker, std::move(job))); + controller.registerJobInMasterThread(trackJob(std::move(tracker), std::move(job))); } } @@ -78,9 +78,9 @@ injectBucketMoveJob(MaintenanceController &controller, DocumentDBJobTrackers &jobTrackers, IDiskMemUsageNotifier &diskMemUsageNotifier) { - std::unique_ptr<IMaintenanceJob> bmj; + std::shared_ptr<IMaintenanceJob> bmj; if (config.getBucketMoveConfig().useBucketExecutor()) { - bmj = std::make_unique<BucketMoveJobV2>(calc, + bmj = std::make_shared<BucketMoveJobV2>(calc, moveHandler, bucketModifiedHandler, controller.masterThread(), @@ -94,7 +94,7 @@ injectBucketMoveJob(MaintenanceController &controller, config.getBlockableJobConfig(), docTypeName, bucketSpace); } else { - bmj = std::make_unique<BucketMoveJob>(calc, + bmj = std::make_shared<BucketMoveJob>(calc, moveHandler, bucketModifiedHandler, controller.getReadySubDB(), |