diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-11-28 10:41:58 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-28 10:41:58 +0100 |
commit | 0e02838074469a89757b05f6b602939ca82ea0f2 (patch) | |
tree | 4d9a9641e21674b029835c2d2b28540ebb1d613f /configserver | |
parent | 34b59ff472d8fd8df41c0d86b2ed9998a48b7b85 (diff) | |
parent | 679f19d137c5c19ae3f0d4845e63b06e1fc34112 (diff) |
Merge pull request #4288 from vespa-engine/hmusum/make-tenants-handling-more-robust
Do not create system tenants in constructor. Do not put into map of t…
Diffstat (limited to 'configserver')
3 files changed, 14 insertions, 12 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/Tenants.java b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/Tenants.java index d2cf17a38d4..5fb62a68e3e 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/Tenants.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/Tenants.java @@ -96,18 +96,17 @@ public class Tenants implements ConnectionStateListener, PathChildrenCacheListen } /** - * New instance containing the given tenants. This will not create Zookeeper watches. For testing only + * New instance containing the given tenants. Creates no system tenants and noZookeeper watches. For testing only. * @param globalComponentRegistry a {@link com.yahoo.vespa.config.server.GlobalComponentRegistry} instance * @param tenants a collection of {@link Tenant}s */ + // TODO: Get rid of the second argument and let callers use addTenant() instead public Tenants(GlobalComponentRegistry globalComponentRegistry, Collection<Tenant> tenants) { this.globalComponentRegistry = globalComponentRegistry; this.curator = globalComponentRegistry.getCurator(); metricUpdater = globalComponentRegistry.getMetrics().getOrCreateMetricUpdater(Collections.emptyMap()); this.tenantListeners.add(globalComponentRegistry.getTenantListener()); curator.create(tenantsPath); - createSystemTenants(globalComponentRegistry.getConfigserverConfig()); - createTenants(); this.directoryCache = curator.createDirectoryCache(tenantsPath.getAbsolute(), false, false, pathChildrenExecutor); this.tenants.putAll(addTenants(tenants)); } @@ -120,13 +119,13 @@ public class Tenants implements ConnectionStateListener, PathChildrenCacheListen // Pre-condition: tenants path needs to exist in zk private LinkedHashMap<TenantName, Tenant> addTenants(Collection<Tenant> newTenants) { - LinkedHashMap<TenantName, Tenant> sessionTenants = new LinkedHashMap<>(); + LinkedHashMap<TenantName, Tenant> tenants = new LinkedHashMap<>(); for (Tenant t : newTenants) { - sessionTenants.put(t.getName(), t); + tenants.put(t.getName(), t); } - log.log(LogLevel.DEBUG, "Tenants at startup: " + sessionTenants); - metricUpdater.setTenants(tenants.size()); - return sessionTenants; + log.log(LogLevel.DEBUG, "Tenants at startup: " + tenants); + metricUpdater.setTenants(this.tenants.size()); + return tenants; } public synchronized void addTenant(TenantName tenantName) throws Exception { @@ -191,7 +190,7 @@ public class Tenants implements ConnectionStateListener, PathChildrenCacheListen try { Tenant tenant = TenantBuilder.create(globalComponentRegistry, tenantName).build(); notifyNewTenant(tenant); - tenants.put(tenantName, tenant); + tenants.putIfAbsent(tenantName, tenant); } catch (Exception e) { log.log(LogLevel.WARNING, "Error loading tenant '" + tenantName + "', skipping.", e); } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java index d9a0db7e811..63f0f5f26b7 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java @@ -23,6 +23,7 @@ import com.yahoo.config.provision.InstanceName; import com.yahoo.config.provision.AllocatedHosts; import com.yahoo.config.provision.ProvisionLogger; import com.yahoo.config.provision.Provisioner; +import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.Version; import com.yahoo.transaction.NestedTransaction; import com.yahoo.vespa.config.server.ApplicationRepository; @@ -57,6 +58,8 @@ import java.util.Optional; */ public class DeployTester { + private static final TenantName tenantName = TenantName.from("deploytester"); + private final Clock clock; private final Tenants tenants; private final File testApp; @@ -95,6 +98,7 @@ public class DeployTester { try { this.testApp = new File(appPath); this.tenants = new Tenants(componentRegistry, Collections.emptySet()); + tenants.addTenant(tenantName); } catch (Exception e) { throw new IllegalArgumentException(e); @@ -103,7 +107,7 @@ public class DeployTester { } public Tenant tenant() { - return tenants.defaultTenant(); + return tenants.getTenant(tenantName); } /** Create a model factory for the version of this source*/ diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/RedeployTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/RedeployTest.java index 76734aadae7..50e8c711330 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/RedeployTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/RedeployTest.java @@ -7,7 +7,6 @@ import com.yahoo.config.model.api.ModelFactory; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationName; import com.yahoo.config.provision.InstanceName; -import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.Version; import com.yahoo.test.ManualClock; import com.yahoo.vespa.config.server.session.LocalSession; @@ -60,7 +59,7 @@ public class RedeployTest { modelFactories.add(DeployTester.createModelFactory(Clock.systemUTC())); modelFactories.add(DeployTester.createFailingModelFactory(Version.fromIntValues(1, 0, 0))); DeployTester tester = new DeployTester("ignored/app/path", modelFactories); - ApplicationId id = ApplicationId.from(TenantName.from("default"), + ApplicationId id = ApplicationId.from(tester.tenant().getName(), ApplicationName.from("default"), InstanceName.from("default")); assertFalse(tester.redeployFromLocalActive(id).isPresent()); |