diff options
author | Martin Polden <mpolden@mpolden.no> | 2020-05-08 16:29:56 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2020-05-08 16:29:56 +0200 |
commit | c3ec932e28d94e717946d74d21407ae9138308de (patch) | |
tree | b789da0b55d8de8338650e94f39207f852363366 /node-repository | |
parent | e32a44adbf547e9cf3c0baa432dfcad696755a26 (diff) |
Make serialized format forward-compatible
Diffstat (limited to 'node-repository')
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))); + } + } |