aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java/com/yahoo/vespa
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2022-11-21 09:16:44 +0100
committerMartin Polden <mpolden@mpolden.no>2022-11-21 09:19:15 +0100
commitd43bbf2ab1016b95a396d38ee855bee09279db9a (patch)
tree02af3dad2098f2ecf6dff4116a4729b3c7cb009c /node-repository/src/main/java/com/yahoo/vespa
parent582706592fd21dd91666911f8175527a0e36d5b6 (diff)
Read GPU fields when creating node through API
Diffstat (limited to 'node-repository/src/main/java/com/yahoo/vespa')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodeResourcesSerializer.java7
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java23
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;
}