summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2017-09-27 11:08:17 +0200
committerGitHub <noreply@github.com>2017-09-27 11:08:17 +0200
commite87be0cd3f23a3e4af62aad6dd38fb62ff733947 (patch)
tree3e0db29de524151e4dfe325110587a89582d77de
parentf6699e3eef27daa06b0fbb15a2f848265d3a5927 (diff)
parentb5686d5bbb9f5d7447747099097d5b290694da07 (diff)
Merge pull request #3541 from vespa-engine/freva/lock-javadoc
Add javadoc
-rw-r--r--vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLock.java7
-rw-r--r--vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLocking.java20
2 files changed, 27 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLock.java b/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLock.java
index 2a3c70d31d2..b0d26bfeb1c 100644
--- a/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLock.java
+++ b/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLock.java
@@ -1,6 +1,8 @@
package com.yahoo.concurrent.classlock;
/**
+ * An acquired lock which is released on close
+ *
* @author valerijf
*/
public class ClassLock implements AutoCloseable {
@@ -12,6 +14,11 @@ public class ClassLock implements AutoCloseable {
this.clazz = clazz;
}
+ /**
+ * Releases this lock
+ *
+ * @throws IllegalArgumentException if this lock has already been released
+ */
@Override
public void close() {
classLocking.unlock(clazz, this);
diff --git a/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLocking.java b/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLocking.java
index 27b020b578d..5330e869396 100644
--- a/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLocking.java
+++ b/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLocking.java
@@ -5,16 +5,33 @@ import java.util.Map;
import java.util.function.BooleanSupplier;
/**
+ * This class is injectable to Vespa plugins and is used to acquire locks cross
+ * application deployments.
+ *
* @author valerijf
*/
public class ClassLocking {
private final Map<String, ClassLock> classLocks = new HashMap<>();
private final Object monitor = new Object();
+ /**
+ * Locks key. This will block until the key is acquired.
+ * Users of this <b>must</b> close any lock acquired.
+ */
public ClassLock lock(Class<?> clazz) {
return lockWhile(clazz, () -> true);
}
+ /**
+ * Locks key. This will block until the key is acquired or the interrupt condition is
+ * no longer true. Condition is only checked at the start, everytime a lock is released
+ * and when {@link #interrupt()} is called.
+ *
+ * Users of this <b>must</b> close any lock acquired.
+ *
+ * @throws LockInterruptException if interruptCondition returned false before
+ * the lock could be acquired
+ */
public ClassLock lockWhile(Class<?> clazz, BooleanSupplier interruptCondition) {
synchronized (monitor) {
while (classLocks.containsKey(clazz.getName())) {
@@ -45,6 +62,9 @@ public class ClassLocking {
}
}
+ /**
+ * Notifies {@link #lockWhile} to check the interrupt condition
+ */
public void interrupt() {
synchronized (monitor) {
monitor.notifyAll();