diff options
author | Martin Polden <mpolden@mpolden.no> | 2020-07-09 11:07:32 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2020-07-09 14:51:26 +0200 |
commit | ae0051eb76a2600bdcce5a119de06f367be7d164 (patch) | |
tree | cdd7137df82d32f3a72fb268a36b059c9a82a7d0 /configserver | |
parent | fa1346f02f2588de9e04fee801a75c63b0cc05db (diff) |
Control maintenance jobs with feature flag
Diffstat (limited to 'configserver')
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 |