diff options
Diffstat (limited to 'searchcore/src/tests/proton/documentdb')
4 files changed, 67 insertions, 56 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(); } |