summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorHarald Musum <musum@yahoo-inc.com>2017-02-17 13:01:17 +0100
committerGitHub <noreply@github.com>2017-02-17 13:01:17 +0100
commit49dfc8303ad27f9a513051d76644c1b1042d171d (patch)
treefb868cf43a95f3a08d509f65033c5695b5449f91 /node-repository
parent5ea55a54ecea21b1c0f7f832606f091e089753f9 (diff)
parent97d7847c45a845c57845dc9b371e2c2c31670da6 (diff)
Merge pull request #1795 from yahoo/hmusum/add-error-code-for-application-lock-failure
Use specific error-code in response when unable to acquire applicatio…
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabase.java1
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java11
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorMutex.java11
3 files changed, 15 insertions, 8 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabase.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabase.java
index b2ffe05b2d4..65dd8a67898 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabase.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabase.java
@@ -62,7 +62,6 @@ public class CuratorDatabase {
CuratorMutex lock = locks.computeIfAbsent(path, (pathArg) -> new CuratorMutex(pathArg.getAbsolute(), curator.framework()));
lock.acquire(timeout);
return lock;
-
}
// --------- Write operations ------------------------------------------------------------------------------
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java
index dc6bda01619..54292247115 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java
@@ -3,7 +3,9 @@ package com.yahoo.vespa.hosted.provision.persistence;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.joda.JodaModule;
+import com.google.common.util.concurrent.UncheckedTimeoutException;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.ApplicationLockException;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.config.provision.Zone;
@@ -269,12 +271,17 @@ public class CuratorDatabaseClient {
/** Acquires the single cluster-global, reentrant lock for active nodes of this application */
public CuratorMutex lock(ApplicationId application) {
- return lock(lockPath(application), defaultLockTimeout);
+ return lock(application, defaultLockTimeout);
}
/** Acquires the single cluster-global, reentrant lock with the specified timeout for active nodes of this application */
public CuratorMutex lock(ApplicationId application, Duration timeout) {
- return lock(lockPath(application), timeout);
+ try {
+ return lock(lockPath(application), timeout);
+ }
+ catch (UncheckedTimeoutException e) {
+ throw new ApplicationLockException(e);
+ }
}
private CuratorMutex lock(Path path, Duration timeout) {
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorMutex.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorMutex.java
index 62be5c649db..442dface372 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorMutex.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorMutex.java
@@ -1,13 +1,13 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.provision.persistence;
+import com.google.common.util.concurrent.UncheckedTimeoutException;
import com.yahoo.transaction.Mutex;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.recipes.locks.InterProcessMutex;
import java.time.Duration;
import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
/**
* A cluster-wide reentrant mutex which is released on (the last symmetric) close
@@ -26,15 +26,16 @@ public class CuratorMutex implements Mutex {
/** Take the lock with the given timeout. This may be called multiple times from the same thread - each matched by a close */
public void acquire(Duration timeout) {
+ boolean acquired;
try {
- boolean acquired = mutex.acquire(timeout.toMillis(), TimeUnit.MILLISECONDS);
- if ( ! acquired) {
- throw new TimeoutException("Timed out after waiting " + timeout.toString());
- }
+ acquired = mutex.acquire(timeout.toMillis(), TimeUnit.MILLISECONDS);
}
catch (Exception e) {
throw new RuntimeException("Exception acquiring lock '" + lockPath + "'", e);
}
+
+ if (! acquired) throw new UncheckedTimeoutException("Timed out after waiting " + timeout.toString() +
+ " to acquire lock + '" + lockPath + "'");
}
@Override