diff options
author | Harald Musum <musum@verizonmedia.com> | 2021-01-24 22:11:15 +0100 |
---|---|---|
committer | Harald Musum <musum@verizonmedia.com> | 2021-01-24 22:11:15 +0100 |
commit | 8c4747168af06e64f2d260c4892bb8b0b4db0d1a (patch) | |
tree | 0b3683f81d03a0d46e011d7558cb4fb7e28c01d7 /configserver | |
parent | ff53ea823bdca66ad5b245299257fa73172053fd (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.java | 14 |
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); |