summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@verizonmedia.com>2021-09-09 16:10:26 +0200
committerValerij Fredriksen <valerijf@verizonmedia.com>2021-09-09 21:41:11 +0200
commit381fa00f92922e011442a1ac8510986d4a5f0f64 (patch)
tree3142c45cc7d22424e1f79c4e0d684b8dfecf9dab /controller-server
parentc427272000b342d8aa38c907e3639e5498c841eb (diff)
Prune diffs
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java17
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java16
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 ->