diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2021-09-22 10:24:34 +0200 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2021-09-22 10:24:34 +0200 |
commit | 9b5ca17e4f47124a7730ed4492071545671debaa (patch) | |
tree | 9552762975b6b42644f82ec4fc67a58506781fee /controller-server | |
parent | 1aa004804ae69e180542efeb54204e10a52b81dd (diff) |
Allow POSTing a dev/perf job to re-run on system version
Diffstat (limited to 'controller-server')
3 files changed, 51 insertions, 1 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 2dbf910b49e..6dd5e7f53e0 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 @@ -180,8 +180,11 @@ public class DeploymentTrigger { public List<JobId> forceTrigger(ApplicationId applicationId, JobType jobType, String user, boolean requireTests) { Application application = applications().requireApplication(TenantAndApplicationId.from(applicationId)); Instance instance = application.require(applicationId.instance()); - DeploymentStatus status = jobs.deploymentStatus(application); JobId job = new JobId(instance.id(), jobType); + if (job.type().environment().isManuallyDeployed()) + return forceTriggerManualJob(job); + + DeploymentStatus status = jobs.deploymentStatus(application); Versions versions = Versions.from(instance.change(), application, status.deploymentFor(job), controller.readSystemVersion()); Map<JobId, List<Versions>> jobs = status.testJobs(Map.of(job, versions)); if (jobs.isEmpty() || ! requireTests) @@ -192,6 +195,16 @@ public class DeploymentTrigger { return List.copyOf(jobs.keySet()); } + private List<JobId> forceTriggerManualJob(JobId job) { + Run last = jobs.last(job).orElseThrow(() -> new IllegalArgumentException(job + " has never been run")); + Versions target = new Versions(controller.readSystemVersion(), + last.versions().targetApplication(), + Optional.of(last.versions().targetPlatform()), + Optional.of(last.versions().targetApplication())); + jobs.start(job.application(), job.type(), target, true); + return List.of(job); + } + /** Retrigger job. If the job is already running, it will be canceled, and retrigger enqueued. */ public Optional<JobId> reTriggerOrAddToQueue(DeploymentId deployment) { JobType jobType = JobType.from(controller.system(), deployment.zoneId()) 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 66c3f7bba16..fb860063696 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 @@ -271,6 +271,12 @@ public class ApplicationApiTest extends ControllerContainerTest { "{\"message\":\"Deployment started in run 1 of dev-us-east-1 for tenant1.application1.instance1. This may take about 15 minutes the first time.\",\"run\":1}"); app1.runJob(JobType.devUsEast1); + // POST (deploy) a job to restart a manual deployment to dev + tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/job/dev-us-east-1", POST) + .userIdentity(USER_ID), + "{\"message\":\"Triggered dev-us-east-1 for tenant1.application1.instance1\"}"); + app1.runJob(JobType.devUsEast1); + // GET dev application package tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/job/dev-us-east-1/package", GET) .userIdentity(USER_ID), diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json index 7ebc2d24fe9..736e1fe082c 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json @@ -4,6 +4,37 @@ "jobName": "dev-us-east-1", "runs": [ { + "id": 2, + "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/run/2", + "start": "(ignore)", + "end": "(ignore)", + "status": "success", + "versions": { + "targetPlatform": "6.1.0", + "targetApplication": { + "build": 1 + }, + "sourcePlatform":"6.1.0", + "sourceApplication": { + "build": 1 + } + }, + "steps": [ + { + "name": "deployReal", + "status": "succeeded" + }, + { + "name": "installReal", + "status": "succeeded" + }, + { + "name": "copyVespaLogs", + "status": "succeeded" + } + ] + }, + { "id": 1, "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/run/1", "start": "(ignore)", |