diff options
Diffstat (limited to 'controller-server')
2 files changed, 15 insertions, 7 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentJobs.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentJobs.java index 49498786bb8..d3193fd486d 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentJobs.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentJobs.java @@ -180,10 +180,15 @@ public class DeploymentJobs { return zone(system).map(ZoneId::region); } - public static JobType fromJobName(String jobName) { + public static Optional<JobType> fromOptionalJobName(String jobName) { return Stream.of(values()) .filter(jobType -> jobType.jobName.equals(jobName)) - .findAny().orElseThrow(() -> new IllegalArgumentException("Unknown job name '" + jobName + "'")); + .findAny(); + } + + public static JobType fromJobName(String jobName) { + return fromOptionalJobName(jobName) + .orElseThrow(() -> new IllegalArgumentException("Unknown job name '" + jobName + "'")); } /** Returns the job type for the given zone */ diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java index 531078b7eca..21eea21ba68 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java @@ -382,22 +382,25 @@ public class ApplicationSerializer { private List<JobStatus> jobStatusListFromSlime(Inspector array) { List<JobStatus> jobStatusList = new ArrayList<>(); - array.traverse((ArrayTraverser) (int i, Inspector item) -> jobStatusList.add(jobStatusFromSlime(item))); + array.traverse((ArrayTraverser) (int i, Inspector item) -> jobStatusFromSlime(item).ifPresent(jobStatusList::add)); return jobStatusList; } - private JobStatus jobStatusFromSlime(Inspector object) { - DeploymentJobs.JobType jobType = DeploymentJobs.JobType.fromJobName(object.field(jobTypeField).asString()); + private Optional<JobStatus> jobStatusFromSlime(Inspector object) { + // if the job type has since been removed, ignore it + Optional<DeploymentJobs.JobType> jobType = + DeploymentJobs.JobType.fromOptionalJobName(object.field(jobTypeField).asString()); + if (! jobType.isPresent()) return Optional.empty(); Optional<JobError> jobError = Optional.empty(); if (object.field(errorField).valid()) jobError = Optional.of(JobError.valueOf(object.field(errorField).asString())); - return new JobStatus(jobType, jobError, + return Optional.of(new JobStatus(jobType.get(), jobError, jobRunFromSlime(object.field(lastTriggeredField)), jobRunFromSlime(object.field(lastCompletedField)), jobRunFromSlime(object.field(firstFailingField)), - jobRunFromSlime(object.field(lastSuccessField))); + jobRunFromSlime(object.field(lastSuccessField)))); } private Optional<JobStatus.JobRun> jobRunFromSlime(Inspector object) { |