diff options
author | Jon Bratseth <bratseth@oath.com> | 2020-12-04 14:52:35 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-04 14:52:35 +0100 |
commit | 8091fb8275d26af887ccc6e20058ab4d16787d05 (patch) | |
tree | 14862cc0196cff101eef7ddcf68e3c4acea21297 | |
parent | f026346fd89244da9a71a1fb9fcf17b1196c066b (diff) | |
parent | c3461d455816ebdc3f1f96fd0cf674a531f031f2 (diff) |
Merge pull request #15680 from vespa-engine/bratseth/propagate-restartOnDeploy
Propagate explicit restartOnDeploy to cluster
4 files changed, 34 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java index 9fdaaff9d5e..9f9c5def406 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java @@ -29,6 +29,7 @@ import com.yahoo.config.model.producer.AbstractConfigProducerRoot; import com.yahoo.config.model.producer.UserConfigRepo; import com.yahoo.config.provision.AllocatedHosts; import com.yahoo.config.provision.ClusterSpec; +import com.yahoo.container.QrConfig; import com.yahoo.searchdefinition.RankProfile; import com.yahoo.searchdefinition.RankProfileRegistry; import com.yahoo.searchdefinition.RankingConstants; @@ -190,6 +191,7 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri configModelRepo.prepareConfigModels(deployState); validateWrapExceptions(); hostSystem.dumpPortAllocations(); + propagateRestartOnDeploy(); // must happen after stuff above this.allocatedHosts = AllocatedHosts.withHosts(hostSystem.getHostSpecs()); } @@ -197,6 +199,18 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri this.allocatedHosts = AllocatedHosts.withHosts(hostSystem.getHostSpecs()); this.fileDistributor = fileDistributor; } + + } + + private void propagateRestartOnDeploy() { + if (applicationPackage.getMetaData().isInternalRedeploy()) return; + + // Propagate application config setting of restartOnDeploy to cluster deferChangesUntilRestart + for (ApplicationContainerCluster containerCluster : getContainerClusters().values()) { + QrConfig config = getConfig(QrConfig.class, containerCluster.getConfigId()); + if (config.restartOnDeploy()) + containerCluster.setDeferChangesUntilRestart(true); + } } /** Returns the application package owning this */ diff --git a/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java b/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java index c2a4b1f3bbf..5de03f17958 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java @@ -22,8 +22,10 @@ import com.yahoo.config.model.builder.xml.ConfigModelBuilder; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.TransientException; import com.yahoo.config.provision.Zone; +import com.yahoo.container.QrConfig; import com.yahoo.vespa.config.VespaVersion; import com.yahoo.vespa.model.application.validation.Validation; +import com.yahoo.vespa.model.container.ApplicationContainerCluster; import org.xml.sax.SAXException; import java.io.IOException; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java index e028eaea3c1..da3163b5533 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java @@ -9,6 +9,7 @@ import com.yahoo.config.model.api.Model; import com.yahoo.config.model.api.ValidationParameters; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.ClusterSpec; +import com.yahoo.container.QrConfig; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.application.validation.change.ChangeValidator; import com.yahoo.vespa.model.application.validation.change.ClusterSizeReductionValidator; @@ -24,6 +25,8 @@ import com.yahoo.vespa.model.application.validation.change.ResourcesReductionVal import com.yahoo.vespa.model.application.validation.change.StartupCommandChangeValidator; import com.yahoo.vespa.model.application.validation.change.StreamingSearchClusterChangeValidator; import com.yahoo.vespa.model.application.validation.first.AccessControlOnFirstDeploymentValidator; +import com.yahoo.vespa.model.container.ApplicationContainerCluster; +import com.yahoo.vespa.model.container.Container; import java.time.Instant; import java.util.Arrays; diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidatorTest.java index c1730528a39..ad05180cf60 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidatorTest.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.model.api.ConfigChangeAction; +import com.yahoo.container.QrConfig; import com.yahoo.vespa.defaults.Defaults; import com.yahoo.vespa.model.VespaModel; import com.yahoo.config.application.api.ValidationOverrides; @@ -13,6 +14,7 @@ import java.util.Collections; import java.util.List; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; /** @@ -44,6 +46,19 @@ public class ContainerRestartValidatorTest { assertTrue(result.isEmpty()); } + @Test + public void restart_on_deploy_is_propagated_to_cluster() { + VespaModel model1 = createModel(false); + assertFalse(model1.getContainerClusters().get("cluster1").getDeferChangesUntilRestart()); + assertFalse(model1.getContainerClusters().get("cluster2").getDeferChangesUntilRestart()); + assertFalse(model1.getContainerClusters().get("cluster3").getDeferChangesUntilRestart()); + + VespaModel model2 = createModel(true); + assertTrue(model2.getContainerClusters().get("cluster1").getDeferChangesUntilRestart()); + assertTrue(model2.getContainerClusters().get("cluster2").getDeferChangesUntilRestart()); + assertFalse(model2.getContainerClusters().get("cluster3").getDeferChangesUntilRestart()); + } + private static List<ConfigChangeAction> validateModel(VespaModel current, VespaModel next) { return new ContainerRestartValidator() .validate(current, next, new ValidationOverrides(Collections.emptyList()), Instant.now()); |