diff --git a/packages/grid_client/src/modules/capacity.ts b/packages/grid_client/src/modules/capacity.ts index b3803edc29..cf593d2222 100644 --- a/packages/grid_client/src/modules/capacity.ts +++ b/packages/grid_client/src/modules/capacity.ts @@ -267,7 +267,7 @@ class Capacity { @expose @validateInput async getNodeFreeResources(options?: NodeFreeResourcesModel): Promise { - return await this.nodes.getNodeFreeResources(options!.nodeId); + return await this.nodes.getNodeFreeResources(options!.nodeId, "proxy", "", options?.nodeTwinId); } /** @@ -306,6 +306,7 @@ class Capacity { options.hddDisks, options.rootfsDisks, options.nodeId, + options.nodeTwinId, ); } diff --git a/packages/grid_client/src/modules/models.ts b/packages/grid_client/src/modules/models.ts index 67b2e7b691..8ca86e5735 100644 --- a/packages/grid_client/src/modules/models.ts +++ b/packages/grid_client/src/modules/models.ts @@ -591,6 +591,7 @@ class ContractState { class NodeFreeResourcesModel { @Expose() @IsInt() @Min(1) nodeId: number; + @Expose() @IsOptional() @IsInt() @Min(1) nodeTwinId?: number; } class FarmIdFromFarmNameModel { @@ -605,6 +606,7 @@ class CapacityPoolCheckModel { @Expose() @IsInt({ each: true }) @Min(0, { each: true }) rootfsDisks: number[]; //Byte @Expose() @IsInt({ each: true }) @Min(250 * 1024 ** 2, { each: true }) ssdDisks: number[]; //Byte @Expose() @IsInt({ each: true }) @Min(250 * 1024 ** 2, { each: true }) hddDisks: number[]; //Byte + @Expose() @IsOptional() @IsInt() @Min(1) nodeTwinId?: number; } class PingNodeOptionsModel { diff --git a/packages/grid_client/src/primitives/nodes.ts b/packages/grid_client/src/primitives/nodes.ts index 6bf88bdd96..f5164026a7 100644 --- a/packages/grid_client/src/primitives/nodes.ts +++ b/packages/grid_client/src/primitives/nodes.ts @@ -281,12 +281,17 @@ class Nodes { }); } - async getNodeFreeResources(nodeId: number, source: "proxy" | "zos" = "proxy", url = ""): Promise { + async getNodeFreeResources( + nodeId: number, + source: "proxy" | "zos" = "proxy", + url = "", + nodeTwinId?: number, + ): Promise { if (source == "zos") { - const node_twin_id = await this.getNodeTwinId(nodeId); + const twinId = nodeTwinId ?? (await this.getNodeTwinId(nodeId)); return this.rmb - .request([node_twin_id], "zos.statistics.get", "") + .request([twinId], "zos.statistics.get", "") .then(res => { const node: RMBNodeCapacity = res; const ret: NodeResources = { @@ -513,8 +518,8 @@ class Nodes { return convertObjectToQueryString(params); } - async nodeHasResources(nodeId: number, options: FilterOptions): Promise { - const resources = await this.getNodeFreeResources(nodeId, "zos"); + async nodeHasResources(nodeId: number, options: FilterOptions, nodeTwinId?: number): Promise { + const resources = await this.getNodeFreeResources(nodeId, "zos", "", nodeTwinId); if ( (options.mru && options.mru > 0 && resources.mru < this._g2b(options.mru)) || (options.sru && options.sru > 0 && resources.sru < this._g2b(options.sru)) || @@ -603,17 +608,16 @@ class Nodes { hddDisks: number[], rootFileSystemDisks: number[], nodeId: number, + nodeTwinId?: number, ): Promise { const ssdPools: number[] = []; const hddPools: number[] = []; try { - const nodeTwinId = await this.getNodeTwinId(nodeId); - ((await this.rmb.request([nodeTwinId], "zos.storage.pools", "")) as StoragePool[]).forEach( - (disk: StoragePool) => { - disk.type === DiskTypes.SSD ? ssdPools.push(disk.size - disk.used) : hddPools.push(disk.size - disk.used); - }, - ); + const twinId = nodeTwinId ?? (await this.getNodeTwinId(nodeId)); + ((await this.rmb.request([twinId], "zos.storage.pools", "")) as StoragePool[]).forEach((disk: StoragePool) => { + disk.type === DiskTypes.SSD ? ssdPools.push(disk.size - disk.used) : hddPools.push(disk.size - disk.used); + }); } catch (e) { (e as Error).message = formatErrorMessage(`Error getting node ${nodeId}`, e); throw e; diff --git a/packages/playground/src/components/node_selector/TfManualNodeSelector.vue b/packages/playground/src/components/node_selector/TfManualNodeSelector.vue index c2912bc267..738a538efc 100644 --- a/packages/playground/src/components/node_selector/TfManualNodeSelector.vue +++ b/packages/playground/src/components/node_selector/TfManualNodeSelector.vue @@ -25,10 +25,7 @@ " /> - + disk * 1024 ** 3), rootfsDisks: [(filters.rootFilesystemSize ?? 0) * 1024 ** 3], hddDisks: filters.hddDisks || [], + nodeTwinId: node.twinId, }); return true; } catch (error) {