diff options
author | Harald Musum <musum@verizonmedia.com> | 2020-08-27 15:28:38 +0200 |
---|---|---|
committer | Harald Musum <musum@verizonmedia.com> | 2020-08-27 15:28:38 +0200 |
commit | 09d6192f087af981adcc08fd1255eccfc10f8448 (patch) | |
tree | ee284889feb7aafb3bf7bf2d4cf15c660506eca4 /configserver | |
parent | c6c3254619000d2859abd2ff1bbe7bf6fa092c2a (diff) |
Run TenantsMaintainer only in hosted
Diffstat (limited to 'configserver')
3 files changed, 92 insertions, 13 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainer.java index 79af8877222..6a69665b8ad 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainer.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainer.java @@ -32,6 +32,8 @@ public class TenantsMaintainer extends ConfigServerMaintainer { @Override protected boolean maintain() { + if ( ! applicationRepository.configserverConfig().hostedVespa()) return true; + Set<TenantName> tenants = applicationRepository.deleteUnusedTenants(ttlForUnusedTenant, clock.instant()); if (tenants.size() > 0) log.log(Level.INFO, "Deleted tenants " + tenants); return true; diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java b/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java index 9566daf70f4..043841c6acb 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java @@ -1,45 +1,116 @@ // Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.config.server.maintenance; +import com.yahoo.cloud.config.ConfigserverConfig; +import com.yahoo.config.model.api.HostProvisioner; +import com.yahoo.config.model.provision.InMemoryProvisioner; +import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.Capacity; +import com.yahoo.config.provision.ClusterSpec; +import com.yahoo.config.provision.HostFilter; +import com.yahoo.config.provision.HostSpec; +import com.yahoo.config.provision.ProvisionLogger; +import com.yahoo.config.provision.Provisioner; +import com.yahoo.transaction.NestedTransaction; import com.yahoo.vespa.config.server.ApplicationRepository; import com.yahoo.vespa.config.server.GlobalComponentRegistry; import com.yahoo.vespa.config.server.MockLogRetriever; import com.yahoo.vespa.config.server.TestComponentRegistry; import com.yahoo.vespa.config.server.application.OrchestratorMock; -import com.yahoo.vespa.config.server.http.SessionHandlerTest; +import com.yahoo.vespa.config.server.deploy.DeployTester; +import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry; +import com.yahoo.vespa.config.server.session.PrepareParams; import com.yahoo.vespa.config.server.tenant.TenantRepository; import com.yahoo.vespa.curator.Curator; import com.yahoo.vespa.curator.mock.MockCurator; import com.yahoo.vespa.flags.FlagSource; +import org.junit.rules.TemporaryFolder; +import java.io.File; +import java.io.IOException; import java.time.Clock; +import java.util.Collection; +import java.util.List; class MaintainerTester { private final Curator curator; private final TenantRepository tenantRepository; private final ApplicationRepository applicationRepository; + private final Clock clock; - MaintainerTester(Clock clock, FlagSource flagSource) { - curator = new MockCurator(); + MaintainerTester(Clock clock, FlagSource flagSource, TemporaryFolder temporaryFolder) throws IOException { + this.clock = clock; + this.curator = new MockCurator(); + InMemoryProvisioner hostProvisioner = new InMemoryProvisioner(true, "host0", "host1", "host2", "host3", "host4"); + ProvisionerAdapter provisioner = new ProvisionerAdapter(hostProvisioner); + ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder() + .hostedVespa(true) + .configServerDBDir(temporaryFolder.newFolder().getAbsolutePath()) + .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath()) + .build(); GlobalComponentRegistry componentRegistry = new TestComponentRegistry.Builder() .curator(curator) .clock(clock) + .configServerConfig(configserverConfig) + .provisioner(provisioner) + .flagSource(flagSource) + .modelFactoryRegistry(new ModelFactoryRegistry(List.of(new DeployTester.CountingModelFactory(clock)))) .build(); - tenantRepository = new TenantRepository(componentRegistry, false); + tenantRepository = new TenantRepository(componentRegistry); applicationRepository = new ApplicationRepository.Builder() .withTenantRepository(tenantRepository) - .withProvisioner(new SessionHandlerTest.MockProvisioner()) + .withProvisioner(provisioner) .withOrchestrator(new OrchestratorMock()) .withLogRetriever(new MockLogRetriever()) .withFlagSource(flagSource) .withClock(clock) + .withConfigserverConfig(configserverConfig) .build(); } + void deployApp(File applicationPath, PrepareParams.Builder prepareParams) { + applicationRepository.deploy(applicationPath, + prepareParams.ignoreValidationErrors(true).build(), + false, + clock.instant()); + } + Curator curator() { return curator; } + TenantRepository tenantRepository() { return tenantRepository; } ApplicationRepository applicationRepository() { return applicationRepository;} -} + + private static class ProvisionerAdapter implements Provisioner { + + private final HostProvisioner hostProvisioner; + + public ProvisionerAdapter(HostProvisioner hostProvisioner) { + this.hostProvisioner = hostProvisioner; + } + + @Override + public List<HostSpec> prepare(ApplicationId applicationId, ClusterSpec cluster, Capacity capacity, ProvisionLogger logger) { + return hostProvisioner.prepare(cluster, capacity, logger); + } + + @Override + public void activate(NestedTransaction transaction, ApplicationId application, Collection<HostSpec> hosts) { + // noop + } + + @Override + public void remove(NestedTransaction transaction, ApplicationId application) { + // noop + } + + @Override + public void restart(ApplicationId application, HostFilter filter) { + // noop + } + + } + +}
\ No newline at end of file diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainerTest.java index d6335fbd0f1..e6172546ff8 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainerTest.java @@ -12,9 +12,12 @@ import com.yahoo.vespa.config.server.tenant.TenantRepository; import com.yahoo.vespa.flags.FlagSource; import com.yahoo.vespa.flags.Flags; import com.yahoo.vespa.flags.InMemoryFlagSource; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TemporaryFolder; import java.io.File; +import java.io.IOException; import java.time.Duration; import static org.junit.Assert.assertNotNull; @@ -22,14 +25,17 @@ import static org.junit.Assert.assertNull; public class TenantsMaintainerTest { + @Rule + public TemporaryFolder temporaryFolder = new TemporaryFolder(); + @Test - public void deleteTenantWithNoApplications() { + public void deleteTenantWithNoApplications() throws IOException { ManualClock clock = new ManualClock("2020-06-01T00:00:00"); FlagSource flagSource = new InMemoryFlagSource().withBooleanFlag(Flags.USE_TENANT_META_DATA.id(), true); - MaintainerTester tester = new MaintainerTester(clock, flagSource); + MaintainerTester tester = new MaintainerTester(clock, flagSource, temporaryFolder); TenantRepository tenantRepository = tester.tenantRepository(); ApplicationRepository applicationRepository = tester.applicationRepository(); - File applicationPackage = new File("src/test/apps/app"); + File applicationPackage = new File("src/test/apps/hosted"); TenantName shouldBeDeleted = TenantName.from("to-be-deleted"); TenantName shouldNotBeDeleted = TenantName.from("should-not-be-deleted"); @@ -38,7 +44,7 @@ public class TenantsMaintainerTest { tenantRepository.addTenant(shouldNotBeDeleted); tenantRepository.addTenant(TenantRepository.HOSTED_VESPA_TENANT); - applicationRepository.deploy(applicationPackage, prepareParams(shouldNotBeDeleted)); + tester.deployApp(applicationPackage, prepareParams(shouldNotBeDeleted)); assertNotNull(tenantRepository.getTenant(shouldBeDeleted)); assertNotNull(tenantRepository.getTenant(shouldNotBeDeleted)); @@ -56,11 +62,11 @@ public class TenantsMaintainerTest { // Add tenant again and deploy tenantRepository.addTenant(shouldBeDeleted); - tester.applicationRepository().deploy(applicationPackage, prepareParams(shouldBeDeleted)); + tester.deployApp(applicationPackage, prepareParams(shouldBeDeleted)); } - private PrepareParams prepareParams(TenantName tenantName) { - return new PrepareParams.Builder().applicationId(applicationId(tenantName)).build(); + private PrepareParams.Builder prepareParams(TenantName tenantName) { + return new PrepareParams.Builder().applicationId(applicationId(tenantName)); } private ApplicationId applicationId(TenantName tenantName) { |