bug 7149: merge from master

This commit is contained in:
anthony 2010-11-12 15:00:27 -08:00
parent 8d2bee85f2
commit 5958a4469a
5 changed files with 26 additions and 30 deletions

View File

@ -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<StoragePoolVO> getStoragePoolsForVm(long vmId);
StoragePoolVO getStoragePoolForVm(long vmId);
String getPrimaryStorageNameLabel(VolumeVO volume);

View File

@ -814,9 +814,8 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager
final HashSet<Host> avoid = new HashSet<Host>();
final VMTemplateVO template = _templateDao.findById(router.getTemplateId());
final DataCenterVO dc = _dcDao.findById(router.getDataCenterId());
List<StoragePoolVO> 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<StoragePoolVO> sps = _storageMgr.getStoragePoolsForVm(router.getId());
StoragePoolVO sp = sps.get(0); // FIXME
StoragePoolVO sp = _storageMgr.getStoragePoolForVm(router.getId());
final List<VolumeVO> vols = _volsDao.findCreatedByInstance(routerId);

View File

@ -1825,11 +1825,25 @@ public class StorageManagerImpl implements StorageManager {
}
@Override
public List<StoragePoolVO> 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<StoragePoolVO> 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

View File

@ -308,8 +308,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V
DataCenterVO dc = _dcDao.findById(secStorageVm.getDataCenterId());
HostPodVO pod = _podDao.findById(secStorageVm.getPodId());
List<StoragePoolVO> sps = _storageMgr.getStoragePoolsForVm(secStorageVm.getId());
StoragePoolVO sp = sps.get(0); // FIXME
StoragePoolVO sp = _storageMgr.getStoragePoolForVm(secStorageVm.getId());
HashSet<Host> avoid = new HashSet<Host>();
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<StoragePoolVO> sps = _storageMgr.getStoragePoolsForVm(secStorageVm.getId());
StoragePoolVO sp = sps.get(0); // FIXME
StoragePoolVO sp = _storageMgr.getStoragePoolForVm(secStorageVm.getId());
List<VolumeVO> vols = _volsDao.findCreatedByInstance(routerId);

View File

@ -626,19 +626,7 @@ public class UserVmManagerImpl implements UserVmManager {
DataCenterVO dc = _dcDao.findById(vm.getDataCenterId());
HostPodVO pod = _podDao.findById(vm.getPodId());
List<StoragePoolVO> 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<StoragePoolVO> sps = _storageMgr.getStoragePoolsForVm(vm.getId());
StoragePoolVO sp = sps.get(0); // FIXME
StoragePoolVO sp = _storageMgr.getStoragePoolForVm(vm.getId());
List<VolumeVO> vols = _volsDao.findCreatedByInstance(vmId);