diff options
author | Harald Musum <musum@verizonmedia.com> | 2022-04-07 09:30:26 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-07 09:30:26 +0200 |
commit | a4a4fadd9a2da2d0a3dfbec9a08ab33167089e0c (patch) | |
tree | aa762d3a807379280330671adbd23c0dbff77346 /zkfacade/src | |
parent | 87b9dcc76a9b33f8b456d53c9aa9e19e89645ee1 (diff) |
Revert "Revert "Start using new Curator locks in controller" MERGEOK"
Diffstat (limited to 'zkfacade/src')
-rw-r--r-- | zkfacade/src/main/java/com/yahoo/vespa/curator/Lock.java | 3 | ||||
-rw-r--r-- | zkfacade/src/main/java/com/yahoo/vespa/curator/MultiplePathsLock.java | 41 |
2 files changed, 44 insertions, 0 deletions
diff --git a/zkfacade/src/main/java/com/yahoo/vespa/curator/Lock.java b/zkfacade/src/main/java/com/yahoo/vespa/curator/Lock.java index 56ae65bb317..3f9c52594a3 100644 --- a/zkfacade/src/main/java/com/yahoo/vespa/curator/Lock.java +++ b/zkfacade/src/main/java/com/yahoo/vespa/curator/Lock.java @@ -69,6 +69,9 @@ public class Lock implements Mutex { throw new RuntimeException("Exception releasing lock '" + lockPath + "'"); } } + + protected String lockPath() { return lockPath; } + } diff --git a/zkfacade/src/main/java/com/yahoo/vespa/curator/MultiplePathsLock.java b/zkfacade/src/main/java/com/yahoo/vespa/curator/MultiplePathsLock.java new file mode 100644 index 00000000000..65ae77c8ffa --- /dev/null +++ b/zkfacade/src/main/java/com/yahoo/vespa/curator/MultiplePathsLock.java @@ -0,0 +1,41 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.curator; + +import com.yahoo.concurrent.UncheckedTimeoutException; +import com.yahoo.path.Path; + +import java.time.Duration; + +/** + * Class that holds two locks, originally used for transitioning from one lock to + * another, where you need to hold both the old lock and the new lock in the + * transition period. + * + * @author hmusum + */ +public class MultiplePathsLock extends Lock { + + private final Lock oldLock; + private final Lock newLock; + + public MultiplePathsLock(Path newLockPath, Path oldLockPath, Duration timeout, Curator curator) { + super(newLockPath.getAbsolute(), curator); + this.newLock = curator.lock(newLockPath, timeout); + this.oldLock = curator.lock(oldLockPath, timeout);; + } + + @Override + public void acquire(Duration timeout) throws UncheckedTimeoutException { + oldLock.acquire(timeout); + newLock.acquire(timeout); + } + + @Override + public void close() { + oldLock.close(); + newLock.close(); + } + +} + + |