diff options
author | Martin Polden <mpolden@mpolden.no> | 2020-07-09 11:07:32 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2020-07-09 14:51:26 +0200 |
commit | ae0051eb76a2600bdcce5a119de06f367be7d164 (patch) | |
tree | cdd7137df82d32f3a72fb268a36b059c9a82a7d0 /node-repository | |
parent | fa1346f02f2588de9e04fee801a75c63b0cc05db (diff) |
Control maintenance jobs with feature flag
Diffstat (limited to 'node-repository')
19 files changed, 67 insertions, 69 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java index 0dd3869e234..99b6c48c90b 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java @@ -17,6 +17,7 @@ import com.yahoo.config.provisioning.NodeRepositoryConfig; import com.yahoo.transaction.Mutex; import com.yahoo.transaction.NestedTransaction; import com.yahoo.vespa.curator.Curator; +import com.yahoo.vespa.flags.FlagSource; import com.yahoo.vespa.hosted.provision.Node.State; import com.yahoo.vespa.hosted.provision.applications.Applications; import com.yahoo.vespa.hosted.provision.lb.LoadBalancer; @@ -35,6 +36,7 @@ import com.yahoo.vespa.hosted.provision.node.filter.StateFilter; import com.yahoo.vespa.hosted.provision.os.OsVersions; import com.yahoo.vespa.hosted.provision.persistence.CuratorDatabaseClient; import com.yahoo.vespa.hosted.provision.persistence.DnsNameResolver; +import com.yahoo.vespa.hosted.provision.persistence.JobControlFlags; import com.yahoo.vespa.hosted.provision.persistence.NameResolver; import com.yahoo.vespa.hosted.provision.provisioning.DockerImages; import com.yahoo.vespa.hosted.provision.provisioning.FirmwareChecks; @@ -114,14 +116,17 @@ public class NodeRepository extends AbstractComponent { NodeFlavors flavors, ProvisionServiceProvider provisionServiceProvider, Curator curator, - Zone zone) { + Zone zone, + FlagSource flagSource) { this(flavors, provisionServiceProvider.getHostResourcesCalculator(), curator, Clock.systemUTC(), zone, new DnsNameResolver(), - DockerImage.fromString(config.dockerImage()), config.useCuratorClientCache(), + DockerImage.fromString(config.dockerImage()), + flagSource, + config.useCuratorClientCache(), provisionServiceProvider.getHostProvisioner().isPresent(), zone.environment().isProduction() && provisionServiceProvider.getHostProvisioner().isEmpty() ? 1 : 0); } @@ -137,6 +142,7 @@ public class NodeRepository extends AbstractComponent { Zone zone, NameResolver nameResolver, DockerImage dockerImage, + FlagSource flagSource, boolean useCuratorClientCache, boolean canProvisionHosts, int spareCount) { @@ -150,7 +156,7 @@ public class NodeRepository extends AbstractComponent { this.infrastructureVersions = new InfrastructureVersions(db); this.firmwareChecks = new FirmwareChecks(db, clock); this.dockerImages = new DockerImages(db, dockerImage); - this.jobControl = new JobControl(db); + this.jobControl = new JobControl(new JobControlFlags(db, flagSource)); this.applications = new Applications(db); this.canProvisionHosts = canProvisionHosts; this.spareCount = spareCount; diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java index a8086400e26..5e2f0bd4761 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java @@ -3,8 +3,6 @@ package com.yahoo.vespa.hosted.provision.persistence; import com.google.common.util.concurrent.UncheckedTimeoutException; import com.yahoo.component.Version; -import com.yahoo.concurrent.maintenance.JobControl; -import com.yahoo.concurrent.maintenance.StringSetSerializer; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationLockException; import com.yahoo.config.provision.DockerImage; @@ -34,11 +32,9 @@ import java.time.Instant; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.Set; import java.util.TreeMap; import java.util.function.Function; import java.util.function.Predicate; @@ -59,7 +55,7 @@ import static java.util.stream.Collectors.toMap; * * @author bratseth */ -public class CuratorDatabaseClient implements JobControl.Db { +public class CuratorDatabaseClient { private static final Logger log = Logger.getLogger(CuratorDatabaseClient.class.getName()); @@ -77,7 +73,6 @@ public class CuratorDatabaseClient implements JobControl.Db { private static final Duration defaultLockTimeout = Duration.ofMinutes(2); private final NodeSerializer nodeSerializer; - private final StringSetSerializer stringSetSerializer = new StringSetSerializer(); private final CuratorDatabase db; private final Clock clock; private final Zone zone; @@ -437,37 +432,10 @@ public class CuratorDatabaseClient implements JobControl.Db { // Maintenance jobs ----------------------------------------------------------- - @Override public Lock lockMaintenanceJob(String jobName) { return db.lock(lockPath.append("maintenanceJobLocks").append(jobName), defaultLockTimeout); } - @Override - public Set<String> readInactiveJobs() { - try { - return read(inactiveJobsPath, stringSetSerializer::fromJson).orElseGet(HashSet::new); - } - catch (RuntimeException e) { - log.log(Level.WARNING, "Error reading inactive jobs, deleting inactive state"); - writeInactiveJobs(Collections.emptySet()); - return new HashSet<>(); - } - } - - @Override - public void writeInactiveJobs(Set<String> inactiveJobs) { - NestedTransaction transaction = new NestedTransaction(); - CuratorTransaction curatorTransaction = db.newCuratorTransactionIn(transaction); - curatorTransaction.add(CuratorOperations.setData(inactiveJobsPath.getAbsolute(), - stringSetSerializer.toJson(inactiveJobs))); - transaction.commit(); - } - - @Override - public Lock lockInactiveJobs() { - return db.lock(lockPath.append("inactiveJobsLock"), defaultLockTimeout); - } - // Infrastructure versions ----------------------------------------------------------- public Map<NodeType, Version> readInfrastructureVersions() { diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/JobControlFlags.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/JobControlFlags.java new file mode 100644 index 00000000000..2a2a45186f9 --- /dev/null +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/JobControlFlags.java @@ -0,0 +1,36 @@ +package com.yahoo.vespa.hosted.provision.persistence; + +import com.yahoo.concurrent.maintenance.JobControlState; +import com.yahoo.transaction.Mutex; +import com.yahoo.vespa.flags.FlagSource; +import com.yahoo.vespa.flags.Flags; +import com.yahoo.vespa.flags.ListFlag; + +import java.util.Set; + +/** + * An implementation of {@link JobControlState} that uses a feature flag to control maintenance jobs. + * + * @author mpolden + */ +public class JobControlFlags implements JobControlState { + + private final CuratorDatabaseClient curator; + private final ListFlag<String> inactiveJobsFlag; + + public JobControlFlags(CuratorDatabaseClient curator, FlagSource flagSource) { + this.curator = curator; + this.inactiveJobsFlag = Flags.INACTIVE_MAINTENANCE_JOBS.bindTo(flagSource); + } + + @Override + public Set<String> readInactiveJobs() { + return Set.copyOf(inactiveJobsFlag.value()); + } + + @Override + public Mutex lockMaintenanceJob(String job) { + return curator.lockMaintenanceJob(job); + } + +} diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java index 80136de6f03..5080dafe2a5 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java @@ -185,7 +185,6 @@ public class NodesV2ApiHandler extends LoggingRequestHandler { int addedNodes = addNodes(request.getData()); return new MessageResponse("Added " + addedNodes + " nodes to the provisioned state"); } - if (path.matches("/nodes/v2/maintenance/inactive/{job}")) return setJobActive(path.get("job"), false); if (path.matches("/nodes/v2/maintenance/run/{job}")) return runJob(path.get("job")); if (path.matches("/nodes/v2/upgrade/firmware")) return requestFirmwareCheckResponse(); @@ -195,7 +194,6 @@ public class NodesV2ApiHandler extends LoggingRequestHandler { private HttpResponse handleDELETE(HttpRequest request) { Path path = new Path(request.getUri()); if (path.matches("/nodes/v2/node/{hostname}")) return deleteNode(path.get("hostname")); - if (path.matches("/nodes/v2/maintenance/inactive/{job}")) return setJobActive(path.get("job"), true); if (path.matches("/nodes/v2/upgrade/firmware")) return cancelFirmwareCheckResponse(); throw new NotFoundException("Nothing at path '" + request.getUri().getPath() + "'"); @@ -351,13 +349,6 @@ public class NodesV2ApiHandler extends LoggingRequestHandler { return false; } - private MessageResponse setJobActive(String jobName, boolean active) { - if ( ! nodeRepository.jobControl().jobs().contains(jobName)) - throw new NotFoundException("No job named '" + jobName + "'"); - nodeRepository.jobControl().setActive(jobName, active); - return new MessageResponse((active ? "Re-activated" : "Deactivated" ) + " job '" + jobName + "'"); - } - private MessageResponse setTargetVersions(HttpRequest request) { NodeType nodeType = NodeType.valueOf(lastElement(request.getUri().getPath()).toLowerCase()); Inspector inspector = toSlime(request.getData()).get(); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java index bf56be4598c..f78560e3022 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java @@ -64,6 +64,7 @@ public class MockNodeRepository extends NodeRepository { Zone.defaultZone(), new MockNameResolver().mockAnyLookup(), DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa"), + new InMemoryFlagSource(), true, false, 0); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java index 034a9fb27d0..9b0500303d8 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java @@ -9,6 +9,7 @@ import com.yahoo.config.provision.Zone; import com.yahoo.config.provisioning.FlavorsConfig; import com.yahoo.test.ManualClock; import com.yahoo.vespa.curator.mock.MockCurator; +import com.yahoo.vespa.flags.InMemoryFlagSource; import com.yahoo.vespa.hosted.provision.node.Agent; import com.yahoo.vespa.hosted.provision.provisioning.EmptyProvisionServiceProvider; import com.yahoo.vespa.hosted.provision.provisioning.FlavorConfigBuilder; @@ -40,6 +41,7 @@ public class NodeRepositoryTester { Zone.defaultZone(), new MockNameResolver().mockAnyLookup(), DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa"), + new InMemoryFlagSource(), true, false, 0); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTester.java index cb3c7af797f..59e0dad9720 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTester.java @@ -22,6 +22,7 @@ import com.yahoo.config.provision.Zone; import com.yahoo.test.ManualClock; import com.yahoo.vespa.curator.Curator; import com.yahoo.vespa.curator.mock.MockCurator; +import com.yahoo.vespa.flags.InMemoryFlagSource; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.node.Agent; @@ -63,6 +64,7 @@ public class CapacityCheckerTester { zone, new MockNameResolver().mockAnyLookup(), DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa"), + new InMemoryFlagSource(), true, false, 0); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java index 7965293cf87..ed6f31984a5 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java @@ -258,6 +258,7 @@ public class FailedExpirerTest { zone, new MockNameResolver().mockAnyLookup(), DockerImage.fromString("docker-image"), + new InMemoryFlagSource(), true, false, 0); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MaintenanceTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MaintenanceTester.java index 59540223797..39e873ee110 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MaintenanceTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MaintenanceTester.java @@ -9,6 +9,7 @@ import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.Zone; import com.yahoo.test.ManualClock; import com.yahoo.vespa.curator.mock.MockCurator; +import com.yahoo.vespa.flags.InMemoryFlagSource; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.node.Agent; @@ -40,6 +41,7 @@ public class MaintenanceTester { zone, new MockNameResolver().mockAnyLookup(), DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa"), + new InMemoryFlagSource(), true, false, 0); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java index 567cec7ff3e..20c9d24d1b6 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java @@ -16,6 +16,7 @@ import com.yahoo.vespa.applicationmodel.ApplicationInstance; import com.yahoo.vespa.applicationmodel.ApplicationInstanceReference; import com.yahoo.vespa.curator.Curator; import com.yahoo.vespa.curator.mock.MockCurator; +import com.yahoo.vespa.flags.InMemoryFlagSource; import com.yahoo.vespa.hosted.provision.LockedNodeList; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; @@ -84,6 +85,7 @@ public class MetricsReporterTest { Zone.defaultZone(), new MockNameResolver().mockAnyLookup(), DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa"), + new InMemoryFlagSource(), true, false, 0); @@ -152,6 +154,7 @@ public class MetricsReporterTest { Zone.defaultZone(), new MockNameResolver().mockAnyLookup(), DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa"), + new InMemoryFlagSource(), true, false, 0); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java index a97675f5d5e..435dcdf9223 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java @@ -82,6 +82,7 @@ public class NodeFailTester { zone, new MockNameResolver().mockAnyLookup(), DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa"), + new InMemoryFlagSource(), true, false, 0); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java index e342e3b7302..1ff00ff88a1 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java @@ -61,6 +61,7 @@ public class OperatorChangeApplicationMaintainerTest { zone, new MockNameResolver().mockAnyLookup(), DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa"), + new InMemoryFlagSource(), true, false, 0); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java index 6d2b9a47e9f..c94d9022c3f 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java @@ -67,6 +67,7 @@ public class PeriodicApplicationMaintainerTest { zone, new MockNameResolver().mockAnyLookup(), DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa"), + new InMemoryFlagSource(), true, false, 0); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ReservationExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ReservationExpirerTest.java index 705a038a79f..6ca154f5f17 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ReservationExpirerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ReservationExpirerTest.java @@ -52,6 +52,7 @@ public class ReservationExpirerTest { Zone.defaultZone(), new MockNameResolver().mockAnyLookup(), DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa"), + new InMemoryFlagSource(), true, false, 0); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java index 6a85654a2dd..4e675d6a3cc 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java @@ -71,6 +71,7 @@ public class RetiredExpirerTest { zone, new MockNameResolver().mockAnyLookup(), DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa"), + new InMemoryFlagSource(), true, false, 0); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainerTest.java index ccb35e758bb..6cd206cd5b9 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainerTest.java @@ -15,6 +15,7 @@ import com.yahoo.config.provision.Zone; import com.yahoo.test.ManualClock; import com.yahoo.transaction.NestedTransaction; import com.yahoo.vespa.curator.mock.MockCurator; +import com.yahoo.vespa.flags.InMemoryFlagSource; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.node.Agent; @@ -245,6 +246,7 @@ public class SpareCapacityMaintainerTest { new Zone(Environment.prod, RegionName.from("us-east-3")), new MockNameResolver().mockAnyLookup(), DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa"), + new InMemoryFlagSource(), true, false, 1); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java index 204d1171919..b814bec683a 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java @@ -104,6 +104,7 @@ public class ProvisioningTester { zone, nameResolver, DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa"), + flagSource, true, provisionServiceProvider.getHostProvisioner().isPresent(), spareCount); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java index 1e788e2c70e..b1ecd03aa13 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java @@ -253,28 +253,8 @@ public class NodesV2ApiTest { @Test public void maintenance_requests() throws Exception { - // POST deactivation of a maintenance job - assertResponse(new Request("http://localhost:8080/nodes/v2/maintenance/inactive/NodeFailer", - new byte[0], Request.Method.POST), - "{\"message\":\"Deactivated job 'NodeFailer'\"}"); // GET a list of all maintenance jobs assertFile(new Request("http://localhost:8080/nodes/v2/maintenance/"), "maintenance.json"); - - // DELETE deactivation of a maintenance job - assertResponse(new Request("http://localhost:8080/nodes/v2/maintenance/inactive/NodeFailer", - new byte[0], Request.Method.DELETE), - "{\"message\":\"Re-activated job 'NodeFailer'\"}"); - - // POST run of a maintenance job - assertResponse(new Request("http://localhost:8080/nodes/v2/maintenance/run/PeriodicApplicationMaintainer", - new byte[0], Request.Method.POST), - "{\"message\":\"Executed job 'PeriodicApplicationMaintainer'\"}"); - - // POST run of unknown maintenance job - tester.assertResponse(new Request("http://localhost:8080/nodes/v2/maintenance/run/foo", - new byte[0], Request.Method.POST), - 400, - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"No such job 'foo'\"}"); } @Test diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/maintenance.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/maintenance.json index 6bb30d90218..804d8aa59d5 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/maintenance.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/maintenance.json @@ -52,13 +52,11 @@ "name": "RetiredExpirer" }, { - "name":"ScalingSuggestionsMaintainer" + "name": "ScalingSuggestionsMaintainer" }, { "name": "SpareCapacityMaintainer" } ], - "inactive": [ - "NodeFailer" - ] + "inactive": [] } |