|
51 | 51 | import com.cloud.utils.db.Transaction; |
52 | 52 | import com.cloud.utils.db.TransactionCallback; |
53 | 53 | import com.cloud.utils.exception.CloudRuntimeException; |
| 54 | +import com.cloud.vm.UserVmDetailVO; |
54 | 55 | import com.cloud.vm.VMInstanceVO; |
55 | 56 | import com.cloud.vm.VirtualMachine; |
56 | 57 | import com.cloud.vm.VirtualMachineProfile; |
57 | 58 | import com.cloud.vm.VirtualMachineProfileImpl; |
58 | 59 | import com.cloud.vm.VmDetailConstants; |
| 60 | +import com.cloud.vm.dao.UserVmDetailsDao; |
59 | 61 | import com.cloud.vm.dao.VMInstanceDao; |
60 | 62 | import org.apache.cloudstack.api.ApiCommandResourceType; |
61 | 63 | import org.apache.cloudstack.api.ApiConstants; |
@@ -134,6 +136,9 @@ public class ClusterDrsServiceImpl extends ManagerBase implements ClusterDrsServ |
134 | 136 | @Inject |
135 | 137 | ServiceOfferingDao serviceOfferingDao; |
136 | 138 |
|
| 139 | + @Inject |
| 140 | + UserVmDetailsDao userVmdetailsDao; |
| 141 | + |
137 | 142 | @Inject |
138 | 143 | ManagementServer managementServer; |
139 | 144 |
|
@@ -477,10 +482,7 @@ private Pair<Map<Long, List<? extends Host>>, Map<Long, Map<Host, Boolean>>> get |
477 | 482 |
|
478 | 483 | for (VirtualMachine vm : vmList) { |
479 | 484 | // 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)) { |
484 | 486 | continue; |
485 | 487 | } |
486 | 488 |
|
@@ -633,12 +635,20 @@ Pair<VirtualMachine, Host> getBestMigration(Cluster cluster, ClusterDrsAlgorithm |
633 | 635 | return bestMigration; |
634 | 636 | } |
635 | 637 |
|
636 | | - private boolean skipDrs(VirtualMachine vm, List<? extends Host> compatibleHosts, ServiceOffering serviceOffering) { |
| 638 | + private boolean shouldSkipVMForDRS(VirtualMachine vm) { |
637 | 639 | if (vm.getType().isUsedBySystem() || vm.getState() != VirtualMachine.State.Running) { |
638 | 640 | return true; |
639 | 641 | } |
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)) { |
642 | 652 | return true; |
643 | 653 | } |
644 | 654 | if (CollectionUtils.isEmpty(compatibleHosts)) { |
|
0 commit comments