mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CLOUDSTACK-4222: use new volume object in case of migrate volume
This commit is contained in:
parent
5034e8ee2d
commit
c58f15d867
@ -20,6 +20,7 @@ package com.cloud.storage;
|
|||||||
|
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
|
|
||||||
|
import com.cloud.exception.StorageUnavailableException;
|
||||||
import org.apache.cloudstack.api.command.user.volume.*;
|
import org.apache.cloudstack.api.command.user.volume.*;
|
||||||
|
|
||||||
import com.cloud.exception.ConcurrentOperationException;
|
import com.cloud.exception.ConcurrentOperationException;
|
||||||
|
|||||||
@ -99,6 +99,7 @@ public class MigrateVolumeCmd extends BaseAsyncCmd {
|
|||||||
@Override
|
@Override
|
||||||
public void execute(){
|
public void execute(){
|
||||||
Volume result;
|
Volume result;
|
||||||
|
|
||||||
result = _volumeService.migrateVolume(this);
|
result = _volumeService.migrateVolume(this);
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
VolumeResponse response = _responseGenerator.createVolumeResponse(result);
|
VolumeResponse response = _responseGenerator.createVolumeResponse(result);
|
||||||
|
|||||||
@ -51,7 +51,7 @@ import com.cloud.vm.VirtualMachineProfile;
|
|||||||
* to provision volumes.
|
* to provision volumes.
|
||||||
*/
|
*/
|
||||||
public interface VolumeOrchestrationService {
|
public interface VolumeOrchestrationService {
|
||||||
VolumeInfo moveVolume(VolumeInfo volume, long destPoolDcId, Long destPoolPodId, Long destPoolClusterId, HypervisorType dataDiskHyperType) throws ConcurrentOperationException;
|
VolumeInfo moveVolume(VolumeInfo volume, long destPoolDcId, Long destPoolPodId, Long destPoolClusterId, HypervisorType dataDiskHyperType) throws ConcurrentOperationException, StorageUnavailableException;
|
||||||
|
|
||||||
Volume allocateDuplicateVolume(Volume oldVol, Long templateId);
|
Volume allocateDuplicateVolume(Volume oldVol, Long templateId);
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ public interface VolumeOrchestrationService {
|
|||||||
|
|
||||||
String getVmNameOnVolume(Volume volume);
|
String getVmNameOnVolume(Volume volume);
|
||||||
|
|
||||||
Volume migrateVolume(Volume volume, StoragePool destPool);
|
Volume migrateVolume(Volume volume, StoragePool destPool) throws StorageUnavailableException;
|
||||||
|
|
||||||
void destroyVolume(Volume volume);
|
void destroyVolume(Volume volume);
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ public interface VolumeOrchestrationService {
|
|||||||
|
|
||||||
void migrateVolumes(VirtualMachine vm, VirtualMachineTO vmTo, Host srcHost, Host destHost, Map<Volume, StoragePool> volumeToPool);
|
void migrateVolumes(VirtualMachine vm, VirtualMachineTO vmTo, Host srcHost, Host destHost, Map<Volume, StoragePool> volumeToPool);
|
||||||
|
|
||||||
boolean storageMigration(VirtualMachineProfile vm, StoragePool destPool);
|
boolean storageMigration(VirtualMachineProfile vm, StoragePool destPool) throws StorageUnavailableException;
|
||||||
|
|
||||||
void prepareForMigration(VirtualMachineProfile vm, DeployDestination dest);
|
void prepareForMigration(VirtualMachineProfile vm, DeployDestination dest);
|
||||||
|
|
||||||
|
|||||||
@ -158,7 +158,7 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VolumeInfo moveVolume(VolumeInfo volume, long destPoolDcId, Long destPoolPodId, Long destPoolClusterId, HypervisorType dataDiskHyperType)
|
public VolumeInfo moveVolume(VolumeInfo volume, long destPoolDcId, Long destPoolPodId, Long destPoolClusterId, HypervisorType dataDiskHyperType)
|
||||||
throws ConcurrentOperationException {
|
throws ConcurrentOperationException, StorageUnavailableException {
|
||||||
|
|
||||||
// Find a destination storage pool with the specified criteria
|
// Find a destination storage pool with the specified criteria
|
||||||
DiskOffering diskOffering = _entityMgr.findById(DiskOffering.class, volume.getDiskOfferingId());
|
DiskOffering diskOffering = _entityMgr.findById(DiskOffering.class, volume.getDiskOfferingId());
|
||||||
@ -754,14 +754,14 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@DB
|
@DB
|
||||||
public Volume migrateVolume(Volume volume, StoragePool destPool) {
|
public Volume migrateVolume(Volume volume, StoragePool destPool) throws StorageUnavailableException {
|
||||||
VolumeInfo vol = volFactory.getVolume(volume.getId());
|
VolumeInfo vol = volFactory.getVolume(volume.getId());
|
||||||
AsyncCallFuture<VolumeApiResult> future = volService.copyVolume(vol, (DataStore)destPool);
|
AsyncCallFuture<VolumeApiResult> future = volService.copyVolume(vol, (DataStore)destPool);
|
||||||
try {
|
try {
|
||||||
VolumeApiResult result = future.get();
|
VolumeApiResult result = future.get();
|
||||||
if (result.isFailed()) {
|
if (result.isFailed()) {
|
||||||
s_logger.error("migrate volume failed:" + result.getResult());
|
s_logger.error("migrate volume failed:" + result.getResult());
|
||||||
return null;
|
throw new StorageUnavailableException("migrate volume failed: " + result.getResult(), destPool.getId());
|
||||||
}
|
}
|
||||||
return result.getVolume();
|
return result.getVolume();
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
@ -830,7 +830,7 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean storageMigration(VirtualMachineProfile vm, StoragePool destPool) {
|
public boolean storageMigration(VirtualMachineProfile vm, StoragePool destPool) throws StorageUnavailableException {
|
||||||
List<VolumeVO> vols = _volsDao.findUsableVolumesForInstance(vm.getId());
|
List<VolumeVO> vols = _volsDao.findUsableVolumesForInstance(vm.getId());
|
||||||
List<Volume> volumesNeedToMigrate = new ArrayList<Volume>();
|
List<Volume> volumesNeedToMigrate = new ArrayList<Volume>();
|
||||||
|
|
||||||
@ -1047,8 +1047,7 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati
|
|||||||
vol = task.volume;
|
vol = task.volume;
|
||||||
} else if (task.type == VolumeTaskType.MIGRATE) {
|
} else if (task.type == VolumeTaskType.MIGRATE) {
|
||||||
pool = (StoragePool)dataStoreMgr.getDataStore(task.pool.getId(), DataStoreRole.Primary);
|
pool = (StoragePool)dataStoreMgr.getDataStore(task.pool.getId(), DataStoreRole.Primary);
|
||||||
migrateVolume(task.volume, pool);
|
vol = migrateVolume(task.volume, pool);
|
||||||
vol = task.volume;
|
|
||||||
} else if (task.type == VolumeTaskType.RECREATE) {
|
} else if (task.type == VolumeTaskType.RECREATE) {
|
||||||
Pair<VolumeVO, DataStore> result = recreateVolume(task.volume, vm, dest);
|
Pair<VolumeVO, DataStore> result = recreateVolume(task.volume, vm, dest);
|
||||||
pool = (StoragePool)dataStoreMgr.getDataStore(result.second().getId(), DataStoreRole.Primary);
|
pool = (StoragePool)dataStoreMgr.getDataStore(result.second().getId(), DataStoreRole.Primary);
|
||||||
|
|||||||
@ -35,6 +35,7 @@ import javax.ejb.Local;
|
|||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.naming.ConfigurationException;
|
import javax.naming.ConfigurationException;
|
||||||
|
|
||||||
|
import com.cloud.exception.StorageUnavailableException;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
|
import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
|
||||||
@ -1385,6 +1386,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
|||||||
} catch (InsufficientCapacityException e) {
|
} catch (InsufficientCapacityException e) {
|
||||||
s_logger.debug("Failed to migration: " + e.toString());
|
s_logger.debug("Failed to migration: " + e.toString());
|
||||||
throw new CloudRuntimeException("Failed to migration: " + e.toString());
|
throw new CloudRuntimeException("Failed to migration: " + e.toString());
|
||||||
|
} catch (StorageUnavailableException e) {
|
||||||
|
s_logger.debug("Failed to migration: " + e.toString());
|
||||||
|
throw new CloudRuntimeException("Failed to migration: " + e.toString());
|
||||||
} finally {
|
} finally {
|
||||||
try {
|
try {
|
||||||
stateTransitTo(vm, VirtualMachine.Event.AgentReportStopped, null);
|
stateTransitTo(vm, VirtualMachine.Event.AgentReportStopped, null);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user