summaryrefslogtreecommitdiffstats
path: root/flags
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2019-01-04 16:36:07 +0100
committerGitHub <noreply@github.com>2019-01-04 16:36:07 +0100
commit8011defcea5a8e09dcc437e56db1c59c3d14f72d (patch)
tree431ed867d31a7c7fa0000388e39abd49bcfdf287 /flags
parentea0d19c25c7aff3576284601d25a2507a99c73f3 (diff)
parent52ee60f5f805f545f44bedc54eb123fbe48e5910 (diff)
Merge pull request #8018 from vespa-engine/hakonhall/export-flagdata-wire-format
Export FlagData wire format
Diffstat (limited to 'flags')
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/Flags.java27
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/json/FlagData.java6
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/json/wire/package-info.java5
3 files changed, 31 insertions, 7 deletions
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
index 75488b6351b..a9de7d5a2c7 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
@@ -6,7 +6,7 @@ import com.yahoo.vespa.defaults.Defaults;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
-import java.util.concurrent.ConcurrentHashMap;
+import java.util.TreeMap;
import static com.yahoo.vespa.flags.FetchVector.Dimension.HOSTNAME;
@@ -14,7 +14,7 @@ import static com.yahoo.vespa.flags.FetchVector.Dimension.HOSTNAME;
* @author hakonhall
*/
public class Flags {
- private static volatile ConcurrentHashMap<FlagId, FlagDefinition> flags = new ConcurrentHashMap<>();
+ private static volatile TreeMap<FlagId, FlagDefinition> flags = new TreeMap<>();
public static final UnboundBooleanFlag HEALTHMONITOR_MONITOR_INFRA = defineFeatureFlag(
"healthmonitor-monitorinfra", true,
@@ -160,22 +160,39 @@ public class Flags {
* <p>Returns a Replacer instance to be used with e.g. a try-with-resources block. Within the block,
* the flags starts out as cleared. Flags can be defined, etc. When leaving the block, the flags from
* before the block is reinserted.
- * */
+ *
+ * <p>NOT thread-safe. Tests using this cannot run in parallel.
+ */
public static Replacer clearFlagsForTesting() {
return new Replacer();
}
public static class Replacer implements AutoCloseable {
- private final ConcurrentHashMap<FlagId, FlagDefinition> savedFlags;
+ private static volatile boolean flagsCleared = false;
+
+ private final TreeMap<FlagId, FlagDefinition> savedFlags;
private Replacer() {
+ verifyAndSetFlagsCleared(true);
this.savedFlags = Flags.flags;
- Flags.flags = new ConcurrentHashMap<>();
+ Flags.flags = new TreeMap<>();
}
@Override
public void close() {
+ verifyAndSetFlagsCleared(false);
Flags.flags = savedFlags;
}
+
+ /**
+ * Used to implement a simple verification that Replacer is not used by multiple threads.
+ * For instance two different tests running in parallel cannot both use Replacer.
+ */
+ private static void verifyAndSetFlagsCleared(boolean newValue) {
+ if (flagsCleared == newValue) {
+ throw new IllegalStateException("clearFlagsForTesting called while already cleared - running tests in parallell!?");
+ }
+ flagsCleared = newValue;
+ }
}
}
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/json/FlagData.java b/flags/src/main/java/com/yahoo/vespa/flags/json/FlagData.java
index b5bc2032bae..572ec511607 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/json/FlagData.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/json/FlagData.java
@@ -74,7 +74,8 @@ public class FlagData {
return toWire().serializeToJsonNode();
}
- private WireFlagData toWire() {
+ /** Can be used with Jackson. */
+ public WireFlagData toWire() {
WireFlagData wireFlagData = new WireFlagData();
wireFlagData.id = id.toString();
@@ -100,7 +101,8 @@ public class FlagData {
return fromWire(WireFlagData.deserialize(string));
}
- private static FlagData fromWire(WireFlagData wireFlagData) {
+ /** Can be used with Jackson. */
+ public static FlagData fromWire(WireFlagData wireFlagData) {
if (wireFlagData.id == null) {
throw new IllegalArgumentException("Flag ID missing");
}
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/json/wire/package-info.java b/flags/src/main/java/com/yahoo/vespa/flags/json/wire/package-info.java
new file mode 100644
index 00000000000..408908c312e
--- /dev/null
+++ b/flags/src/main/java/com/yahoo/vespa/flags/json/wire/package-info.java
@@ -0,0 +1,5 @@
+// Copyright 2019 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+@ExportPackage
+package com.yahoo.vespa.flags.json.wire;
+
+import com.yahoo.osgi.annotation.ExportPackage;