diff options
author | Ola Aunrønning <olaa@verizonmedia.com> | 2021-03-18 16:01:49 +0100 |
---|---|---|
committer | Ola Aunrønning <olaa@verizonmedia.com> | 2021-03-18 16:01:49 +0100 |
commit | 7df5396bef81b7cda3c1428182a89072cc2ae70d (patch) | |
tree | c0b558a2a5681ef96c3257c47683226bb945aaa5 /controller-api | |
parent | d4c919923177e4f5ac5190d254b13831c74e0a60 (diff) |
Consider whether all hosts in change request is replaceable
Diffstat (limited to 'controller-api')
3 files changed, 28 insertions, 0 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java index 8706afd5db5..c3cb904f545 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java @@ -106,6 +106,9 @@ public interface NodeRepository { void reboot(ZoneId zoneId, String hostName); + /** Checks whether the zone has the spare capacity to remove the given hosts */ + boolean isReplaceable(ZoneId zoneId, List<HostName> hostNames); + private static Node toNode(NodeRepositoryNode node) { var application = Optional.ofNullable(node.getOwner()) .map(owner -> ApplicationId.from(owner.getTenant(), owner.getApplication(), diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/Capacity.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/Capacity.java new file mode 100644 index 00000000000..b8d60fbd523 --- /dev/null +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/Capacity.java @@ -0,0 +1,20 @@ +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.api.integration.noderepository; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author olaa + */ +@JsonIgnoreProperties(ignoreUnknown = true) +public class Capacity { + + @JsonProperty("removalPossible") + public boolean removalPossible; + + public boolean isRemovalPossible() { + return removalPossible; + } + +} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ProvisionResource.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ProvisionResource.java index d88c7146397..2bfcc20dbd1 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ProvisionResource.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ProvisionResource.java @@ -121,5 +121,10 @@ public interface ProvisionResource { @DELETE @Path("/archive/{tenant}") String removeArchiveUri(@PathParam("tenant") TenantName tenant); + + @GET + @Path("/capacity") + Capacity capacity(@QueryParam("json") boolean json, + @QueryParam("hosts") String hostList); } |