summaryrefslogtreecommitdiffstats
path: root/zkfacade
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@oath.com>2019-01-26 15:04:53 +0100
committerHåkon Hallingstad <hakon@oath.com>2019-01-26 15:04:53 +0100
commita4cf71ae67fe32748cc06eb338be96889c4493ee (patch)
tree69b07b0b89f38bd7e0da226331f45b988b0cd64a /zkfacade
parent8e700d0078e1015756a23781efc461913dc87419 (diff)
Cache flags DB
Up until now every lookup of a flag on ZooKeeperFlagSource would hit ZooKeeper. Flags are ideal for caching: Changes seldom, little data, clients should handle short-lived inconsistencies. This PR will make the backing FlagsDbImpl cache the /flags/v1 ZK directory and completes the optimization of ConfigServerFlagSource.
Diffstat (limited to 'zkfacade')
-rw-r--r--zkfacade/abi-spec.json1
-rw-r--r--zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java3
-rw-r--r--zkfacade/src/main/java/com/yahoo/vespa/curator/PathChildrenCacheWrapper.java6
-rw-r--r--zkfacade/src/main/java/com/yahoo/vespa/curator/mock/MockCurator.java9
4 files changed, 19 insertions, 0 deletions
diff --git a/zkfacade/abi-spec.json b/zkfacade/abi-spec.json
index 5610fb2e9cf..eb8edaa5b97 100644
--- a/zkfacade/abi-spec.json
+++ b/zkfacade/abi-spec.json
@@ -36,6 +36,7 @@
"public abstract void start()",
"public abstract void addListener(org.apache.curator.framework.recipes.cache.PathChildrenCacheListener)",
"public abstract java.util.List getCurrentData()",
+ "public abstract org.apache.curator.framework.recipes.cache.ChildData getCurrentData(com.yahoo.path.Path)",
"public abstract void close()"
],
"fields": []
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 6ba394c340d..91140fcf713 100644
--- a/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java
+++ b/zkfacade/src/main/java/com/yahoo/vespa/curator/Curator.java
@@ -358,6 +358,9 @@ public class Curator implements AutoCloseable {
List<ChildData> getCurrentData();
+ /** Returns the ChildData, or null if it does not exist. */
+ ChildData getCurrentData(Path absolutePath);
+
void close();
}
diff --git a/zkfacade/src/main/java/com/yahoo/vespa/curator/PathChildrenCacheWrapper.java b/zkfacade/src/main/java/com/yahoo/vespa/curator/PathChildrenCacheWrapper.java
index 2340fb1b5a8..e069034e1d8 100644
--- a/zkfacade/src/main/java/com/yahoo/vespa/curator/PathChildrenCacheWrapper.java
+++ b/zkfacade/src/main/java/com/yahoo/vespa/curator/PathChildrenCacheWrapper.java
@@ -1,6 +1,7 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.curator;
+import com.yahoo.path.Path;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.recipes.cache.ChildData;
import org.apache.curator.framework.recipes.cache.PathChildrenCache;
@@ -44,6 +45,11 @@ class PathChildrenCacheWrapper implements Curator.DirectoryCache {
}
@Override
+ public ChildData getCurrentData(Path absolutePath) {
+ return wrapped.getCurrentData(absolutePath.getAbsolute());
+ }
+
+ @Override
public void close() {
try {
wrapped.close();
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 4013cf1d649..85fa0ded838 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
@@ -572,6 +572,15 @@ public class MockCurator extends Curator {
return childData;
}
+ @Override
+ public ChildData getCurrentData(Path fullPath) {
+ if (!fullPath.getParentPath().equals(path)) {
+ throw new IllegalArgumentException("Path '" + fullPath + "' is not a child path of '" + path + "'");
+ }
+
+ return getData(fullPath).map(bytes -> new ChildData(fullPath.getAbsolute(), null, bytes)).orElse(null);
+ }
+
private void collectData(Node parent, Path parentPath, List<ChildData> data) {
for (Node child : parent.children().values()) {
Path childPath = parentPath.append(child.name());