summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2020-05-08 16:29:56 +0200
committerMartin Polden <mpolden@mpolden.no>2020-05-08 16:29:56 +0200
commitc3ec932e28d94e717946d74d21407ae9138308de (patch)
treeb789da0b55d8de8338650e94f39207f852363366 /node-repository
parente32a44adbf547e9cf3c0baa432dfcad696755a26 (diff)
Make serialized format forward-compatible
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionsSerializer.java15
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionsSerializerTest.java26
2 files changed, 39 insertions, 2 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionsSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionsSerializer.java
index 915b1acedaa..fd430350b5c 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionsSerializer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionsSerializer.java
@@ -42,10 +42,21 @@ public class OsVersionsSerializer {
var versions = new TreeMap<NodeType, Version>(); // Use TreeMap to sort by node type
var inspector = SlimeUtils.jsonToSlime(data).get();
inspector.traverse((ObjectTraverser) (key, value) -> {
- var version = Version.fromString(value.field(VERSION_FIELD).asString());
- versions.put(NodeSerializer.nodeTypeFromString(key), version);
+ if (isNodeType(key)) {
+ var version = Version.fromString(value.field(VERSION_FIELD).asString());
+ versions.put(NodeSerializer.nodeTypeFromString(key), version);
+ }
});
return versions;
}
+ private static boolean isNodeType(String name) {
+ try {
+ NodeType.valueOf(name);
+ return true;
+ } catch (IllegalArgumentException ignored) {
+ return false;
+ }
+ }
+
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionsSerializerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionsSerializerTest.java
index 92d04d1cbb2..36dbf26c0d3 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionsSerializerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionsSerializerTest.java
@@ -5,6 +5,7 @@ import com.yahoo.component.Version;
import com.yahoo.config.provision.NodeType;
import org.junit.Test;
+import java.nio.charset.StandardCharsets;
import java.util.Map;
import static org.junit.Assert.assertEquals;
@@ -25,4 +26,29 @@ public class OsVersionsSerializerTest {
assertEquals(serialized, versions);
}
+ @Test
+ public void ignores_unknown_keys() {
+ var jsonWithUnknownKeys = "{\n" +
+ " \"foo\": \"bar\",\n" +
+ " " +
+ "\"host\": {\n" +
+ " \"version\": \"1.2.3\"\n" +
+ " },\n" +
+ " " +
+ "\"proxyhost\": {\n" +
+ " \"version\": \"4.5.6\"\n" +
+ " },\n" +
+ " " +
+ "\"confighost\": {\n" +
+ " \"version\": \"7.8.9\"\n" +
+ " }\n" +
+ "}";
+ var versions = Map.of(
+ NodeType.host, Version.fromString("1.2.3"),
+ NodeType.proxyhost, Version.fromString("4.5.6"),
+ NodeType.confighost, Version.fromString("7.8.9")
+ );
+ assertEquals(versions, OsVersionsSerializer.fromJson(jsonWithUnknownKeys.getBytes(StandardCharsets.UTF_8)));
+ }
+
}