aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorØyvind Grønnesby <oyving@yahooinc.com>2022-04-27 14:51:14 +0200
committerGitHub <noreply@github.com>2022-04-27 14:51:14 +0200
commit22029c4d9b236a5daca34bbc47258525c1a48ac9 (patch)
tree12df323aebfa6e0412472320b30a028167d3c374 /controller-server
parentecec4e1caa9ef5565cbd625c0d2fa4238c541481 (diff)
parent3ed33f61eb23a424302896bfa9a391bfe9c773aa (diff)
Merge pull request #22303 from vespa-engine/ogronnesby/trial-expirer-fixes
Remove empty apps for expiring tenants
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirer.java18
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java11
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);