From ccb68e13a74342d4798aae11fe5c57890ff6c0ae Mon Sep 17 00:00:00 2001 From: Mike Tutkowski Date: Fri, 9 Jun 2017 20:00:25 -0600 Subject: [PATCH 1/2] Fix for an issue introduced in this commit: 336df84f1787de962a67d0a34551f9027303040e (cherry picked from commit c57f556966ab68b5bd91bb0d009a5ae170402e26) Signed-off-by: Rajani Karuturi --- .../storage/volume/VolumeServiceImpl.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java index 125e2e4be4d..8818724e722 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java @@ -62,6 +62,7 @@ import org.apache.cloudstack.storage.datastore.PrimaryDataStoreProviderManager; import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreDao; import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreVO; +import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao; import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO; import org.apache.cloudstack.storage.image.store.TemplateObject; @@ -398,9 +399,27 @@ public class VolumeServiceImpl implements VolumeService { s_logger.info("Volume " + vo.getId() + " is not referred anywhere, remove it from volumes table"); volDao.remove(vo.getId()); } + SnapshotDataStoreVO snapStoreVo = _snapshotStoreDao.findByVolume(vo.getId(), DataStoreRole.Primary); - if(snapStoreVo != null){ - _snapshotStoreDao.remove(snapStoreVo.getId()); + + if (snapStoreVo != null) { + long storagePoolId = snapStoreVo.getDataStoreId(); + StoragePoolVO storagePoolVO = storagePoolDao.findById(storagePoolId); + + if (storagePoolVO.isManaged()) { + DataStore primaryDataStore = dataStoreMgr.getPrimaryDataStore(storagePoolId); + Map mapCapabilities = primaryDataStore.getDriver().getCapabilities(); + + String value = mapCapabilities.get(DataStoreCapabilities.STORAGE_SYSTEM_SNAPSHOT.toString()); + Boolean supportsStorageSystemSnapshots = new Boolean(value); + + if (!supportsStorageSystemSnapshots) { + _snapshotStoreDao.remove(snapStoreVo.getId()); + } + } + else { + _snapshotStoreDao.remove(snapStoreVo.getId()); + } } } else { vo.processEvent(Event.OperationFailed); From 330089a8011fc684b47453f054815a41e6e63054 Mon Sep 17 00:00:00 2001 From: Mike Tutkowski Date: Tue, 16 May 2017 21:05:35 -0600 Subject: [PATCH 2/2] =?UTF-8?q?Only=20add=20the=20=E2=80=9C.vmdk=E2=80=9D?= =?UTF-8?q?=20suffix=20if=20need=20be=20(cherry=20picked=20from=20commit?= =?UTF-8?q?=20b156d5de11db20355871f4e42abc4b54db01b46d)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rajani Karuturi --- .../hypervisor/vmware/resource/VmwareResource.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index cfd565f0f94..5c873099fd6 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -2107,9 +2107,17 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } } + private String appendFileType(String path, String fileType) { + if (path.toLowerCase().endsWith(fileType.toLowerCase())) { + return path; + } + + return path + fileType; + } + private void resizeRootDisk(VirtualMachineMO vmMo, DiskTO rootDiskTO, VmwareHypervisorHost hyperHost, VmwareContext context) throws Exception { - Pair vdisk = getVirtualDiskInfo(vmMo, rootDiskTO.getPath() + ".vmdk"); + Pair vdisk = getVirtualDiskInfo(vmMo, appendFileType(rootDiskTO.getPath(), ".vmdk")); assert(vdisk != null); Long reqSize=((VolumeObjectTO)rootDiskTO.getData()).getSize()/1024; @@ -3606,7 +3614,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } diskLocator = new VirtualMachineRelocateSpecDiskLocator(); diskLocator.setDatastore(morDsAtSource); - Pair diskInfo = getVirtualDiskInfo(vmMo, volume.getPath() + ".vmdk"); + Pair diskInfo = getVirtualDiskInfo(vmMo, appendFileType(volume.getPath(), ".vmdk")); String vmdkAbsFile = getAbsoluteVmdkFile(diskInfo.first()); if (vmdkAbsFile != null && !vmdkAbsFile.isEmpty()) { vmMo.updateAdapterTypeIfRequired(vmdkAbsFile); @@ -3779,7 +3787,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa DatastoreMO targetDsMo = new DatastoreMO(srcHyperHost.getContext(), morDs); String fullVolumePath = VmwareStorageLayoutHelper.getVmwareDatastorePathFromVmdkFileName(targetDsMo, vmName, volumePath + ".vmdk"); - Pair diskInfo = getVirtualDiskInfo(vmMo, volumePath + ".vmdk"); + Pair diskInfo = getVirtualDiskInfo(vmMo, appendFileType(volumePath, ".vmdk")); String vmdkAbsFile = getAbsoluteVmdkFile(diskInfo.first()); if (vmdkAbsFile != null && !vmdkAbsFile.isEmpty()) { vmMo.updateAdapterTypeIfRequired(vmdkAbsFile);