summaryrefslogtreecommitdiffstats
path: root/zkfacade
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2023-02-14 07:45:56 +0100
committerjonmv <venstad@gmail.com>2023-02-14 07:45:56 +0100
commit27ab9028091207ee4546f884afc6146fa75c7c36 (patch)
tree550c2c6e2f15f4e8272036c5ad26481183546611 /zkfacade
parent7cb3576347f6cbaf96a4ba558b595654f99c37c1 (diff)
When lock was closed, unbeknownst to us, release it internally
Diffstat (limited to 'zkfacade')
-rw-r--r--zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java19
1 files changed, 15 insertions, 4 deletions
diff --git a/zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java b/zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java
index 0b6d1611563..9cdcb1dfb74 100644
--- a/zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java
+++ b/zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java
@@ -139,6 +139,7 @@ class SingletonManager {
final Path path;
final MetricHelper metrics;
Lock lock = null;
+ Lock toClose = null;
boolean active;
Janitor(String id) {
@@ -153,13 +154,19 @@ class SingletonManager {
public void unlock() {
doom.set(null);
- if (lock != null) try {
+ if (lock != null) toClose = lock;
+ lock = null;
+ if (toClose != null) try {
logger.log(INFO, "Relinquishing lease for " + id);
- lock.close();
- lock = null;
+ toClose.close();
+ toClose = null;
+ }
+ catch (IllegalMonitorStateException e) {
+ toClose = null;
+ logger.log(WARNING, "Failed closing " + lock + ", already closed", e);
}
catch (Exception e) {
- logger.log(WARNING, "Failed closing " + lock, e);
+ logger.log(WARNING, "Failed closing " + lock + ", will retry", e);
}
}
@@ -272,6 +279,10 @@ class SingletonManager {
* If lock is held, or acquired, ping the ZK cluster to extend our deadline.
*/
private void renewLease() {
+ if (toClose != null) {
+ logger.log(INFO, "Need to close the old lock before attempting a new one");
+ return;
+ }
if (doom.get() == INVALID) {
logger.log(INFO, "Lease invalidated");
doom.set(null);