diff options
author | Valerij Fredriksen <valerijf@verizonmedia.com> | 2021-09-09 14:15:17 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@verizonmedia.com> | 2021-09-09 21:41:11 +0200 |
commit | e3417b01dea32f147b246f1af7d3d675b9cb5b08 (patch) | |
tree | cc314d0eb1cfefd627e1f977bfda5863ca88cd38 /controller-server/src/main/java | |
parent | dacf6dc8fe7566123423aad9aa29481bb50f6f60 (diff) |
Store application package diffs on submit/deploy
Diffstat (limited to 'controller-server/src/main/java')
2 files changed, 22 insertions, 2 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java index 71c1d860fc1..cf73d28473b 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java @@ -24,6 +24,7 @@ import com.yahoo.vespa.hosted.controller.application.ApplicationList; import com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackage; import com.yahoo.vespa.hosted.controller.application.Deployment; import com.yahoo.vespa.hosted.controller.application.TenantAndApplicationId; +import com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackageDiff; import com.yahoo.vespa.hosted.controller.persistence.BufferedLogStore; import com.yahoo.vespa.hosted.controller.persistence.CuratorDb; @@ -424,11 +425,18 @@ public class JobController { sourceUrl, revision.map(SourceRevision::commit), false)); + String diff = application.get().latestVersion() + .map(ApplicationVersion::buildNumber) + .flatMap(build -> build.isPresent() ? Optional.of(build.getAsLong()) : Optional.empty()) + .flatMap(prevBuild -> controller.applications().applicationStore().find(id.tenant(), id.application(), prevBuild)) + .map(prevApplication -> ApplicationPackageDiff.diff(new ApplicationPackage(prevApplication), applicationPackage)) + .orElseGet(() -> ApplicationPackageDiff.diffAgainstEmpty(applicationPackage)); controller.applications().applicationStore().put(id.tenant(), id.application(), version.get(), - applicationPackage.zippedContent()); + applicationPackage.zippedContent(), + diff); controller.applications().applicationStore().putTester(id.tenant(), id.application(), version.get(), @@ -478,6 +486,7 @@ public class JobController { controller.applications().store(application); }); + DeploymentId deploymentId = new DeploymentId(id, type.zone(controller.system())); Optional<Run> lastRun = last(id, type); lastRun.filter(run -> ! run.hasEnded()).ifPresent(run -> abortAndWait(run.id())); @@ -485,8 +494,12 @@ public class JobController { ApplicationVersion version = ApplicationVersion.from(Optional.empty(), build, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), true); + String diff = lastRun.map(run -> run.versions().targetApplication()) + .map(prevVersion -> ApplicationPackageDiff.diff(new ApplicationPackage(controller.applications().applicationStore().get(deploymentId, prevVersion)), applicationPackage)) + .orElseGet(() -> ApplicationPackageDiff.diffAgainstEmpty(applicationPackage)); + controller.applications().lockApplicationOrThrow(TenantAndApplicationId.from(id), application -> { - controller.applications().applicationStore().putDev(new DeploymentId(id, type.zone(controller.system())), applicationPackage.zippedContent()); + controller.applications().applicationStore().putDev(deploymentId, version, applicationPackage.zippedContent(), diff); start(id, type, new Versions(platform.orElse(applicationPackage.deploymentSpec().majorVersion() diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index b98e6825353..8fafd620c0b 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -597,6 +597,13 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { return new ZipResponse(id.toFullString() + "." + zone.value() + ".zip", applicationPackage); } + private HttpResponse devApplicationPackageDiff(RunId runId) { + DeploymentId deploymentId = new DeploymentId(runId.application(), runId.job().type().zone(controller.system())); + return controller.applications().applicationStore().getDevDiff(deploymentId, runId.number()) + .map(StringResponse::new) + .orElseThrow(() -> new NotExistsException("No application package diff found for " + runId)); + } + private HttpResponse applicationPackage(String tenantName, String applicationName, HttpRequest request) { var tenantAndApplication = TenantAndApplicationId.from(tenantName, applicationName); |