Skip to content

Commit 537dd17

Browse files
committed
Fix skip DRS for a VM
1 parent 6f1aa96 commit 537dd17

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

server/src/main/java/org/apache/cloudstack/cluster/ClusterDrsServiceImpl.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,13 @@
5151
import com.cloud.utils.db.Transaction;
5252
import com.cloud.utils.db.TransactionCallback;
5353
import com.cloud.utils.exception.CloudRuntimeException;
54+
import com.cloud.vm.UserVmDetailVO;
5455
import com.cloud.vm.VMInstanceVO;
5556
import com.cloud.vm.VirtualMachine;
5657
import com.cloud.vm.VirtualMachineProfile;
5758
import com.cloud.vm.VirtualMachineProfileImpl;
5859
import com.cloud.vm.VmDetailConstants;
60+
import com.cloud.vm.dao.UserVmDetailsDao;
5961
import com.cloud.vm.dao.VMInstanceDao;
6062
import org.apache.cloudstack.api.ApiCommandResourceType;
6163
import org.apache.cloudstack.api.ApiConstants;
@@ -134,6 +136,9 @@ public class ClusterDrsServiceImpl extends ManagerBase implements ClusterDrsServ
134136
@Inject
135137
ServiceOfferingDao serviceOfferingDao;
136138

139+
@Inject
140+
UserVmDetailsDao userVmdetailsDao;
141+
137142
@Inject
138143
ManagementServer managementServer;
139144

@@ -477,10 +482,7 @@ private Pair<Map<Long, List<? extends Host>>, Map<Long, Map<Host, Boolean>>> get
477482

478483
for (VirtualMachine vm : vmList) {
479484
// Skip ineligible VMs
480-
if (vm.getType().isUsedBySystem() ||
481-
vm.getState() != VirtualMachine.State.Running ||
482-
(MapUtils.isNotEmpty(vm.getDetails()) &&
483-
"true".equalsIgnoreCase(vm.getDetails().get(VmDetailConstants.SKIP_DRS)))) {
485+
if (shouldSkipVMForDRS(vm)) {
484486
continue;
485487
}
486488

@@ -633,12 +635,20 @@ Pair<VirtualMachine, Host> getBestMigration(Cluster cluster, ClusterDrsAlgorithm
633635
return bestMigration;
634636
}
635637

636-
private boolean skipDrs(VirtualMachine vm, List<? extends Host> compatibleHosts, ServiceOffering serviceOffering) {
638+
private boolean shouldSkipVMForDRS(VirtualMachine vm) {
637639
if (vm.getType().isUsedBySystem() || vm.getState() != VirtualMachine.State.Running) {
638640
return true;
639641
}
640-
if (MapUtils.isNotEmpty(vm.getDetails()) &&
641-
"true".equalsIgnoreCase(vm.getDetails().get(VmDetailConstants.SKIP_DRS))) {
642+
643+
UserVmDetailVO skipDrsDetail = userVmdetailsDao.findDetail(vm.getId(), VmDetailConstants.SKIP_DRS);
644+
if (skipDrsDetail != null && skipDrsDetail.getValue().equalsIgnoreCase("true")) {
645+
return true;
646+
}
647+
return false;
648+
}
649+
650+
private boolean skipDrs(VirtualMachine vm, List<? extends Host> compatibleHosts, ServiceOffering serviceOffering) {
651+
if (shouldSkipVMForDRS(vm)) {
642652
return true;
643653
}
644654
if (CollectionUtils.isEmpty(compatibleHosts)) {

0 commit comments

Comments
 (0)