diff options
author | Valerij Fredriksen <valerijf@verizonmedia.com> | 2021-09-09 16:10:26 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@verizonmedia.com> | 2021-09-09 21:41:11 +0200 |
commit | 381fa00f92922e011442a1ac8510986d4a5f0f64 (patch) | |
tree | 3142c45cc7d22424e1f79c4e0d684b8dfecf9dab /controller-server | |
parent | c427272000b342d8aa38c907e3639e5498c841eb (diff) |
Prune diffs
Diffstat (limited to 'controller-server')
2 files changed, 32 insertions, 1 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 cf73d28473b..007f79ed994 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 @@ -367,7 +367,8 @@ public class JobController { List<Lock> locks = new ArrayList<>(); try { // Ensure no step is still running before we finish the run — report depends transitively on all the other steps. - for (Step step : report.allPrerequisites(run(id).get().steps().keySet())) + Run unlockedRun = run(id).get(); + for (Step step : report.allPrerequisites(unlockedRun.steps().keySet())) locks.add(curator.lock(id.application(), id.type(), step)); locked(id, run -> { // Store the modified run after it has been written to history, in case the latter fails. @@ -398,6 +399,20 @@ public class JobController { metric.jobFinished(run.id().job(), finishedRun.status()); return finishedRun; }); + + DeploymentId deploymentId = new DeploymentId(unlockedRun.id().application(), unlockedRun.id().job().type().zone(controller.system())); + (unlockedRun.versions().targetApplication().isDeployedDirectly() ? + Stream.of(unlockedRun.id().type()) : + JobType.allIn(controller.system()).stream().filter(jobType -> !jobType.environment().isManuallyDeployed())) + .flatMap(jobType -> controller.jobController().runs(unlockedRun.id().application(), jobType).values().stream()) + .mapToLong(run -> run.versions().targetApplication().buildNumber().orElse(Integer.MAX_VALUE)) + .min() + .ifPresent(oldestBuild -> { + if (unlockedRun.versions().targetApplication().isDeployedDirectly()) + controller.applications().applicationStore().pruneDevDiffs(deploymentId, oldestBuild); + else + controller.applications().applicationStore().pruneDiffs(deploymentId.applicationId().tenant(), deploymentId.applicationId().application(), oldestBuild); + }); } finally { for (Lock lock : locks) diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java index 7f4546dcfde..c2dd04144ab 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java @@ -63,6 +63,14 @@ public class ApplicationStoreMock implements ApplicationStore { } @Override + public void pruneDiffs(TenantName tenantName, ApplicationName applicationName, long beforeBuildNumber) { + Optional.ofNullable(diffs.get(appId(tenantName, applicationName))) + .ifPresent(map -> map.keySet().stream() + .filter(buildNumber -> buildNumber < beforeBuildNumber) + .forEach(map::remove)); + } + + @Override public Optional<byte[]> find(TenantName tenant, ApplicationName application, long buildNumber) { return store.getOrDefault(appId(tenant, application), Map.of()).entrySet().stream() .filter(kv -> kv.getKey().buildNumber().orElse(Long.MIN_VALUE) == buildNumber) @@ -116,6 +124,14 @@ public class ApplicationStoreMock implements ApplicationStore { } @Override + public void pruneDevDiffs(DeploymentId deploymentId, long beforeBuildNumber) { + Optional.ofNullable(devDiffs.get(deploymentId)) + .ifPresent(map -> map.keySet().stream() + .filter(buildNumber -> buildNumber < beforeBuildNumber) + .forEach(map::remove)); + } + + @Override public void putDev(DeploymentId deploymentId, ApplicationVersion applicationVersion, byte[] applicationPackage, String diff) { devStore.put(deploymentId, applicationPackage); applicationVersion.buildNumber().ifPresent(buildNumber -> |