From 10918a4ff2c9b9d89574052521d03a45d4b2f842 Mon Sep 17 00:00:00 2001 From: jonmv Date: Wed, 15 Jun 2022 19:26:26 +0200 Subject: Prune old packages which are no longer relevant, also when nothing is deployed --- .../controller/deployment/JobController.java | 23 ++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) (limited to 'controller-server') 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 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; } -- cgit v1.2.3