diff options
author | Morten Tokle <mortent@yahooinc.com> | 2023-09-22 10:44:56 +0200 |
---|---|---|
committer | Morten Tokle <mortent@yahooinc.com> | 2023-09-22 10:44:56 +0200 |
commit | ddb3ea3b347a17678664e2430d00e232e8f8fb31 (patch) | |
tree | 8ef15e4fb4614e54ab946f15e8e9fa1b7bfc1bcb /flags | |
parent | 4c62f27ca181c09f42ae15f7ffb4d497ab53395b (diff) |
Deserialize "application" and "instance" to INSTANCE_ID
Diffstat (limited to 'flags')
-rw-r--r-- | flags/src/main/java/com/yahoo/vespa/flags/json/DimensionHelper.java | 52 | ||||
-rw-r--r-- | flags/src/test/java/com/yahoo/vespa/flags/json/FlagDataTest.java | 7 |
2 files changed, 39 insertions, 20 deletions
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 3d63a31d3a2..8fb48c8a82f 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 @@ -4,30 +4,31 @@ package com.yahoo.vespa.flags.json; import com.yahoo.vespa.flags.FetchVector; 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, String> serializedDimensions = new HashMap<>(); + private static final Map<FetchVector.Dimension, List<String>> serializedDimensions = new HashMap<>(); static { - serializedDimensions.put(FetchVector.Dimension.INSTANCE_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.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"); + 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")); if (serializedDimensions.size() != FetchVector.Dimension.values().length) { throw new IllegalStateException(FetchVectorHelper.class.getName() + " is not in sync with " + @@ -35,16 +36,27 @@ public class DimensionHelper { } } - private static final Map<String, FetchVector.Dimension> deserializedDimensions = serializedDimensions. - entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); + 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); + } public static String toWire(FetchVector.Dimension dimension) { - String serializedDimension = serializedDimensions.get(dimension); - if (serializedDimension == null) { + List<String> serializedDimension = serializedDimensions.get(dimension); + if (serializedDimension == null || serializedDimension.isEmpty()) { throw new IllegalArgumentException("Unsupported dimension (please add it): '" + dimension + "'"); } - return serializedDimension; + return serializedDimension.get(0); } 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 64eace97849..ed81afc8054 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 @@ -52,6 +52,8 @@ public class FlagDataTest { } }"""; + private final String json_with_instance = json.replace("application", "instance"); + private final FetchVector vector = new FetchVector(); @Test @@ -271,6 +273,11 @@ 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); |