diff options
Diffstat (limited to 'configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java')
-rw-r--r-- | configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java index 4f8d7818316..28718ee7154 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java @@ -58,6 +58,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -65,6 +66,7 @@ import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.stream.Collectors; /** * The API for managing applications. @@ -364,6 +366,32 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye return session.getSessionId(); } + + // ---------------- Tenant operations ---------------------------------------------------------------- + + public Set<TenantName> removeUnusedTenants() { + Set<TenantName> tenantsToBeDeleted = tenantRepository.getAllTenantNames().stream() + .filter(tenantName -> activeApplications(tenantName).isEmpty()) + .filter(tenantName -> !tenantName.equals(TenantName.defaultName())) // Not allowed to remove 'default' tenant + .collect(Collectors.toSet()); + tenantsToBeDeleted.forEach(tenantRepository::deleteTenant); + return tenantsToBeDeleted; + } + + public void deleteTenant(TenantName tenantName) { + List<ApplicationId> activeApplications = activeApplications(tenantName); + if (activeApplications.isEmpty()) + tenantRepository.deleteTenant(tenantName); + else + throw new IllegalArgumentException("Cannot delete tenant '" + tenantName + "', it has active applications: " + activeApplications); + } + + private List<ApplicationId> activeApplications(TenantName tenantName) { + return tenantRepository.getTenant(tenantName).getApplicationRepo().listApplications(); + } + + // ---------------- Misc operations ---------------------------------------------------------------- + public Tenant verifyTenantAndApplication(ApplicationId applicationId) { TenantName tenantName = applicationId.tenant(); if (!tenantRepository.checkThatTenantExists(tenantName)) { |