summaryrefslogtreecommitdiffstats
path: root/vespajlib
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@oath.com>2017-09-20 13:44:13 +0200
committerValerij Fredriksen <valerijf@oath.com>2017-09-22 09:13:01 +0200
commitab9a46fd9163b2cbec7811ef6e1e405685da269d (patch)
treefeab2e862c58677149a4cc9fd2894387819bbc39 /vespajlib
parent0589e4cdceb62e73ffbd6c620f5dea2ea6a6812e (diff)
Add locks to ComponentsProviderImpl
Diffstat (limited to 'vespajlib')
-rw-r--r--vespajlib/src/main/java/com/yahoo/concurrent/lock/Lock.java (renamed from vespajlib/src/main/java/com/yahoo/concurrent/Lock.java)2
-rw-r--r--vespajlib/src/main/java/com/yahoo/concurrent/lock/Locking.java30
-rw-r--r--vespajlib/src/main/java/com/yahoo/concurrent/lock/Locks.java (renamed from vespajlib/src/main/java/com/yahoo/concurrent/Locks.java)2
-rw-r--r--vespajlib/src/main/java/com/yahoo/concurrent/lock/package-info.java5
4 files changed, 37 insertions, 2 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/concurrent/Lock.java b/vespajlib/src/main/java/com/yahoo/concurrent/lock/Lock.java
index 3b1919a987d..1273a298592 100644
--- a/vespajlib/src/main/java/com/yahoo/concurrent/Lock.java
+++ b/vespajlib/src/main/java/com/yahoo/concurrent/lock/Lock.java
@@ -1,5 +1,5 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.concurrent;
+package com.yahoo.concurrent.lock;
import java.util.concurrent.locks.ReentrantLock;
diff --git a/vespajlib/src/main/java/com/yahoo/concurrent/lock/Locking.java b/vespajlib/src/main/java/com/yahoo/concurrent/lock/Locking.java
new file mode 100644
index 00000000000..cbfadf73a32
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/concurrent/lock/Locking.java
@@ -0,0 +1,30 @@
+package com.yahoo.concurrent.lock;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.ReentrantLock;
+
+/**
+ * @author valerijf
+ */
+public class Locking {
+ private final Map<Class<?>, ReentrantLock> locks = new ConcurrentHashMap<>();
+
+ /**
+ * Locks class. This will block until the lock is acquired.
+ * Users of this <b>must</b> close any lock acquired.
+ *
+ * @param key the key to lock
+ * @return the acquired lock
+ */
+ public Lock lock(Class<?> key) {
+ try {
+ ReentrantLock lock = locks.computeIfAbsent(key, k -> new ReentrantLock(true));
+ lock.tryLock(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
+ return new Lock(lock);
+ } catch (InterruptedException e) {
+ throw new RuntimeException("Interrupted while waiting for lock of " + key);
+ }
+ }
+}
diff --git a/vespajlib/src/main/java/com/yahoo/concurrent/Locks.java b/vespajlib/src/main/java/com/yahoo/concurrent/lock/Locks.java
index ab167392329..0308b26c903 100644
--- a/vespajlib/src/main/java/com/yahoo/concurrent/Locks.java
+++ b/vespajlib/src/main/java/com/yahoo/concurrent/lock/Locks.java
@@ -1,5 +1,5 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.concurrent;
+package com.yahoo.concurrent.lock;
import com.google.common.util.concurrent.UncheckedTimeoutException;
diff --git a/vespajlib/src/main/java/com/yahoo/concurrent/lock/package-info.java b/vespajlib/src/main/java/com/yahoo/concurrent/lock/package-info.java
new file mode 100644
index 00000000000..326124e600f
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/concurrent/lock/package-info.java
@@ -0,0 +1,5 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+@ExportPackage
+package com.yahoo.concurrent.lock;
+
+import com.yahoo.osgi.annotation.ExportPackage;