diff options
author | jonmv <venstad@gmail.com> | 2023-07-06 14:18:04 +0200 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2023-07-06 14:18:04 +0200 |
commit | 55acfb7c38c5e0a666c56b989a463640071ca71f (patch) | |
tree | 07274636ce22d60e1a743e3468d384786778a30d /config-model/src/main/java/com/yahoo/vespa/model/application | |
parent | 9a3e881c61473e6966e9a3db3a11c79907423e0d (diff) |
Instead let user choose when to restart on internal redeploy
Diffstat (limited to 'config-model/src/main/java/com/yahoo/vespa/model/application')
-rw-r--r-- | config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidator.java | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidator.java index ce456be0746..f70b7f40421 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidator.java @@ -4,6 +4,7 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.model.api.ConfigChangeAction; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.ClusterSpec; +import com.yahoo.config.provision.HostSpec; import com.yahoo.container.QrConfig; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.container.ApplicationContainer; @@ -12,6 +13,10 @@ import com.yahoo.vespa.model.container.ContainerCluster; import java.util.ArrayList; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import static java.util.stream.Collectors.toUnmodifiableSet; /** * Returns a restart action for each container that has turned on {@link QrConfig#restartOnDeploy()}. @@ -23,19 +28,35 @@ public class ContainerRestartValidator implements ChangeValidator { @Override public List<ConfigChangeAction> validate(VespaModel currentModel, VespaModel nextModel, DeployState deployState) { boolean nodesUnchanged = currentModel.allocatedHosts().equals(nextModel.allocatedHosts()); + boolean contentUnchanged = contentHostsOf(currentModel).equals(contentHostsOf(nextModel)); List<ConfigChangeAction> actions = new ArrayList<>(); for (ContainerCluster<ApplicationContainer> cluster : nextModel.getContainerClusters().values()) { actions.addAll(cluster.getContainers().stream() .filter(container -> isExistingContainer(container, currentModel)) .filter(container -> shouldContainerRestartOnDeploy(container, nextModel)) - .map(container -> createConfigChangeAction(cluster.id(), container, nodesUnchanged)) + .map(container -> createConfigChangeAction(cluster.id(), container, nextModel, nodesUnchanged, contentUnchanged)) .toList()); } return actions; } - private static ConfigChangeAction createConfigChangeAction(ClusterSpec.Id id, Container container, boolean nodesUnchanged) { - return new VespaRestartAction(id, createMessage(container), container.getServiceInfo(), nodesUnchanged); + private Set<HostSpec> contentHostsOf(VespaModel model) { + return model.allocatedHosts().getHosts().stream() + .filter(spec -> spec.membership() + .map(membership -> membership.cluster().type().isContent()) + .orElse(false)) + .collect(toUnmodifiableSet()); + } + + private static ConfigChangeAction createConfigChangeAction(ClusterSpec.Id id, Container container, VespaModel model, + boolean nodesUnchanged, boolean contentUnchanged) { + boolean ignoreOnRedeploy = switch (model.getConfig(QrConfig.class, container.getConfigId()).restartOnInternalRedeploy()) { + case never -> true; + case content_changes -> contentUnchanged; + case node_changes -> nodesUnchanged; + case always -> false; + }; + return new VespaRestartAction(id, createMessage(container), container.getServiceInfo(), ignoreOnRedeploy); } private static String createMessage(Container container) { |