summaryrefslogtreecommitdiffstats
path: root/zkfacade
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2019-12-20 12:38:49 +0100
committerJon Marius Venstad <venstad@gmail.com>2019-12-20 12:38:49 +0100
commitc4a29ee378945abe0da60dcf362a045030a17557 (patch)
tree2f093e4708fc625efb0b655f2adcd2471c778811 /zkfacade
parentd1ef9ba58add96123213fd8fe65a6dcc6ffdb5a6 (diff)
Cache historic runs (with mock spuport for ZK node versions)
Diffstat (limited to 'zkfacade')
-rw-r--r--zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java2
-rw-r--r--zkfacade/src/main/java/com/yahoo/vespa/curator/mock/MemoryFileSystem.java10
-rw-r--r--zkfacade/src/main/java/com/yahoo/vespa/curator/mock/MockCurator.java11
3 files changed, 18 insertions, 5 deletions
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 9d74306d3d5..4b421102c2c 100644
--- a/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java
+++ b/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java
@@ -333,7 +333,7 @@ public class Curator implements AutoCloseable {
*/
public Optional<Stat> getStat(Path path) {
try {
- return Optional.of(framework().checkExists().forPath(path.getAbsolute()));
+ return Optional.ofNullable(framework().checkExists().forPath(path.getAbsolute()));
}
catch (KeeperException.NoNodeException e) {
return Optional.empty();
diff --git a/zkfacade/src/main/java/com/yahoo/vespa/curator/mock/MemoryFileSystem.java b/zkfacade/src/main/java/com/yahoo/vespa/curator/mock/MemoryFileSystem.java
index 95d75928988..aabfa95b884 100644
--- a/zkfacade/src/main/java/com/yahoo/vespa/curator/mock/MemoryFileSystem.java
+++ b/zkfacade/src/main/java/com/yahoo/vespa/curator/mock/MemoryFileSystem.java
@@ -16,6 +16,7 @@ import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
/**
* A simple in-memory "file system" useful for Curator caching/mocking.
@@ -116,6 +117,8 @@ class MemoryFileSystem extends FileSystem {
/** The content of this node, never null. This buffer is effectively immutable. */
private byte[] content;
+ private final AtomicInteger version = new AtomicInteger(0);
+
private Map<String, Node> children = Collections.synchronizedMap(new LinkedHashMap<>());
private Node(Node parent, String name) {
@@ -132,7 +135,12 @@ class MemoryFileSystem extends FileSystem {
public byte[] getContent() { return Arrays.copyOf(content, content.length); }
/** Replaces the content of this file */
- public void setContent(byte[] content) { this.content = Arrays.copyOf(content, content.length); }
+ public void setContent(byte[] content) {
+ this.content = Arrays.copyOf(content, content.length);
+ this.version.incrementAndGet();
+ }
+
+ public int version() { return version.get(); }
/**
* Returns the node given by the path.
diff --git a/zkfacade/src/main/java/com/yahoo/vespa/curator/mock/MockCurator.java b/zkfacade/src/main/java/com/yahoo/vespa/curator/mock/MockCurator.java
index 3d0fc933e90..f5848a07109 100644
--- a/zkfacade/src/main/java/com/yahoo/vespa/curator/mock/MockCurator.java
+++ b/zkfacade/src/main/java/com/yahoo/vespa/curator/mock/MockCurator.java
@@ -797,10 +797,15 @@ public class MockCurator extends Curator {
@Override
public Stat forPath(String path) throws Exception {
- if (exists(path, fileSystem.root()))
- return new Stat(); // A more accurate mock should set the stat fields
- else
+ try {
+ Node node = getNode(path, fileSystem.root());
+ Stat stat = new Stat();
+ stat.setVersion(node.version());
+ return stat;
+ }
+ catch (KeeperException.NoNodeException e) {
return null;
+ }
}
@Override