diff options
author | Martin Polden <mpolden@mpolden.no> | 2019-06-06 09:45:51 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2019-06-06 09:47:04 +0200 |
commit | c5e32f3da915df1cab7662cf508871e7b341256c (patch) | |
tree | 54b1a89182e0fc1f5b9328ec354f71d102eafcc9 /controller-server | |
parent | a53e3f72b08eb8ba70f493634b0f7bc3275bd30a (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')
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()); } |