From 23585e91716bad1ac37ead63f589264ac639add0 Mon Sep 17 00:00:00 2001 From: Jon Marius Venstad Date: Mon, 18 Nov 2019 13:37:44 +0100 Subject: More descriptive error message, and use empty rather than EPOCH for time --- .../controller/application/ApplicationPackage.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'controller-server') diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ApplicationPackage.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ApplicationPackage.java index f37c9d5a394..79d6e10e1dd 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ApplicationPackage.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ApplicationPackage.java @@ -10,6 +10,7 @@ import com.yahoo.security.X509CertificateUtils; import com.yahoo.slime.Inspector; import com.yahoo.slime.Slime; import com.yahoo.vespa.config.SlimeUtils; +import com.yahoo.yolean.Exceptions; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -24,6 +25,7 @@ import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.function.Function; import static java.nio.charset.StandardCharsets.UTF_8; @@ -61,8 +63,8 @@ public class ApplicationPackage { this.deploymentSpec = files.getAsReader("deployment.xml").map(DeploymentSpec::fromXml).orElse(DeploymentSpec.empty); this.validationOverrides = files.getAsReader("validation-overrides.xml").map(ValidationOverrides::fromXml).orElse(ValidationOverrides.empty); Optional buildMetaObject = files.get("build-meta.json").map(SlimeUtils::jsonToSlime).map(Slime::get); - this.compileVersion = buildMetaObject.map(object -> Version.fromString(object.field("compileVersion").asString())); - this.buildTime = buildMetaObject.map(object -> Instant.ofEpochMilli(object.field("buildTime").asLong())); + this.compileVersion = buildMetaObject.flatMap(object -> parse(object, "compileVersion", field -> Version.fromString(field.asString()))); + this.buildTime = buildMetaObject.flatMap(object -> parse(object, "buildTime", field -> Instant.ofEpochMilli(field.asLong()))); this.trustedCertificates = files.get(trustedCertificatesFile).map(bytes -> X509CertificateUtils.certificateListFromPem(new String(bytes, UTF_8))).orElse(List.of()); } @@ -106,6 +108,16 @@ public class ApplicationPackage { return trustedCertificates; } + private static Optional parse(Inspector buildMetaObject, String fieldName, Function mapper) { + try { + return buildMetaObject.field(fieldName).valid() ? Optional.of(mapper.apply(buildMetaObject.field(fieldName))) + : Optional.empty(); + } + catch (RuntimeException e) { + throw new IllegalArgumentException("Failed parsing \"" + fieldName + "\" in 'build-meta.json': " + Exceptions.toMessageString(e)); + } + } + private static class Files { /** Max size of each extracted file */ -- cgit v1.2.3