aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2018-08-09 12:56:51 +0200
committerMartin Polden <mpolden@mpolden.no>2018-08-09 13:32:00 +0200
commit1efbf2120d9df1b11fecf80b1adbed80c26bf7a5 (patch)
tree0d457373f62971af50cbc4c188e42a1238818b95 /node-repository/src
parent44c799b5795e38443afc228bb392fde6a3998009 (diff)
Make serializer for node type versions reusable
Diffstat (limited to 'node-repository/src')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/InfrastructureVersionsSerializer.java42
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeTypeVersionsSerializer.java47
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/UpgradeResponse.java5
4 files changed, 51 insertions, 49 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java
index 7245e1dd19a..f559ec0037b 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java
@@ -23,12 +23,12 @@ import java.time.Clock;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
+import java.util.TreeMap;
import java.util.function.Function;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -355,14 +355,14 @@ public class CuratorDatabaseClient {
}
public Map<NodeType, Version> readInfrastructureVersions() {
- return read(infrastructureVersionsPath(), InfrastructureVersionsSerializer::fromJson).orElseGet(HashMap::new);
+ return read(infrastructureVersionsPath(), NodeTypeVersionsSerializer::fromJson).orElseGet(TreeMap::new);
}
public void writeInfrastructureVersions(Map<NodeType, Version> infrastructureVersions) {
NestedTransaction transaction = new NestedTransaction();
CuratorTransaction curatorTransaction = curatorDatabase.newCuratorTransactionIn(transaction);
curatorTransaction.add(CuratorOperations.setData(infrastructureVersionsPath().getAbsolute(),
- InfrastructureVersionsSerializer.toJson(infrastructureVersions)));
+ NodeTypeVersionsSerializer.toJson(infrastructureVersions)));
transaction.commit();
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/InfrastructureVersionsSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/InfrastructureVersionsSerializer.java
deleted file mode 100644
index a48888fb4f0..00000000000
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/InfrastructureVersionsSerializer.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.hosted.provision.persistence;
-
-import com.yahoo.component.Version;
-import com.yahoo.config.provision.NodeType;
-import com.yahoo.slime.Cursor;
-import com.yahoo.slime.Inspector;
-import com.yahoo.slime.ObjectTraverser;
-import com.yahoo.slime.Slime;
-import com.yahoo.vespa.config.SlimeUtils;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author freva
- */
-class InfrastructureVersionsSerializer {
-
- private InfrastructureVersionsSerializer() {}
-
- static byte[] toJson(Map<NodeType, Version> versionsByNodeType) {
- try {
- Slime slime = new Slime();
- Cursor object = slime.setObject();
- versionsByNodeType.forEach((nodeType, version) ->
- object.setString(NodeSerializer.toString(nodeType), version.toFullString()));
- return SlimeUtils.toJsonBytes(slime);
- } catch (IOException e) {
- throw new RuntimeException("Serialization of a infrastructure version failed", e);
- }
- }
-
- static Map<NodeType, Version> fromJson(byte[] data) {
- Map<NodeType, Version> infrastructureVersions = new HashMap<>();
- Inspector inspector = SlimeUtils.jsonToSlime(data).get();
- inspector.traverse((ObjectTraverser) (key, value) ->
- infrastructureVersions.put(NodeSerializer.nodeTypeFromString(key), Version.fromString(value.asString())));
- return infrastructureVersions;
- }
-}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeTypeVersionsSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeTypeVersionsSerializer.java
new file mode 100644
index 00000000000..dfa79a4fd9a
--- /dev/null
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeTypeVersionsSerializer.java
@@ -0,0 +1,47 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.provision.persistence;
+
+import com.yahoo.component.Version;
+import com.yahoo.config.provision.NodeType;
+import com.yahoo.slime.Cursor;
+import com.yahoo.slime.Inspector;
+import com.yahoo.slime.ObjectTraverser;
+import com.yahoo.slime.Slime;
+import com.yahoo.vespa.config.SlimeUtils;
+
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * Serializer for version numbers that are set per node type.
+ *
+ * @author freva
+ * @author mpolden
+ */
+public class NodeTypeVersionsSerializer {
+
+ private NodeTypeVersionsSerializer() {}
+
+ public static byte[] toJson(Map<NodeType, Version> versions) {
+ Slime slime = new Slime();
+ Cursor object = slime.setObject();
+ versions.forEach((nodeType, version) -> object.setString(NodeSerializer.toString(nodeType),
+ version.toFullString()));
+ try {
+ return SlimeUtils.toJsonBytes(slime);
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
+ }
+
+ public static Map<NodeType, Version> fromJson(byte[] data) {
+ Map<NodeType, Version> versions = new TreeMap<>(); // Use TreeMap to sort by node type
+ Inspector inspector = SlimeUtils.jsonToSlime(data).get();
+ inspector.traverse((ObjectTraverser) (key, value) ->
+ versions.put(NodeSerializer.nodeTypeFromString(key), Version.fromString(value.asString())));
+ return versions;
+ }
+
+}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/UpgradeResponse.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/UpgradeResponse.java
index 20a0139a178..3fb712e182f 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/UpgradeResponse.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/UpgradeResponse.java
@@ -32,10 +32,7 @@ public class UpgradeResponse extends HttpResponse {
Cursor root = slime.setObject();
Cursor versionsObject = root.setObject("versions");
- infrastructureVersions.getTargetVersions().entrySet().stream()
- .sorted(Comparator.comparing(Map.Entry::getKey)) // Sort for stable tests
- .forEach(entry ->
- versionsObject.setString(entry.getKey().name(), entry.getValue().toFullString()));
+ infrastructureVersions.getTargetVersions().forEach((nodeType, version) -> versionsObject.setString(nodeType.name(), version.toFullString()));
new JsonFormat(true).encode(stream, slime);
}