summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-01-23 13:40:13 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-01-23 13:40:13 +0000
commit5d40e82b1c38ecdf0cb2ab54521530e152e33659 (patch)
tree25b316a870f8ae83c1f4b941b31a61fd0f43a3e7 /searchcore
parent3c8533f0ee5cc3abff0cc1bfc88fd00df0624921 (diff)
Various readability and code cleanup. closure -> lambda
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp1
-rw-r--r--searchcore/src/tests/proton/documentdb/job_tracked_maintenance_job/job_tracked_maintenance_job_test.cpp10
-rw-r--r--searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_jobtest.cpp29
-rw-r--r--searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp83
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/flushableattribute.cpp3
-rw-r--r--searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoreflushtarget.cpp3
-rw-r--r--searchcore/src/vespa/searchcore/proton/documentmetastore/lidreusedelayer.cpp3
-rw-r--r--searchcore/src/vespa/searchcore/proton/feedoperation/documentoperation.cpp4
-rw-r--r--searchcore/src/vespa/searchcore/proton/feedoperation/documentoperation.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.h5
10 files changed, 71 insertions, 72 deletions
diff --git a/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp b/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp
index be730a24b87..1127191a1a2 100644
--- a/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp
@@ -60,7 +60,6 @@ using storage::spi::Timestamp;
using storage::spi::UpdateResult;
using vespalib::ThreadStackExecutor;
using vespalib::ThreadStackExecutorBase;
-using vespalib::makeClosure;
using vespalib::eval::SimpleValue;
using vespalib::eval::TensorSpec;
using vespalib::eval::Value;
diff --git a/searchcore/src/tests/proton/documentdb/job_tracked_maintenance_job/job_tracked_maintenance_job_test.cpp b/searchcore/src/tests/proton/documentdb/job_tracked_maintenance_job/job_tracked_maintenance_job_test.cpp
index 3f39c872ea7..2bde5761aea 100644
--- a/searchcore/src/tests/proton/documentdb/job_tracked_maintenance_job/job_tracked_maintenance_job_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/job_tracked_maintenance_job/job_tracked_maintenance_job_test.cpp
@@ -1,15 +1,17 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/log/log.h>
-LOG_SETUP("job_tracked_maintenance_test");
+
#include <vespa/searchcore/proton/server/i_blockable_maintenance_job.h>
#include <vespa/searchcore/proton/server/job_tracked_maintenance_job.h>
#include <vespa/searchcore/proton/test/simple_job_tracker.h>
#include <vespa/vespalib/testkit/testapp.h>
-#include <vespa/vespalib/util/closuretask.h>
+#include <vespa/vespalib/util/lambdatask.h>
#include <vespa/vespalib/util/gate.h>
#include <vespa/vespalib/util/threadstackexecutor.h>
+#include <vespa/log/log.h>
+LOG_SETUP("job_tracked_maintenance_test");
+
using namespace proton;
using namespace vespalib;
using test::SimpleJobTracker;
@@ -79,7 +81,7 @@ struct Fixture
EXPECT_EQUAL(endedGateCount, _tracker->_ended.getCount());
}
void runJobAndWait(size_t runIdx, size_t startedGateCount, size_t endedGateCount) {
- _exec.execute(makeTask(makeClosure(this, &Fixture::runJob)));
+ _exec.execute(vespalib::makeLambdaTask([this]() { runJob(); }));
_tracker->_started.await(5000);
assertTracker(startedGateCount, endedGateCount);
_myJob->_runGates[runIdx]->countDown();
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 bac793fc6e5..926530c228e 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
@@ -71,10 +71,12 @@ JobTestBase::addStats(uint32_t docIdLimit, const LidVector &usedLids, const LidP
{
return addMultiStats(docIdLimit, {usedLids}, usedFreePairs);
}
+
JobTestBase &
JobTestBase::addMultiStats(uint32_t docIdLimit,
- const std::vector<LidVector> &usedLidsVector,
- const LidPairVector &usedFreePairs) {
+ const std::vector<LidVector> &usedLidsVector,
+ const LidPairVector &usedFreePairs)
+{
uint32_t usedLids = usedLidsVector[0].size();
for (auto pair : usedFreePairs) {
uint32_t highestUsedLid = pair.first;
@@ -84,34 +86,37 @@ JobTestBase::addMultiStats(uint32_t docIdLimit,
_handler->_lids = usedLidsVector;
return *this;
}
+
JobTestBase &
-JobTestBase::addStats(uint32_t docIdLimit,
- uint32_t numDocs,
- uint32_t lowestFreeLid,
- uint32_t highestUsedLid) {
+JobTestBase::addStats(uint32_t docIdLimit, uint32_t numDocs, uint32_t lowestFreeLid, uint32_t highestUsedLid) {
_handler->_stats.emplace_back(docIdLimit, numDocs, lowestFreeLid, highestUsedLid);
return *this;
}
+
bool
JobTestBase::run() const {
return _job->run();
}
+
JobTestBase &
JobTestBase::endScan() {
EXPECT_FALSE(run());
return *this;
}
+
JobTestBase &
JobTestBase::compact() {
EXPECT_TRUE(run());
return *this;
}
+
void
JobTestBase::notifyNodeRetired(bool nodeRetired) {
test::BucketStateCalculator::SP calc = std::make_shared<test::BucketStateCalculator>();
calc->setNodeRetired(nodeRetired);
_clusterStateHandler.notifyClusterStateChanged(calc);
}
+
void
JobTestBase::assertJobContext(uint32_t moveToLid,
uint32_t moveFromLid,
@@ -127,10 +132,12 @@ JobTestBase::assertJobContext(uint32_t moveToLid,
EXPECT_EQ(wantedLidLimit, _handler->_wantedLidLimit);
EXPECT_EQ(compactStoreCnt, _storer._compactCnt);
}
+
void
JobTestBase::assertNoWorkDone() const {
assertJobContext(0, 0, 0, 0, 0);
}
+
JobTestBase &
JobTestBase::setupOneDocumentToCompact() {
addStats(10, {1,3,4,5,6,9},
@@ -138,12 +145,14 @@ JobTestBase::setupOneDocumentToCompact() {
{6,7}}); // no documents to move
return *this;
}
+
void
JobTestBase::assertOneDocumentCompacted() {
assertJobContext(2, 9, 1, 0, 0);
endScan().compact();
assertJobContext(2, 9, 1, 7, 1);
}
+
JobTestBase &
JobTestBase::setupThreeDocumentsToCompact() {
addStats(10, {1,5,6,9,8,7},
@@ -162,7 +171,9 @@ JobTest::JobTest()
: JobTestBase(),
_jobRunner(std::make_unique<MyDirectJobRunner>(*_job))
{}
+
JobTest::~JobTest() = default;
+
void
JobTest::init(uint32_t allowedLidBloat,
double allowedLidBloatFactor,
@@ -174,10 +185,12 @@ JobTest::init(uint32_t allowedLidBloat,
JobTestBase::init(allowedLidBloat, allowedLidBloatFactor, resourceLimitFactor, interval, nodeRetired, maxOutstandingMoveOps);
_jobRunner = std::make_unique<MyDirectJobRunner>(*_job);
}
+
void
JobTest::init_with_interval(vespalib::duration interval) {
init(ALLOWED_LID_BLOAT, ALLOWED_LID_BLOAT_FACTOR, RESOURCE_LIMIT_FACTOR, interval);
}
+
void
JobTest::init_with_node_retired(bool retired) {
init(ALLOWED_LID_BLOAT, ALLOWED_LID_BLOAT_FACTOR, RESOURCE_LIMIT_FACTOR, JOB_DELAY, retired);
@@ -219,6 +232,7 @@ MaxOutstandingJobTest::MaxOutstandingJobTest()
: JobTest(),
runner()
{}
+
MaxOutstandingJobTest::~MaxOutstandingJobTest() = default;
void
@@ -227,17 +241,20 @@ MaxOutstandingJobTest::init(uint32_t maxOutstandingMoveOps) {
RESOURCE_LIMIT_FACTOR, JOB_DELAY, false, maxOutstandingMoveOps);
runner = std::make_unique<MyCountJobRunner>(*_job);
}
+
void
MaxOutstandingJobTest::assertRunToBlocked() {
EXPECT_TRUE(run()); // job becomes blocked as max outstanding limit is reached
EXPECT_TRUE(_job->isBlocked());
EXPECT_TRUE(_job->isBlocked(BlockedReason::OUTSTANDING_OPS));
}
+
void
MaxOutstandingJobTest::assertRunToNotBlocked() {
EXPECT_FALSE(run());
EXPECT_FALSE(_job->isBlocked());
}
+
void
MaxOutstandingJobTest::unblockJob(uint32_t expRunnerCnt) {
_handler->clearMoveDoneContexts(); // unblocks job and try to execute it via runner
diff --git a/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp b/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp
index 8ed382087d8..d6fddf16659 100644
--- a/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp
@@ -1,9 +1,6 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/document/repo/documenttyperepo.h>
-#include <vespa/document/test/make_bucket_space.h>
-#include <vespa/fastos/thread.h>
-#include <vespa/config-attributes.h>
+
#include <vespa/searchcore/proton/attribute/attribute_config_inspector.h>
#include <vespa/searchcore/proton/attribute/attribute_usage_filter.h>
#include <vespa/searchcore/proton/attribute/i_attribute_manager.h>
@@ -31,6 +28,10 @@
#include <vespa/searchcore/proton/test/disk_mem_usage_notifier.h>
#include <vespa/searchcore/proton/test/mock_attribute_manager.h>
#include <vespa/searchcore/proton/test/test.h>
+#include <vespa/persistence/dummyimpl/dummy_bucket_executor.h>
+#include <vespa/document/repo/documenttyperepo.h>
+#include <vespa/document/test/make_bucket_space.h>
+#include <vespa/config-attributes.h>
#include <vespa/vespalib/util/destructor_callbacks.h>
#include <vespa/searchlib/common/idocumentmetastore.h>
#include <vespa/searchlib/index/docbuilder.h>
@@ -39,6 +40,7 @@
#include <vespa/vespalib/util/closuretask.h>
#include <vespa/vespalib/util/gate.h>
#include <vespa/vespalib/util/threadstackexecutor.h>
+#include <vespa/fastos/thread.h>
#include <unistd.h>
#include <vespa/log/log.h>
@@ -64,6 +66,7 @@ using vespalib::Slime;
using vespalib::makeClosure;
using vespalib::makeTask;
using vespa::config::search::AttributesConfigBuilder;
+using storage::spi::dummy::DummyBucketExecutor;
using BlockedReason = IBlockableMaintenanceJob::BlockedReason;
@@ -357,31 +360,32 @@ struct MockLidSpaceCompactionHandler : public ILidSpaceCompactionHandler
class MaintenanceControllerFixture
{
public:
- MyExecutor _executor;
- MyExecutor _genericExecutor;
- ExecutorThreadService _threadService;
- DocTypeName _docTypeName;
- test::UserDocumentsBuilder _builder;
- std::shared_ptr<BucketDBOwner> _bucketDB;
- test::BucketStateCalculator::SP _calc;
- test::ClusterStateHandler _clusterStateHandler;
- test::BucketHandler _bucketHandler;
- MyBucketModifiedHandler _bmc;
- MyDocumentSubDB _ready;
- MyDocumentSubDB _removed;
- MyDocumentSubDB _notReady;
- MySessionCachePruner _gsp;
- MyFeedHandler _fh;
+ MyExecutor _executor;
+ MyExecutor _genericExecutor;
+ ExecutorThreadService _threadService;
+ DummyBucketExecutor _bucketExecutor;
+ DocTypeName _docTypeName;
+ test::UserDocumentsBuilder _builder;
+ std::shared_ptr<BucketDBOwner> _bucketDB;
+ test::BucketStateCalculator::SP _calc;
+ test::ClusterStateHandler _clusterStateHandler;
+ test::BucketHandler _bucketHandler;
+ MyBucketModifiedHandler _bmc;
+ MyDocumentSubDB _ready;
+ MyDocumentSubDB _removed;
+ MyDocumentSubDB _notReady;
+ MySessionCachePruner _gsp;
+ MyFeedHandler _fh;
ILidSpaceCompactionHandler::Vector _lscHandlers;
- DocumentDBMaintenanceConfig::SP _mcCfg;
- bool _injectDefaultJobs;
- DocumentDBJobTrackers _jobTrackers;
+ DocumentDBMaintenanceConfig::SP _mcCfg;
+ bool _injectDefaultJobs;
+ DocumentDBJobTrackers _jobTrackers;
std::shared_ptr<proton::IAttributeManager> _readyAttributeManager;
std::shared_ptr<proton::IAttributeManager> _notReadyAttributeManager;
- AttributeUsageFilter _attributeUsageFilter;
- test::DiskMemUsageNotifier _diskMemUsageNotifier;
- BucketCreateNotifier _bucketCreateNotifier;
- MaintenanceController _mc;
+ AttributeUsageFilter _attributeUsageFilter;
+ test::DiskMemUsageNotifier _diskMemUsageNotifier;
+ BucketCreateNotifier _bucketCreateNotifier;
+ MaintenanceController _mc;
MaintenanceControllerFixture();
@@ -779,6 +783,7 @@ MaintenanceControllerFixture::MaintenanceControllerFixture()
: _executor(),
_genericExecutor(),
_threadService(_executor),
+ _bucketExecutor(2),
_docTypeName("searchdocument"), // must match document builder
_builder(),
_bucketDB(std::make_shared<BucketDBOwner>()),
@@ -787,10 +792,8 @@ MaintenanceControllerFixture::MaintenanceControllerFixture()
_bucketHandler(),
_bmc(),
_ready(0u, SubDbType::READY, _builder.getRepo(), _bucketDB, _docTypeName),
- _removed(1u, SubDbType::REMOVED, _builder.getRepo(), _bucketDB,
- _docTypeName),
- _notReady(2u, SubDbType::NOTREADY, _builder.getRepo(), _bucketDB,
- _docTypeName),
+ _removed(1u, SubDbType::REMOVED, _builder.getRepo(), _bucketDB, _docTypeName),
+ _notReady(2u, SubDbType::NOTREADY, _builder.getRepo(), _bucketDB, _docTypeName),
_gsp(),
_fh(_executor._threadId),
_lscHandlers(),
@@ -821,9 +824,7 @@ MaintenanceControllerFixture::~MaintenanceControllerFixture()
void
MaintenanceControllerFixture::syncSubDBs()
{
- _executor.execute(makeTask(makeClosure(this,
- &MaintenanceControllerFixture::
- performSyncSubDBs)));
+ _executor.execute(makeTask(makeClosure(this, &MaintenanceControllerFixture::performSyncSubDBs)));
_executor.sync();
}
@@ -831,18 +832,14 @@ MaintenanceControllerFixture::syncSubDBs()
void
MaintenanceControllerFixture::performSyncSubDBs()
{
- _mc.syncSubDBs(_ready.getSubDB(),
- _removed.getSubDB(),
- _notReady.getSubDB());
+ _mc.syncSubDBs(_ready.getSubDB(), _removed.getSubDB(), _notReady.getSubDB());
}
void
MaintenanceControllerFixture::notifyClusterStateChanged()
{
- _executor.execute(makeTask(makeClosure(this,
- &MaintenanceControllerFixture::
- performNotifyClusterStateChanged)));
+ _executor.execute(makeTask(makeClosure(this, &MaintenanceControllerFixture::performNotifyClusterStateChanged)));
_executor.sync();
}
@@ -857,9 +854,7 @@ MaintenanceControllerFixture::performNotifyClusterStateChanged()
void
MaintenanceControllerFixture::startMaintenance()
{
- _executor.execute(makeTask(makeClosure(this,
- &MaintenanceControllerFixture::
- performStartMaintenance)));
+ _executor.execute(makeTask(makeClosure(this, &MaintenanceControllerFixture::performStartMaintenance)));
_executor.sync();
}
@@ -900,9 +895,7 @@ MaintenanceControllerFixture::stopMaintenance()
void
MaintenanceControllerFixture::forwardMaintenanceConfig()
{
- _executor.execute(makeTask(makeClosure(this,
- &MaintenanceControllerFixture::
- performForwardMaintenanceConfig)));
+ _executor.execute(makeTask(makeClosure(this, &MaintenanceControllerFixture::performForwardMaintenanceConfig)));
_executor.sync();
}
diff --git a/searchcore/src/vespa/searchcore/proton/attribute/flushableattribute.cpp b/searchcore/src/vespa/searchcore/proton/attribute/flushableattribute.cpp
index 9bff8e2a438..fe496acd712 100644
--- a/searchcore/src/vespa/searchcore/proton/attribute/flushableattribute.cpp
+++ b/searchcore/src/vespa/searchcore/proton/attribute/flushableattribute.cpp
@@ -8,7 +8,6 @@
#include <vespa/searchlib/util/dirtraverse.h>
#include <vespa/searchlib/util/filekit.h>
#include <vespa/vespalib/io/fileutil.h>
-#include <vespa/vespalib/util/closuretask.h>
#include <vespa/searchlib/common/serialnumfileheadercontext.h>
#include <vespa/searchlib/attribute/attributememorysavetarget.h>
#include <vespa/searchlib/attribute/attributevector.h>
@@ -24,8 +23,6 @@ using namespace search;
using namespace vespalib;
using search::common::FileHeaderContext;
using search::common::SerialNumFileHeaderContext;
-using vespalib::makeTask;
-using vespalib::makeClosure;
using searchcorespi::IFlushTarget;
namespace proton {
diff --git a/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoreflushtarget.cpp b/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoreflushtarget.cpp
index dcfa7b13970..b563cee1d0c 100644
--- a/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoreflushtarget.cpp
+++ b/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoreflushtarget.cpp
@@ -12,7 +12,6 @@
#include <vespa/searchlib/common/serialnumfileheadercontext.h>
#include <vespa/searchlib/util/filekit.h>
#include <vespa/vespalib/io/fileutil.h>
-#include <vespa/vespalib/util/closuretask.h>
#include <fstream>
#include <vespa/log/log.h>
@@ -22,8 +21,6 @@ using namespace search;
using namespace vespalib;
using search::common::FileHeaderContext;
using search::common::SerialNumFileHeaderContext;
-using vespalib::makeTask;
-using vespalib::makeClosure;
using searchcorespi::IFlushTarget;
using searchcorespi::FlushStats;
diff --git a/searchcore/src/vespa/searchcore/proton/documentmetastore/lidreusedelayer.cpp b/searchcore/src/vespa/searchcore/proton/documentmetastore/lidreusedelayer.cpp
index 003812589d1..61410eed36f 100644
--- a/searchcore/src/vespa/searchcore/proton/documentmetastore/lidreusedelayer.cpp
+++ b/searchcore/src/vespa/searchcore/proton/documentmetastore/lidreusedelayer.cpp
@@ -3,13 +3,10 @@
#include "lidreusedelayer.h"
#include "i_store.h"
#include <vespa/searchcorespi/index/ithreadingservice.h>
-#include <vespa/vespalib/util/closuretask.h>
namespace proton::documentmetastore {
using searchcorespi::index::IThreadingService;
-using vespalib::makeClosure;
-using vespalib::makeTask;
LidReuseDelayer::LidReuseDelayer(IThreadingService &writeService, IStore &documentMetaStore)
: _writeService(writeService),
diff --git a/searchcore/src/vespa/searchcore/proton/feedoperation/documentoperation.cpp b/searchcore/src/vespa/searchcore/proton/feedoperation/documentoperation.cpp
index 266cce220ea..1d0affe6a83 100644
--- a/searchcore/src/vespa/searchcore/proton/feedoperation/documentoperation.cpp
+++ b/searchcore/src/vespa/searchcore/proton/feedoperation/documentoperation.cpp
@@ -96,8 +96,4 @@ DocumentOperation::deserialize(vespalib::nbostream &is, const DocumentTypeRepo &
is >> _prevTimestamp;
}
- DbDocumentId DocumentOperation::getDbDocumentId() const {
- return _dbdId;
- }
-
} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/feedoperation/documentoperation.h b/searchcore/src/vespa/searchcore/proton/feedoperation/documentoperation.h
index ef88b1c73f3..2057f025074 100644
--- a/searchcore/src/vespa/searchcore/proton/feedoperation/documentoperation.h
+++ b/searchcore/src/vespa/searchcore/proton/feedoperation/documentoperation.h
@@ -45,7 +45,7 @@ public:
bool changedDbdId() const { return _dbdId != _prevDbdId; }
bool getPrevMarkedAsRemoved() const { return _prevMarkedAsRemoved; }
void setPrevMarkedAsRemoved(bool prevMarkedAsRemoved) { _prevMarkedAsRemoved = prevMarkedAsRemoved; }
- DbDocumentId getDbDocumentId() const;
+ DbDocumentId getDbDocumentId() const { return _dbdId; }
DbDocumentId getPrevDbDocumentId() const { return _prevDbdId; }
void setDbDocumentId(DbDocumentId dbdId) { _dbdId = dbdId; }
diff --git a/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.h b/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.h
index ece92adebd0..bbaeb176a17 100644
--- a/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.h
+++ b/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.h
@@ -15,7 +15,7 @@ namespace vespalib {
class SyncableThreadExecutor;
class Executor;
}
-namespace searchcorespi { namespace index { struct IThreadService; }}
+namespace searchcorespi::index { struct IThreadService; }
namespace proton {
@@ -37,7 +37,7 @@ public:
MaintenanceController(IThreadService &masterThread, vespalib::SyncableThreadExecutor & defaultExecutor, const DocTypeName &docTypeName);
- virtual ~MaintenanceController();
+ ~MaintenanceController() override;
void registerJobInMasterThread(IMaintenanceJob::UP job);
void registerJobInDefaultPool(IMaintenanceJob::UP job);
@@ -69,6 +69,7 @@ public:
const MaintenanceDocumentSubDB & getReadySubDB() const { return _readySubDB; }
const MaintenanceDocumentSubDB & getRemSubDB() const { return _remSubDB; }
const MaintenanceDocumentSubDB & getNotReadySubDB() const { return _notReadySubDB; }
+ IThreadService & masterThread() { return _masterThread; }
private:
using Mutex = std::mutex;
using Guard = std::lock_guard<Mutex>;