diff options
author | Valerij Fredriksen <freva@users.noreply.github.com> | 2019-01-04 16:36:07 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-04 16:36:07 +0100 |
commit | 8011defcea5a8e09dcc437e56db1c59c3d14f72d (patch) | |
tree | 431ed867d31a7c7fa0000388e39abd49bcfdf287 /flags | |
parent | ea0d19c25c7aff3576284601d25a2507a99c73f3 (diff) | |
parent | 52ee60f5f805f545f44bedc54eb123fbe48e5910 (diff) |
Merge pull request #8018 from vespa-engine/hakonhall/export-flagdata-wire-format
Export FlagData wire format
Diffstat (limited to 'flags')
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; |