summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-01-27 17:56:18 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-01-27 17:56:18 +0000
commit62fdd28a4cb7ae221adbaf65f26b14c2401cb538 (patch)
treed66a382ae681af12845cc965c369cc62ef28df41
parentcaef0dfa40dc58d47936a7b44bcdc69b24b43a98 (diff)
Use shared_ptr to ensure lifetime is sufficient.
-rw-r--r--searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_jobtest.cpp6
-rw-r--r--searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_jobtest.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb.cpp6
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/i_lid_space_compaction_handler.h4
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job.cpp8
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_base.cpp44
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_base.h8
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.cpp12
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/maintenance_jobs_injector.cpp4
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,