aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/vespa/model/application
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2023-07-06 14:18:04 +0200
committerjonmv <venstad@gmail.com>2023-07-06 14:18:04 +0200
commit55acfb7c38c5e0a666c56b989a463640071ca71f (patch)
tree07274636ce22d60e1a743e3468d384786778a30d /config-model/src/main/java/com/yahoo/vespa/model/application
parent9a3e881c61473e6966e9a3db3a11c79907423e0d (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.java27
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) {