summaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2020-08-26 11:54:04 +0200
committerGitHub <noreply@github.com>2020-08-26 11:54:04 +0200
commit1f10f6f995969674f4938764b62d8beea22cb4e9 (patch)
tree80e21d126791c83ffe035a455020256edf47a91c /configserver
parenta0497ac0892be9f8372d5814cead725f656d29b7 (diff)
Revert "Add timestamp when creating tenant to TenantMetaData"
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java19
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantMetaData.java49
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java34
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java4
4 files changed, 24 insertions, 82 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java
index 73120e90a3e..137d0f1889e 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java
@@ -25,6 +25,7 @@ import com.yahoo.io.IOUtils;
import com.yahoo.jdisc.Metric;
import com.yahoo.path.Path;
import com.yahoo.slime.Slime;
+import com.yahoo.text.Utf8;
import com.yahoo.transaction.NestedTransaction;
import com.yahoo.transaction.Transaction;
import com.yahoo.vespa.config.server.application.Application;
@@ -64,6 +65,8 @@ import com.yahoo.vespa.config.server.tenant.TenantMetaData;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
import com.yahoo.vespa.curator.Curator;
import com.yahoo.vespa.curator.Lock;
+import com.yahoo.vespa.curator.transaction.CuratorOperations;
+import com.yahoo.vespa.curator.transaction.CuratorTransaction;
import com.yahoo.vespa.defaults.Defaults;
import com.yahoo.vespa.flags.BooleanFlag;
import com.yahoo.vespa.flags.FlagSource;
@@ -412,18 +415,24 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye
}
if (useTenantMetaData.value())
- transaction.add(updateMetaDataWithDeployTimestamp(tenant, clock.instant()));
+ transaction.add(writeTenantMetaData(tenant).operations());
return transaction;
}
- private List<Transaction.Operation> updateMetaDataWithDeployTimestamp(Tenant tenant, Instant deployTimestamp) {
- TenantMetaData tenantMetaData = getTenantMetaData(tenant).withLastDeployTimestamp(deployTimestamp);
- return tenantRepository.createWriteTenantMetaDataTransaction(tenantMetaData).operations();
+ private byte[] createMetaData(Tenant tenant) {
+ return new TenantMetaData(tenant.getSessionRepository().clock().instant()).asJsonBytes();
}
TenantMetaData getTenantMetaData(Tenant tenant) {
- return tenantRepository.getTenantMetaData(tenant);
+ Optional<byte[]> data = tenantRepository.getCurator().getData(TenantRepository.getTenantPath(tenant.getName()));
+ return data.map(bytes -> TenantMetaData.fromJsonString(Utf8.toString(bytes))).orElse(new TenantMetaData(tenant.getCreatedTime()));
+ }
+
+ private Transaction writeTenantMetaData(Tenant tenant) {
+ return new CuratorTransaction(tenantRepository.getCurator())
+ .add(CuratorOperations.setData(TenantRepository.getTenantPath(tenant.getName()).getAbsolute(),
+ createMetaData(tenant)));
}
static void checkIfActiveHasChanged(LocalSession session, Session currentActiveSession, boolean ignoreStaleSessionFailure) {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantMetaData.java b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantMetaData.java
index b8db47e371f..24862b82fb0 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantMetaData.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantMetaData.java
@@ -1,50 +1,30 @@
// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server.tenant;
-import com.yahoo.config.provision.TenantName;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.Inspector;
import com.yahoo.slime.Slime;
import com.yahoo.slime.SlimeUtils;
-import com.yahoo.text.Utf8;
import java.io.IOException;
import java.time.Instant;
/**
- * Meta data for a tenant like tenant name, tenant creation time and last deployment time, stored in ZooKeeper
+ * Metadata for a tenant. At the moment only stores last deploy time, to be used by TenantsMaintainer
+ * to GC unused tenants
*
* @author hmusum
*/
public class TenantMetaData {
- private static final String createTimestampKey = "createTimestampKey";
- private static final String lastDeployTimestampKey = "lastDeployTimestamp";
+ private final Instant lastDeployTimestamp;
- private final TenantName tenantName;
- private final Instant created;
- private final Instant lastDeployed;
-
- public TenantMetaData(TenantName tenantName, Instant lastDeployed, Instant created) {
- this.tenantName = tenantName;
- this.created = created;
- this.lastDeployed = lastDeployed;
- }
-
- public TenantMetaData withLastDeployTimestamp(Instant deployTimestamp) {
- return new TenantMetaData(tenantName, deployTimestamp, created);
- }
-
- public TenantName tenantName() {
- return tenantName;
+ public TenantMetaData(Instant instant) {
+ this.lastDeployTimestamp = instant;
}
public Instant lastDeployTimestamp() {
- return lastDeployed;
- }
-
- public Instant createdTimestamp() {
- return created;
+ return lastDeployTimestamp;
}
public byte[] asJsonBytes() {
@@ -55,16 +35,13 @@ public class TenantMetaData {
}
}
- public static TenantMetaData fromJsonString(TenantName tenantName, String jsonString) {
+ public static TenantMetaData fromJsonString(String jsonString) {
try {
Slime data = SlimeUtils.jsonToSlime(jsonString);
Inspector root = data.get();
- Inspector created = root.field(createTimestampKey);
- Inspector lastDeployTimestamp = root.field(lastDeployTimestampKey);
+ Inspector lastDeployTimestamp = root.field("lastDeployTimestamp");
- return new TenantMetaData(tenantName,
- Instant.ofEpochMilli(lastDeployTimestamp.asLong()),
- Instant.ofEpochMilli(created.asLong()));
+ return new TenantMetaData(Instant.ofEpochMilli(lastDeployTimestamp.asLong()));
} catch (Exception e) {
throw new IllegalArgumentException("Error parsing json metadata", e);
}
@@ -73,14 +50,8 @@ public class TenantMetaData {
private Slime getSlime() {
Slime slime = new Slime();
Cursor meta = slime.setObject();
- meta.setLong(createTimestampKey, created.toEpochMilli());
- meta.setLong(lastDeployTimestampKey, lastDeployed.toEpochMilli());
+ meta.setLong("lastDeployTimestamp", lastDeployTimestamp.toEpochMilli());
return slime;
}
- @Override
- public String toString() {
- return tenantName + ": " + Utf8.toString(asJsonBytes());
- }
-
}
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 2f05b7e7fe8..d6e3c6905fb 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
@@ -8,18 +8,12 @@ import com.yahoo.concurrent.StripedExecutor;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.TenantName;
import com.yahoo.path.Path;
-import com.yahoo.text.Utf8;
-import com.yahoo.transaction.Transaction;
import com.yahoo.vespa.config.server.GlobalComponentRegistry;
import com.yahoo.vespa.config.server.application.TenantApplications;
import com.yahoo.vespa.config.server.deploy.TenantFileSystemDirs;
import com.yahoo.vespa.config.server.monitoring.MetricUpdater;
import com.yahoo.vespa.config.server.session.SessionRepository;
import com.yahoo.vespa.curator.Curator;
-import com.yahoo.vespa.curator.transaction.CuratorOperations;
-import com.yahoo.vespa.curator.transaction.CuratorTransaction;
-import com.yahoo.vespa.flags.BooleanFlag;
-import com.yahoo.vespa.flags.Flags;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent;
import org.apache.curator.framework.state.ConnectionState;
@@ -88,7 +82,6 @@ public class TenantRepository {
private final ExecutorService bootstrapExecutor;
private final ScheduledExecutorService checkForRemovedApplicationsService = new ScheduledThreadPoolExecutor(1);
private final Optional<Curator.DirectoryCache> directoryCache;
- private final BooleanFlag useTenantMetaData;
/**
* Creates a new tenant repository
@@ -116,7 +109,6 @@ public class TenantRepository {
this.tenantListeners.add(componentRegistry.getTenantListener());
this.zkCacheExecutor = componentRegistry.getZkCacheExecutor();
this.zkWatcherExecutor = componentRegistry.getZkWatcherExecutor();
- this.useTenantMetaData = Flags.USE_TENANT_META_DATA.bindTo(componentRegistry.getFlagSource());
curator.framework().getConnectionStateListenable().addListener(this::stateChanged);
curator.create(tenantsPath);
@@ -150,30 +142,6 @@ public class TenantRepository {
createTenant(tenantName, componentRegistry.getClock().instant());
}
- public void createAndWriteTenantMetaData(Tenant tenant) {
- createWriteTenantMetaDataTransaction(createMetaData(tenant)).commit();
- }
-
- public Transaction createWriteTenantMetaDataTransaction(TenantMetaData tenantMetaData) {
- return new CuratorTransaction(curator).add(
- CuratorOperations.setData(TenantRepository.getTenantPath(tenantMetaData.tenantName()).getAbsolute(),
- tenantMetaData.asJsonBytes()));
- }
-
- private TenantMetaData createMetaData(Tenant tenant) {
- Instant deployTime = tenant.getSessionRepository().clock().instant();
- Instant createdTime = getTenantMetaData(tenant).createdTimestamp();
- if (createdTime.equals(Instant.EPOCH))
- createdTime = deployTime;
- return new TenantMetaData(tenant.getName(), deployTime, createdTime);
- }
-
- public TenantMetaData getTenantMetaData(Tenant tenant) {
- Optional<byte[]> data = getCurator().getData(TenantRepository.getTenantPath(tenant.getName()));
- return data.map(bytes -> TenantMetaData.fromJsonString(tenant.getName(), Utf8.toString(bytes)))
- .orElse(new TenantMetaData(tenant.getName(), tenant.getCreatedTime(), tenant.getCreatedTime()));
- }
-
private static Set<TenantName> readTenantsFromZooKeeper(Curator curator) {
return curator.getChildren(tenantsPath).stream().map(TenantName::from).collect(Collectors.toSet());
}
@@ -258,8 +226,6 @@ public class TenantRepository {
Tenant tenant = new Tenant(tenantName, sessionRepository, applicationRepo, applicationRepo, created);
notifyNewTenant(tenant);
tenants.putIfAbsent(tenantName, tenant);
- if (useTenantMetaData.value())
- createAndWriteTenantMetaData(tenant);
}
/**
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java
index cb43e80e82d..beac308cf77 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java
@@ -167,7 +167,6 @@ public class ApplicationRepositoryTest {
session.getAllocatedHosts();
assertEquals(Instant.EPOCH, applicationRepository.getTenantMetaData(tenant).lastDeployTimestamp());
- assertEquals(Instant.EPOCH, applicationRepository.getTenantMetaData(tenant).createdTimestamp());
}
@Test
@@ -175,7 +174,6 @@ public class ApplicationRepositoryTest {
FlagSource flagSource = new InMemoryFlagSource().withBooleanFlag(Flags.USE_TENANT_META_DATA.id(), true);
setup(flagSource);
- Instant startTime = clock.instant();
Duration duration = Duration.ofHours(1);
clock.advance(duration);
Instant deployTime = clock.instant();
@@ -190,8 +188,6 @@ public class ApplicationRepositoryTest {
assertEquals(deployTime.toEpochMilli(),
applicationRepository.getTenantMetaData(tenant).lastDeployTimestamp().toEpochMilli());
- assertEquals(startTime.toEpochMilli(),
- applicationRepository.getTenantMetaData(tenant).createdTimestamp().toEpochMilli());
}
@Test