@Override public void revertSnapshot(SnapshotInfo snapshot, SnapshotInfo snapshotOnPrimaryStore, AsyncCompletionCallback<CommandResult> callback) { SnapshotObjectTO snapshotTO = (SnapshotObjectTO)snapshot.getTO(); RevertSnapshotCommand cmd = new RevertSnapshotCommand(snapshotTO); CommandResult result = new CommandResult(); try { EndPoint ep = epSelector.select(snapshotOnPrimaryStore); if ( ep == null ){ String errMsg = "No remote endpoint to send RevertSnapshotCommand, check if host or ssvm is down?"; s_logger.error(errMsg); result.setResult(errMsg); } else { Answer answer = ep.sendMessage(cmd); if (answer != null && !answer.getResult()) { result.setResult(answer.getDetails()); } } } catch (Exception ex) { s_logger.debug("Unable to revert snapshot " + snapshot.getId(), ex); result.setResult(ex.toString()); } callback.complete(result); }
@Override public void deleteAsync(DataStore dataStore, DataObject data, AsyncCompletionCallback<CommandResult> callback) { DeleteCommand cmd = new DeleteCommand(data.getTO()); CommandResult result = new CommandResult(); try { EndPoint ep = null; if (data.getType() == DataObjectType.VOLUME) { ep = epSelector.select(data, StorageAction.DELETEVOLUME); } else { ep = epSelector.select(data); } if (ep == null) { String errMsg = "No remote endpoint to send DeleteCommand, check if host or ssvm is down?"; s_logger.error(errMsg); result.setResult(errMsg); } else { Answer answer = ep.sendMessage(cmd); if (answer != null && !answer.getResult()) { result.setResult(answer.getDetails()); } } } catch (Exception ex) { s_logger.debug("Unable to destoy volume" + data.getId(), ex); result.setResult(ex.toString()); } callback.complete(result); }
protected Void migrateVmWithVolumesCallBack(AsyncCallbackDispatcher<VolumeServiceImpl, CopyCommandResult> callback, MigrateVmWithVolumesContext<CommandResult> context) { Map<VolumeInfo, DataStore> volumeToPool = context.volumeToPool; CopyCommandResult result = callback.getResult(); AsyncCallFuture<CommandResult> future = context.future; CommandResult res = new CommandResult(); try { if (result.isFailed()) { res.setResult(result.getResult()); for (Map.Entry<VolumeInfo, DataStore> entry : volumeToPool.entrySet()) { VolumeInfo volume = entry.getKey(); volume.processEvent(Event.OperationFailed); } future.complete(res); } else { for (Map.Entry<VolumeInfo, DataStore> entry : volumeToPool.entrySet()) { VolumeInfo volume = entry.getKey(); snapshotMgr.cleanupSnapshotsByVolume(volume.getId()); volume.processEvent(Event.OperationSuccessed); } future.complete(res); } } catch (Exception e) { s_logger.error("Failed to process copy volume callback", e); res.setResult(e.toString()); future.complete(res); } return null; }
if (!snapshotMgr.canOperateOnVolume(volume)) { s_logger.debug("Snapshots are being created on a volume. Volumes cannot be migrated now."); res.setResult("Snapshots are being created on a volume. Volumes cannot be migrated now."); future.complete(res); res.setResult(e.toString()); future.complete(res);
@Override public void deleteAsync(DataStore dataStore, DataObject data, AsyncCompletionCallback<CommandResult> callback) { CommandResult result = new CommandResult(); try { DeleteCommand cmd = new DeleteCommand(data.getTO()); EndPoint ep = _epSelector.select(data); Answer answer = null; if (ep == null) { String errMsg = "No remote endpoint to send command, check if host or ssvm is down?"; s_logger.error(errMsg); answer = new Answer(cmd, false, errMsg); } else { answer = ep.sendMessage(cmd); } if (answer != null && !answer.getResult()) { result.setResult(answer.getDetails()); } } catch (Exception ex) { s_logger.debug("Unable to destoy " + data.getType().toString() + ": " + data.getId(), ex); result.setResult(ex.toString()); } callback.complete(result); }
public Void deleteCallback(AsyncCallbackDispatcher<SamplePrimaryDataStoreDriverImpl, Answer> callback, AsyncRpcContext<CommandResult> context) { CommandResult result = new CommandResult(); Answer answer = callback.getResult(); if (!answer.getResult()) { result.setResult(answer.getDetails()); } context.getParentCallback().complete(result); return null; }
@Override public void deleteAsync(DataStore store, DataObject data, AsyncCompletionCallback<CommandResult> callback) { String errorMessage = null; if (data.getType() == DataObjectType.VOLUME) { VolumeInfo volumeInfo = (VolumeInfo) data; long storagePoolId = store.getId(); NexentaStorAppliance appliance = getNexentaStorAppliance(storagePoolId); StoragePoolVO storagePool = _storagePoolDao.findById(storagePoolId); // _storagePoolDao.update(stoagePoolId); } else { errorMessage = String.format( "Invalid DataObjectType(%s) passed to deleteAsync", data.getType()); } CommandResult result = new CommandResult(); result.setResult(errorMessage); callback.complete(result); }
@Override public void deleteAsync(DataStore dataStore, DataObject dataObject, AsyncCompletionCallback<CommandResult> callback) { String errMsg = null; try { if (dataObject.getType() == DataObjectType.VOLUME) { deleteVolume((VolumeInfo)dataObject, dataStore.getId()); } else if (dataObject.getType() == DataObjectType.SNAPSHOT) { deleteSnapshot((SnapshotInfo)dataObject, dataStore.getId()); } else if (dataObject.getType() == DataObjectType.TEMPLATE) { deleteTemplate((TemplateInfo)dataObject, dataStore.getId()); } else { errMsg = "Invalid DataObjectType (" + dataObject.getType() + ") passed to deleteAsync"; } } catch (Exception ex) { errMsg = ex.getMessage(); LOGGER.error(errMsg); } if (callback != null) { CommandResult result = new CommandResult(); result.setResult(errMsg); callback.complete(result); } }
@Override public void revertSnapshot(SnapshotInfo snapshot, SnapshotInfo snapshot2, AsyncCompletionCallback<CommandResult> callback) { VolumeInfo volumeInfo = snapshot.getBaseVolume(); VolumeVO volumeVO = volumeDao.findById(volumeInfo.getId()); if (volumeVO == null || volumeVO.getRemoved() != null) { String errMsg = "The volume that the snapshot belongs to no longer exists."; CommandResult commandResult = new CommandResult(); commandResult.setResult(errMsg); callback.complete(commandResult); return; } SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(volumeVO.getPoolId(), storagePoolDetailsDao); long sfVolumeId = Long.parseLong(volumeInfo.getFolder()); SnapshotDetailsVO snapshotDetails = snapshotDetailsDao.findDetail(snapshot.getId(), SolidFireUtil.SNAPSHOT_ID); long sfSnapshotId = Long.parseLong(snapshotDetails.getValue()); SolidFireUtil.rollBackVolumeToSnapshot(sfConnection, sfVolumeId, sfSnapshotId); SolidFireUtil.SolidFireVolume sfVolume = SolidFireUtil.getVolume(sfConnection, sfVolumeId); updateVolumeDetails(volumeVO.getId(), sfVolume.getTotalSize(), sfVolume.getScsiNaaDeviceId()); CommandResult commandResult = new CommandResult(); callback.complete(commandResult); }