diff options
author | Ola Aunrønning <olaa@verizonmedia.com> | 2021-03-19 11:15:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-19 11:15:31 +0100 |
commit | 8a073477b45ec34c4a614391d345637c502dc526 (patch) | |
tree | f0df9f4eb81155bc1ca544d1595f968635d9a49c /controller-api/src | |
parent | 1a128c911792bd0d19f70f86aa42c10c9401dabb (diff) | |
parent | 7df5396bef81b7cda3c1428182a89072cc2ae70d (diff) |
Merge pull request #17042 from vespa-engine/olaa/noderepo-capacity-function
Consider whether all hosts in change request is replaceable
Diffstat (limited to 'controller-api/src')
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); } |