From a9c7ae2934887c461caa1950d749977a2eb83087 Mon Sep 17 00:00:00 2001 From: Koushik Das Date: Wed, 8 Aug 2012 16:53:38 +0530 Subject: [PATCH] Fix CS-15621 Using migrateVolumes method which does not perform input validation. Some input validation in the migrateVolume method prevented migration of volume in READY state. Also using volume disk offering to check if it is a local or shared one. Reviewed-by: Nitin --- server/src/com/cloud/storage/StorageManagerImpl.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index fdee83b4eb6..7df4802feda 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -3226,7 +3226,8 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag if (s_logger.isDebugEnabled()) { s_logger.debug("Mismatch in storage pool " + assignedPool + " assigned by deploymentPlanner and the one associated with volume " + vol); } - if (vm.getServiceOffering().getUseLocalStorage()) + DiskOfferingVO diskOffering = _diskOfferingDao.findById(vol.getDiskOfferingId()); + if (diskOffering.getUseLocalStorage()) { if (s_logger.isDebugEnabled()) { s_logger.debug("Local volume " + vol + " will be recreated on storage pool " + assignedPool + " assigned by deploymentPlanner"); @@ -3237,10 +3238,12 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag s_logger.debug("Shared volume " + vol + " will be migrated on storage pool " + assignedPool + " assigned by deploymentPlanner"); } try { - Volume migratedVol = migrateVolume(vol.getId(), assignedPool.getId()); - vm.addDisk(new VolumeTO(migratedVol, assignedPool)); + List volumesToMigrate = new ArrayList(); + volumesToMigrate.add(vol); + migrateVolumes(volumesToMigrate, assignedPool); + vm.addDisk(new VolumeTO(vol, assignedPool)); } catch (ConcurrentOperationException e) { - throw new StorageUnavailableException("Volume migration failed for " + vol, Volume.class, vol.getId()); + throw new CloudRuntimeException("Migration of volume " + vol + " to storage pool " + assignedPool + " failed", e); } } } else {