diff options
author | jonmv <venstad@gmail.com> | 2023-02-14 07:45:56 +0100 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2023-02-14 07:45:56 +0100 |
commit | 27ab9028091207ee4546f884afc6146fa75c7c36 (patch) | |
tree | 550c2c6e2f15f4e8272036c5ad26481183546611 /zkfacade | |
parent | 7cb3576347f6cbaf96a4ba558b595654f99c37c1 (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.java | 19 |
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); |