diff options
-rw-r--r-- | node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java | 84 |
1 files changed, 15 insertions, 69 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java index 7bbf5efba92..1e20b26ccd9 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java @@ -25,7 +25,6 @@ import com.yahoo.slime.Cursor; import com.yahoo.slime.Inspector; import com.yahoo.slime.Slime; import com.yahoo.slime.SlimeUtils; -import com.yahoo.slime.Type; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.node.Address; import com.yahoo.vespa.hosted.provision.node.Agent; @@ -275,7 +274,7 @@ public class NodeSerializer { ipAddressesFromSlime(object, ipAddressPoolKey), addressesFromSlime(object)), object.field(hostnameKey).asString(), - parentHostnameFromSlime(object), + SlimeUtils.optionalString(object.field(parentHostnameKey)), flavor, statusFromSlime(object), state, @@ -283,11 +282,11 @@ public class NodeSerializer { historyFromSlime(object), nodeTypeFromString(object.field(nodeTypeKey).asString()), Reports.fromSlime(object.field(reportsKey)), - modelNameFromSlime(object), - reservedToFromSlime(object.field(reservedToKey)), - exclusiveToApplicationIdFromSlime(object.field(exclusiveToApplicationIdKey)), - exclusiveToClusterTypeFromSlime(object.field(exclusiveToClusterTypeKey)), - switchHostnameFromSlime(object.field(switchHostnameKey)), + SlimeUtils.optionalString(object.field(modelNameKey)), + SlimeUtils.optionalString(object.field(reservedToKey)).map(TenantName::from), + SlimeUtils.optionalString(object.field(exclusiveToApplicationIdKey)).map(ApplicationId::fromSerializedForm), + SlimeUtils.optionalString(object.field(exclusiveToClusterTypeKey)).map(ClusterSpec.Type::from), + SlimeUtils.optionalString(object.field(switchHostnameKey)), trustedCertificatesFromSlime(object)); } @@ -303,12 +302,7 @@ public class NodeSerializer { object.field(wantToFailKey).asBool(), new OsVersion(versionFromSlime(object.field(osVersionKey)), versionFromSlime(object.field(wantedOsVersionKey))), - instantFromSlime(object.field(firmwareCheckKey))); - } - - private Optional<String> switchHostnameFromSlime(Inspector field) { - if (!field.valid()) return Optional.empty(); - return Optional.of(field.asString()); + SlimeUtils.optionalInstant(object.field(firmwareCheckKey))); } private Flavor flavorFromSlime(Inspector object) { @@ -373,35 +367,15 @@ public class NodeSerializer { private ClusterMembership clusterMembershipFromSlime(Inspector object) { return ClusterMembership.from(object.field(serviceIdKey).asString(), versionFromSlime(object.field(wantedVespaVersionKey)).get(), - containerImageRepoFromSlime(object.field(wantedContainerImageRepoKey))); + containerImageFromSlime(object.field(wantedContainerImageRepoKey))); } private Optional<Version> versionFromSlime(Inspector object) { - if ( ! object.valid()) return Optional.empty(); - return Optional.of(Version.fromString(object.asString())); - } - - private Optional<DockerImage> containerImageRepoFromSlime(Inspector object) { - if ( ! object.valid() || object.asString().isEmpty()) return Optional.empty(); - return Optional.of(DockerImage.fromString(object.asString())); + return object.valid() ? Optional.of(Version.fromString(object.asString())) : Optional.empty(); } private Optional<DockerImage> containerImageFromSlime(Inspector object) { - if ( ! object.valid()) return Optional.empty(); - return Optional.of(DockerImage.fromString(object.asString())); - } - - private Optional<Instant> instantFromSlime(Inspector object) { - if ( ! object.valid()) - return Optional.empty(); - return Optional.of(Instant.ofEpochMilli(object.asLong())); - } - - private Optional<String> parentHostnameFromSlime(Inspector object) { - if (object.field(parentHostnameKey).valid()) - return Optional.of(object.field(parentHostnameKey).asString()); - else - return Optional.empty(); + return SlimeUtils.optionalString(object).map(DockerImage::fromString); } private Set<String> ipAddressesFromSlime(Inspector object, String key) { @@ -412,43 +386,15 @@ public class NodeSerializer { private List<Address> addressesFromSlime(Inspector object) { return SlimeUtils.entriesStream(object.field(containersKey)) - .map(elem -> new Address(elem.field(containerHostnameKey).asString())) - .collect(Collectors.toList()); - } - - private Optional<String> modelNameFromSlime(Inspector object) { - if (object.field(modelNameKey).valid()) { - return Optional.of(object.field(modelNameKey).asString()); - } - return Optional.empty(); - } - - private Optional<TenantName> reservedToFromSlime(Inspector object) { - if (! object.valid()) return Optional.empty(); - if (object.type() != Type.STRING) - throw new IllegalArgumentException("Expected 'reservedTo' to be a string but is " + object); - return Optional.of(TenantName.from(object.asString())); - } - - private Optional<ApplicationId> exclusiveToApplicationIdFromSlime(Inspector object) { - if (! object.valid()) return Optional.empty(); - if (object.type() != Type.STRING) - throw new IllegalArgumentException("Expected 'exclusiveTo' to be a string but is " + object); - return Optional.of(ApplicationId.fromSerializedForm(object.asString())); - } - - private Optional<ClusterSpec.Type> exclusiveToClusterTypeFromSlime(Inspector object) { - if (! object.valid()) return Optional.empty(); - if (object.type() != Type.STRING) - throw new IllegalArgumentException("Expected 'exclusiveToClusterType' to be a string but is " + object); - return Optional.of(ClusterSpec.Type.from(object.asString())); + .map(elem -> new Address(elem.field(containerHostnameKey).asString())) + .collect(Collectors.toList()); } private List<TrustStoreItem> trustedCertificatesFromSlime(Inspector object) { return SlimeUtils.entriesStream(object.field(trustedCertificatesKey)) - .map(elem -> new TrustStoreItem(elem.field(fingerprintKey).asString(), - Instant.ofEpochMilli(elem.field(expiresKey).asLong()))) - .collect(Collectors.toList()); + .map(elem -> new TrustStoreItem(elem.field(fingerprintKey).asString(), + Instant.ofEpochMilli(elem.field(expiresKey).asLong()))) + .collect(Collectors.toList()); } // ----------------- Enum <-> string mappings ---------------------------------------- |