summaryrefslogtreecommitdiffstats
path: root/configserver/src/main/java/com/yahoo
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2020-04-29 11:41:02 +0200
committerMartin Polden <mpolden@mpolden.no>2020-04-29 11:54:42 +0200
commit18adec188de46c13826b1896d3d8518f8424d67f (patch)
treeed8258dde129159d630697bc0874a908f9ff794c /configserver/src/main/java/com/yahoo
parent11fc2eece8075c8eefd104f8754e973425e5304c (diff)
Use vespajlib maintenance package in configserver
Diffstat (limited to 'configserver/src/main/java/com/yahoo')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintainer.java81
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java6
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/FileDistributionMaintainer.java2
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/Maintainer.java80
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/SessionsMaintainer.java2
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainer.java2
6 files changed, 87 insertions, 86 deletions
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
new file mode 100644
index 00000000000..06d8d41791d
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintainer.java
@@ -0,0 +1,81 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.config.server.maintenance;
+
+import com.yahoo.concurrent.maintenance.JobControl;
+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 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.
+ *
+ * @author hmusum
+ */
+public abstract class ConfigServerMaintainer extends Maintainer {
+
+ protected final ApplicationRepository applicationRepository;
+
+ ConfigServerMaintainer(ApplicationRepository applicationRepository, Curator curator, Duration interval) {
+ this(applicationRepository, curator, interval, interval);
+ }
+
+ ConfigServerMaintainer(ApplicationRepository applicationRepository, Curator curator, Duration initialDelay, Duration interval) {
+ super(null, interval, initialDelay, new JobControl(new JobControlDb(curator)));
+ this.applicationRepository = applicationRepository;
+ }
+
+ private static class JobControlDb implements JobControl.Db {
+
+ private static final Logger log = Logger.getLogger(JobControlDb.class.getName());
+
+ 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();
+
+ public JobControlDb(Curator curator) {
+ this.curator = curator;
+ }
+
+ @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));
+ }
+
+ @Override
+ public Mutex lockMaintenanceJob(String job) {
+ return curator.lock(lockRoot.append(job), Duration.ofSeconds(1));
+ }
+
+ }
+
+}
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 e2495de18ba..797c18681ec 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
@@ -37,9 +37,9 @@ public class ConfigServerMaintenance extends AbstractComponent {
@Override
public void deconstruct() {
- //tenantsMaintainer.deconstruct();
- fileDistributionMaintainer.deconstruct();
- sessionsMaintainer.deconstruct();
+ //tenantsMaintainer.close();
+ fileDistributionMaintainer.close();
+ sessionsMaintainer.close();
}
/*
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 8388159ba07..b4ae81376ad 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
@@ -16,7 +16,7 @@ import java.time.Duration;
*
* @author hmusum
*/
-public class FileDistributionMaintainer extends Maintainer {
+public class FileDistributionMaintainer extends ConfigServerMaintainer {
private final ApplicationRepository applicationRepository;
private final File fileReferencesDir;
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/Maintainer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/Maintainer.java
deleted file mode 100644
index e40d9153ad1..00000000000
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/Maintainer.java
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.config.server.maintenance;
-
-import com.google.common.util.concurrent.UncheckedTimeoutException;
-import com.yahoo.component.AbstractComponent;
-import com.yahoo.concurrent.DaemonThreadFactory;
-import com.yahoo.path.Path;
-import com.yahoo.vespa.config.server.ApplicationRepository;
-import com.yahoo.vespa.curator.Curator;
-import com.yahoo.vespa.curator.Lock;
-
-import java.time.Duration;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-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.
- *
- * @author hmusum
- */
-public abstract class Maintainer extends AbstractComponent implements Runnable {
-
- protected static final Logger log = Logger.getLogger(Maintainer.class.getName());
- private static final Path root = Path.fromString("/configserver/v1/");
- private static final Path lockRoot = root.append("locks");
-
- private final Duration maintenanceInterval;
- private final ScheduledExecutorService service;
- protected final ApplicationRepository applicationRepository;
- protected final Curator curator;
-
- Maintainer(ApplicationRepository applicationRepository, Curator curator, Duration interval) {
- this(applicationRepository, curator, interval, interval);
- }
-
- Maintainer(ApplicationRepository applicationRepository, Curator curator, Duration initialDelay, Duration interval) {
- this.applicationRepository = applicationRepository;
- this.curator = curator;
- this.maintenanceInterval = interval;
- service = new ScheduledThreadPoolExecutor(1, new DaemonThreadFactory(name()));
- service.scheduleAtFixedRate(this, initialDelay.toMillis(), interval.toMillis(), TimeUnit.MILLISECONDS);
- }
-
-
- @Override
- @SuppressWarnings({"try", "unused"})
- public void run() {
- try (Lock lock = curator.lock(lockRoot.append(name()), Duration.ofSeconds(1))) {
- maintain();
- } catch (UncheckedTimeoutException e) {
- // another config server instance is running this job at the moment; ok
- } catch (Throwable t) {
- log.log(Level.WARNING, this + " failed. Will retry in " + maintenanceInterval.toMinutes() + " minutes", t);
- }
- }
-
- @Override
- public void deconstruct() {
- this.service.shutdown();
- }
-
- /**
- * Called once each time this maintenance job should run
- */
- protected abstract void maintain();
-
- public String name() { return this.getClass().getSimpleName(); }
-
- /**
- * Returns the name of this
- */
- @Override
- public final String toString() {
- return name();
- }
-
-}
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 7da868303e2..c4f0c5fdd5d 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
@@ -13,7 +13,7 @@ import java.time.Duration;
*
* @author hmusum
*/
-public class SessionsMaintainer extends Maintainer {
+public class SessionsMaintainer extends ConfigServerMaintainer {
private final boolean hostedVespa;
SessionsMaintainer(ApplicationRepository applicationRepository, Curator curator, Duration interval) {
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 86bd4e8db8e..f0753638101 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
@@ -12,7 +12,7 @@ import java.time.Instant;
*
* @author hmusum
*/
-public class TenantsMaintainer extends Maintainer {
+public class TenantsMaintainer extends ConfigServerMaintainer {
private final Duration ttlForUnusedTenant;