diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-01-27 17:56:18 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-01-27 17:56:18 +0000 |
commit | 62fdd28a4cb7ae221adbaf65f26b14c2401cb538 (patch) | |
tree | d66a382ae681af12845cc965c369cc62ef28df41 /searchcore | |
parent | caef0dfa40dc58d47936a7b44bcdc69b24b43a98 (diff) |
Use shared_ptr to ensure lifetime is sufficient.
Diffstat (limited to 'searchcore')
11 files changed, 49 insertions, 49 deletions
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 ef53a78182c..84579eb9c9e 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 @@ -44,7 +44,7 @@ JobTestBase::init(uint32_t allowedLidBloat, bool nodeRetired, uint32_t maxOutstandingMoveOps) { - _handler = std::make_unique<MyHandler>(maxOutstandingMoveOps != MAX_OUTSTANDING_MOVE_OPS, useBucketDB()); + _handler = std::make_shared<MyHandler>(maxOutstandingMoveOps != MAX_OUTSTANDING_MOVE_OPS, useBucketDB()); DocumentDBLidSpaceCompactionConfig compactCfg(interval, allowedLidBloat, allowedLidBloatFactor, REMOVE_BATCH_BLOCK_RATE, REMOVE_BLOCK_RATE, false, useBucketDB()); BlockableMaintenanceJobConfig blockableCfg(resourceLimitFactor, maxOutstandingMoveOps); @@ -54,11 +54,11 @@ 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_unique<lidspace::CompactionJob>(compactCfg, *_handler, _storer, *_master, *_bucketExecutor, + _job = std::make_unique<lidspace::CompactionJob>(compactCfg, _handler, _storer, *_master, *_bucketExecutor, _diskMemUsageNotifier, blockableCfg, _clusterStateHandler, nodeRetired, document::BucketSpace::placeHolder()); } else { - _job = std::make_unique<LidSpaceCompactionJob>(compactCfg, *_handler, _storer, _frozenHandler, _diskMemUsageNotifier, + _job = std::make_unique<LidSpaceCompactionJob>(compactCfg, _handler, _storer, _frozenHandler, _diskMemUsageNotifier, blockableCfg, _clusterStateHandler, nodeRetired); } } diff --git a/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_jobtest.h b/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_jobtest.h index c81f8c8d387..fd1cf7fb5a8 100644 --- a/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_jobtest.h +++ b/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_jobtest.h @@ -9,7 +9,7 @@ struct JobTestBase : public ::testing::TestWithParam<bool> { std::unique_ptr<storage::spi::BucketExecutor> _bucketExecutor; std::unique_ptr<vespalib::SyncableThreadExecutor> _singleExecutor; std::unique_ptr<searchcorespi::index::IThreadService> _master; - std::unique_ptr<MyHandler> _handler; + std::shared_ptr<MyHandler> _handler; MyStorer _storer; MyFrozenBucketHandler _frozenHandler; test::DiskMemUsageNotifier _diskMemUsageNotifier; diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp index f03b1402187..cd517fe7c60 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp @@ -936,9 +936,9 @@ DocumentDB::injectMaintenanceJobs(const DocumentDBMaintenanceConfig &config, std // Called by executor thread _maintenanceController.killJobs(); _lidSpaceCompactionHandlers.clear(); - _lidSpaceCompactionHandlers.push_back(std::make_unique<LidSpaceCompactionHandler>(_maintenanceController.getReadySubDB(), _docTypeName.getName())); - _lidSpaceCompactionHandlers.push_back(std::make_unique<LidSpaceCompactionHandler>(_maintenanceController.getRemSubDB(), _docTypeName.getName())); - _lidSpaceCompactionHandlers.push_back(std::make_unique<LidSpaceCompactionHandler>(_maintenanceController.getNotReadySubDB(), _docTypeName.getName())); + _lidSpaceCompactionHandlers.push_back(std::make_shared<LidSpaceCompactionHandler>(_maintenanceController.getReadySubDB(), _docTypeName.getName())); + _lidSpaceCompactionHandlers.push_back(std::make_shared<LidSpaceCompactionHandler>(_maintenanceController.getRemSubDB(), _docTypeName.getName())); + _lidSpaceCompactionHandlers.push_back(std::make_shared<LidSpaceCompactionHandler>(_maintenanceController.getNotReadySubDB(), _docTypeName.getName())); MaintenanceJobsInjector::injectJobs(_maintenanceController, config, _bucketExecutor, diff --git a/searchcore/src/vespa/searchcore/proton/server/i_lid_space_compaction_handler.h b/searchcore/src/vespa/searchcore/proton/server/i_lid_space_compaction_handler.h index c337a13e907..223f4dd01d6 100644 --- a/searchcore/src/vespa/searchcore/proton/server/i_lid_space_compaction_handler.h +++ b/searchcore/src/vespa/searchcore/proton/server/i_lid_space_compaction_handler.h @@ -22,8 +22,8 @@ struct IDocumentScanIterator; */ struct ILidSpaceCompactionHandler { - typedef std::unique_ptr<ILidSpaceCompactionHandler> UP; - typedef std::vector<UP> Vector; + typedef std::shared_ptr<ILidSpaceCompactionHandler> SP; + using Vector = std::vector<SP>; virtual ~ILidSpaceCompactionHandler() = default; diff --git a/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job.cpp b/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job.cpp index 7f60bbb3455..e5eebca32eb 100644 --- a/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job.cpp @@ -26,13 +26,13 @@ LidSpaceCompactionJob::scanDocuments(const LidUsageStats &stats) _retryFrozenDocument = true; return true; } else { - auto op = _handler.createMoveOperation(document, stats.getLowestFreeLid()); + auto op = _handler->createMoveOperation(document, stats.getLowestFreeLid()); if ( ! op ) { return false; } vespalib::IDestructorCallback::SP context = _moveOpsLimiter->beginOperation(); _opStorer.appendOperation(*op, context); - _handler.handleMove(*op, std::move(context)); + _handler->handleMove(*op, std::move(context)); if (isBlocked(BlockedReason::OUTSTANDING_OPS)) { return true; } @@ -43,14 +43,14 @@ LidSpaceCompactionJob::scanDocuments(const LidUsageStats &stats) } LidSpaceCompactionJob::LidSpaceCompactionJob(const DocumentDBLidSpaceCompactionConfig &config, - ILidSpaceCompactionHandler &handler, + std::shared_ptr<ILidSpaceCompactionHandler> handler, IOperationStorer &opStorer, IFrozenBucketHandler &frozenHandler, IDiskMemUsageNotifier &diskMemUsageNotifier, const BlockableMaintenanceJobConfig &blockableConfig, IClusterStateChangedNotifier &clusterStateChangedNotifier, bool nodeRetired) - : LidSpaceCompactionJobBase(config, handler, opStorer, diskMemUsageNotifier, + : LidSpaceCompactionJobBase(config, std::move(handler), opStorer, diskMemUsageNotifier, blockableConfig, clusterStateChangedNotifier, nodeRetired), _frozenHandler(frozenHandler), _retryFrozenDocument(false) diff --git a/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job.h b/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job.h index 09539bdac6c..4116a4cedf0 100644 --- a/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job.h +++ b/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job.h @@ -20,7 +20,7 @@ private: public: LidSpaceCompactionJob(const DocumentDBLidSpaceCompactionConfig &config, - ILidSpaceCompactionHandler &handler, + std::shared_ptr<ILidSpaceCompactionHandler> handler, IOperationStorer &opStorer, IFrozenBucketHandler &frozenHandler, IDiskMemUsageNotifier &diskMemUsageNotifier, diff --git a/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_base.cpp b/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_base.cpp index 671a9c327d0..c108b936a72 100644 --- a/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_base.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_base.cpp @@ -47,8 +47,8 @@ bool LidSpaceCompactionJobBase::scanDocumentsPost() { if (!_scanItr->valid()) { - if (shouldRestartScanDocuments(_handler.getLidStatus())) { - _scanItr = _handler.getIterator(); + if (shouldRestartScanDocuments(_handler->getLidStatus())) { + _scanItr = _handler->getIterator(); } else { _scanItr = IDocumentScanIterator::UP(); _shouldCompactLidSpace = true; @@ -61,12 +61,12 @@ void LidSpaceCompactionJobBase::compactLidSpace(const LidUsageStats &stats) { uint32_t wantedLidLimit = stats.getHighestUsedLid() + 1; - CompactLidSpaceOperation op(_handler.getSubDbId(), wantedLidLimit); + CompactLidSpaceOperation op(_handler->getSubDbId(), wantedLidLimit); vespalib::Gate gate; auto commit_result = _opStorer.appendAndCommitOperation(op, std::make_shared<vespalib::GateCallback>(gate)); gate.await(); - _handler.handleCompactLidSpace(op, std::make_shared<vespalib::KeepAlive<decltype(commit_result)>>(std::move(commit_result))); - EventLogger::lidSpaceCompactionComplete(_handler.getName(), wantedLidLimit); + _handler->handleCompactLidSpace(op, std::make_shared<vespalib::KeepAlive<decltype(commit_result)>>(std::move(commit_result))); + EventLogger::lidSpaceCompactionComplete(_handler->getName(), wantedLidLimit); _shouldCompactLidSpace = false; } @@ -83,16 +83,16 @@ LidSpaceCompactionJobBase::remove_is_ongoing() const } LidSpaceCompactionJobBase::LidSpaceCompactionJobBase(const DocumentDBLidSpaceCompactionConfig &config, - ILidSpaceCompactionHandler &handler, - IOperationStorer &opStorer, - IDiskMemUsageNotifier &diskMemUsageNotifier, - const BlockableMaintenanceJobConfig &blockableConfig, - IClusterStateChangedNotifier &clusterStateChangedNotifier, - bool nodeRetired) - : BlockableMaintenanceJob("lid_space_compaction." + handler.getName(), - config.getDelay(), config.getInterval(), blockableConfig), + std::shared_ptr<ILidSpaceCompactionHandler> handler, + IOperationStorer &opStorer, + IDiskMemUsageNotifier &diskMemUsageNotifier, + const BlockableMaintenanceJobConfig &blockableConfig, + IClusterStateChangedNotifier &clusterStateChangedNotifier, + bool nodeRetired) + : BlockableMaintenanceJob("lid_space_compaction." + handler->getName(), + config.getDelay(), config.getInterval(), blockableConfig), _cfg(config), - _handler(handler), + _handler(std::move(handler)), _opStorer(opStorer), _scanItr(), _diskMemUsageNotifier(diskMemUsageNotifier), @@ -107,7 +107,7 @@ LidSpaceCompactionJobBase::LidSpaceCompactionJobBase(const DocumentDBLidSpaceCom if (nodeRetired) { setBlocked(BlockedReason::CLUSTER_STATE); } - handler.set_operation_listener(_ops_rate_tracker); + _handler->set_operation_listener(_ops_rate_tracker); } LidSpaceCompactionJobBase::~LidSpaceCompactionJobBase() @@ -122,24 +122,24 @@ LidSpaceCompactionJobBase::run() if (isBlocked()) { return true; // indicate work is done since no work can be done } - LidUsageStats stats = _handler.getLidStatus(); + LidUsageStats stats = _handler->getLidStatus(); if (remove_batch_is_ongoing()) { // Note that we don't set the job as blocked as the decision to un-block it is not driven externally. LOG(info, "%s: Lid space compaction is disabled while remove batch (delete buckets) is ongoing", - _handler.getName().c_str()); + _handler->getName().c_str()); _is_disabled = true; return true; } if (remove_is_ongoing()) { // Note that we don't set the job as blocked as the decision to un-block it is not driven externally. LOG(info, "%s: Lid space compaction is disabled while remove operations are ongoing", - _handler.getName().c_str()); + _handler->getName().c_str()); _is_disabled = true; return true; } if (_is_disabled) { LOG(info, "%s: Lid space compaction is re-enabled as remove operations are no longer ongoing", - _handler.getName().c_str()); + _handler->getName().c_str()); _is_disabled = false; } if (_scanItr) { @@ -148,7 +148,7 @@ LidSpaceCompactionJobBase::run() compactLidSpace(stats); } else if (hasTooMuchLidBloat(stats)) { assert(!_scanItr); - _scanItr = _handler.getIterator(); + _scanItr = _handler->getIterator(); return scanDocuments(stats); } return true; @@ -168,11 +168,11 @@ LidSpaceCompactionJobBase::notifyClusterStateChanged(const IBucketStateCalculato bool nodeRetired = newCalc->nodeRetired(); if (!nodeRetired) { if (isBlocked(BlockedReason::CLUSTER_STATE)) { - LOG(info, "%s: Lid space compaction is un-blocked as node is no longer retired", _handler.getName().c_str()); + LOG(info, "%s: Lid space compaction is un-blocked as node is no longer retired", _handler->getName().c_str()); unBlock(BlockedReason::CLUSTER_STATE); } } else { - LOG(info, "%s: Lid space compaction is blocked as node is retired", _handler.getName().c_str()); + LOG(info, "%s: Lid space compaction is blocked as node is retired", _handler->getName().c_str()); setBlocked(BlockedReason::CLUSTER_STATE); } } diff --git a/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_base.h b/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_base.h index 86e20b4d645..20cede10c8d 100644 --- a/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_base.h +++ b/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_base.h @@ -33,9 +33,9 @@ class LidSpaceCompactionJobBase : public BlockableMaintenanceJob, private: const DocumentDBLidSpaceCompactionConfig _cfg; protected: - ILidSpaceCompactionHandler &_handler; - IOperationStorer &_opStorer; - std::unique_ptr<IDocumentScanIterator> _scanItr; + std::shared_ptr<ILidSpaceCompactionHandler> _handler; + IOperationStorer &_opStorer; + std::unique_ptr<IDocumentScanIterator> _scanItr; private: IDiskMemUsageNotifier &_diskMemUsageNotifier; IClusterStateChangedNotifier &_clusterStateChangedNotifier; @@ -55,7 +55,7 @@ protected: bool scanDocumentsPost(); public: LidSpaceCompactionJobBase(const DocumentDBLidSpaceCompactionConfig &config, - ILidSpaceCompactionHandler &handler, + std::shared_ptr<ILidSpaceCompactionHandler> handler, IOperationStorer &opStorer, IDiskMemUsageNotifier &diskMemUsageNotifier, const BlockableMaintenanceJobConfig &blockableConfig, 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 58ecca9f8ce..037ede08e03 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 @@ -46,27 +46,27 @@ void CompactionJob::moveDocument(const search::DocumentMetaData & meta, std::shared_ptr<IDestructorCallback> context) { // The real lid must be sampled in the master thread. //TODO remove target lid from createMoveOperation interface - auto op = _handler.createMoveOperation(meta, 0); + auto op = _handler->createMoveOperation(meta, 0); if (!op || !op->getDocument()) return; // Early detection and force md5 calculation outside of master thread if (meta.gid != op->getDocument()->getId().getGlobalId()) return; _master.execute(makeLambdaTask([this, metaThen=meta, moveOp=std::move(op), onDone=std::move(context)]() { - search::DocumentMetaData metaNow = _handler.getMetaData(metaThen.lid); + search::DocumentMetaData metaNow = _handler->getMetaData(metaThen.lid); if (metaNow.lid != metaThen.lid) return; if (metaNow.bucketId != metaThen.bucketId) return; if (metaNow.gid != moveOp->getDocument()->getId().getGlobalId()) return; - uint32_t lowestLid = _handler.getLidStatus().getLowestFreeLid(); + uint32_t lowestLid = _handler->getLidStatus().getLowestFreeLid(); if (lowestLid >= metaNow.lid) return; moveOp->setTargetLid(lowestLid); _opStorer.appendOperation(*moveOp, onDone); - _handler.handleMove(*moveOp, std::move(onDone)); + _handler->handleMove(*moveOp, std::move(onDone)); })); } CompactionJob::CompactionJob(const DocumentDBLidSpaceCompactionConfig &config, - ILidSpaceCompactionHandler &handler, + std::shared_ptr<ILidSpaceCompactionHandler> handler, IOperationStorer &opStorer, IThreadService & master, BucketExecutor & bucketExecutor, @@ -75,7 +75,7 @@ CompactionJob::CompactionJob(const DocumentDBLidSpaceCompactionConfig &config, IClusterStateChangedNotifier &clusterStateChangedNotifier, bool nodeRetired, document::BucketSpace bucketSpace) - : LidSpaceCompactionJobBase(config, handler, opStorer, diskMemUsageNotifier, + : LidSpaceCompactionJobBase(config, std::move(handler), opStorer, diskMemUsageNotifier, blockableConfig, clusterStateChangedNotifier, nodeRetired), _master(master), _bucketExecutor(bucketExecutor), 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 6c11961e137..b925b5ecd59 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 @@ -34,7 +34,7 @@ private: public: CompactionJob(const DocumentDBLidSpaceCompactionConfig &config, - ILidSpaceCompactionHandler &handler, + std::shared_ptr<ILidSpaceCompactionHandler> handler, IOperationStorer &opStorer, IThreadService & master, BucketExecutor & 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 c05c25990a6..dc9b02c9e5f 100644 --- a/searchcore/src/vespa/searchcore/proton/server/maintenance_jobs_injector.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/maintenance_jobs_injector.cpp @@ -42,7 +42,7 @@ injectLidSpaceCompactionJobs(MaintenanceController &controller, if (config.getLidSpaceCompactionConfig().useBucketExecutor()) { job = std::make_unique<lidspace::CompactionJob>( config.getLidSpaceCompactionConfig(), - *lidHandler, opStorer, controller.masterThread(), bucketExecutor, + std::move(lidHandler), opStorer, controller.masterThread(), bucketExecutor, diskMemUsageNotifier, config.getBlockableJobConfig(), clusterStateChangedNotifier, @@ -51,7 +51,7 @@ injectLidSpaceCompactionJobs(MaintenanceController &controller, } else { job = std::make_unique<LidSpaceCompactionJob>( config.getLidSpaceCompactionConfig(), - *lidHandler, opStorer, fbHandler, + std::move(lidHandler), opStorer, fbHandler, diskMemUsageNotifier, config.getBlockableJobConfig(), clusterStateChangedNotifier, |