From 5958a4469a02cfdfbcc84eefad24ea90129649ef Mon Sep 17 00:00:00 2001 From: anthony Date: Fri, 12 Nov 2010 15:00:27 -0800 Subject: [PATCH] bug 7149: merge from master --- core/src/com/cloud/storage/StorageManager.java | 6 +++--- .../com/cloud/network/NetworkManagerImpl.java | 8 +++----- .../com/cloud/storage/StorageManagerImpl.java | 18 ++++++++++++++++-- .../secondary/SecondaryStorageManagerImpl.java | 6 ++---- server/src/com/cloud/vm/UserVmManagerImpl.java | 18 ++---------------- 5 files changed, 26 insertions(+), 30 deletions(-) diff --git a/core/src/com/cloud/storage/StorageManager.java b/core/src/com/cloud/storage/StorageManager.java index 5d6653b96b2..276c3d721d4 100644 --- a/core/src/com/cloud/storage/StorageManager.java +++ b/core/src/com/cloud/storage/StorageManager.java @@ -258,12 +258,12 @@ public interface StorageManager extends Manager { StoragePoolVO updateStoragePool(long poolId, String tags) throws IllegalArgumentException; /** - * Find all of the storage pools needed for this vm. + * Find the storage pool, from which MS will choose host. * * @param vmId id of the vm. - * @return List of StoragePoolVO + * @return StoragePoolVO */ - List getStoragePoolsForVm(long vmId); + StoragePoolVO getStoragePoolForVm(long vmId); String getPrimaryStorageNameLabel(VolumeVO volume); diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index df3b9c467b8..0e7adaf5c22 100644 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -814,9 +814,8 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager final HashSet avoid = new HashSet(); final VMTemplateVO template = _templateDao.findById(router.getTemplateId()); final DataCenterVO dc = _dcDao.findById(router.getDataCenterId()); - List sps = _storageMgr.getStoragePoolsForVm(router.getId()); - StoragePoolVO sp = sps.get(0); // FIXME - + StoragePoolVO sp = _storageMgr.getStoragePoolForVm(router.getId()); + HostVO routingHost = (HostVO)_agentMgr.findHost(Host.Type.Routing, dc, pod, sp, _offering, template, router, null, avoid); if (routingHost == null) { @@ -2229,8 +2228,7 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager final boolean mirroredVols = router.isMirroredVols(); final DataCenterVO dc = _dcDao.findById(router.getDataCenterId()); final HostPodVO pod = _podDao.findById(router.getPodId()); - List sps = _storageMgr.getStoragePoolsForVm(router.getId()); - StoragePoolVO sp = sps.get(0); // FIXME + StoragePoolVO sp = _storageMgr.getStoragePoolForVm(router.getId()); final List vols = _volsDao.findCreatedByInstance(routerId); diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index a6fd9a8592f..17de727ba90 100644 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -1825,11 +1825,25 @@ public class StorageManagerImpl implements StorageManager { } @Override - public List getStoragePoolsForVm(long vmId) { + public StoragePoolVO getStoragePoolForVm(long vmId) { SearchCriteria sc = PoolsUsedByVmSearch.create(); sc.setJoinParameters("volumes", "vm", vmId); sc.setJoinParameters("volumes", "status", AsyncInstanceCreateStatus.Created.toString()); - return _storagePoolDao.search(sc, null); + List sps = _storagePoolDao.search(sc, null); + if (sps.size() == 0) { + throw new RuntimeException("Volume is not created for VM " + vmId); + } + StoragePoolVO sp = sps.get(0); + for (StoragePoolVO tsp : sps) { + // use the local storage pool to choose host, + // shared storage pool should be in the same cluster as local + // storage pool + if (tsp.isLocal()) { + sp = tsp; + break; + } + } + return sp; } @Override diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java index 3ec1fdf933c..dcabf74d360 100644 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java @@ -308,8 +308,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V DataCenterVO dc = _dcDao.findById(secStorageVm.getDataCenterId()); HostPodVO pod = _podDao.findById(secStorageVm.getPodId()); - List sps = _storageMgr.getStoragePoolsForVm(secStorageVm.getId()); - StoragePoolVO sp = sps.get(0); // FIXME + StoragePoolVO sp = _storageMgr.getStoragePoolForVm(secStorageVm.getId()); HashSet avoid = new HashSet(); HostVO routingHost = (HostVO) _agentMgr.findHost(Host.Type.Routing, dc, pod, sp, _serviceOffering, _template, secStorageVm, null, avoid); @@ -1782,8 +1781,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V boolean mirroredVols = secStorageVm.isMirroredVols(); DataCenterVO dc = _dcDao.findById(secStorageVm.getDataCenterId()); HostPodVO pod = _podDao.findById(secStorageVm.getPodId()); - List sps = _storageMgr.getStoragePoolsForVm(secStorageVm.getId()); - StoragePoolVO sp = sps.get(0); // FIXME + StoragePoolVO sp = _storageMgr.getStoragePoolForVm(secStorageVm.getId()); List vols = _volsDao.findCreatedByInstance(routerId); diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 8d8f43d4feb..f6f7f1280e3 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -626,19 +626,7 @@ public class UserVmManagerImpl implements UserVmManager { DataCenterVO dc = _dcDao.findById(vm.getDataCenterId()); HostPodVO pod = _podDao.findById(vm.getPodId()); - List sps = _storageMgr.getStoragePoolsForVm(vm.getId()); - if( sps.size() == 0 ) { - throw new RuntimeException("Volume is not created for VM " + vm.getName()); - } - StoragePoolVO sp = sps.get(0); - for (StoragePoolVO tsp: sps ) { - // use the local storage pool to choose host, - // shared storage pool should be in the same cluster as local storage pool - if( tsp.isLocal()) { - sp = tsp; - break; - } - } + StoragePoolVO sp = _storageMgr.getStoragePoolForVm(vm.getId()); VMTemplateVO template = _templateDao.findById(vm.getTemplateId()); ServiceOffering offering = _offeringDao.findById(vm.getServiceOfferingId()); @@ -1865,9 +1853,7 @@ public class UserVmManagerImpl implements UserVmManager { HostPodVO pod = _podDao.findById(vm.getPodId()); ServiceOfferingVO offering = _offeringDao.findById(vm.getServiceOfferingId()); VMTemplateVO template = _templateDao.findById(vm.getTemplateId()); - List sps = _storageMgr.getStoragePoolsForVm(vm.getId()); - StoragePoolVO sp = sps.get(0); // FIXME - + StoragePoolVO sp = _storageMgr.getStoragePoolForVm(vm.getId()); List vols = _volsDao.findCreatedByInstance(vmId);