protected Void syncSnapshotCallBack(AsyncCallbackDispatcher<SnapshotServiceImpl, CopyCommandResult> callback, CopySnapshotContext<CommandResult> context) { CopyCommandResult result = callback.getResult(); SnapshotInfo destSnapshot = context.destSnapshot; SnapshotResult res = new SnapshotResult(destSnapshot, null); AsyncCallFuture<SnapshotResult> future = context.future; try { if (result.isFailed()) { res.setResult(result.getResult()); // no change to existing snapshot_store_ref, will try to re-sync later if other call triggers this sync operation } else { // this will update install path properly, next time it will not sync anymore. destSnapshot.processEvent(Event.OperationSuccessed, result.getAnswer()); } future.complete(res); } catch (Exception e) { s_logger.debug("Failed to process sync snapshot callback", e); res.setResult(e.toString()); future.complete(res); } return null; }
@Override public void copyAsync(Map<VolumeInfo, DataStore> volumeMap, VirtualMachineTO vmTo, Host srcHost, Host destHost, AsyncCompletionCallback<CopyCommandResult> callback) { CopyCommandResult result = new CopyCommandResult(null, null); result.setResult("Unsupported operation requested for copying data."); callback.complete(result); } }
protected Void copyManagedTemplateCallback(AsyncCallbackDispatcher<VolumeServiceImpl, CopyCommandResult> callback, CreateBaseImageContext<VolumeApiResult> context) { CopyCommandResult result = callback.getResult(); VolumeApiResult res = new VolumeApiResult(context.getVolume()); res.setResult(result.getResult()); AsyncCallFuture<VolumeApiResult> future = context.getFuture(); DataObject templateOnPrimaryStoreObj = context.destObj; if (result.isSuccess()) { templateOnPrimaryStoreObj.processEvent(Event.OperationSuccessed, result.getAnswer()); } else { templateOnPrimaryStoreObj.processEvent(Event.OperationFailed); } future.complete(res); return null; }
protected Void createVolumeFromSnapshotCallback(AsyncCallbackDispatcher<VolumeServiceImpl, CopyCommandResult> callback, CreateVolumeFromBaseImageContext<VolumeApiResult> context) { CopyCommandResult result = callback.getResult(); VolumeInfo volume = (VolumeInfo)context.templateOnStore; SnapshotInfo snapshot = context.snapshot; VolumeApiResult apiResult = new VolumeApiResult(volume); Event event = null; if (result.isFailed()) { apiResult.setResult(result.getResult()); event = Event.OperationFailed; } else { event = Event.OperationSuccessed; } try { if (result.isSuccess()) { volume.processEvent(event, result.getAnswer()); } else { volume.processEvent(event); } _volumeDetailsDao.removeDetail(volume.getId(), SNAPSHOT_ID); } catch (Exception e) { s_logger.debug("create volume from snapshot failed", e); apiResult.setResult(e.toString()); } AsyncCallFuture<VolumeApiResult> future = context.future; future.complete(apiResult); return null; }
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; }
DataObject destObj = context.destObj; if (result.isFailed()) { try { objectInDataStoreMgr.update(destObj, Event.OperationFailed); res.setResult(result.getResult()); context.getParentCallback().complete(res); context.getParentCallback().complete(res); CreateCmdResult res = new CreateCmdResult(result.getPath(), null); context.getParentCallback().complete(res); return null;
templateObjectTO.setFormat(Storage.ImageFormat.RAW); CopyCmdAnswer answer = new CopyCmdAnswer(templateObjectTO); CopyCommandResult result = new CopyCommandResult("", answer); callback.complete(result); } else if (srcdata.getType() == DataObjectType.TEMPLATE && destData.getType() == DataObjectType.VOLUME) { answer = ep.sendMessage(cmd); CopyCommandResult result = new CopyCommandResult("", answer); callback.complete(result);
@DB protected Void copyBaseImageCallback(AsyncCallbackDispatcher<VolumeServiceImpl, CopyCommandResult> callback, CreateBaseImageContext<VolumeApiResult> context) { CopyCommandResult result = callback.getResult(); VolumeApiResult res = new VolumeApiResult(context.getVolume()); AsyncCallFuture<VolumeApiResult> future = context.getFuture(); DataObject templateOnPrimaryStoreObj = context.destObj; if (!result.isSuccess()) { templateOnPrimaryStoreObj.processEvent(Event.OperationFailed); res.setResult(result.getResult()); future.complete(res); return null; } templateOnPrimaryStoreObj.processEvent(Event.OperationSuccessed, result.getAnswer()); createVolumeFromBaseImageAsync(context.volume, templateOnPrimaryStoreObj, context.dataStore, future); return null; }
protected Void migrateVolumeCallBack(AsyncCallbackDispatcher<VolumeServiceImpl, CopyCommandResult> callback, MigrateVolumeContext<VolumeApiResult> context) { VolumeInfo srcVolume = context.srcVolume; CopyCommandResult result = callback.getResult(); AsyncCallFuture<VolumeApiResult> future = context.future; VolumeApiResult res = new VolumeApiResult(srcVolume); try { if (result.isFailed()) { res.setResult(result.getResult()); srcVolume.processEvent(Event.OperationFailed); future.complete(res); } else { srcVolume.processEvent(Event.OperationSuccessed); snapshotMgr.cleanupSnapshotsByVolume(srcVolume.getId()); future.complete(res); } } catch (Exception e) { s_logger.error("Failed to process migrate volume callback", e); res.setResult(e.toString()); future.complete(res); } return null; }
protected Void syncTemplateCallBack(AsyncCallbackDispatcher<TemplateServiceImpl, CopyCommandResult> callback, TemplateOpContext<TemplateApiResult> context) { TemplateInfo destTemplate = context.getTemplate(); CopyCommandResult result = callback.getResult(); AsyncCallFuture<TemplateApiResult> future = context.getFuture(); TemplateApiResult res = new TemplateApiResult(destTemplate); try { if (result.isFailed()) { res.setResult(result.getResult()); // no change to existing template_store_ref, will try to re-sync later if other call triggers this sync operation, like copy template } else { // this will update install path properly, next time it will not sync anymore. destTemplate.processEvent(Event.OperationSuccessed, result.getAnswer()); } future.complete(res); } catch (Exception e) { s_logger.debug("Failed to process sync template callback", e); res.setResult(e.toString()); future.complete(res); } return null; }
private void invokeCallback(String errMsg, AsyncCompletionCallback<CopyCommandResult> callback) { CopyCmdAnswer copyCmdAnswer = new CopyCmdAnswer(errMsg); CopyCommandResult result = new CopyCommandResult(null, copyCmdAnswer); result.setResult(errMsg); callback.complete(result); }
VolumeApiResult volResult = new VolumeApiResult((VolumeObject)vo); if (result.isSuccess()) { vo.processEvent(Event.OperationSuccessed, result.getAnswer()); } else { volResult.setResult(result.getResult()); Answer ans = result.getAnswer(); if (ans != null && ans instanceof CopyCmdAnswer && ans.getDetails().contains("request template reload")) { if (tmplOnPrimary != null) {
protected Void copyTemplateCallBack(AsyncCallbackDispatcher<TemplateServiceImpl, CopyCommandResult> callback, TemplateOpContext<TemplateApiResult> context) { TemplateInfo destTemplate = context.getTemplate(); CopyCommandResult result = callback.getResult(); AsyncCallFuture<TemplateApiResult> future = context.getFuture(); TemplateApiResult res = new TemplateApiResult(destTemplate); try { if (result.isFailed()) { res.setResult(result.getResult()); destTemplate.processEvent(Event.OperationFailed); } else { destTemplate.processEvent(Event.OperationSuccessed, result.getAnswer()); } future.complete(res); } catch (Exception e) { s_logger.debug("Failed to process copy template callback", e); res.setResult(e.toString()); future.complete(res); } return null; }
@Override public void copyAsync(Map<VolumeInfo, DataStore> volumeMap, VirtualMachineTO vmTo, Host srcHost, Host destHost, AsyncCompletionCallback<CopyCommandResult> callback) { Answer answer = null; String errMsg = null; try { VMInstanceVO instance = instanceDao.findById(vmTo.getId()); if (instance != null) { answer = migrateVmWithVolumes(instance, vmTo, srcHost, destHost, volumeMap); } else { throw new CloudRuntimeException("Unsupported operation requested for moving data."); } } catch (Exception e) { s_logger.error("copy failed", e); errMsg = e.toString(); } CopyCommandResult result = new CopyCommandResult(null, answer); result.setResult(errMsg); callback.complete(result); }
protected Void managedCopyBaseImageCallback(AsyncCallbackDispatcher<VolumeServiceImpl, CopyCommandResult> callback, ManagedCreateBaseImageContext<VolumeApiResult> context) { CopyCommandResult result = callback.getResult(); VolumeInfo volumeInfo = context.getVolumeInfo(); VolumeApiResult res = new VolumeApiResult(volumeInfo); if (result.isSuccess()) { // volumeInfo.processEvent(Event.OperationSuccessed, result.getAnswer()); VolumeVO volume = volDao.findById(volumeInfo.getId()); CopyCmdAnswer answer = (CopyCmdAnswer)result.getAnswer(); TemplateObjectTO templateObjectTo = (TemplateObjectTO)answer.getNewData(); volume.setPath(templateObjectTo.getPath()); if (templateObjectTo.getFormat() != null) { volume.setFormat(templateObjectTo.getFormat()); } volDao.update(volume.getId(), volume); } else { volumeInfo.processEvent(Event.DestroyRequested); res.setResult(result.getResult()); } AsyncCallFuture<VolumeApiResult> future = context.getFuture(); future.complete(res); return null; }
protected Void copyVolumeFromPrimaryToImageCallback(AsyncCallbackDispatcher<VolumeServiceImpl, CopyCommandResult> callback, CopyVolumeContext<VolumeApiResult> context) { VolumeInfo srcVolume = context.srcVolume; VolumeInfo destVolume = context.destVolume; CopyCommandResult result = callback.getResult(); AsyncCallFuture<VolumeApiResult> future = context.future; VolumeApiResult res = new VolumeApiResult(destVolume); try { if (result.isFailed()) { srcVolume.processEvent(Event.OperationFailed); // back to Ready state in Volume table destVolume.processEventOnly(Event.OperationFailed); res.setResult(result.getResult()); future.complete(res); } else { srcVolume.processEvent(Event.OperationSuccessed); // back to Ready state in Volume table destVolume.processEventOnly(Event.OperationSuccessed, result.getAnswer()); future.complete(res); } } catch (Exception e) { res.setResult(e.toString()); future.complete(res); } return null; }
@Override public void copyAsync(Map<VolumeInfo, DataStore> volumeMap, VirtualMachineTO vmTo, Host srcHost, Host destHost, AsyncCompletionCallback<CopyCommandResult> callback) { Answer answer = null; String errMsg = null; try { VMInstanceVO instance = instanceDao.findById(vmTo.getId()); if (instance != null) { if (srcHost.getClusterId().equals(destHost.getClusterId())) { answer = migrateVmWithVolumesWithinCluster(instance, vmTo, srcHost, destHost, volumeMap); } else { answer = migrateVmWithVolumesAcrossCluster(instance, vmTo, srcHost, destHost, volumeMap); } } else { throw new CloudRuntimeException("Unsupported operation requested for moving data."); } } catch (Exception e) { s_logger.error("copy failed", e); errMsg = e.toString(); } CopyCommandResult result = new CopyCommandResult(null, answer); result.setResult(errMsg); callback.complete(result); }
protected Void copyVolumeFromImageToPrimaryCallback(AsyncCallbackDispatcher<VolumeServiceImpl, CopyCommandResult> callback, CopyVolumeContext<VolumeApiResult> context) { VolumeInfo srcVolume = context.srcVolume; VolumeInfo destVolume = context.destVolume; CopyCommandResult result = callback.getResult(); AsyncCallFuture<VolumeApiResult> future = context.future; VolumeApiResult res = new VolumeApiResult(destVolume); try { if (result.isFailed()) { destVolume.processEvent(Event.OperationFailed); srcVolume.processEvent(Event.OperationFailed); res.setResult(result.getResult()); future.complete(res); return null; } srcVolume.processEvent(Event.OperationSuccessed); destVolume.processEvent(Event.OperationSuccessed, result.getAnswer()); srcVolume.getDataStore().delete(srcVolume); future.complete(res); } catch (Exception e) { res.setResult(e.toString()); future.complete(res); } return null; }
CopyCommandResult result = new CopyCommandResult(null, copyCmdAnswer); result.setResult(errMsg);