/** * Delete the given tenant. A tenant must not have any assigned workers in order for deletion to be allowed. * * @param name Name of the tenant to delete * @throws IllegalStateException if the tenant has one or more assigned workers * @throws IOException if there was an exception persisting the deletion */ public void deleteTenantByName(String name) throws IllegalStateException, IOException { tenantLock.lock(); try { Tenant tenant = tenantStore.getTenantByName(name); if (tenant == null) { return; } int numAssignedWorkers = provisionerStore.getNumAssignedWorkers(tenant.getId()); if (numAssignedWorkers > 0) { throw new IllegalStateException("Tenant " + name + " still has " + numAssignedWorkers + " workers. " + "Cannot delete it until workers are set to 0."); } tenantStore.deleteTenantByName(name); for (QueueGroup queueGroup : queueService.getAllQueueGroups().values()) { queueGroup.removeAll(tenant.getId()); } } finally { tenantLock.unlock(); } }
int diff = tenant.getSpecification().getWorkers() - provisionerStore.getNumAssignedWorkers(tenantId); if (diff < 0) { Account tenantAdmin = new Account(Constants.ADMIN_USER, tenantId);
ProvisionerStore store = getProvisionerStore(); Assert.assertEquals(0, store.getNumAssignedWorkers("tenantA")); Assert.assertEquals(0, store.getNumAssignedWorkers("tenantX")); Assert.assertEquals(0, store.getNumAssignedWorkers("tenantY")); Assert.assertEquals(0, store.getNumAssignedWorkers("tenantZ")); store.writeProvisioner(provisioner2); Assert.assertEquals(5, store.getNumAssignedWorkers("tenantA")); Assert.assertEquals(5, store.getNumAssignedWorkers("tenantX")); Assert.assertEquals(10, store.getNumAssignedWorkers("tenantY")); Assert.assertEquals(2, store.getNumAssignedWorkers("tenantZ")); store.writeProvisioner(updatedProvisioner2); Assert.assertEquals(5, store.getNumAssignedWorkers("tenantA")); Assert.assertEquals(40, store.getNumAssignedWorkers("tenantB")); Assert.assertEquals(15, store.getNumAssignedWorkers("tenantX")); Assert.assertEquals(55, store.getNumAssignedWorkers("tenantY")); Assert.assertEquals(20, store.getNumAssignedWorkers("tenantZ")); Assert.assertEquals(0, store.getNumAssignedWorkers("tenantA")); Assert.assertEquals(40, store.getNumAssignedWorkers("tenantB")); Assert.assertEquals(15, store.getNumAssignedWorkers("tenantX")); Assert.assertEquals(5, store.getNumAssignedWorkers("tenantY")); Assert.assertEquals(0, store.getNumAssignedWorkers("tenantZ"));
Assert.assertEquals(1, tenantProvisioners.size()); Assert.assertEquals(provisioner, tenantProvisioners.iterator().next()); Assert.assertEquals(1, store.getNumAssignedWorkers(tenant)); Assert.assertEquals(1, tenantProvisioners.size()); Assert.assertEquals(provisioner, tenantProvisioners.iterator().next()); Assert.assertEquals(2, store.getNumAssignedWorkers(tenant)); Assert.assertEquals(1, tenantProvisioners.size()); Assert.assertEquals(provisioner, tenantProvisioners.iterator().next()); Assert.assertEquals(3, store.getNumAssignedWorkers(tenant));
@Test public void testWriteWithTenantUpdate() throws IOException { ProvisionerStore store = getProvisionerStore(); store.writeProvisioner(provisioner1); Assert.assertEquals(provisioner1, store.getProvisioner(provisioner1.getId())); Provisioner updatedProvisioner1 = new Provisioner( provisioner1.getId(), provisioner1.getHost(), provisioner1.getPort(), 100, ImmutableMap.<String, Integer>of("tenantA", 50, "tenantY", 5, "tenantZ", 0), ImmutableMap.<String, Integer>of("tenantA", 50, "tenantY", 5, "tenantZ", 1) ); store.writeProvisioner(updatedProvisioner1); Assert.assertEquals(updatedProvisioner1, store.getProvisioner(provisioner1.getId())); Assert.assertEquals(0, store.getNumAssignedWorkers("tenantX")); Assert.assertEquals(44, store.getFreeCapacity()); for (Provisioner provisioner : store.getTenantProvisioners("tenantX")) { Assert.assertFalse(provisioner.getId().equals(provisioner1.getId())); } }