diff options
author | Valerij Fredriksen <valerij92@gmail.com> | 2020-09-24 13:54:32 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerij92@gmail.com> | 2020-09-24 13:54:32 +0200 |
commit | 6c6e773f39bf88b66ef1b4d0782f9a0025b244a0 (patch) | |
tree | c324b1e71cd511593c4539fd181b7e1e3b20f02a /configserver | |
parent | a4e7bca517671223e797623c000d7bf4e9de8cc3 (diff) |
Restart nodes after activate
Diffstat (limited to 'configserver')
3 files changed, 24 insertions, 5 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 3564a6e6da7..fb981eb1c67 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 @@ -313,11 +313,26 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye } public PrepareResult deploy(File applicationPackage, PrepareParams prepareParams, Instant now) { + if (prepareParams.internalRestart() && hostProvisioner.isEmpty()) + throw new IllegalArgumentException("Internal restart not supported without HostProvisioner"); + ApplicationId applicationId = prepareParams.getApplicationId(); long sessionId = createSession(applicationId, prepareParams.getTimeoutBudget(), applicationPackage); Tenant tenant = getTenant(applicationId); PrepareResult result = prepare(tenant, sessionId, prepareParams, now); activate(tenant, sessionId, prepareParams.getTimeoutBudget(), prepareParams.force()); + + if (prepareParams.internalRestart() && !result.configChangeActions().getRestartActions().isEmpty()) { + Set<String> hostnames = result.configChangeActions().getRestartActions().getEntries().stream() + .flatMap(entry -> entry.getServices().stream()) + .map(ServiceInfo::getHostName) + .collect(Collectors.toUnmodifiableSet()); + + hostProvisioner.get().restart(applicationId, HostFilter.from(hostnames, Set.of(), Set.of(), Set.of())); + ConfigChangeActions newActions = new ConfigChangeActions(new RestartActions(), result.configChangeActions().getRefeedActions()); + return new PrepareResult(result.sessionId(), newActions, result.deployLog()); + } + return result; } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/configchange/ConfigChangeActions.java b/configserver/src/main/java/com/yahoo/vespa/config/server/configchange/ConfigChangeActions.java index d783dc105c3..dd9c8e4b6bb 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/configchange/ConfigChangeActions.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/configchange/ConfigChangeActions.java @@ -4,6 +4,7 @@ package com.yahoo.vespa.config.server.configchange; import com.yahoo.config.model.api.ConfigChangeAction; import java.util.List; +import java.util.Objects; /** * Contains an aggregated view of which actions that must be performed to handle config @@ -18,13 +19,16 @@ public class ConfigChangeActions { private final RefeedActions refeedActions; public ConfigChangeActions() { - this.restartActions = new RestartActions(); - this.refeedActions = new RefeedActions(); + this(new RestartActions(), new RefeedActions()); } public ConfigChangeActions(List<ConfigChangeAction> actions) { - this.restartActions = new RestartActions(actions); - this.refeedActions = new RefeedActions(actions); + this(new RestartActions(actions), new RefeedActions(actions)); + } + + public ConfigChangeActions(RestartActions restartActions, RefeedActions refeedActions) { + this.restartActions = Objects.requireNonNull(restartActions); + this.refeedActions = Objects.requireNonNull(refeedActions); } public RestartActions getRestartActions() { diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/configchange/RestartActions.java b/configserver/src/main/java/com/yahoo/vespa/config/server/configchange/RestartActions.java index 29b0b99e42e..4db5a5e125f 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/configchange/RestartActions.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/configchange/RestartActions.java @@ -97,6 +97,6 @@ public class RestartActions { } public boolean isEmpty() { - return getEntries().isEmpty(); + return actions.isEmpty(); } } |