diff options
-rw-r--r-- | node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java | 2 | ||||
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLocking.java | 16 |
2 files changed, 9 insertions, 9 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java index f2dd445f8c8..70821d29932 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java @@ -87,7 +87,7 @@ public class NodeAdminStateUpdater { this.loopThread = new Thread(() -> { log.info(objectToString() + ": Acquiring lock"); try { - classLock = Optional.of(classLocking.tryLock(NodeAdminStateUpdater.class, () -> !terminated.get())); + classLock = Optional.of(classLocking.lockWhile(NodeAdminStateUpdater.class, () -> !terminated.get())); } catch (LockInterruptException e) { classLock = Optional.empty(); return; 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 61e6850ee2e..a6347d9fb14 100644 --- a/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLocking.java +++ b/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLocking.java @@ -2,7 +2,7 @@ package com.yahoo.concurrent.classlock; import java.util.HashMap; import java.util.Map; -import java.util.function.Supplier; +import java.util.function.BooleanSupplier; /** * @author valerijf @@ -11,18 +11,18 @@ public class ClassLocking { private final Map<Class<?>, ClassLock> classLocks = new HashMap<>(); public synchronized ClassLock lock(Class<?> clazz) { - return tryLock(clazz, () -> true); + return lockWhile(clazz, () -> true); } - public synchronized ClassLock tryLock(Class<?> clazz, Supplier<Boolean> continueRetrying) { + public synchronized ClassLock lockWhile(Class<?> clazz, BooleanSupplier interruptCondition) { while(classLocks.containsKey(clazz)) { try { wait(); - } catch (InterruptedException ignored) { - if (! continueRetrying.get()) { - throw new LockInterruptException(); - } - } + } catch (InterruptedException ignored) { } + } + + if (! interruptCondition.getAsBoolean()) { + throw new LockInterruptException(); } ClassLock classLock = new ClassLock(this, clazz); |