summaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2021-01-24 22:11:15 +0100
committerHarald Musum <musum@verizonmedia.com>2021-01-24 22:11:15 +0100
commit8c4747168af06e64f2d260c4892bb8b0b4db0d1a (patch)
tree0b3683f81d03a0d46e011d7558cb4fb7e28c01d7 /configserver
parentff53ea823bdca66ad5b245299257fa73172053fd (diff)
Split out getOrCreateTenant and do not synchronize createTenant
Split out so that we can avoid the need to synchronized on instance, since we now just do one operation on the synchronized tenants map
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java14
1 files changed, 9 insertions, 5 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java
index 2f4fbe8caea..365f68b7aea 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java
@@ -219,7 +219,7 @@ public class TenantRepository {
if (tenants.containsKey(tenantName)) throw new IllegalArgumentException("Tenant '" + tenantName + "' already exists");
writeTenantPath(tenantName);
- return createTenant(tenantName, clock.instant());
+ return getOrCreateTenant(tenantName, clock.instant());
}
public void createAndWriteTenantMetaData(Tenant tenant) {
@@ -288,7 +288,7 @@ public class TenantRepository {
}
// Use when bootstrapping an existing tenant based on ZooKeeper data
- protected synchronized void bootstrapTenant(TenantName tenantName) {
+ protected void bootstrapTenant(TenantName tenantName) {
createTenant(tenantName, readCreatedTimeFromZooKeeper(tenantName));
}
@@ -300,14 +300,18 @@ public class TenantRepository {
return clock.instant();
}
- // Creates tenant and all its dependencies. This also includes loading active applications
- private Tenant createTenant(TenantName tenantName, Instant created) {
+ private Tenant getOrCreateTenant(TenantName tenantName, Instant created) {
if (tenants.containsKey(tenantName)) {
Tenant tenant = getTenant(tenantName);
createAndWriteTenantMetaData(tenant);
return tenant;
+ } else {
+ return createTenant(tenantName, created);
}
+ }
+ // Creates tenant and all its dependencies. This also includes loading active applications
+ private Tenant createTenant(TenantName tenantName, Instant created) {
TenantApplications applicationRepo =
new TenantApplications(tenantName,
curator,
@@ -497,7 +501,7 @@ public class TenantRepository {
case CHILD_ADDED:
TenantName t1 = getTenantNameFromEvent(event);
if ( ! tenants.containsKey(t1))
- zkWatcherExecutor.execute(t1, () -> bootstrapTenant(t1));
+ zkWatcherExecutor.execute(t1, () -> getOrCreateTenant(t1, readCreatedTimeFromZooKeeper(t1)));
break;
case CHILD_REMOVED:
TenantName t2 = getTenantNameFromEvent(event);