summaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2020-08-27 15:28:38 +0200
committerHarald Musum <musum@verizonmedia.com>2020-08-27 15:28:38 +0200
commit09d6192f087af981adcc08fd1255eccfc10f8448 (patch)
treeee284889feb7aafb3bf7bf2d4cf15c660506eca4 /configserver
parentc6c3254619000d2859abd2ff1bbe7bf6fa092c2a (diff)
Run TenantsMaintainer only in hosted
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainer.java2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java83
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainerTest.java20
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) {