diff options
2 files changed, 27 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 91f619ffa91..26e59040b95 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 @@ -5,6 +5,7 @@ import com.yahoo.component.Version; import com.yahoo.config.provision.NodeType; import com.yahoo.slime.ObjectTraverser; import com.yahoo.slime.Slime; +import com.yahoo.slime.Type; import com.yahoo.vespa.config.SlimeUtils; import com.yahoo.vespa.hosted.provision.os.OsVersion; @@ -44,8 +45,16 @@ public class OsVersionsSerializer { var versions = new TreeMap<NodeType, OsVersion>(); // 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()); - var active = value.field(ACTIVE_FIELD).asBool(); + Version version; + boolean active; + if (value.type() == Type.OBJECT) { + version = Version.fromString(value.field(VERSION_FIELD).asString()); + active = value.field(ACTIVE_FIELD).asBool(); + } else { + // TODO(mpolden): Remove support for legacy format after September 2019 + version = Version.fromString(value.asString()); + active = true; + } versions.put(NodeSerializer.nodeTypeFromString(key), new OsVersion(version, active)); }); return versions; 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 c6583292da8..b41958b36db 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 @@ -6,6 +6,7 @@ import com.yahoo.config.provision.NodeType; import com.yahoo.vespa.hosted.provision.os.OsVersion; import org.junit.Test; +import java.nio.charset.StandardCharsets; import java.util.Map; import static org.junit.Assert.assertEquals; @@ -16,6 +17,21 @@ import static org.junit.Assert.assertEquals; public class OsVersionsSerializerTest { @Test + public void legacy_format() { + var json = "{\"host\":\"1.2.3\",\"proxyhost\":\"4.5.6\",\"confighost\":\"7.8.9\"}"; + var serializedFromString = OsVersionsSerializer.fromJson(json.getBytes(StandardCharsets.UTF_8)); + var versions = Map.of( + NodeType.host, new OsVersion(Version.fromString("1.2.3"), true), + NodeType.proxyhost, new OsVersion(Version.fromString("4.5.6"), true), + NodeType.confighost, new OsVersion(Version.fromString("7.8.9"), true) + ); + assertEquals(versions, serializedFromString); + + var serialized = OsVersionsSerializer.fromJson(OsVersionsSerializer.toJson(versions)); + assertEquals(serialized, versions); + } + + @Test public void serialization() { var versions = Map.of( NodeType.host, new OsVersion(Version.fromString("1.2.3"), true), |