summaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2020-08-19 10:49:25 +0200
committerHarald Musum <musum@verizonmedia.com>2020-08-19 10:49:25 +0200
commit5237d30ab21f17bf69b7ad817a48d85eb8f9f6a8 (patch)
tree77a19820dba5d4c41e8a96063ed4be8cbf1bdacb /configserver
parent2d8013592b52073f48697d899778b2f8c20b6c34 (diff)
Add and use getOptionalApplicationId in some places
In some scenarios data might be missing in ZooKeeper, in those cases handle that instead of failing
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java6
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/ConfigServerBootstrap.java6
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java7
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java10
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java5
5 files changed, 25 insertions, 9 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 b8508922b78..ebeb7e7e377 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
@@ -760,9 +760,9 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye
Set<ApplicationId> applicationIds = new HashSet<>();
sessionsPerTenant.values()
.forEach(sessionList -> sessionList.stream()
- .map(Session::getApplicationId)
- .filter(Objects::nonNull)
- .forEach(applicationIds::add));
+ .map(Session::getOptionalApplicationId)
+ .filter(Optional::isPresent)
+ .forEach(appId -> applicationIds.add(appId.get())));
Map<ApplicationId, Long> activeSessions = new HashMap<>();
applicationIds.forEach(applicationId -> {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ConfigServerBootstrap.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ConfigServerBootstrap.java
index 0aab83d5a6a..cbea6d99dd2 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/ConfigServerBootstrap.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ConfigServerBootstrap.java
@@ -105,7 +105,11 @@ public class ConfigServerBootstrap extends AbstractComponent implements Runnable
initializing(vipStatusMode);
// Run maintainers that cleans up zookeeper and disk usage before bootstrapping
- configServerMaintenance.ifPresent(ConfigServerMaintenance::runBeforeBootstrap);
+ try {
+ configServerMaintenance.ifPresent(ConfigServerMaintenance::runBeforeBootstrap);
+ } catch (Exception e) {
+ log.log(Level.INFO, "Running maintainers before bootstrap failed, continuing with bootstrap", e);
+ }
switch (mode) {
case BOOTSTRAP_IN_SEPARATE_THREAD:
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java
index 21103b490fd..11ce659625d 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java
@@ -108,17 +108,18 @@ public class Deployment implements com.yahoo.config.provision.Deployment {
@Override
public void prepare() {
if (prepared) return;
- try (ActionTimer timer = applicationRepository.timerFor(session.getApplicationId(), "deployment.prepareMillis")) {
+ ApplicationId applicationId = session.getApplicationId();
+ try (ActionTimer timer = applicationRepository.timerFor(applicationId, "deployment.prepareMillis")) {
TimeoutBudget timeoutBudget = new TimeoutBudget(clock, timeout);
- PrepareParams.Builder params = new PrepareParams.Builder().applicationId(session.getApplicationId())
+ PrepareParams.Builder params = new PrepareParams.Builder().applicationId(applicationId)
.timeoutBudget(timeoutBudget)
.ignoreValidationErrors(!validate)
.vespaVersion(version.toString())
.isBootstrap(isBootstrap);
dockerImageRepository.ifPresent(params::dockerImageRepository);
athenzDomain.ifPresent(params::athenzDomain);
- Optional<ApplicationSet> activeApplicationSet = applicationRepository.getCurrentActiveApplicationSet(tenant, session.getApplicationId());
+ Optional<ApplicationSet> activeApplicationSet = applicationRepository.getCurrentActiveApplicationSet(tenant, applicationId);
tenant.getSessionRepository().prepareLocalSession(session, logger, params.build(), activeApplicationSet,
tenant.getPath(), clock.instant());
this.prepared = true;
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java
index d401669b8d6..c0b8b20d265 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java
@@ -134,8 +134,18 @@ public abstract class Session implements Comparable<Session> {
sessionZooKeeperClient.writeAthenzDomain(athenzDomain);
}
+ /** Returns application id read from ZooKeeper. Will throw RuntimeException if not found */
public ApplicationId getApplicationId() { return sessionZooKeeperClient.readApplicationId(); }
+ /** Returns application id read from ZooKeeper. Will return Optional.empty() if not found */
+ public Optional<ApplicationId> getOptionalApplicationId() {
+ try {
+ return Optional.of(getApplicationId());
+ } catch (RuntimeException e) {
+ return Optional.empty();
+ }
+ }
+
public FileReference getApplicationPackageReference() {return sessionZooKeeperClient.readApplicationPackageReference(); }
public Optional<DockerImage> getDockerImageRepository() { return sessionZooKeeperClient.readDockerImageRepository(); }
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 6c4ef469be6..60ec297993f 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
@@ -181,8 +181,9 @@ public class SessionRepository {
deleteLocalSession(candidate);
} else if (createTime.plus(Duration.ofDays(1)).isBefore(clock.instant())) {
// Sessions with state ACTIVATE, but which are not actually active
- ApplicationId applicationId = candidate.getApplicationId();
- Long activeSession = activeSessions.get(applicationId);
+ Optional<ApplicationId> applicationId = candidate.getOptionalApplicationId();
+ if (applicationId.isEmpty()) continue;
+ Long activeSession = activeSessions.get(applicationId.get());
if (activeSession == null || activeSession != candidate.getSessionId()) {
deleteLocalSession(candidate);
log.log(Level.INFO, "Deleted inactive session " + candidate.getSessionId() + " created " +