From b81b21546cdff92d360cbdf7dda27e6ed7bc7170 Mon Sep 17 00:00:00 2001 From: Martin Polden Date: Thu, 11 Jul 2019 14:13:23 +0200 Subject: Decouple flags REST API from config server --- .../configserver/flags/ConfigServerFlagSource.java | 1 + .../yahoo/vespa/configserver/flags/FlagsDb.java | 25 -------- .../vespa/configserver/flags/db/FlagsDbImpl.java | 67 ---------------------- .../configserver/flags/db/ZooKeeperFlagSource.java | 2 +- .../flags/ConfigServerFlagSourceTest.java | 3 +- .../configserver/flags/db/FlagsDbImplTest.java | 56 ------------------ 6 files changed, 4 insertions(+), 150 deletions(-) delete mode 100644 configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/FlagsDb.java delete mode 100644 configserver-flags/src/main/java/com/yahoo/vespa/configserver/flags/db/FlagsDbImpl.java delete mode 100644 configserver-flags/src/test/java/com/yahoo/vespa/configserver/flags/db/FlagsDbImplTest.java (limited to 'configserver-flags/src') 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 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 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 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 getAllFlags() { - List 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 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 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 -- cgit v1.2.3