diff options
author | Geir Storli <geirst@yahoo-inc.com> | 2017-04-24 13:52:21 +0000 |
---|---|---|
committer | Geir Storli <geirst@yahoo-inc.com> | 2017-04-24 13:57:40 +0000 |
commit | dc6964e1e7af53034d3d0eb7061bcb955c90ea80 (patch) | |
tree | eeb2a077cdf248cf55c9c87318bfb1726bbb025f /searchcore | |
parent | 4423682736cefaf49a3e0f8e8a47762ebe312d78 (diff) |
Set maintenance job delay for lid space compaction and prune removed documents jobs.
The delay is minimum of 5 min and interval.
Diffstat (limited to 'searchcore')
6 files changed, 77 insertions, 23 deletions
diff --git a/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_compaction_test.cpp b/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_compaction_test.cpp index 542b66b3978..6d97b7b0b1c 100644 --- a/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_compaction_test.cpp +++ b/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_compaction_test.cpp @@ -245,9 +245,10 @@ struct JobFixture JobFixture(uint32_t allowedLidBloat = ALLOWED_LID_BLOAT, double allowedLidBloatFactor = ALLOWED_LID_BLOAT_FACTOR, uint32_t maxDocsToScan = MAX_DOCS_TO_SCAN, - double resourceLimitFactor = RESOURCE_LIMIT_FACTOR) + double resourceLimitFactor = RESOURCE_LIMIT_FACTOR, + double interval = JOB_DELAY) : _handler(), - _job(DocumentDBLidSpaceCompactionConfig(JOB_DELAY, + _job(DocumentDBLidSpaceCompactionConfig(interval, allowedLidBloat, allowedLidBloatFactor, false, maxDocsToScan), _handler, _storer, _frozenHandler, _diskMemUsageNotifier, resourceLimitFactor), _jobRunner(_job) @@ -540,6 +541,24 @@ TEST_F("require that resource limit factor adjusts limit", JobFixture(ALLOWED_LI TEST_DO(assertJobContext(2, 9, 1, 7, 1, f)); } +struct JobFixtureWithInterval : public JobFixture { + JobFixtureWithInterval(double interval) + : JobFixture(ALLOWED_LID_BLOAT, ALLOWED_LID_BLOAT_FACTOR, MAX_DOCS_TO_SCAN, RESOURCE_LIMIT_FACTOR, interval) + {} +}; + +TEST_F("require that delay is set based on interval and is max 300 secs", JobFixtureWithInterval(301)) +{ + EXPECT_EQUAL(300, f._job.getDelay()); + EXPECT_EQUAL(301, f._job.getInterval()); +} + +TEST_F("require that delay is set based on interval and can be less than 300 secs", JobFixtureWithInterval(299)) +{ + EXPECT_EQUAL(299, f._job.getDelay()); + EXPECT_EQUAL(299, f._job.getInterval()); +} + TEST_MAIN() { TEST_RUN_ALL(); diff --git a/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp b/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp index 2605beadf3b..628bce36f3e 100644 --- a/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp +++ b/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp @@ -1379,21 +1379,29 @@ TEST("Verify FrozenBucketsMap interface") { } } -bool -containsJob(const MaintenanceController::JobList &jobs, const vespalib::string &jobName) +const MaintenanceJobRunner * +findJob(const MaintenanceController::JobList &jobs, const vespalib::string &jobName) { auto itr = std::find_if(jobs.begin(), jobs.end(), [&](const auto &job){ return job->getJob().getName() == jobName; }); - return itr != jobs.end(); + if (itr != jobs.end()) { + return itr->get(); + } + return nullptr; +} + +bool +containsJob(const MaintenanceController::JobList &jobs, const vespalib::string &jobName) +{ + return findJob(jobs, jobName) != nullptr; } bool containsJobAndExecutedBy(const MaintenanceController::JobList &jobs, const vespalib::string &jobName, const vespalib::Executor & executor) { - auto itr = std::find_if(jobs.begin(), jobs.end(), - [&](const auto &job){ return job->getJob().getName() == jobName; }); - return itr != jobs.end() && (&(*itr)->getExecutor() == &executor); + const auto *job = findJob(jobs, jobName); + return (job != nullptr) && (&job->getExecutor() == &executor); } TEST_F("require that lid space compaction jobs can be disabled", MaintenanceControllerFixture) @@ -1413,7 +1421,7 @@ TEST_F("require that lid space compaction jobs can be disabled", MaintenanceCont } } -TEST_F("Require that maintenance jobs are run by correct executor", MaintenanceControllerFixture) +TEST_F("require that maintenance jobs are run by correct executor", MaintenanceControllerFixture) { f.injectMaintenanceJobs(); auto jobs = f._mc.getJobList(); @@ -1425,6 +1433,21 @@ TEST_F("Require that maintenance jobs are run by correct executor", MaintenanceC EXPECT_TRUE(containsJobAndExecutedBy(jobs, "sample_attribute_usage.searchdocument", f._threadService)); } +void +assertPruneRemovedDocumentsConfig(double expDelay, double expInterval, double interval, MaintenanceControllerFixture &f) +{ + f.setPruneConfig(DocumentDBPruneRemovedDocumentsConfig(interval, 1000)); + const auto *job = findJob(f._mc.getJobList(), "prune_removed_documents.searchdocument"); + EXPECT_EQUAL(expDelay, job->getJob().getDelay()); + EXPECT_EQUAL(expInterval, job->getJob().getInterval()); +} + +TEST_F("require that delay for prune removed documents is set based on interval and is max 300 secs", MaintenanceControllerFixture) +{ + assertPruneRemovedDocumentsConfig(300, 301, 301, f); + assertPruneRemovedDocumentsConfig(299, 299, 299, f); +} + TEST_MAIN() { TEST_RUN_ALL(); diff --git a/searchcore/src/vespa/searchcore/proton/server/document_db_maintenance_config.cpp b/searchcore/src/vespa/searchcore/proton/server/document_db_maintenance_config.cpp index 04e2557e2ca..535289886f6 100644 --- a/searchcore/src/vespa/searchcore/proton/server/document_db_maintenance_config.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/document_db_maintenance_config.cpp @@ -4,9 +4,12 @@ namespace proton { +constexpr double MAX_DELAY_SEC = 300; + DocumentDBPruneConfig:: -DocumentDBPruneConfig(void) - : _interval(21600.0), +DocumentDBPruneConfig() + : _delay(MAX_DELAY_SEC), + _interval(21600.0), _age(1209600.0) { } @@ -14,7 +17,8 @@ DocumentDBPruneConfig(void) DocumentDBPruneConfig:: DocumentDBPruneConfig(double interval, double age) - : _interval(interval), + : _delay(std::min(MAX_DELAY_SEC, interval)), + _interval(interval), _age(age) { } @@ -23,11 +27,12 @@ bool DocumentDBPruneConfig:: operator==(const DocumentDBPruneConfig &rhs) const { - return _interval == rhs._interval && - _age == rhs._age; + return _delay == rhs._delay && + _interval == rhs._interval && + _age == rhs._age; } -DocumentDBHeartBeatConfig::DocumentDBHeartBeatConfig(void) +DocumentDBHeartBeatConfig::DocumentDBHeartBeatConfig() : _interval(60.0) { } @@ -45,7 +50,8 @@ operator==(const DocumentDBHeartBeatConfig &rhs) const } DocumentDBLidSpaceCompactionConfig::DocumentDBLidSpaceCompactionConfig() - : _interval(3600), + : _delay(MAX_DELAY_SEC), + _interval(3600), _allowedLidBloat(1000000000), _allowedLidBloatFactor(1.0), _disabled(false), @@ -58,7 +64,8 @@ DocumentDBLidSpaceCompactionConfig::DocumentDBLidSpaceCompactionConfig(double in double allowedLidBloatFactor, bool disabled, uint32_t maxDocsToScan) - : _interval(interval), + : _delay(std::min(MAX_DELAY_SEC, interval)), + _interval(interval), _allowedLidBloat(allowedLidBloat), _allowedLidBloatFactor(allowedLidBloatFactor), _disabled(disabled), @@ -77,13 +84,14 @@ DocumentDBLidSpaceCompactionConfig::createDisabled() bool DocumentDBLidSpaceCompactionConfig::operator==(const DocumentDBLidSpaceCompactionConfig &rhs) const { - return _interval == rhs._interval && + return _delay == rhs._delay && + _interval == rhs._interval && _allowedLidBloat == rhs._allowedLidBloat && _allowedLidBloatFactor == rhs._allowedLidBloatFactor && _disabled == rhs._disabled; } -DocumentDBMaintenanceConfig::DocumentDBMaintenanceConfig(void) +DocumentDBMaintenanceConfig::DocumentDBMaintenanceConfig() : _pruneRemovedDocuments(), _heartBeat(), _sessionCachePruneInterval(900.0), diff --git a/searchcore/src/vespa/searchcore/proton/server/document_db_maintenance_config.h b/searchcore/src/vespa/searchcore/proton/server/document_db_maintenance_config.h index 583a676a01d..2b724f41ae4 100644 --- a/searchcore/src/vespa/searchcore/proton/server/document_db_maintenance_config.h +++ b/searchcore/src/vespa/searchcore/proton/server/document_db_maintenance_config.h @@ -10,6 +10,7 @@ namespace proton { class DocumentDBPruneConfig { private: + double _delay; double _interval; double _age; @@ -18,8 +19,9 @@ public: DocumentDBPruneConfig(double interval, double age); bool operator==(const DocumentDBPruneConfig &rhs) const; - double getInterval(void) const { return _interval; } - double getAge(void) const { return _age; } + double getDelay() const { return _delay; } + double getInterval() const { return _interval; } + double getAge() const { return _age; } }; typedef DocumentDBPruneConfig DocumentDBPruneRemovedDocumentsConfig; @@ -40,6 +42,7 @@ public: class DocumentDBLidSpaceCompactionConfig { private: + double _delay; double _interval; uint32_t _allowedLidBloat; double _allowedLidBloatFactor; @@ -56,6 +59,7 @@ public: static DocumentDBLidSpaceCompactionConfig createDisabled(); bool operator==(const DocumentDBLidSpaceCompactionConfig &rhs) const; + double getDelay() const { return _delay; } double getInterval() const { return _interval; } uint32_t getAllowedLidBloat() const { return _allowedLidBloat; } double getAllowedLidBloatFactor() const { return _allowedLidBloatFactor; } 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 660b7d077f5..0ce8cfe9575 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 @@ -90,7 +90,7 @@ LidSpaceCompactionJob::LidSpaceCompactionJob(const DocumentDBLidSpaceCompactionC IDiskMemUsageNotifier &diskMemUsageNotifier, double resourceLimitFactor) : IMaintenanceJob("lid_space_compaction." + handler.getName(), - config.getInterval(), config.getInterval()), + config.getDelay(), config.getInterval()), _cfg(config), _handler(handler), _opStorer(opStorer), diff --git a/searchcore/src/vespa/searchcore/proton/server/pruneremoveddocumentsjob.cpp b/searchcore/src/vespa/searchcore/proton/server/pruneremoveddocumentsjob.cpp index f7f0a5ae272..6d67a989df1 100644 --- a/searchcore/src/vespa/searchcore/proton/server/pruneremoveddocumentsjob.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/pruneremoveddocumentsjob.cpp @@ -23,7 +23,7 @@ PruneRemovedDocumentsJob(const Config &config, IPruneRemovedDocumentsHandler &handler, IFrozenBucketHandler &frozenHandler) : IMaintenanceJob("prune_removed_documents." + docTypeName, - config.getInterval(), config.getInterval()), + config.getDelay(), config.getInterval()), _metaStore(metaStore), _subDbId(subDbId), _cfgAgeLimit(config.getAge()), |