From e1fa270593bb49ccbc85ffa2315570b8d7d8b2e1 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 22 Jul 2019 17:27:41 +0530 Subject: [PATCH] vmware: fix volume stats logic (#3473) During volume stats calculation, if a volume has more than one disk in the chain-info it is not used to sum the physical and virtual size in the loop, instead any previous entry was overwritten by the last disk. Signed-off-by: Rohit Yadav --- .../hypervisor/vmware/resource/VmwareResource.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java index c195712e62a..141f2f63555 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -3612,8 +3612,16 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa Pair vds = vmMo.getDiskDevice(file.getFileName(), true); long virtualsize = vds.first().getCapacityInKB() * 1024; long physicalsize = primaryStorageDatastoreMo.fileDiskSize(file.getPath()); - VolumeStatsEntry vse = new VolumeStatsEntry(chainInfo, physicalsize, virtualsize); - statEntry.put(chainInfo, vse); + if (statEntry.containsKey(chainInfo)) { + VolumeStatsEntry vse = statEntry.get(chainInfo); + if (vse != null) { + vse.setPhysicalSize(vse.getPhysicalSize() + physicalsize); + vse.setVirtualSize(vse.getVirtualSize() + virtualsize); + } + } else { + VolumeStatsEntry vse = new VolumeStatsEntry(chainInfo, physicalsize, virtualsize); + statEntry.put(chainInfo, vse); + } } } }