use of com.cloud.legacymodel.communication.command.MigrateVolumeCommand in project cosmic by MissionCriticalCloud.
the class AncientDataMotionStrategy method migrateVolumeToPool.
protected Answer migrateVolumeToPool(final DataObject srcData, final DataObject destData) {
final String value = configDao.getValue(Config.MigrateWait.key());
final int waitInterval = NumbersUtil.parseInt(value, Integer.parseInt(Config.MigrateWait.getDefaultValue()));
final VolumeInfo volume = (VolumeInfo) srcData;
final StoragePool destPool = (StoragePool) dataStoreMgr.getDataStore(destData.getDataStore().getId(), DataStoreRole.Primary);
final MigrateVolumeCommand command = new MigrateVolumeCommand(volume.getId(), volume.getPath(), destPool, volume.getAttachedVmName(), volume.getVolumeType(), waitInterval);
final EndPoint ep = selector.select(srcData, StorageAction.MIGRATEVOLUME);
Answer answer = null;
if (ep == null) {
final String errMsg = "No remote endpoint to send command, check if host or ssvm is down?";
s_logger.error(errMsg);
answer = new Answer(command, false, errMsg);
} else {
answer = ep.sendMessage(command);
}
if (answer == null || !answer.getResult()) {
throw new CloudRuntimeException("Failed to migrate volume " + volume + " to storage pool " + destPool);
} else {
// Update the volume details after migration.
final VolumeVO volumeVo = volDao.findById(volume.getId());
final Long oldPoolId = volume.getPoolId();
volumeVo.setPath(((MigrateVolumeAnswer) answer).getVolumePath());
final String chainInfo = ((MigrateVolumeAnswer) answer).getVolumeChainInfo();
if (chainInfo != null) {
volumeVo.setChainInfo(chainInfo);
}
volumeVo.setPodId(destPool.getPodId());
volumeVo.setPoolId(destPool.getId());
volumeVo.setLastPoolId(oldPoolId);
// For SMB, pool credentials are also stored in the uri query string. We trim the query string
// part here to make sure the credentials do not get stored in the db unencrypted.
String folder = destPool.getPath();
if (destPool.getPoolType() == StoragePoolType.SMB && folder != null && folder.contains("?")) {
folder = folder.substring(0, folder.indexOf("?"));
}
volumeVo.setFolder(folder);
volDao.update(volume.getId(), volumeVo);
}
return answer;
}
use of com.cloud.legacymodel.communication.command.MigrateVolumeCommand in project cosmic by MissionCriticalCloud.
the class XenServer610WrapperTest method testXenServer610MigrateVolumeCommandWrapper.
@Test
public void testXenServer610MigrateVolumeCommandWrapper() {
final String uuid = "206b21a7-c6ec-40e2-b5e2-f861b9612f04";
final Connection conn = Mockito.mock(Connection.class);
final SR destinationPool = Mockito.mock(SR.class);
final VDI srcVolume = Mockito.mock(VDI.class);
final Task task = Mockito.mock(Task.class);
final long volumeId = 1l;
final String volumePath = "206b21a7-c6ec-40e2-b5e2-f861b9612f04";
final StoragePool pool = Mockito.mock(StoragePool.class);
final int timeout = 120;
final Map<String, String> other = new HashMap<>();
other.put("live", "true");
final MigrateVolumeCommand createStorageCommand = new MigrateVolumeCommand(volumeId, volumePath, pool, timeout);
final CitrixRequestWrapper wrapper = CitrixRequestWrapper.getInstance();
assertNotNull(wrapper);
when(xenServer610Resource.getConnection()).thenReturn(conn);
when(pool.getUuid()).thenReturn(uuid);
when(xenServer610Resource.getStorageRepository(conn, uuid)).thenReturn(destinationPool);
when(xenServer610Resource.getVDIbyUuid(conn, volumePath)).thenReturn(srcVolume);
try {
when(srcVolume.poolMigrateAsync(conn, destinationPool, other)).thenReturn(task);
} catch (final BadServerResponse e) {
fail(e.getMessage());
} catch (final XenAPIException e) {
fail(e.getMessage());
} catch (final XmlRpcException e) {
fail(e.getMessage());
}
when(xenServer610Resource.getMigrateWait()).thenReturn(120);
final Answer answer = wrapper.execute(createStorageCommand, xenServer610Resource);
verify(xenServer610Resource, times(1)).getConnection();
// try {
// verify(xenServer610Resource, times(1)).waitForTask(conn, task, 1000, timeout);
// verify(xenServer610Resource, times(1)).checkForSuccess(conn, task);
// } catch (final XenAPIException e) {
// fail(e.getMessage());
// } catch (final XmlRpcException e) {
// fail(e.getMessage());
// } catch (final TimeoutException e) {
// fail(e.getMessage());
// }
assertFalse(answer.getResult());
}
Aggregations