summaryrefslogtreecommitdiffstats
path: root/zkfacade
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-11-09 15:27:01 +0100
committerjonmv <venstad@gmail.com>2022-11-09 15:27:01 +0100
commit1370be1ed9696d890724733586dffd4a036e7f90 (patch)
treeb4445fb6bc5d9d6f98b1f7d5f3625513ac0262c1 /zkfacade
parentda30932f4c7fa168814c44b816cc381ee51daa3b (diff)
Clean orphans when failing to get the lock
Diffstat (limited to 'zkfacade')
-rw-r--r--zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java15
1 files changed, 14 insertions, 1 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 28d3b052ce2..f021f4ca955 100644
--- a/zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java
+++ b/zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java
@@ -286,10 +286,12 @@ class SingletonManager {
}
catch (UncheckedTimeoutException e) {
logger.log(FINE, e, () -> "Timed out acquiring lock for '" + path + "' within " + tickTimeout);
+ cleanOrphans();
return;
}
catch (RuntimeException e) {
- logger.log(INFO, e, () -> "Failed acquiring lock for '" + path + "' within " + tickTimeout);
+ logger.log(WARNING, e, () -> "Failed acquiring lock for '" + path + "' within " + tickTimeout);
+ cleanOrphans();
return;
}
try {
@@ -304,6 +306,17 @@ class SingletonManager {
}
}
+ private void cleanOrphans() {
+ List<String> orphans = null;
+ try {
+ for (String orphan : orphans = curator.framework().getZookeeperClient().getZooKeeper().getEphemerals(path.getAbsolute()))
+ curator.delete(path.append(orphan));
+ }
+ catch (Exception e) {
+ logger.log(WARNING, "Failed cleaning orphans: " + orphans, e);
+ }
+ }
+
/**
* Attempt to activate or deactivate if status has changed.
* If activation fails, we release the lock, so a different container may acquire it.