diff options
Diffstat (limited to 'node-repository')
-rw-r--r-- | node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java | 4 | ||||
-rw-r--r-- | node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java | 19 |
2 files changed, 22 insertions, 1 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java index 4d67c83a179..968220f8d5e 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java @@ -236,13 +236,15 @@ public class Nodes { * transaction commits. */ public List<Node> deactivate(List<Node> nodes, ApplicationTransaction transaction) { + if ( ! zone.environment().isProduction() || zone.system().isCd()) + return deallocate(nodes, Agent.application, "Deactivated by application", transaction.nested()); + var stateless = NodeList.copyOf(nodes).stateless(); var stateful = NodeList.copyOf(nodes).stateful(); List<Node> written = new ArrayList<>(); written.addAll(deallocate(stateless.asList(), Agent.application, "Deactivated by application", transaction.nested())); written.addAll(db.writeTo(Node.State.inactive, stateful.asList(), Agent.application, Optional.empty(), transaction.nested())); return written; - } /** diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java index cd89cea60e3..277884a71c6 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java @@ -39,6 +39,7 @@ import java.util.List; import java.util.Optional; import java.util.Random; import java.util.Set; +import java.util.function.BiConsumer; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -967,6 +968,24 @@ public class ProvisioningTest { newNodes.stream().map(n -> n.membership().get().cluster().type()).collect(Collectors.toSet())); } + @Test + public void transitions_directly_to_dirty_in_cd() { + ApplicationId application = ProvisioningTester.applicationId(); + ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("music")).vespaVersion("1.2.3").build(); + Capacity capacity = Capacity.from(new ClusterResources(2, 1, defaultResources)); + + BiConsumer<Zone, Node.State> stateAsserter = (zone, state) -> { + ProvisioningTester tester = new ProvisioningTester.Builder().zone(zone).build(); + tester.makeReadyHosts(2, defaultResources).activateTenantHosts(); + tester.activate(application, tester.prepare(application, cluster, capacity)); + tester.deactivate(application); + assertEquals(2, tester.getNodes(application, state).size()); + }; + + stateAsserter.accept(new Zone(Environment.prod, RegionName.from("us-east")), Node.State.inactive); + stateAsserter.accept(new Zone(SystemName.cd, Environment.prod, RegionName.from("us-east")), Node.State.dirty); + } + private SystemState prepare(ApplicationId application, int container0Size, int container1Size, int content0Size, int content1Size, NodeResources flavor, ProvisioningTester tester) { return prepare(application, tester, container0Size, container1Size, content0Size, content1Size, flavor, "6.42"); |