summaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2020-07-09 11:07:32 +0200
committerMartin Polden <mpolden@mpolden.no>2020-07-09 14:51:26 +0200
commitae0051eb76a2600bdcce5a119de06f367be7d164 (patch)
treecdd7137df82d32f3a72fb268a36b059c9a82a7d0 /configserver
parentfa1346f02f2588de9e04fee801a75c63b0cc05db (diff)
Control maintenance jobs with feature flag
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java2
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintainer.java43
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java4
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/FileDistributionMaintainer.java6
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/SessionsMaintainer.java5
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainer.java7
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainerTest.java3
7 files changed, 29 insertions, 41 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java
index b0ca6ba67f5..7c983ab48a0 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java
@@ -42,7 +42,7 @@ public class ApplicationPackageMaintainer extends ConfigServerMaintainer {
Duration interval,
ConfigserverConfig configserverConfig,
FlagSource flagSource) {
- super(applicationRepository, curator, interval, interval);
+ super(applicationRepository, curator, flagSource, interval, interval);
this.applicationRepository = applicationRepository;
this.configserverConfig = configserverConfig;
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintainer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintainer.java
index 7b4664e040c..5369bbef366 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintainer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintainer.java
@@ -2,18 +2,18 @@
package com.yahoo.vespa.config.server.maintenance;
import com.yahoo.concurrent.maintenance.JobControl;
+import com.yahoo.concurrent.maintenance.JobControlState;
import com.yahoo.concurrent.maintenance.Maintainer;
-import com.yahoo.concurrent.maintenance.StringSetSerializer;
import com.yahoo.path.Path;
import com.yahoo.transaction.Mutex;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.curator.Curator;
+import com.yahoo.vespa.flags.FlagSource;
+import com.yahoo.vespa.flags.Flags;
+import com.yahoo.vespa.flags.ListFlag;
import java.time.Duration;
-import java.util.HashSet;
import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
/**
* A maintainer is some job which runs at a fixed interval to perform some maintenance task in the config server.
@@ -24,47 +24,28 @@ public abstract class ConfigServerMaintainer extends Maintainer {
protected final ApplicationRepository applicationRepository;
- ConfigServerMaintainer(ApplicationRepository applicationRepository, Curator curator, Duration initialDelay, Duration interval) {
- super(null, interval, initialDelay, new JobControl(new JobControlDb(curator)));
+ ConfigServerMaintainer(ApplicationRepository applicationRepository, Curator curator, FlagSource flagSource,
+ Duration initialDelay, Duration interval) {
+ super(null, interval, initialDelay, new JobControl(new JobControlFlags(curator, flagSource)));
this.applicationRepository = applicationRepository;
}
- private static class JobControlDb implements JobControl.Db {
-
- private static final Logger log = Logger.getLogger(JobControlDb.class.getName());
+ private static class JobControlFlags implements JobControlState {
private static final Path root = Path.fromString("/configserver/v1/");
private static final Path lockRoot = root.append("locks");
- private static final Path inactiveJobsPath = root.append("inactiveJobs");
private final Curator curator;
- private final StringSetSerializer serializer = new StringSetSerializer();
+ private final ListFlag<String> inactiveJobsFlag;
- public JobControlDb(Curator curator) {
+ public JobControlFlags(Curator curator, FlagSource flagSource) {
this.curator = curator;
+ this.inactiveJobsFlag = Flags.INACTIVE_MAINTENANCE_JOBS.bindTo(flagSource);
}
@Override
public Set<String> readInactiveJobs() {
- try {
- return curator.getData(inactiveJobsPath)
- .filter(data -> data.length > 0)
- .map(serializer::fromJson).orElseGet(HashSet::new);
- } catch (RuntimeException e) {
- log.log(Level.WARNING, "Error reading inactive jobs, deleting inactive state");
- writeInactiveJobs(Set.of());
- return new HashSet<>();
- }
- }
-
- @Override
- public void writeInactiveJobs(Set<String> inactiveJobs) {
- curator.set(inactiveJobsPath, serializer.toJson(inactiveJobs));
- }
-
- @Override
- public Mutex lockInactiveJobs() {
- return curator.lock(lockRoot.append("inactiveJobsLock"), Duration.ofSeconds(1));
+ return Set.copyOf(inactiveJobsFlag.value());
}
@Override
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java
index b948da05556..a6585be391c 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java
@@ -35,8 +35,8 @@ public class ConfigServerMaintenance extends AbstractComponent {
DefaultTimes defaults = new DefaultTimes(configserverConfig);
// TODO: Disabled until we have application metadata
//tenantsMaintainer = new TenantsMaintainer(applicationRepository, curator, defaults.tenantsMaintainerInterval);
- fileDistributionMaintainer = new FileDistributionMaintainer(applicationRepository, curator, defaults.defaultInterval, configserverConfig);
- sessionsMaintainer = new SessionsMaintainer(applicationRepository, curator, Duration.ofMinutes(1));
+ fileDistributionMaintainer = new FileDistributionMaintainer(applicationRepository, curator, defaults.defaultInterval, configserverConfig, flagSource);
+ sessionsMaintainer = new SessionsMaintainer(applicationRepository, curator, Duration.ofMinutes(1), flagSource);
applicationPackageMaintainer = new ApplicationPackageMaintainer(applicationRepository, curator, Duration.ofMinutes(1), configserverConfig, flagSource);
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/FileDistributionMaintainer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/FileDistributionMaintainer.java
index 604212b0ae8..ed323438e3f 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/FileDistributionMaintainer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/FileDistributionMaintainer.java
@@ -5,6 +5,7 @@ import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.curator.Curator;
import com.yahoo.vespa.defaults.Defaults;
+import com.yahoo.vespa.flags.FlagSource;
import java.io.File;
import java.time.Duration;
@@ -25,8 +26,9 @@ public class FileDistributionMaintainer extends ConfigServerMaintainer {
FileDistributionMaintainer(ApplicationRepository applicationRepository,
Curator curator,
Duration interval,
- ConfigserverConfig configserverConfig) {
- super(applicationRepository, curator, interval, interval);
+ ConfigserverConfig configserverConfig,
+ FlagSource flagSource) {
+ super(applicationRepository, curator, flagSource, interval, interval);
this.applicationRepository = applicationRepository;
this.configserverConfig = configserverConfig;
this.fileReferencesDir = new File(Defaults.getDefaults().underVespaHome(configserverConfig.fileReferencesDir()));
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/SessionsMaintainer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/SessionsMaintainer.java
index ec06336c80a..a799d22e771 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/SessionsMaintainer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/SessionsMaintainer.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.config.server.maintenance;
import com.yahoo.log.LogLevel;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.curator.Curator;
+import com.yahoo.vespa.flags.FlagSource;
import java.time.Duration;
@@ -17,10 +18,10 @@ import java.time.Duration;
public class SessionsMaintainer extends ConfigServerMaintainer {
private final boolean hostedVespa;
- SessionsMaintainer(ApplicationRepository applicationRepository, Curator curator, Duration interval) {
+ SessionsMaintainer(ApplicationRepository applicationRepository, Curator curator, Duration interval, FlagSource flagSource) {
// Start this maintainer immediately. It frees disk space, so if disk goes full and config server
// restarts this makes sure that cleanup will happen as early as possible
- super(applicationRepository, curator, Duration.ZERO, interval);
+ super(applicationRepository, curator, flagSource, Duration.ZERO, interval);
this.hostedVespa = applicationRepository.configserverConfig().hostedVespa();
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainer.java
index d3865f287cd..9a81d9f7547 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainer.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.config.server.maintenance;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.curator.Curator;
+import com.yahoo.vespa.flags.FlagSource;
import java.time.Clock;
import java.time.Duration;
@@ -19,8 +20,9 @@ public class TenantsMaintainer extends ConfigServerMaintainer {
private final Duration ttlForUnusedTenant;
private final Clock clock;
- TenantsMaintainer(ApplicationRepository applicationRepository, Curator curator, Duration interval, Clock clock) {
- super(applicationRepository, curator, interval, interval);
+ TenantsMaintainer(ApplicationRepository applicationRepository, Curator curator, FlagSource flagSource,
+ Duration interval, Clock clock) {
+ super(applicationRepository, curator, flagSource, interval, interval);
this.ttlForUnusedTenant = defaultTtlForUnusedTenant;
this.clock = clock;
}
@@ -29,4 +31,5 @@ public class TenantsMaintainer extends ConfigServerMaintainer {
protected void maintain() {
applicationRepository.deleteUnusedTenants(ttlForUnusedTenant, clock.instant());
}
+
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainerTest.java
index 53326a89293..a24367d250b 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainerTest.java
@@ -9,6 +9,7 @@ import com.yahoo.test.ManualClock;
import com.yahoo.vespa.config.server.ApplicationRepository;
import com.yahoo.vespa.config.server.session.PrepareParams;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
+import com.yahoo.vespa.flags.InMemoryFlagSource;
import org.junit.Test;
import java.io.File;
@@ -39,7 +40,7 @@ public class TenantsMaintainerTest {
assertNotNull(tenantRepository.getTenant(shouldNotBeDeleted));
clock.advance(TenantsMaintainer.defaultTtlForUnusedTenant.plus(Duration.ofDays(1)));
- new TenantsMaintainer(applicationRepository, tester.curator(), Duration.ofDays(1), clock).run();
+ new TenantsMaintainer(applicationRepository, tester.curator(), new InMemoryFlagSource(), Duration.ofDays(1), clock).run();
tenantRepository.updateTenants();
// One tenant should now have been deleted