diff options
3 files changed, 19 insertions, 3 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java index 5086cebc1cf..7bc04e2ffb4 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java @@ -114,9 +114,14 @@ public class DeploymentTrigger { } } else { - triggering = application.get().deploymentJobs().statusOf(report.jobType()).flatMap(JobStatus::lastTriggered) + triggering = application.get().deploymentJobs().statusOf(report.jobType()) + .filter(job -> job.lastTriggered().isPresent() + && job.lastCompleted() + .map(completion -> ! completion.at().isAfter(job.lastTriggered().get().at())) + .orElse(true)) .orElseThrow(() -> new IllegalStateException("Notified of completion of " + report.jobType().jobName() + " for " + - report.applicationId() + ", but that has neither been triggered nor deployed")); + report.applicationId() + ", but that has neither been triggered nor deployed")) + .lastTriggered().get(); } application = application.withJobCompletion(report.projectId(), report.jobType(), diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java index 83605c31b42..f2e105f2c31 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java @@ -952,8 +952,15 @@ public class ApplicationApiTest extends ControllerContainerTest { controllerTester.deploy(app, applicationPackage, TEST_ZONE); job.type(JobType.systemTest).submit(); - // Notifying about unknown job fails + // Notifying about job started not by the controller fails Request request = request("/application/v4/tenant/tenant1/application/application1/jobreport", POST) + .data(asJson(job.type(JobType.systemTest).report())) + .userIdentity(HOSTED_VESPA_OPERATOR) + .get(); + tester.assertResponse(request, new File("jobreport-unexpected-system-test-completion.json"), 400); + + // Notifying about unknown job fails + request = request("/application/v4/tenant/tenant1/application/application1/jobreport", POST) .data(asJson(job.type(JobType.productionUsEast3).report())) .userIdentity(HOSTED_VESPA_OPERATOR) .get(); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobreport-unexpected-system-test-completion.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobreport-unexpected-system-test-completion.json new file mode 100644 index 00000000000..513cfb754ae --- /dev/null +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobreport-unexpected-system-test-completion.json @@ -0,0 +1,4 @@ +{ + "error-code": "BAD_REQUEST", + "message": "Notified of completion of system-test for tenant1.application1, but that has neither been triggered nor deployed" +} |