From 44ed0c7e3295a0667782624d73d074fc2218f121 Mon Sep 17 00:00:00 2001 From: Travis Glenn Hansen Date: Thu, 1 Oct 2026 12:17:50 -0600 Subject: [PATCH] simplify get stats on windows Signed-off-by: Travis Glenn Hansen --- src/driver/index.js | 69 +++++++++----------------------------------- src/utils/windows.js | 10 +++++++ 2 files changed, 24 insertions(+), 55 deletions(-) diff --git a/src/driver/index.js b/src/driver/index.js index 7ed102b..3e5134f 100644 --- a/src/driver/index.js +++ b/src/driver/index.js @@ -3651,63 +3651,22 @@ class CsiBaseDriver { ); } - let node_attach_driver; - - let target = (await wutils.GetRealTarget(win_volume_path)) || ""; - if (target.startsWith("\\\\")) { - node_attach_driver = "smb"; - } - if (target.startsWith("\\\\?\\Volume")) { - if (await wutils.VolumeIsIscsi(target)) { - node_attach_driver = "iscsi"; - } - if (await wutils.VolumeIsVHD(target)) { - node_attach_driver = "vhd"; - } + try { + const s = await fs.promises.statfs(win_volume_path, { + bigint: true, + }); + res.usage = [ + { + total: s.blocks * s.bsize, + available: s.bavail * s.bsize, + used: (s.blocks - s.bfree) * s.bsize, + unit: "BYTES", + }, + ]; + } catch (err) { + res.usage = [{ total: 0, unit: "BYTES" }]; } - if (!node_attach_driver) { - // nothing we care about - node_attach_driver = "bypass"; - } - - switch (node_attach_driver) { - case "smb": - res.usage = [{ total: 0, unit: "BYTES" }]; - break; - case "iscsi": - case "vhd": - let node_volume = await wutils.GetVolumeByVolumeId(target); - res.usage = [ - { - available: node_volume.SizeRemaining, - total: node_volume.Size, - used: node_volume.Size - node_volume.SizeRemaining, - unit: "BYTES", - }, - ]; - break; - case "bypass": - try { - const s = fs.statfsSync(win_volume_path); - res.usage = [ - { - total: s.blocks * s.bsize, - available: s.bavail * s.bsize, - used: (s.blocks - s.bfree) * s.bsize, - unit: "BYTES", - }, - ]; - } catch (err) { - res.usage = [{ total: 0, unit: "BYTES" }]; - } - break; - default: - throw new GrpcError( - grpc.status.INVALID_ARGUMENT, - `unknown/unsupported node_attach_driver: ${node_attach_driver}`, - ); - } break; } case NODE_OS_DRIVER_CSI_PROXY: diff --git a/src/utils/windows.js b/src/utils/windows.js index 056e3d7..5bfadcd 100644 --- a/src/utils/windows.js +++ b/src/utils/windows.js @@ -89,6 +89,16 @@ class Windows { } catch (err) {} } + async PathIsJunction(localPath) { + let item; + item = await this.GetItem(localPath); + if (item) { + return item?.LinkType == "Junction"; + } + + return false; + } + async DeleteItem(localPath) { let command; let result;