diff options
author | jonmv <venstad@gmail.com> | 2022-06-15 19:26:26 +0200 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2022-06-15 19:26:26 +0200 |
commit | 10918a4ff2c9b9d89574052521d03a45d4b2f842 (patch) | |
tree | d91d750e7558fc436449ef46a416b1977f287f85 /controller-server | |
parent | 2a4dcbed1b6daeb5b4d30c893adf75385b1ee527 (diff) |
Prune old packages which are no longer relevant, also when nothing is deployed
Diffstat (limited to 'controller-server')
-rw-r--r-- | controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java | 23 |
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; } |