summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@verizonmedia.com>2021-09-10 09:36:37 +0200
committerValerij Fredriksen <valerijf@verizonmedia.com>2021-09-10 09:36:37 +0200
commit747e20cef209add11f282e77081b7b1da81ddf29 (patch)
tree9f82a6b9d9e41b414791df126d0cec6ca497d4cd /node-repository
parent0e6866b490b1af138df94b7cab3b8244710704bf (diff)
Transition directly to dirty in CD or non-PROD zones
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java19
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");