diff options
Diffstat (limited to 'flags')
3 files changed, 25 insertions, 38 deletions
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/FetchVector.java b/flags/src/main/java/com/yahoo/vespa/flags/FetchVector.java index b16d26a04a4..bbf932ab652 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/FetchVector.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/FetchVector.java @@ -22,6 +22,9 @@ public class FetchVector { * Note: If this enum is changed, you must also change {@link DimensionHelper}. */ public enum Dimension { + /** Application id from ApplicationId::toSerializedForm(TenantName, ApplicationName) on the form tenant:applicationName. */ + APPLICATION_ID, + /** * Cloud from com.yahoo.config.provision.CloudName::value, e.g. yahoo, aws, gcp. * diff --git a/flags/src/main/java/com/yahoo/vespa/flags/json/DimensionHelper.java b/flags/src/main/java/com/yahoo/vespa/flags/json/DimensionHelper.java index 8fb48c8a82f..04beec19d73 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/json/DimensionHelper.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/json/DimensionHelper.java @@ -7,28 +7,30 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * @author hakonhall */ public class DimensionHelper { - private static final Map<FetchVector.Dimension, List<String>> serializedDimensions = new HashMap<>(); + private static final Map<FetchVector.Dimension, String> serializedDimensions = new HashMap<>(); static { - serializedDimensions.put(FetchVector.Dimension.CLOUD, List.of("cloud")); - serializedDimensions.put(FetchVector.Dimension.CLOUD_ACCOUNT, List.of("cloud-account")); - serializedDimensions.put(FetchVector.Dimension.CLUSTER_ID, List.of("cluster-id")); - serializedDimensions.put(FetchVector.Dimension.CLUSTER_TYPE, List.of("cluster-type")); - serializedDimensions.put(FetchVector.Dimension.CONSOLE_USER_EMAIL, List.of("console-user-email")); - serializedDimensions.put(FetchVector.Dimension.ENVIRONMENT, List.of("environment")); - serializedDimensions.put(FetchVector.Dimension.HOSTNAME, List.of("hostname")); - serializedDimensions.put(FetchVector.Dimension.INSTANCE_ID, List.of("instance", "application")); - serializedDimensions.put(FetchVector.Dimension.NODE_TYPE, List.of("node-type")); - serializedDimensions.put(FetchVector.Dimension.SYSTEM, List.of("system")); - serializedDimensions.put(FetchVector.Dimension.TENANT_ID, List.of("tenant")); - serializedDimensions.put(FetchVector.Dimension.VESPA_VERSION, List.of("vespa-version")); - serializedDimensions.put(FetchVector.Dimension.ZONE_ID, List.of("zone")); + serializedDimensions.put(FetchVector.Dimension.APPLICATION_ID, "application"); + serializedDimensions.put(FetchVector.Dimension.CLOUD, "cloud"); + serializedDimensions.put(FetchVector.Dimension.CLOUD_ACCOUNT, "cloud-account"); + serializedDimensions.put(FetchVector.Dimension.CLUSTER_ID, "cluster-id"); + serializedDimensions.put(FetchVector.Dimension.CLUSTER_TYPE, "cluster-type"); + serializedDimensions.put(FetchVector.Dimension.CONSOLE_USER_EMAIL, "console-user-email"); + serializedDimensions.put(FetchVector.Dimension.ENVIRONMENT, "environment"); + serializedDimensions.put(FetchVector.Dimension.HOSTNAME, "hostname"); + serializedDimensions.put(FetchVector.Dimension.INSTANCE_ID, "instance"); + serializedDimensions.put(FetchVector.Dimension.NODE_TYPE, "node-type"); + serializedDimensions.put(FetchVector.Dimension.SYSTEM, "system"); + serializedDimensions.put(FetchVector.Dimension.TENANT_ID, "tenant"); + serializedDimensions.put(FetchVector.Dimension.VESPA_VERSION, "vespa-version"); + serializedDimensions.put(FetchVector.Dimension.ZONE_ID, "zone"); if (serializedDimensions.size() != FetchVector.Dimension.values().length) { throw new IllegalStateException(FetchVectorHelper.class.getName() + " is not in sync with " + @@ -36,27 +38,16 @@ public class DimensionHelper { } } - private static final Map<String, FetchVector.Dimension> deserializedDimensions = reverseMapping(serializedDimensions); - - private static Map<String, FetchVector.Dimension> reverseMapping(Map<FetchVector.Dimension, List<String>> mapping) { - Map<String, FetchVector.Dimension> reverseMapping = new LinkedHashMap<>(); - mapping.forEach((dimension, serializedDimensions) -> { - serializedDimensions.forEach(serializedDimension -> { - if (reverseMapping.put(serializedDimension, dimension) != null) { - throw new IllegalStateException("Duplicate serialized dimension: '" + serializedDimension + "'"); - } - }); - }); - return Map.copyOf(reverseMapping); - } + private static final Map<String, FetchVector.Dimension> deserializedDimensions = serializedDimensions. + entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); public static String toWire(FetchVector.Dimension dimension) { - List<String> serializedDimension = serializedDimensions.get(dimension); - if (serializedDimension == null || serializedDimension.isEmpty()) { + String serializedDimension = serializedDimensions.get(dimension); + if (serializedDimension == null) { throw new IllegalArgumentException("Unsupported dimension (please add it): '" + dimension + "'"); } - return serializedDimension.get(0); + return serializedDimension; } public static FetchVector.Dimension fromWire(String serializedDimension) { diff --git a/flags/src/test/java/com/yahoo/vespa/flags/json/FlagDataTest.java b/flags/src/test/java/com/yahoo/vespa/flags/json/FlagDataTest.java index ed81afc8054..40310c47f78 100644 --- a/flags/src/test/java/com/yahoo/vespa/flags/json/FlagDataTest.java +++ b/flags/src/test/java/com/yahoo/vespa/flags/json/FlagDataTest.java @@ -30,7 +30,7 @@ public class FlagDataTest { }, { "type": "blacklist", - "dimension": "application", + "dimension": "instance", "values": [ "app1", "app2" ] } ], @@ -52,8 +52,6 @@ public class FlagDataTest { } }"""; - private final String json_with_instance = json.replace("application", "instance"); - private final FetchVector vector = new FetchVector(); @Test @@ -273,11 +271,6 @@ public class FlagDataTest { } private void verify(Optional<String> expectedValue, FetchVector vector) { - verify(json, expectedValue, vector); - verify(json_with_instance, expectedValue, vector); - } - - private void verify(String json, Optional<String> expectedValue, FetchVector vector) { FlagData data = FlagData.deserialize(json); assertEquals("id1", data.id().toString()); Optional<RawFlag> rawFlag = data.resolve(vector); |