Skip to content

Commit 50a1697

Browse files
authored
refactor: migrate vm with storage (apache#5030)
* refactor: migrate with storage host capability check Refactors Boolean HypervisorCapabilitiesDao::isStorageMotionSupported to boolean HypervisorCapabilitiesDao::isStorageMotionSupported for simplifying callers. Refactors log messages. Signed-off-by: Abhishek Kumar <[email protected]> * simplify Signed-off-by: Abhishek Kumar <[email protected]> * refactor Signed-off-by: Abhishek Kumar <[email protected]> * changes Signed-off-by: Abhishek Kumar <[email protected]> * review comments addressed Signed-off-by: Abhishek Kumar <[email protected]> * var rename Signed-off-by: Abhishek Kumar <[email protected]>
1 parent 757bc2d commit 50a1697

9 files changed

Lines changed: 119 additions & 102 deletions

File tree

‎engine/components-api/src/main/java/com/cloud/storage/StorageManager.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@
1919
import java.math.BigDecimal;
2020
import java.util.List;
2121

22-
import com.cloud.agent.api.ModifyStoragePoolAnswer;
2322
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
2423
import org.apache.cloudstack.engine.subsystem.api.storage.HypervisorHostListener;
2524
import org.apache.cloudstack.framework.config.ConfigKey;
2625
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
2726

2827
import com.cloud.agent.api.Answer;
2928
import com.cloud.agent.api.Command;
29+
import com.cloud.agent.api.ModifyStoragePoolAnswer;
3030
import com.cloud.agent.api.StoragePoolInfo;
3131
import com.cloud.agent.api.to.DataTO;
3232
import com.cloud.agent.api.to.DiskTO;
@@ -252,7 +252,7 @@ public interface StorageManager extends StorageService {
252252

253253
boolean storagePoolCompatibleWithVolumePool(StoragePool pool, Volume volume);
254254

255-
boolean isStoragePoolComplaintWithStoragePolicy(List<Volume> volumes, StoragePool pool) throws StorageUnavailableException;
255+
boolean isStoragePoolCompliantWithStoragePolicy(List<Volume> volumes, StoragePool pool) throws StorageUnavailableException;
256256

257257
boolean registerHostListener(String providerUuid, HypervisorHostListener listener);
258258

‎engine/schema/src/main/java/com/cloud/hypervisor/dao/HypervisorCapabilitiesDao.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,5 @@ public interface HypervisorCapabilitiesDao extends GenericDao<HypervisorCapabili
3838

3939
List<HypervisorType> getHypervisorsWithDefaultEntries();
4040

41-
Boolean isStorageMotionSupported(HypervisorType hypervisorType, String hypervisorVersion);
41+
boolean isStorageMotionSupported(HypervisorType hypervisorType, String hypervisorVersion);
4242
}

‎engine/schema/src/main/java/com/cloud/hypervisor/dao/HypervisorCapabilitiesDaoImpl.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public List<HypervisorType> getHypervisorsWithDefaultEntries() {
121121
}
122122

123123
@Override
124-
public Boolean isStorageMotionSupported(HypervisorType hypervisorType, String hypervisorVersion) {
124+
public boolean isStorageMotionSupported(HypervisorType hypervisorType, String hypervisorVersion) {
125125
HypervisorCapabilitiesVO hostCapabilities = findByHypervisorTypeAndVersion(hypervisorType, hypervisorVersion);
126126
if (hostCapabilities == null && HypervisorType.KVM.equals(hypervisorType)) {
127127
List<HypervisorCapabilitiesVO> hypervisorCapabilitiesList = listAllByHypervisorType(HypervisorType.KVM);

‎engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ protected boolean filter(ExcludeList avoid, StoragePool pool, DiskProfile dskCh,
241241
}
242242

243243
try {
244-
boolean isStoragePoolStoragepolicyComplaince = storageMgr.isStoragePoolComplaintWithStoragePolicy(requestVolumes, pool);
244+
boolean isStoragePoolStoragepolicyComplaince = storageMgr.isStoragePoolCompliantWithStoragePolicy(requestVolumes, pool);
245245
if (!isStoragePoolStoragepolicyComplaince) {
246246
return false;
247247
}

‎server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1411,7 +1411,7 @@ public int compare(Volume v1, Volume v2) {
14111411
hostCanAccessPool = true;
14121412
if (potentialHost.getHypervisorType() == HypervisorType.VMware) {
14131413
try {
1414-
boolean isStoragePoolStoragepolicyComplaince = _storageMgr.isStoragePoolComplaintWithStoragePolicy(allVolumes, storagePool);
1414+
boolean isStoragePoolStoragepolicyComplaince = _storageMgr.isStoragePoolCompliantWithStoragePolicy(allVolumes, storagePool);
14151415
if (!isStoragePoolStoragepolicyComplaince) {
14161416
continue;
14171417
}
@@ -1450,7 +1450,7 @@ public int compare(Volume v1, Volume v2) {
14501450

14511451
if (potentialHost.getHypervisorType() == HypervisorType.VMware) {
14521452
try {
1453-
boolean isStoragePoolStoragepolicyComplaince = _storageMgr.isStoragePoolComplaintWithStoragePolicy(requestVolumes, potentialSPool);
1453+
boolean isStoragePoolStoragepolicyComplaince = _storageMgr.isStoragePoolCompliantWithStoragePolicy(requestVolumes, potentialSPool);
14541454
if (!isStoragePoolStoragepolicyComplaince) {
14551455
continue;
14561456
}

‎server/src/main/java/com/cloud/server/ManagementServerImpl.java‎

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1291,7 +1291,7 @@ public Ternary<Pair<List<? extends Host>, Integer>, List<? extends Host>, Map<Ho
12911291
boolean canMigrateWithStorage = false;
12921292

12931293
if (VirtualMachine.Type.User.equals(vm.getType()) || HypervisorType.VMware.equals(vm.getHypervisorType())) {
1294-
canMigrateWithStorage = Boolean.TRUE.equals(_hypervisorCapabilitiesDao.isStorageMotionSupported(srcHost.getHypervisorType(), srcHostVersion));
1294+
canMigrateWithStorage = _hypervisorCapabilitiesDao.isStorageMotionSupported(srcHost.getHypervisorType(), srcHostVersion);
12951295
}
12961296

12971297
// Check if the vm is using any disks on local storage.
@@ -1345,11 +1345,8 @@ public Ternary<Pair<List<? extends Host>, Integer>, List<? extends Host>, Map<Ho
13451345
// source volume.
13461346
iterator.remove();
13471347
} else {
1348-
boolean hostSupportsStorageMigration = false;
1349-
if ((srcHostVersion != null && srcHostVersion.equals(hostVersion)) ||
1350-
Boolean.TRUE.equals(_hypervisorCapabilitiesDao.isStorageMotionSupported(host.getHypervisorType(), hostVersion))) {
1351-
hostSupportsStorageMigration = true;
1352-
}
1348+
boolean hostSupportsStorageMigration = (srcHostVersion != null && srcHostVersion.equals(hostVersion)) ||
1349+
_hypervisorCapabilitiesDao.isStorageMotionSupported(host.getHypervisorType(), hostVersion);
13531350
if (hostSupportsStorageMigration && hasSuitablePoolsForVolume(volume, host, vmProfile)) {
13541351
requiresStorageMotion.put(host, true);
13551352
} else {

‎server/src/main/java/com/cloud/storage/StorageManagerImpl.java‎

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
// under the License.
1717
package com.cloud.storage;
1818

19+
import static com.cloud.utils.NumbersUtil.toHumanReadableSize;
20+
1921
import java.math.BigDecimal;
2022
import java.net.URI;
2123
import java.net.URISyntaxException;
@@ -29,32 +31,27 @@
2931
import java.util.HashMap;
3032
import java.util.HashSet;
3133
import java.util.Iterator;
34+
import java.util.LinkedHashSet;
3235
import java.util.List;
3336
import java.util.Map;
3437
import java.util.Random;
3538
import java.util.Set;
36-
import java.util.LinkedHashSet;
3739
import java.util.concurrent.ExecutionException;
3840
import java.util.concurrent.Executors;
3941
import java.util.concurrent.ScheduledExecutorService;
4042
import java.util.concurrent.TimeUnit;
4143

4244
import javax.inject.Inject;
4345

44-
import com.cloud.agent.api.to.StorageFilerTO;
45-
import com.cloud.dc.VsphereStoragePolicyVO;
46-
import com.cloud.dc.dao.VsphereStoragePolicyDao;
47-
import com.cloud.service.dao.ServiceOfferingDetailsDao;
48-
import com.cloud.utils.StringUtils;
4946
import org.apache.cloudstack.api.ApiConstants;
5047
import org.apache.cloudstack.api.command.admin.storage.CancelPrimaryStorageMaintenanceCmd;
5148
import org.apache.cloudstack.api.command.admin.storage.CreateSecondaryStagingStoreCmd;
5249
import org.apache.cloudstack.api.command.admin.storage.CreateStoragePoolCmd;
5350
import org.apache.cloudstack.api.command.admin.storage.DeleteImageStoreCmd;
5451
import org.apache.cloudstack.api.command.admin.storage.DeletePoolCmd;
5552
import org.apache.cloudstack.api.command.admin.storage.DeleteSecondaryStagingStoreCmd;
56-
import org.apache.cloudstack.api.command.admin.storage.UpdateStoragePoolCmd;
5753
import org.apache.cloudstack.api.command.admin.storage.SyncStoragePoolCmd;
54+
import org.apache.cloudstack.api.command.admin.storage.UpdateStoragePoolCmd;
5855
import org.apache.cloudstack.context.CallContext;
5956
import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope;
6057
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
@@ -121,12 +118,13 @@
121118
import com.cloud.agent.api.GetStorageStatsCommand;
122119
import com.cloud.agent.api.GetVolumeStatsAnswer;
123120
import com.cloud.agent.api.GetVolumeStatsCommand;
121+
import com.cloud.agent.api.ModifyStoragePoolAnswer;
122+
import com.cloud.agent.api.ModifyStoragePoolCommand;
124123
import com.cloud.agent.api.StoragePoolInfo;
125124
import com.cloud.agent.api.VolumeStatsEntry;
126125
import com.cloud.agent.api.to.DataTO;
127126
import com.cloud.agent.api.to.DiskTO;
128-
import com.cloud.agent.api.ModifyStoragePoolCommand;
129-
import com.cloud.agent.api.ModifyStoragePoolAnswer;
127+
import com.cloud.agent.api.to.StorageFilerTO;
130128
import com.cloud.agent.manager.Commands;
131129
import com.cloud.api.ApiDBUtils;
132130
import com.cloud.api.query.dao.TemplateJoinDao;
@@ -143,8 +141,10 @@
143141
import com.cloud.configuration.Resource.ResourceType;
144142
import com.cloud.dc.ClusterVO;
145143
import com.cloud.dc.DataCenterVO;
144+
import com.cloud.dc.VsphereStoragePolicyVO;
146145
import com.cloud.dc.dao.ClusterDao;
147146
import com.cloud.dc.dao.DataCenterDao;
147+
import com.cloud.dc.dao.VsphereStoragePolicyDao;
148148
import com.cloud.event.ActionEvent;
149149
import com.cloud.event.EventTypes;
150150
import com.cloud.exception.AgentUnavailableException;
@@ -172,6 +172,7 @@
172172
import com.cloud.resource.ResourceState;
173173
import com.cloud.server.ConfigurationServer;
174174
import com.cloud.server.ManagementServer;
175+
import com.cloud.service.dao.ServiceOfferingDetailsDao;
175176
import com.cloud.storage.Storage.ImageFormat;
176177
import com.cloud.storage.Storage.StoragePoolType;
177178
import com.cloud.storage.Volume.Type;
@@ -195,6 +196,7 @@
195196
import com.cloud.utils.DateUtil;
196197
import com.cloud.utils.NumbersUtil;
197198
import com.cloud.utils.Pair;
199+
import com.cloud.utils.StringUtils;
198200
import com.cloud.utils.UriUtils;
199201
import com.cloud.utils.component.ComponentContext;
200202
import com.cloud.utils.component.ManagerBase;
@@ -218,8 +220,6 @@
218220
import com.cloud.vm.VirtualMachine.State;
219221
import com.cloud.vm.dao.VMInstanceDao;
220222

221-
import static com.cloud.utils.NumbersUtil.toHumanReadableSize;
222-
223223
@Component
224224
public class StorageManagerImpl extends ManagerBase implements StorageManager, ClusterManagerListener, Configurable {
225225
private static final Logger s_logger = Logger.getLogger(StorageManagerImpl.class);
@@ -2392,8 +2392,8 @@ public boolean storagePoolHasEnoughSpaceForResize(StoragePool pool, long current
23922392
}
23932393

23942394
@Override
2395-
public boolean isStoragePoolComplaintWithStoragePolicy(List<Volume> volumes, StoragePool pool) throws StorageUnavailableException {
2396-
if (volumes == null || volumes.isEmpty()) {
2395+
public boolean isStoragePoolCompliantWithStoragePolicy(List<Volume> volumes, StoragePool pool) throws StorageUnavailableException {
2396+
if (CollectionUtils.isEmpty(volumes)) {
23972397
return false;
23982398
}
23992399
List<Pair<Volume, Answer>> answers = new ArrayList<Pair<Volume, Answer>>();

‎server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2441,7 +2441,7 @@ public Volume migrateVolume(MigrateVolumeCmd cmd) {
24412441
HypervisorType hypervisorType = _volsDao.getHypervisorType(volumeId);
24422442
if (hypervisorType.equals(HypervisorType.VMware)) {
24432443
try {
2444-
boolean isStoragePoolStoragepolicyComplaince = storageMgr.isStoragePoolComplaintWithStoragePolicy(Arrays.asList(vol), destPool);
2444+
boolean isStoragePoolStoragepolicyComplaince = storageMgr.isStoragePoolCompliantWithStoragePolicy(Arrays.asList(vol), destPool);
24452445
if (!isStoragePoolStoragepolicyComplaince) {
24462446
throw new CloudRuntimeException(String.format("Storage pool %s is not storage policy compliance with the volume %s", poolUuid, vol.getUuid()));
24472447
}

0 commit comments

Comments
 (0)