summaryrefslogtreecommitdiffstats
path: root/configserver-flags
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2019-07-11 14:13:23 +0200
committerMartin Polden <mpolden@mpolden.no>2019-07-12 09:37:46 +0200
commitb81b21546cdff92d360cbdf7dda27e6ed7bc7170 (patch)
tree1eead4f28363772088c56fbb7a89c76360c6fc7c /configserver-flags
parent1c79079945c56fa91de8427fbc8f2170eec9ed8c (diff)
Decouple flags REST API from config server
Diffstat (limited to 'configserver-flags')
-rw-r--r--configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/ConfigServerFlagSource.java1
-rw-r--r--configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/FlagsDb.java25
-rw-r--r--configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/db/FlagsDbImpl.java67
-rw-r--r--configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/db/ZooKeeperFlagSource.java2
-rw-r--r--configserver-flags/src/test/java/com/yahoo/vespa/configserver/flags/ConfigServerFlagSourceTest.java3
-rw-r--r--configserver-flags/src/test/java/com/yahoo/vespa/configserver/flags/db/FlagsDbImplTest.java56
6 files changed, 4 insertions, 150 deletions
diff --git a/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/ConfigServerFlagSource.java b/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/ConfigServerFlagSource.java
index b1ffc05e70c..90709951dec 100644
--- a/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/ConfigServerFlagSource.java
+++ b/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/ConfigServerFlagSource.java
@@ -5,6 +5,7 @@ import com.google.inject.Inject;
import com.yahoo.vespa.configserver.flags.db.BootstrapFlagSource;
import com.yahoo.vespa.configserver.flags.db.ZooKeeperFlagSource;
import com.yahoo.vespa.flags.OrderedFlagSource;
+import com.yahoo.vespa.flags.persistence.FlagsDb;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
diff --git a/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/FlagsDb.java b/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/FlagsDb.java
deleted file mode 100644
index 2c29ae0b818..00000000000
--- a/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/FlagsDb.java
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.configserver.flags;
-
-import com.yahoo.vespa.flags.FlagId;
-import com.yahoo.vespa.flags.json.FlagData;
-
-import java.util.Map;
-import java.util.Optional;
-
-/**
- * @author hakonhall
- */
-public interface FlagsDb {
- /** Get the String value of the flag. */
- Optional<FlagData> getValue(FlagId flagId);
-
- /** Set the String value of the flag. */
- void setValue(FlagId flagId, FlagData data);
-
- /** Remove the flag value if it exists. */
- void removeValue(FlagId flagId);
-
- /** Get all flags that have been set. */
- Map<FlagId, FlagData> getAllFlags();
-}
diff --git a/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/db/FlagsDbImpl.java b/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/db/FlagsDbImpl.java
deleted file mode 100644
index 5058358ba03..00000000000
--- a/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/db/FlagsDbImpl.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.configserver.flags.db;
-
-import com.google.inject.Inject;
-import com.yahoo.path.Path;
-import com.yahoo.vespa.configserver.flags.FlagsDb;
-import com.yahoo.vespa.curator.Curator;
-import com.yahoo.vespa.flags.FlagId;
-import com.yahoo.vespa.flags.json.FlagData;
-import org.apache.curator.framework.recipes.cache.ChildData;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-/**
- * @author hakonhall
- */
-public class FlagsDbImpl implements FlagsDb {
- private static final Path ROOT_PATH = Path.fromString("/flags/v1");
-
- private final Curator curator;
- private final Curator.DirectoryCache cache;
-
- @Inject
- public FlagsDbImpl(Curator curator) {
- this.curator = curator;
- curator.create(ROOT_PATH);
- ExecutorService executorService = Executors.newFixedThreadPool(1);
- this.cache = curator.createDirectoryCache(ROOT_PATH.getAbsolute(), true, false, executorService);
- cache.start();
- }
-
- @Override
- public Optional<FlagData> getValue(FlagId flagId) {
- return Optional.ofNullable(cache.getCurrentData(getZkPathFor(flagId)))
- .map(ChildData::getData)
- .map(FlagData::deserializeUtf8Json);
- }
-
- @Override
- public void setValue(FlagId flagId, FlagData data) {
- curator.set(getZkPathFor(flagId), data.serializeToUtf8Json());
- }
-
- @Override
- public Map<FlagId, FlagData> getAllFlags() {
- List<ChildData> dataList = cache.getCurrentData();
- return dataList.stream()
- .map(ChildData::getData)
- .map(FlagData::deserializeUtf8Json)
- .collect(Collectors.toMap(FlagData::id, Function.identity()));
- }
-
- @Override
- public void removeValue(FlagId flagId) {
- curator.delete(getZkPathFor(flagId));
- }
-
- private static Path getZkPathFor(FlagId flagId) {
- return ROOT_PATH.append(flagId.toString());
- }
-}
diff --git a/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/db/ZooKeeperFlagSource.java b/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/db/ZooKeeperFlagSource.java
index 4a9d604b4bd..e6ab3f5b387 100644
--- a/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/db/ZooKeeperFlagSource.java
+++ b/configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/db/ZooKeeperFlagSource.java
@@ -1,7 +1,7 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.configserver.flags.db;
-import com.yahoo.vespa.configserver.flags.FlagsDb;
+import com.yahoo.vespa.flags.persistence.FlagsDb;
import com.yahoo.vespa.flags.FetchVector;
import com.yahoo.vespa.flags.FlagId;
import com.yahoo.vespa.flags.FlagSource;
diff --git a/configserver-flags/src/test/java/com/yahoo/vespa/configserver/flags/ConfigServerFlagSourceTest.java b/configserver-flags/src/test/java/com/yahoo/vespa/configserver/flags/ConfigServerFlagSourceTest.java
index d0d1d61628c..b2f891326fc 100644
--- a/configserver-flags/src/test/java/com/yahoo/vespa/configserver/flags/ConfigServerFlagSourceTest.java
+++ b/configserver-flags/src/test/java/com/yahoo/vespa/configserver/flags/ConfigServerFlagSourceTest.java
@@ -7,6 +7,7 @@ import com.yahoo.vespa.flags.FetchVector;
import com.yahoo.vespa.flags.FlagId;
import com.yahoo.vespa.flags.Flags;
import com.yahoo.vespa.flags.RawFlag;
+import com.yahoo.vespa.flags.persistence.FlagsDb;
import com.yahoo.vespa.test.file.TestFileSystem;
import org.junit.After;
import org.junit.Before;
@@ -103,4 +104,4 @@ public class ConfigServerFlagSourceTest {
assertFalse(rawFlag2.isPresent());
verify(flagsDb, times(1)).getValue(flagId2);
}
-} \ No newline at end of file
+}
diff --git a/configserver-flags/src/test/java/com/yahoo/vespa/configserver/flags/db/FlagsDbImplTest.java b/configserver-flags/src/test/java/com/yahoo/vespa/configserver/flags/db/FlagsDbImplTest.java
deleted file mode 100644
index ecc9bacb081..00000000000
--- a/configserver-flags/src/test/java/com/yahoo/vespa/configserver/flags/db/FlagsDbImplTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.configserver.flags.db;
-
-import com.yahoo.vespa.curator.mock.MockCurator;
-import com.yahoo.vespa.flags.FetchVector;
-import com.yahoo.vespa.flags.FlagId;
-import com.yahoo.vespa.flags.JsonNodeRawFlag;
-import com.yahoo.vespa.flags.json.Condition;
-import com.yahoo.vespa.flags.json.FlagData;
-import com.yahoo.vespa.flags.json.Rule;
-import org.junit.Test;
-
-import java.util.Map;
-import java.util.Optional;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-/**
- * @author hakonhall
- */
-public class FlagsDbImplTest {
- @Test
- public void test() {
- MockCurator curator = new MockCurator();
- FlagsDbImpl db = new FlagsDbImpl(curator);
-
- Condition condition1 = new Condition(Condition.Type.WHITELIST, FetchVector.Dimension.HOSTNAME, "host1");
- Rule rule1 = new Rule(Optional.of(JsonNodeRawFlag.fromJson("13")), condition1);
- FlagId flagId = new FlagId("id");
- FlagData data = new FlagData(flagId, new FetchVector().with(FetchVector.Dimension.ZONE_ID, "zone-a"), rule1);
- db.setValue(flagId, data);
-
- Optional<FlagData> dataCopy = db.getValue(flagId);
- assertTrue(dataCopy.isPresent());
-
- assertEquals("{\"id\":\"id\",\"rules\":[{\"conditions\":[{\"type\":\"whitelist\",\"dimension\":\"hostname\"," +
- "\"values\":[\"host1\"]}],\"value\":13}],\"attributes\":{\"zone\":\"zone-a\"}}",
- dataCopy.get().serializeToJson());
-
- FlagId flagId2 = new FlagId("id2");
- FlagData data2 = new FlagData(flagId2, new FetchVector().with(FetchVector.Dimension.ZONE_ID, "zone-a"), rule1);
- db.setValue(flagId2, data2);
- Map<FlagId, FlagData> flags = db.getAllFlags();
- assertThat(flags.size(), equalTo(2));
- assertThat(flags.get(flagId), notNullValue());
- assertThat(flags.get(flagId2), notNullValue());
-
- db.removeValue(flagId2);
- assertFalse(db.getValue(flagId2).isPresent());
- }
-} \ No newline at end of file