diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2019-11-18 22:05:24 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-18 22:05:24 +0100 |
commit | a139cf9a0fbe1fb9f6c0b37f9f79529fac60c98e (patch) | |
tree | 15c307a0d70237a298b4d2f0c391fa2d66a1c1c5 /controller-server | |
parent | 1bee6bf9097bf089d0012253dcf43d5e5281ae06 (diff) | |
parent | 23585e91716bad1ac37ead63f589264ac639add0 (diff) |
Merge pull request #11333 from vespa-engine/jvenstad/more-descriptive-error-on-build-meta-parse-failure
More descriptive error message, and use empty rather than EPOCH for time
Diffstat (limited to 'controller-server')
-rw-r--r-- | controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ApplicationPackage.java | 16 |
1 files changed, 14 insertions, 2 deletions
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<Inspector> 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 <Type> Optional<Type> parse(Inspector buildMetaObject, String fieldName, Function<Inspector, Type> 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 */ |