diff options
author | Håkon Hallingstad <hakon@oath.com> | 2019-01-26 15:04:53 +0100 |
---|---|---|
committer | Håkon Hallingstad <hakon@oath.com> | 2019-01-26 15:04:53 +0100 |
commit | a4cf71ae67fe32748cc06eb338be96889c4493ee (patch) | |
tree | 69b07b0b89f38bd7e0da226331f45b988b0cd64a /zkfacade | |
parent | 8e700d0078e1015756a23781efc461913dc87419 (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')
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()); |