diff options
author | Martin Polden <mpolden@mpolden.no> | 2022-11-21 09:16:44 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2022-11-21 09:19:15 +0100 |
commit | d43bbf2ab1016b95a396d38ee855bee09279db9a (patch) | |
tree | 02af3dad2098f2ecf6dff4116a4729b3c7cb009c | |
parent | 582706592fd21dd91666911f8175527a0e36d5b6 (diff) |
Read GPU fields when creating node through API
2 files changed, 19 insertions, 11 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodeResourcesSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodeResourcesSerializer.java index 0d21caa3a06..0f944947440 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodeResourcesSerializer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodeResourcesSerializer.java @@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.provision.restapi; import com.yahoo.config.provision.NodeResources; import com.yahoo.slime.Cursor; +import com.yahoo.slime.Inspector; /** * @author bratseth @@ -74,4 +75,10 @@ public class NodeResourcesSerializer { }; } + public static NodeResources.GpuResources gpuResourcesFromSlime(Inspector gpuObject) { + if (!gpuObject.valid()) return NodeResources.GpuResources.getDefault(); + return new NodeResources.GpuResources((int) gpuObject.field("gpuCount").asLong(), + gpuObject.field("gpuMemory").asDouble()); + } + } 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 a3acb9b95d8..2f35d0e7e81 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 @@ -76,7 +76,6 @@ public class NodesV2ApiHandler extends ThreadedHttpRequestHandler { private final NodeRepository nodeRepository; private final MetricsDb metricsDb; private final NodeFlavors nodeFlavors; - private final CloudAccount cloudAccount; @Inject public NodesV2ApiHandler(ThreadedHttpRequestHandler.Context parentCtx, Orchestrator orchestrator, @@ -86,20 +85,19 @@ public class NodesV2ApiHandler extends ThreadedHttpRequestHandler { this.nodeRepository = nodeRepository; this.metricsDb = metricsDb; this.nodeFlavors = flavors; - this.cloudAccount = nodeRepository.zone().cloud().account(); } @Override public HttpResponse handle(HttpRequest request) { try { - switch (request.getMethod()) { - case GET: return handleGET(request); - case PUT: return handlePUT(request); - case POST: return isPatchOverride(request) ? handlePATCH(request) : handlePOST(request); - case DELETE: return handleDELETE(request); - case PATCH: return handlePATCH(request); - default: return ErrorResponse.methodNotAllowed("Method '" + request.getMethod() + "' is not supported"); - } + return switch (request.getMethod()) { + case GET -> handleGET(request); + case PUT -> handlePUT(request); + case POST -> isPatchOverride(request) ? handlePATCH(request) : handlePOST(request); + case DELETE -> handleDELETE(request); + case PATCH -> handlePATCH(request); + default -> ErrorResponse.methodNotAllowed("Method '" + request.getMethod() + "' is not supported"); + }; } catch (NotFoundException | NoSuchNodeException e) { return ErrorResponse.notFoundError(Exceptions.toMessageString(e)); @@ -299,7 +297,8 @@ public class NodesV2ApiHandler extends ThreadedHttpRequestHandler { requiredField(resourcesInspector, "bandwidthGbps", Inspector::asDouble), optionalString(resourcesInspector.field("diskSpeed")).map(NodeResourcesSerializer::diskSpeedFrom).orElse(NodeResources.DiskSpeed.getDefault()), optionalString(resourcesInspector.field("storageType")).map(NodeResourcesSerializer::storageTypeFrom).orElse(NodeResources.StorageType.getDefault()), - optionalString(resourcesInspector.field("architecture")).map(NodeResourcesSerializer::architectureFrom).orElse(NodeResources.Architecture.getDefault()))); + optionalString(resourcesInspector.field("architecture")).map(NodeResourcesSerializer::architectureFrom).orElse(NodeResources.Architecture.getDefault()), + NodeResourcesSerializer.gpuResourcesFromSlime(inspector.field("gpu")))); } Flavor flavor = nodeFlavors.getFlavorOrThrow(flavorInspector.asString()); @@ -318,6 +317,8 @@ public class NodesV2ApiHandler extends ThreadedHttpRequestHandler { flavor = flavor.with(flavor.resources().with(NodeResourcesSerializer.storageTypeFrom(resourcesInspector.field("storageType").asString()))); if (resourcesInspector.field("architecture").valid()) flavor = flavor.with(flavor.resources().with(NodeResourcesSerializer.architectureFrom(resourcesInspector.field("architecture").asString()))); + if (resourcesInspector.field("gpu").valid()) + flavor = flavor.with(flavor.resources().with(NodeResourcesSerializer.gpuResourcesFromSlime(resourcesInspector.field("gpu")))); } return flavor; } |