use of com.cloud.storage.command.CommandResult in project cosmic by MissionCriticalCloud.
the class SnapshotServiceImpl method backupSnapshot.
@Override
public SnapshotInfo backupSnapshot(final SnapshotInfo snapshot) {
final SnapshotObject snapObj = (SnapshotObject) snapshot;
final AsyncCallFuture<SnapshotResult> future = new AsyncCallFuture<>();
final SnapshotResult result = new SnapshotResult(snapshot, null);
try {
snapObj.processEvent(Snapshot.Event.BackupToSecondary);
final DataStore imageStore = findSnapshotImageStore(snapshot);
if (imageStore == null) {
throw new CloudRuntimeException("can not find an image stores");
}
final SnapshotInfo snapshotOnImageStore = (SnapshotInfo) imageStore.create(snapshot);
snapshotOnImageStore.processEvent(Event.CreateOnlyRequested);
final CopySnapshotContext<CommandResult> context = new CopySnapshotContext<>(null, snapshot, snapshotOnImageStore, future);
final AsyncCallbackDispatcher<SnapshotServiceImpl, CopyCommandResult> caller = AsyncCallbackDispatcher.create(this);
caller.setCallback(caller.getTarget().copySnapshotAsyncCallback(null, null)).setContext(context);
motionSrv.copyAsync(snapshot, snapshotOnImageStore, caller);
} catch (final Exception e) {
s_logger.debug("Failed to copy snapshot", e);
result.setResult("Failed to copy snapshot:" + e.toString());
try {
snapObj.processEvent(Snapshot.Event.OperationFailed);
} catch (final NoTransitionException e1) {
s_logger.debug("Failed to change state: " + e1.toString());
}
future.complete(result);
}
try {
final SnapshotResult res = future.get();
if (res.isFailed()) {
throw new CloudRuntimeException(res.getResult());
}
final SnapshotInfo destSnapshot = res.getSnashot();
return destSnapshot;
} catch (final InterruptedException e) {
s_logger.debug("failed copy snapshot", e);
throw new CloudRuntimeException("Failed to copy snapshot", e);
} catch (final ExecutionException e) {
s_logger.debug("Failed to copy snapshot", e);
throw new CloudRuntimeException("Failed to copy snapshot", e);
}
}
use of com.cloud.storage.command.CommandResult in project cosmic by MissionCriticalCloud.
the class BaseImageStoreDriverImpl method deleteAsync.
@Override
public void deleteAsync(final DataStore dataStore, final DataObject data, final AsyncCompletionCallback<CommandResult> callback) {
final CommandResult result = new CommandResult();
try {
final DeleteCommand cmd = new DeleteCommand(data.getTO());
final EndPoint ep = _epSelector.select(data);
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(cmd, false, errMsg);
} else {
answer = ep.sendMessage(cmd);
}
if (answer != null && !answer.getResult()) {
result.setResult(answer.getDetails());
}
} catch (final Exception ex) {
s_logger.debug("Unable to destoy " + data.getType().toString() + ": " + data.getId(), ex);
result.setResult(ex.toString());
}
callback.complete(result);
}
use of com.cloud.storage.command.CommandResult in project cosmic by MissionCriticalCloud.
the class TemplateServiceImpl method deleteTemplateCallback.
public Void deleteTemplateCallback(final AsyncCallbackDispatcher<TemplateServiceImpl, CommandResult> callback, final TemplateOpContext<TemplateApiResult> context) {
final CommandResult result = callback.getResult();
final TemplateObject vo = context.getTemplate();
if (result.isSuccess()) {
vo.processEvent(Event.OperationSuccessed);
} else {
vo.processEvent(Event.OperationFailed);
}
final TemplateApiResult apiResult = new TemplateApiResult(vo);
apiResult.setResult(result.getResult());
apiResult.setSuccess(result.isSuccess());
context.future.complete(apiResult);
return null;
}
Aggregations