summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2019-06-06 09:45:51 +0200
committerMartin Polden <mpolden@mpolden.no>2019-06-06 09:47:04 +0200
commitc5e32f3da915df1cab7662cf508871e7b341256c (patch)
tree54b1a89182e0fc1f5b9328ec354f71d102eafcc9 /controller-server
parenta53e3f72b08eb8ba70f493634b0f7bc3275bd30a (diff)
Handle activation of removed maintainer
If an inactive maintainer is removed from the code, the inactive flag is impossible to delete.
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiHandler.java3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiTest.java23
2 files changed, 23 insertions, 3 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiHandler.java
index a59e0e9130f..dde79e78850 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiHandler.java
@@ -100,7 +100,8 @@ public class ControllerApiHandler extends AuditLoggingRequestHandler {
}
private HttpResponse setActive(String jobName, boolean active) {
- if ( ! maintenance.jobControl().jobs().contains(jobName))
+ boolean activatingInactiveJob = active && !maintenance.jobControl().isActive(jobName);
+ if (!activatingInactiveJob && !maintenance.jobControl().jobs().contains(jobName))
return ErrorResponse.notFoundError("No job named '" + jobName + "'");
maintenance.jobControl().setActive(jobName, active);
return new MessageResponse((active ? "Re-activated" : "Deactivated" ) + " job '" + jobName + "'");
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiTest.java
index 8856cc5a97f..ba81c5cf4e4 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiTest.java
@@ -17,6 +17,7 @@ import java.io.File;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.time.Instant;
+import java.util.Set;
import static org.junit.Assert.assertFalse;
@@ -40,7 +41,7 @@ public class ControllerApiTest extends ControllerContainerTest {
public void testControllerApi() {
tester.assertResponse(authenticatedRequest("http://localhost:8080/controller/v1/", new byte[0], Request.Method.GET), new File("root.json"));
- // POST deactivation of a maintenance job
+ // POST deactivates a maintenance job
tester.assertResponse(hostedOperatorRequest("http://localhost:8080/controller/v1/maintenance/inactive/DeploymentExpirer",
"", Request.Method.POST),
"{\"message\":\"Deactivated job 'DeploymentExpirer'\"}", 200);
@@ -48,12 +49,30 @@ public class ControllerApiTest extends ControllerContainerTest {
// GET a list of all maintenance jobs
tester.assertResponse(authenticatedRequest("http://localhost:8080/controller/v1/maintenance/", new byte[0], Request.Method.GET),
new File("maintenance.json"));
- // DELETE deactivation of a maintenance job
+
+ // DELETE activates maintenance job
tester.assertResponse(hostedOperatorRequest("http://localhost:8080/controller/v1/maintenance/inactive/DeploymentExpirer",
"", Request.Method.DELETE),
"{\"message\":\"Re-activated job 'DeploymentExpirer'\"}",
200);
+ // DELETE fails to activate unknown maintenance job
+ tester.assertResponse(hostedOperatorRequest("http://localhost:8080/controller/v1/maintenance/inactive/foo",
+ "", Request.Method.DELETE),
+ "{\"error-code\":\"NOT_FOUND\",\"message\":\"No job named 'foo'\"}",
+ 404);
+
+ // DELETE clears inactive flag for maintenance job that has been removed from the code base
+ tester.controller().curator().writeInactiveJobs(Set.of("bar"));
+ tester.assertResponse(hostedOperatorRequest("http://localhost:8080/controller/v1/maintenance/inactive/bar",
+ "", Request.Method.DELETE),
+ "{\"message\":\"Re-activated job 'bar'\"}",
+ 200);
+ tester.assertResponse(hostedOperatorRequest("http://localhost:8080/controller/v1/maintenance/inactive/bar",
+ "", Request.Method.DELETE),
+ "{\"error-code\":\"NOT_FOUND\",\"message\":\"No job named 'bar'\"}",
+ 404);
+
assertFalse("Actions are logged to audit log", tester.controller().auditLogger().readLog().entries().isEmpty());
}