aboutsummaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2020-07-09 13:52:00 +0200
committerGitHub <noreply@github.com>2020-07-09 13:52:00 +0200
commitd148097870304aebd2c904a4f62cf1156f2a2422 (patch)
tree74442e67c550483d279e9b64a3ac0db37205291b /configserver
parent9ba83e0d6bd5a5a0f30434aa343821c29abe8628 (diff)
parent4ffd74ae2eabd17e49f95427addb7ed82bf11ee7 (diff)
Merge pull request #13846 from vespa-engine/hmusum/delete-expired-locks
Delete expired locks (older than 1 day)
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java8
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java2
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/SessionsMaintainer.java4
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java17
4 files changed, 30 insertions, 1 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 bd86052c0dd..0d020486641 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
@@ -688,6 +688,14 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye
sessionsPerTenant.keySet().forEach(tenant -> tenant.getSessionRepository().deleteExpiredSessions(activeSessions));
}
+ public int deleteExpiredLocks(Duration expiryTime) {
+ return tenantRepository.getAllTenants()
+ .stream()
+ .map(tenant -> tenant.getSessionRepository().deleteExpiredLocks(clock, expiryTime))
+ .mapToInt(i -> i)
+ .sum();
+ }
+
public int deleteExpiredRemoteSessions(Duration expiryTime) {
return deleteExpiredRemoteSessions(clock, expiryTime);
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java
index c9866ac6dc0..b948da05556 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java
@@ -36,7 +36,7 @@ public class ConfigServerMaintenance extends AbstractComponent {
// TODO: Disabled until we have application metadata
//tenantsMaintainer = new TenantsMaintainer(applicationRepository, curator, defaults.tenantsMaintainerInterval);
fileDistributionMaintainer = new FileDistributionMaintainer(applicationRepository, curator, defaults.defaultInterval, configserverConfig);
- sessionsMaintainer = new SessionsMaintainer(applicationRepository, curator, defaults.defaultInterval);
+ sessionsMaintainer = new SessionsMaintainer(applicationRepository, curator, Duration.ofMinutes(1));
applicationPackageMaintainer = new ApplicationPackageMaintainer(applicationRepository, curator, Duration.ofMinutes(1), configserverConfig, flagSource);
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/SessionsMaintainer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/SessionsMaintainer.java
index 4975b82a801..ec06336c80a 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/SessionsMaintainer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/SessionsMaintainer.java
@@ -35,5 +35,9 @@ public class SessionsMaintainer extends ConfigServerMaintainer {
int deleted = applicationRepository.deleteExpiredRemoteSessions(expiryTime);
log.log(LogLevel.FINE, "Deleted " + deleted + " expired remote sessions, expiry time " + expiryTime);
}
+
+ Duration lockExpiryTime = Duration.ofDays(1);
+ int deleted = applicationRepository.deleteExpiredLocks(lockExpiryTime);
+ log.log(LogLevel.INFO, "Deleted " + deleted + " locks older than " + lockExpiryTime);
}
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
index fb2bbf29033..b3eb0342a2f 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
@@ -281,6 +281,23 @@ public class SessionRepository {
return deleted;
}
+ public int deleteExpiredLocks(Clock clock, Duration expiryTime) {
+ int deleted = 0;
+ for (var lock : curator.getChildren(locksPath)) {
+ Path path = locksPath.append(lock);
+ if (zooKeeperNodeCreated(path).orElse(clock.instant()).isBefore(clock.instant().minus(expiryTime))) {
+ log.log(Level.INFO, "Lock " + path + " has expired, deleting it");
+ curator.delete(path);
+ deleted++;
+ }
+ }
+ return deleted;
+ }
+
+ private Optional<Instant> zooKeeperNodeCreated(Path path) {
+ return curator.getStat(path).map(s -> Instant.ofEpochMilli(s.getCtime()));
+ }
+
private boolean sessionHasExpired(Instant created, Duration expiryTime, Clock clock) {
return (created.plus(expiryTime).isBefore(clock.instant()));
}