summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@oath.com>2019-01-03 09:42:50 +0100
committerValerij Fredriksen <valerijf@oath.com>2019-01-03 09:42:50 +0100
commit18bd85f78596639644bb3e2004364db11b21eb0a (patch)
tree56778ce10dbecf3544a2026702d608eac60a3f60 /node-repository
parent760ce7f39abfeb66b6415e0e28f0f21204f32135 (diff)
Add wantToRetire to node history
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java12
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/History.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodePatcher.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json5
5 files changed, 22 insertions, 1 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java
index 542ffb0ba95..7e518ee1728 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java
@@ -134,6 +134,18 @@ public final class Node {
public History history() { return history; }
/**
+ * Returns a copy of this node with wantToRetire set to the given value and updated history.
+ * If given wantToRetire is equal to the current, the method is no-op.
+ */
+ public Node withWantToRetire(boolean wantToRetire, Instant at) {
+ if (wantToRetire == status.wantToRetire()) return this;
+ return with(status.withWantToRetire(wantToRetire))
+ // Also update history when we un-wantToRetire so the OperatorChangeApplicationMaintainer picks it
+ // up quickly
+ .with(history.with(new History.Event(History.Event.Type.wantToRetire, Agent.operator, at)));
+ }
+
+ /**
* Returns a copy of this node which is retired.
* If the node was already retired it is returned as-is.
*/
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/History.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/History.java
index 304e207a5e4..c80fc68c486 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/History.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/History.java
@@ -129,6 +129,8 @@ public class History {
public enum Type {
// State move events
provisioned(false), readied, reserved, activated, deactivated, deallocated, parked,
+ // The node was scheduled for retirement
+ wantToRetire,
// The active node was retired
retired,
// The active node went down according to the service monitor
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java
index 1333b61cb16..1c640a6f074 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java
@@ -268,6 +268,7 @@ public class NodeSerializer {
case "readied" : return History.Event.Type.readied;
case "reserved" : return History.Event.Type.reserved;
case "activated" : return History.Event.Type.activated;
+ case "wantToRetire": return History.Event.Type.wantToRetire;
case "retired" : return History.Event.Type.retired;
case "deactivated" : return History.Event.Type.deactivated;
case "parked" : return History.Event.Type.parked;
@@ -285,6 +286,7 @@ public class NodeSerializer {
case readied : return "readied";
case reserved : return "reserved";
case activated : return "activated";
+ case wantToRetire: return "wantToRetire";
case retired : return "retired";
case deactivated : return "deactivated";
case parked : return "parked";
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodePatcher.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodePatcher.java
index d9e505c77e5..f013620f88d 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodePatcher.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodePatcher.java
@@ -129,7 +129,7 @@ public class NodePatcher {
case "additionalIpAddresses" :
return node.withIpAddressPool(asStringSet(value));
case WANT_TO_RETIRE :
- return node.with(node.status().withWantToRetire(asBoolean(value)));
+ return node.withWantToRetire(asBoolean(value), nodeRepository.clock().instant());
case WANT_TO_DEPROVISION :
return node.with(node.status().withWantToDeprovision(asBoolean(value)));
case "hardwareDivergence" :
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json
index 247099fcae7..14c1201f1de 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json
@@ -71,6 +71,11 @@
"event": "rebooted",
"at": 123,
"agent": "system"
+ },
+ {
+ "event": "wantToRetire",
+ "at": 123,
+ "agent": "operator"
}
],
"ipAddresses": [