should not duplicate vm instance id, during the volume migration

This commit is contained in:
Edison Su 2014-10-30 21:27:51 -07:00
parent b8d6396409
commit 6b5c874fe9
2 changed files with 13 additions and 5 deletions

View File

@ -594,8 +594,11 @@ public class VolumeDaoImpl extends GenericDaoBase<VolumeVO, Long> implements Vol
VolumeVO srcVol = findById(srcVolId);
VolumeVO destVol = findById(destVolId);
String uuid = srcVol.getUuid();
Long instanceId = srcVol.getInstanceId();
srcVol.setUuid(null);
srcVol.setInstanceId(null);
destVol.setUuid(uuid);
destVol.setInstanceId(instanceId);
update(srcVolId, srcVol);
update(destVolId, destVol);
} catch (Exception e) {

View File

@ -830,6 +830,7 @@ public class VolumeServiceImpl implements VolumeService {
}
VolumeVO newVol = new VolumeVO(volume);
newVol.setInstanceId(null);
newVol.setPoolId(pool.getId());
newVol.setFolder(folder);
newVol.setPodId(pool.getPodId());
@ -1021,11 +1022,15 @@ public class VolumeServiceImpl implements VolumeService {
srcVolume.processEvent(Event.OperationSuccessed);
destVolume.processEvent(Event.OperationSuccessed, result.getAnswer());
_volumeDao.updateUuid(srcVolume.getId(), destVolume.getId());
destroyVolume(srcVolume.getId());
srcVolume = volFactory.getVolume(srcVolume.getId());
AsyncCallFuture<VolumeApiResult> destroyFuture = expungeVolumeAsync(srcVolume);
destroyFuture.get();
future.complete(res);
try {
destroyVolume(srcVolume.getId());
srcVolume = volFactory.getVolume(srcVolume.getId());
AsyncCallFuture<VolumeApiResult> destroyFuture = expungeVolumeAsync(srcVolume);
destroyFuture.get();
future.complete(res);
} catch (Exception e) {
s_logger.debug("failed to clean up volume on storage", e);
}
return null;
} catch (Exception e) {
s_logger.debug("Failed to process copy volume callback", e);