This is an automated email from the ASF dual-hosted git repository.
rohit pushed a commit to branch 4.18
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.18 by this push:
new 351de5fabd9 engine/orchestration: Update overcommit ratio during live
VM migration (#9178)
351de5fabd9 is described below
commit 351de5fabd9d75ee3531140d2a397bb03d459de0
Author: Vishesh <[email protected]>
AuthorDate: Mon Jun 24 20:45:31 2024 +0530
engine/orchestration: Update overcommit ratio during live VM migration
(#9178)
During live migration of a VM from between hosts having different cgroup
versions (cgroupv2 & cgroup), overcommit ratio is ignored.
This PR fixes the above issue.
---
.../java/com/cloud/vm/VirtualMachineProfile.java | 4 +++
.../com/cloud/vm/VirtualMachineProfileImpl.java | 2 ++
.../com/cloud/vm/VirtualMachineManagerImpl.java | 40 ++++++++++++++--------
3 files changed, 31 insertions(+), 15 deletions(-)
diff --git a/api/src/main/java/com/cloud/vm/VirtualMachineProfile.java
b/api/src/main/java/com/cloud/vm/VirtualMachineProfile.java
index 62519412fdb..6770e4f3ba6 100644
--- a/api/src/main/java/com/cloud/vm/VirtualMachineProfile.java
+++ b/api/src/main/java/com/cloud/vm/VirtualMachineProfile.java
@@ -190,6 +190,10 @@ public interface VirtualMachineProfile {
Map<Param, Object> getParameters();
+ void setCpuOvercommitRatio(Float cpuOvercommitRatio);
+
+ void setMemoryOvercommitRatio(Float memoryOvercommitRatio);
+
Float getCpuOvercommitRatio();
Float getMemoryOvercommitRatio();
diff --git
a/engine/components-api/src/main/java/com/cloud/vm/VirtualMachineProfileImpl.java
b/engine/components-api/src/main/java/com/cloud/vm/VirtualMachineProfileImpl.java
index bc689fef873..8297a73d77f 100644
---
a/engine/components-api/src/main/java/com/cloud/vm/VirtualMachineProfileImpl.java
+++
b/engine/components-api/src/main/java/com/cloud/vm/VirtualMachineProfileImpl.java
@@ -264,11 +264,13 @@ public class VirtualMachineProfileImpl implements
VirtualMachineProfile {
_offering = offering;
}
+ @Override
public void setCpuOvercommitRatio(Float cpuOvercommitRatio) {
this.cpuOvercommitRatio = cpuOvercommitRatio;
}
+ @Override
public void setMemoryOvercommitRatio(Float memoryOvercommitRatio) {
this.memoryOvercommitRatio = memoryOvercommitRatio;
diff --git
a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
index a49609fc374..3a5e0c9e06c 100755
---
a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
+++
b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -1235,21 +1235,9 @@ public class VirtualMachineManagerImpl extends
ManagerBase implements VirtualMac
long destHostId = dest.getHost().getId();
vm.setPodIdToDeployIn(dest.getPod().getId());
- final Long cluster_id = dest.getCluster().getId();
- final ClusterDetailsVO cluster_detail_cpu =
_clusterDetailsDao.findDetail(cluster_id,
VmDetailConstants.CPU_OVER_COMMIT_RATIO);
- final ClusterDetailsVO cluster_detail_ram =
_clusterDetailsDao.findDetail(cluster_id,
VmDetailConstants.MEMORY_OVER_COMMIT_RATIO);
-
- if (userVmDetailsDao.findDetail(vm.getId(),
VmDetailConstants.CPU_OVER_COMMIT_RATIO) == null &&
- (Float.parseFloat(cluster_detail_cpu.getValue()) > 1f
|| Float.parseFloat(cluster_detail_ram.getValue()) > 1f)) {
- userVmDetailsDao.addDetail(vm.getId(),
VmDetailConstants.CPU_OVER_COMMIT_RATIO, cluster_detail_cpu.getValue(), true);
- userVmDetailsDao.addDetail(vm.getId(),
VmDetailConstants.MEMORY_OVER_COMMIT_RATIO, cluster_detail_ram.getValue(),
true);
- } else if (userVmDetailsDao.findDetail(vm.getId(),
VmDetailConstants.CPU_OVER_COMMIT_RATIO) != null) {
- userVmDetailsDao.addDetail(vm.getId(),
VmDetailConstants.CPU_OVER_COMMIT_RATIO, cluster_detail_cpu.getValue(), true);
- userVmDetailsDao.addDetail(vm.getId(),
VmDetailConstants.MEMORY_OVER_COMMIT_RATIO, cluster_detail_ram.getValue(),
true);
- }
+ final Long clusterId = dest.getCluster().getId();
+ updateOverCommitRatioForVmProfile(vmProfile, clusterId);
-
vmProfile.setCpuOvercommitRatio(Float.parseFloat(cluster_detail_cpu.getValue()));
-
vmProfile.setMemoryOvercommitRatio(Float.parseFloat(cluster_detail_ram.getValue()));
StartAnswer startAnswer = null;
try {
@@ -1264,7 +1252,7 @@ public class VirtualMachineManagerImpl extends
ManagerBase implements VirtualMac
resetVmNicsDeviceId(vm.getId());
_networkMgr.prepare(vmProfile, dest, ctx);
if (vm.getHypervisorType() != HypervisorType.BareMetal) {
- checkAndAttemptMigrateVmAcrossCluster(vm, cluster_id,
dest.getStorageForDisks());
+ checkAndAttemptMigrateVmAcrossCluster(vm, clusterId,
dest.getStorageForDisks());
volumeMgr.prepare(vmProfile, dest);
}
@@ -1462,6 +1450,27 @@ public class VirtualMachineManagerImpl extends
ManagerBase implements VirtualMac
}
}
+ private void updateOverCommitRatioForVmProfile(VirtualMachineProfile
vmProfile, long clusterId) {
+ final ClusterDetailsVO clusterDetailCpu =
_clusterDetailsDao.findDetail(clusterId,
VmDetailConstants.CPU_OVER_COMMIT_RATIO);
+ final ClusterDetailsVO clusterDetailRam =
_clusterDetailsDao.findDetail(clusterId,
VmDetailConstants.MEMORY_OVER_COMMIT_RATIO);
+ final float parsedClusterCpuDetailCpu =
Float.parseFloat(clusterDetailCpu.getValue());
+ final float parsedClusterDetailRam =
Float.parseFloat(clusterDetailRam.getValue());
+ UserVmDetailVO vmDetailCpu =
userVmDetailsDao.findDetail(vmProfile.getId(),
VmDetailConstants.CPU_OVER_COMMIT_RATIO);
+ UserVmDetailVO vmDetailRam =
userVmDetailsDao.findDetail(vmProfile.getId(),
VmDetailConstants.MEMORY_OVER_COMMIT_RATIO);
+
+ if ((vmDetailCpu == null && parsedClusterCpuDetailCpu > 1f) ||
+ (vmDetailCpu != null &&
Float.parseFloat(vmDetailCpu.getValue()) != parsedClusterCpuDetailCpu)) {
+ userVmDetailsDao.addDetail(vmProfile.getId(),
VmDetailConstants.CPU_OVER_COMMIT_RATIO, clusterDetailCpu.getValue(), true);
+ }
+ if ((vmDetailRam == null && parsedClusterDetailRam > 1f) ||
+ (vmDetailRam != null &&
Float.parseFloat(vmDetailRam.getValue()) != parsedClusterDetailRam)) {
+ userVmDetailsDao.addDetail(vmProfile.getId(),
VmDetailConstants.MEMORY_OVER_COMMIT_RATIO, clusterDetailRam.getValue(), true);
+ }
+
+
vmProfile.setCpuOvercommitRatio(Float.parseFloat(clusterDetailCpu.getValue()));
+
vmProfile.setMemoryOvercommitRatio(Float.parseFloat(clusterDetailRam.getValue()));
+ }
+
/**
* Setting pod id to null can result in migration of Volumes across pods.
This is not desirable for VMs which
* have a volume in Ready state (happens when a VM is shutdown and started
again).
@@ -2730,6 +2739,7 @@ public class VirtualMachineManagerImpl extends
ManagerBase implements VirtualMac
_networkMgr.prepareNicForMigration(profile, dest);
volumeMgr.prepareForMigration(profile, dest);
profile.setConfigDriveLabel(VmConfigDriveLabel.value());
+ updateOverCommitRatioForVmProfile(profile,
dest.getHost().getClusterId());
final VirtualMachineTO to = toVmTO(profile);
final PrepareForMigrationCommand pfmc = new
PrepareForMigrationCommand(to);