diff options
author | Øyvind Grønnesby <oyving@yahooinc.com> | 2022-04-27 14:51:14 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-27 14:51:14 +0200 |
commit | 22029c4d9b236a5daca34bbc47258525c1a48ac9 (patch) | |
tree | 12df323aebfa6e0412472320b30a028167d3c374 /controller-server | |
parent | ecec4e1caa9ef5565cbd625c0d2fa4238c541481 (diff) | |
parent | 3ed33f61eb23a424302896bfa9a391bfe9c773aa (diff) |
Merge pull request #22303 from vespa-engine/ogronnesby/trial-expirer-fixes
Remove empty apps for expiring tenants
Diffstat (limited to 'controller-server')
2 files changed, 24 insertions, 5 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirer.java index 28476bcbe6c..8765884e23c 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirer.java @@ -47,8 +47,7 @@ public class CloudTrialExpirer extends ControllerMaintainer { private void moveInactiveTenantsToNonePlan() { var predicate = tenantReadersNotLoggedIn(loginExpiry) - .and(this::tenantHasTrialPlan) - .and(this::tenantHasNoDeployments); + .and(this::tenantHasTrialPlan); forTenant("'none' plan", predicate, this::setPlanNone); } @@ -61,11 +60,12 @@ public class CloudTrialExpirer extends ControllerMaintainer { } private void forTenant(String name, Predicate<Tenant> p, Consumer<List<Tenant>> c) { - var predicate = ((Predicate<Tenant>) this::tenantIsCloudTenant) - .and(this::tenantIsNotExemptFromExpiry); + var predicate = p.and(this::tenantIsCloudTenant) + .and(this::tenantIsNotExemptFromExpiry) + .and(this::tenantHasNoDeployments); var tenants = controller().tenants().asList().stream() - .filter(predicate.and(p)) + .filter(predicate) .collect(Collectors.toList()); if (! tenants.isEmpty()) { @@ -119,7 +119,15 @@ public class CloudTrialExpirer extends ControllerMaintainer { private void tombstoneTenants(List<Tenant> tenants) { tenants.forEach(tenant -> { + deleteApplicationsWithNoDeployments(tenant); controller().tenants().delete(tenant.name(), Optional.empty(), false); }); } + + private void deleteApplicationsWithNoDeployments(Tenant tenant) { + controller().applications().asList(tenant.name()).forEach(application -> { + // this only removes applications with no active deployments + controller().applications().deleteApplication(application.id(), Optional.empty()); + }); + } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java index f37a5a6893d..f768ab5e61b 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java @@ -18,6 +18,7 @@ import java.time.Duration; import java.util.List; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; /** * @author ogronnesby @@ -72,6 +73,16 @@ public class CloudTrialExpirerTest { assertPlan("with-deployments", "trial"); } + @Test + public void delete_tenants_with_applications_with_no_deployments() { + registerTenant("with-apps", "trial", Duration.ofDays(30)); + tester.createApplication("with-apps", "app1", "instance1"); + expirer.maintain(); + assertPlan("with-apps", "none"); + expirer.maintain(); + assertTrue(tester.controller().tenants().get("with-apps").isEmpty()); + } + private void registerTenant(String tenantName, String plan, Duration timeSinceLastLogin) { var name = TenantName.from(tenantName); tester.createTenant(tenantName, Tenant.Type.cloud); |