This is an automated email from the ASF dual-hosted git repository.
bhaisaab pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/master by this push:
new 0d81e88 CLOUDSTACK-8939: VM Snapshot size with memory correctly
calculated in cloud.usage_event (XenServer) (#914)
0d81e88 is described below
commit 0d81e88601f015b23217832bca05fbed6d754f82
Author: subhash yedugundla <[email protected]>
AuthorDate: Fri Sep 1 14:30:55 2017 +0530
CLOUDSTACK-8939: VM Snapshot size with memory correctly calculated in
cloud.usage_event (XenServer) (#914)
Fixing the error with snapshot size calculation in a vm with memory
---
.../xenserver/resource/CitrixResourceBase.java | 42 +++++++++++++---------
.../CitrixCreateVMSnapshotCommandWrapper.java | 8 +++--
.../CitrixDeleteVMSnapshotCommandWrapper.java | 9 +++--
3 files changed, 38 insertions(+), 21 deletions(-)
diff --git
a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
index 10c4307..f960b9f 100644
---
a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
+++
b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
@@ -3333,7 +3333,7 @@ public abstract class CitrixResourceBase implements
ServerResource, HypervisorRe
return _instance;
}
- public long getVMSnapshotChainSize(final Connection conn, final
VolumeObjectTO volumeTo, final String vmName) throws BadServerResponse,
XenAPIException, XmlRpcException {
+ public long getVMSnapshotChainSize(final Connection conn, final
VolumeObjectTO volumeTo, final String vmName, final String vmSnapshotName)
throws BadServerResponse, XenAPIException, XmlRpcException {
if (volumeTo.getVolumeType() == Volume.Type.DATADISK) {
final VDI dataDisk = VDI.getByUuid(conn, volumeTo.getPath());
if (dataDisk != null) {
@@ -3364,25 +3364,33 @@ public abstract class CitrixResourceBase implements
ServerResource, HypervisorRe
}
}
if (volumeTo.getVolumeType() == Volume.Type.ROOT) {
- final Map<VM, VM.Record> allVMs = VM.getAllRecords(conn);
- // add size of memory snapshot vdi
- if (allVMs != null && allVMs.size() > 0) {
- for (final VM vmr : allVMs.keySet()) {
- try {
- final String vName = vmr.getNameLabel(conn);
- if (vName != null && vName.contains(vmName) &&
vmr.getIsASnapshot(conn)) {
- final VDI memoryVDI = vmr.getSuspendVDI(conn);
- if (!isRefNull(memoryVDI)) {
- size = size +
memoryVDI.getPhysicalUtilisation(conn);
- final VDI pMemoryVDI =
memoryVDI.getParent(conn);
- if (!isRefNull(pMemoryVDI)) {
- size = size +
pMemoryVDI.getPhysicalUtilisation(conn);
+ VM vm = getVM(conn, vmName);
+ if(vm != null){
+ Set<VM> vmSnapshots=vm.getSnapshots(conn);
+ if(vmSnapshots != null){
+ for(VM vmsnap: vmSnapshots){
+ try {
+ final String vmSnapName =
vmsnap.getNameLabel(conn);
+ s_logger.debug("snapname " + vmSnapName);
+ if (vmSnapName != null &&
vmSnapName.contains(vmSnapshotName) && vmsnap.getIsASnapshot(conn)) {
+ s_logger.debug("snapname " + vmSnapName +
"isASnapshot");
+ VDI memoryVDI = vmsnap.getSuspendVDI(conn);
+ if (!isRefNull(memoryVDI)) {
+ size = size +
memoryVDI.getPhysicalUtilisation(conn);
+ s_logger.debug("memoryVDI size :"+size);
+ String parentUuid =
memoryVDI.getSmConfig(conn).get("vhd-parent");
+ VDI pMemoryVDI = VDI.getByUuid(conn,
parentUuid);
+ if (!isRefNull(pMemoryVDI)) {
+ size = size +
pMemoryVDI.getPhysicalUtilisation(conn);
+ }
+ s_logger.debug("memoryVDI size+parent
:"+size);
}
}
+ } catch (Exception e) {
+ s_logger.debug("Exception occurs when calculate
snapshot capacity for memory: due to " + e.toString());
+ continue;
}
- } catch (final Exception e) {
- s_logger.debug("Exception occurs when calculate
snapshot capacity for memory: due to " + e.toString());
- continue;
+
}
}
}
diff --git
a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCreateVMSnapshotCommandWrapper.java
b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCreateVMSnapshotCommandWrapper.java
index 4550cf8..6bd843d 100644
---
a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCreateVMSnapshotCommandWrapper.java
+++
b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCreateVMSnapshotCommandWrapper.java
@@ -23,6 +23,7 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
+import com.cloud.utils.exception.CloudRuntimeException;
import org.apache.cloudstack.storage.to.VolumeObjectTO;
import org.apache.log4j.Logger;
@@ -142,8 +143,11 @@ public final class CitrixCreateVMSnapshotCommandWrapper
extends CommandWrapper<C
}
// calculate used capacity for this VM snapshot
for (final VolumeObjectTO volumeTo : command.getVolumeTOs()) {
- final long size =
citrixResourceBase.getVMSnapshotChainSize(conn, volumeTo, command.getVmName());
- volumeTo.setSize(size);
+ try {
+ final long size =
citrixResourceBase.getVMSnapshotChainSize(conn, volumeTo, command.getVmName(),
vmSnapshotName);
+ volumeTo.setSize(size);
+ } catch (final CloudRuntimeException cre) {
+ }
}
success = true;
diff --git
a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixDeleteVMSnapshotCommandWrapper.java
b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixDeleteVMSnapshotCommandWrapper.java
index a341c76..3aeeb42 100644
---
a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixDeleteVMSnapshotCommandWrapper.java
+++
b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixDeleteVMSnapshotCommandWrapper.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Set;
+import com.cloud.utils.exception.CloudRuntimeException;
import org.apache.cloudstack.storage.to.VolumeObjectTO;
import org.apache.log4j.Logger;
@@ -79,8 +80,12 @@ public final class CitrixDeleteVMSnapshotCommandWrapper
extends CommandWrapper<D
}
// re-calculate used capacify for this VM snapshot
for (final VolumeObjectTO volumeTo : command.getVolumeTOs()) {
- final long size =
citrixResourceBase.getVMSnapshotChainSize(conn, volumeTo, command.getVmName());
- volumeTo.setSize(size);
+ try {
+ final long size =
citrixResourceBase.getVMSnapshotChainSize(conn, volumeTo, command.getVmName(),
snapshotName);
+ volumeTo.setSize(size);
+ } catch (final CloudRuntimeException cre) {
+
+ }
}
return new DeleteVMSnapshotAnswer(command, command.getVolumeTOs());
--
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].