summaryrefslogtreecommitdiffstats
path: root/vespajlib
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@oath.com>2017-09-26 13:52:15 +0200
committerValerij Fredriksen <valerijf@oath.com>2017-09-26 13:52:15 +0200
commitb5686d5bbb9f5d7447747099097d5b290694da07 (patch)
treea16354264796a86482503ce31ff1b92093135886 /vespajlib
parent6796195b37f351f843eea4992d2d45b7ba4eb771 (diff)
Add javadoc
Diffstat (limited to 'vespajlib')
-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();