summaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2020-04-14 15:47:58 +0200
committerGitHub <noreply@github.com>2020-04-14 15:47:58 +0200
commit60f845464bb5332428737086282157500726f247 (patch)
tree018d6f311edf3ede3c56209bb120e440c406151b /configserver
parentdecc08cb94e432008ab0466b1c773f0786725846 (diff)
parent60ea36a95f51e01e83a453c60e8dff661260e106 (diff)
Merge pull request #12904 from vespa-engine/mpolden/config-lock
Hold config lock when modifying load balancers
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java9
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/Maintainer.java8
2 files changed, 2 insertions, 15 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java b/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java
index 7ec0f49ed60..7ff5d41485d 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java
@@ -21,10 +21,8 @@ import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent;
import java.time.Duration;
import java.util.List;
-import java.util.Map;
import java.util.Optional;
import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.logging.Logger;
@@ -49,7 +47,6 @@ public class TenantApplications {
private final Path locksPath;
private final Curator.DirectoryCache directoryCache;
private final ReloadHandler reloadHandler;
- private final Map<ApplicationId, Lock> locks;
private final Executor zkWatcherExecutor;
private TenantApplications(Curator curator, ReloadHandler reloadHandler, TenantName tenant,
@@ -57,7 +54,6 @@ public class TenantApplications {
this.curator = curator;
this.applicationsPath = TenantRepository.getApplicationsPath(tenant);
this.locksPath = TenantRepository.getLocksPath(tenant);
- this.locks = new ConcurrentHashMap<>(2);
this.reloadHandler = reloadHandler;
this.zkWatcherExecutor = command -> zkWatcherExecutor.execute(tenant, command);
this.directoryCache = curator.createDirectoryCache(applicationsPath.getAbsolute(), false, false, zkCacheExecutor);
@@ -148,10 +144,7 @@ public class TenantApplications {
/** Returns the lock for changing the session status of the given application. */
public Lock lock(ApplicationId id) {
- curator.create(lockPath(id));
- Lock lock = locks.computeIfAbsent(id, __ -> new Lock(lockPath(id).getAbsolute(), curator));
- lock.acquire(Duration.ofMinutes(1)); // These locks shouldn't be held for very long.
- return lock;
+ return curator.lock(lockPath(id), Duration.ofMinutes(1)); // These locks shouldn't be held for very long.
}
private void childEvent(CuratorFramework client, PathChildrenCacheEvent event) {
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
index d2fd4efa7dc..e40d9153ad1 100644
--- 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
@@ -48,7 +48,7 @@ public abstract class Maintainer extends AbstractComponent implements Runnable {
@Override
@SuppressWarnings({"try", "unused"})
public void run() {
- try (Lock lock = lock(lockRoot.append(name()))) {
+ 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
@@ -57,12 +57,6 @@ public abstract class Maintainer extends AbstractComponent implements Runnable {
}
}
- private Lock lock(Path path) {
- Lock lock = new Lock(path.getAbsolute(), curator);
- lock.acquire(Duration.ofSeconds(1));
- return lock;
- }
-
@Override
public void deconstruct() {
this.service.shutdown();