summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java2
-rw-r--r--zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java3
-rw-r--r--zkfacade/src/main/java/com/yahoo/vespa/curator/CuratorWrapper.java43
3 files changed, 45 insertions, 3 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
index 5e09dd4732d..c85591336bb 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
@@ -245,7 +245,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
MIN_ZOOKEEPER_NODE_COUNT + " and " + MAX_ZOOKEEPER_NODE_COUNT +
", have " + nonRetiredNodes + " non-retired");
}
- cluster.addSimpleComponent("com.yahoo.vespa.curator.Curator", null, "zkfacade");
+ cluster.addSimpleComponent("com.yahoo.vespa.curator.CuratorWrapper", null, "zkfacade");
// These need to be setup so that they will use the container's config id, since each container
// have different config (id of zookeeper server)
diff --git a/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java b/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java
index e096eee8a97..134450edd9a 100644
--- a/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java
+++ b/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java
@@ -6,7 +6,6 @@ import com.yahoo.component.AbstractComponent;
import com.yahoo.component.annotation.Inject;
import com.yahoo.concurrent.DaemonThreadFactory;
import com.yahoo.path.Path;
-import com.yahoo.vespa.curator.api.VespaCurator;
import com.yahoo.vespa.curator.recipes.CuratorCounter;
import com.yahoo.vespa.defaults.Defaults;
import com.yahoo.vespa.zookeeper.VespaZooKeeperServer;
@@ -59,7 +58,7 @@ import java.util.logging.Logger;
* @author vegardh
* @author bratseth
*/
-public class Curator extends AbstractComponent implements VespaCurator, AutoCloseable {
+public class Curator extends AbstractComponent implements AutoCloseable {
private static final Logger LOG = Logger.getLogger(Curator.class.getName());
private static final File ZK_CLIENT_CONFIG_FILE = new File(Defaults.getDefaults().underVespaHome("conf/zookeeper/zookeeper-client.cfg"));
diff --git a/zkfacade/src/main/java/com/yahoo/vespa/curator/CuratorWrapper.java b/zkfacade/src/main/java/com/yahoo/vespa/curator/CuratorWrapper.java
new file mode 100644
index 00000000000..64c1a023a91
--- /dev/null
+++ b/zkfacade/src/main/java/com/yahoo/vespa/curator/CuratorWrapper.java
@@ -0,0 +1,43 @@
+package com.yahoo.vespa.curator;
+
+import com.yahoo.component.AbstractComponent;
+import com.yahoo.component.annotation.Inject;
+import com.yahoo.path.Path;
+import com.yahoo.vespa.curator.api.VespaCurator;
+import org.apache.curator.framework.state.ConnectionState;
+import org.apache.zookeeper.KeeperException.BadVersionException;
+import org.apache.zookeeper.data.Stat;
+
+import java.time.Clock;
+import java.time.Duration;
+import java.util.List;
+import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
+
+/**
+ * Implementation of {@link VespaCurator} which delegates to a {@link Curator}.
+ * This prefixes all paths with {@code "/user"}, to ensure separation with system ZK usage.
+ *
+ * @author jonmv
+ */
+public class CuratorWrapper extends AbstractComponent implements VespaCurator {
+
+ static final Path userRoot = Path.fromString("user");
+
+ private final Curator curator;
+
+ @Inject
+ public CuratorWrapper(Curator curator) {
+ this.curator = curator;
+ }
+
+ @Override
+ public AutoCloseable lock(Path path, Duration timeout) {
+ // TODO jonmv: clear up
+ Lock current, old = curator.lock(path, timeout);
+ try { current = curator.lock(userRoot.append(path), timeout); }
+ catch (Throwable t) { old.close(); throw t; }
+ return () -> { try(old) { current.close(); } };
+ }
+
+}