aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server/src
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-06-15 19:26:26 +0200
committerjonmv <venstad@gmail.com>2022-06-15 19:26:26 +0200
commit10918a4ff2c9b9d89574052521d03a45d4b2f842 (patch)
treed91d750e7558fc436449ef46a416b1977f287f85 /controller-server/src
parent2a4dcbed1b6daeb5b4d30c893adf75385b1ee527 (diff)
Prune old packages which are no longer relevant, also when nothing is deployed
Diffstat (limited to 'controller-server/src')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java23
1 files changed, 13 insertions, 10 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 7827daad99a..35eaa36cd2f 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
@@ -513,7 +513,7 @@ public class JobController {
application = application.withProjectId(projectId == -1 ? OptionalLong.empty() : OptionalLong.of(projectId));
application = application.withRevisions(revisions -> revisions.with(version.get()));
- application = withPrunedPackages(application);
+ application = withPrunedPackages(application, version.get().id());
TestSummary testSummary = TestPackage.validateTests(submission.applicationPackage().deploymentSpec(), submission.testPackage());
if (testSummary.problems().isEmpty())
@@ -542,16 +542,19 @@ public class JobController {
return version.get();
}
- private LockedApplication withPrunedPackages(LockedApplication application){
+ private LockedApplication withPrunedPackages(LockedApplication application, RevisionId latest){
TenantAndApplicationId id = application.get().id();
- Optional<RevisionId> oldestDeployed = application.get().oldestDeployedRevision();
- if (oldestDeployed.isPresent()) {
- controller.applications().applicationStore().prune(id.tenant(), id.application(), oldestDeployed.get());
-
- for (ApplicationVersion version : application.get().revisions().withPackage())
- if (version.id().compareTo(oldestDeployed.get()) < 0)
- application = application.withRevisions(revisions -> revisions.with(version.withoutPackage()));
- }
+ Application wrapped = application.get();
+ RevisionId oldestDeployed = application.get().oldestDeployedRevision()
+ .or(() -> wrapped.instances().values().stream()
+ .flatMap(instance -> instance.change().revision().stream())
+ .min(naturalOrder()))
+ .orElse(latest);
+ controller.applications().applicationStore().prune(id.tenant(), id.application(), oldestDeployed);
+
+ for (ApplicationVersion version : application.get().revisions().withPackage())
+ if (version.id().compareTo(oldestDeployed) < 0)
+ application = application.withRevisions(revisions -> revisions.with(version.withoutPackage()));
return application;
}