aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahoo-inc.com>2017-04-24 13:52:21 +0000
committerGeir Storli <geirst@yahoo-inc.com>2017-04-24 13:57:40 +0000
commitdc6964e1e7af53034d3d0eb7061bcb955c90ea80 (patch)
treeeeb2a077cdf248cf55c9c87318bfb1726bbb025f /searchcore
parent4423682736cefaf49a3e0f8e8a47762ebe312d78 (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')
-rw-r--r--searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_compaction_test.cpp23
-rw-r--r--searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp37
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/document_db_maintenance_config.cpp28
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/document_db_maintenance_config.h8
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/pruneremoveddocumentsjob.cpp2
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()),