diff options
author | Harald Musum <musum@verizonmedia.com> | 2020-07-09 13:52:00 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-09 13:52:00 +0200 |
commit | d148097870304aebd2c904a4f62cf1156f2a2422 (patch) | |
tree | 74442e67c550483d279e9b64a3ac0db37205291b /configserver | |
parent | 9ba83e0d6bd5a5a0f30434aa343821c29abe8628 (diff) | |
parent | 4ffd74ae2eabd17e49f95427addb7ed82bf11ee7 (diff) |
Merge pull request #13846 from vespa-engine/hmusum/delete-expired-locks
Delete expired locks (older than 1 day)
Diffstat (limited to 'configserver')
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())); } |