diff options
author | Martin Polden <mpolden@mpolden.no> | 2019-09-03 11:02:29 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-03 11:02:29 +0200 |
commit | a41c6717c20cd547b539bd2c387efe54c8bb8ef4 (patch) | |
tree | 34981f2b505c382bf3030ce64f2347cd172cd51f | |
parent | 41b30888b1a1ca84f678b6110cf2650157cbbab8 (diff) | |
parent | 9c290ad78d2cb0e650294a8bda6d1d7458637b30 (diff) |
Merge pull request #10492 from vespa-engine/mpolden/handle-nulls
Handle null fields when converting NodeRepositoryNode->Node
2 files changed, 46 insertions, 22 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Node.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Node.java index c2d39236b8f..4ffe221b555 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Node.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Node.java @@ -185,7 +185,8 @@ public class Node { inactive, dirty, failed, - parked + parked, + unknown, } /** Known node states with regards to service orchestration */ @@ -199,7 +200,8 @@ public class Node { public enum ClusterType { admin, container, - content + content, + unknown } } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java index 19486b6c2c5..9a44a76b145 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java @@ -6,6 +6,7 @@ import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.NodeType; import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.api.integration.noderepository.NodeList; +import com.yahoo.vespa.hosted.controller.api.integration.noderepository.NodeMembership; import com.yahoo.vespa.hosted.controller.api.integration.noderepository.NodeRepositoryNode; import com.yahoo.vespa.hosted.controller.api.integration.noderepository.NodeState; @@ -75,33 +76,37 @@ public interface NodeRepository { fromJacksonState(node.getState()), fromJacksonType(node.getType()), application, - Version.fromString(node.getVespaVersion()), - Version.fromString(node.getWantedVespaVersion()), - Version.fromString(node.getCurrentOsVersion()), - Version.fromString(node.getWantedOsVersion()), + versionFrom(node.getVespaVersion()), + versionFrom(node.getWantedVespaVersion()), + versionFrom(node.getCurrentOsVersion()), + versionFrom(node.getWantedOsVersion()), fromBoolean(node.getAllowedToBeDown()), - node.getCurrentRestartGeneration(), - node.getRestartGeneration(), - node.getCurrentRebootGeneration(), - node.getRebootGeneration(), - node.getMinCpuCores(), - node.getMinMainMemoryAvailableGb(), - node.getMinDiskAvailableGb(), - node.getBandwidth() / 1000, - node.getFastDisk(), - node.getCost() == null ? 0 : node.getCost(), + toInt(node.getCurrentRestartGeneration()), + toInt(node.getRestartGeneration()), + toInt(node.getCurrentRebootGeneration()), + toInt(node.getRebootGeneration()), + toDouble(node.getMinCpuCores()), + toDouble(node.getMinMainMemoryAvailableGb()), + toDouble(node.getMinDiskAvailableGb()), + toDouble(node.getBandwidth()) / 1000, + toBoolean(node.getFastDisk()), + toInt(node.getCost()), node.getCanonicalFlavor(), - node.getMembership().clusterid, - clusterTypeOf(node.getMembership().clustertype)); + clusterIdOf(node.getMembership()), + clusterTypeOf(node.getMembership())); } - private static Node.ClusterType clusterTypeOf(String type) { - switch (type) { + private static String clusterIdOf(NodeMembership nodeMembership) { + return nodeMembership == null ? "" : nodeMembership.clusterid; + } + + private static Node.ClusterType clusterTypeOf(NodeMembership nodeMembership) { + switch (nodeMembership.clustertype) { case "admin": return Node.ClusterType.admin; case "content": return Node.ClusterType.content; case "container": return Node.ClusterType.container; - default: throw new IllegalArgumentException("Unknown cluster type '" + type + "'."); } + return Node.ClusterType.unknown; } // Convert Jackson type to config.provision type @@ -127,8 +132,8 @@ public interface NodeRepository { case dirty: return Node.State.dirty; case failed: return Node.State.failed; case parked: return Node.State.parked; - default: throw new IllegalArgumentException("Unknown state: " + state); } + return Node.State.unknown; } private static Node.ServiceState fromBoolean(Boolean allowedDown) { @@ -136,4 +141,21 @@ public interface NodeRepository { ? Node.ServiceState.unorchestrated : allowedDown ? Node.ServiceState.allowedDown : Node.ServiceState.expectedUp; } + + private static boolean toBoolean(Boolean b) { + return b == null ? false : b; + } + + private static double toDouble(Double d) { + return d == null ? 0 : d; + } + + private static int toInt(Integer i) { + return i == null ? 0 : i; + } + + private static Version versionFrom(String s) { + return s == null ? Version.emptyVersion : Version.fromString(s); + } + } |