mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CLOUDSTACK-2286: Volume created from snapshot state is in allocated state instead of Ready state which is letting Primary storage not to increment the resources.
This commit is contained in:
parent
e218a6dcfd
commit
da5c4619c3
@ -428,51 +428,52 @@ public class VolumeServiceImpl implements VolumeService {
|
|||||||
public AsyncCallFuture<VolumeApiResult> createVolumeFromSnapshot(
|
public AsyncCallFuture<VolumeApiResult> createVolumeFromSnapshot(
|
||||||
VolumeInfo volume, DataStore store, SnapshotInfo snapshot) {
|
VolumeInfo volume, DataStore store, SnapshotInfo snapshot) {
|
||||||
AsyncCallFuture<VolumeApiResult> future = new AsyncCallFuture<VolumeApiResult>();
|
AsyncCallFuture<VolumeApiResult> future = new AsyncCallFuture<VolumeApiResult>();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
DataObject volumeOnStore = store.create(volume);
|
DataObject volumeOnStore = store.create(volume);
|
||||||
volume.processEvent(Event.CreateOnlyRequested);
|
volume = this.volFactory.getVolume(volume.getId(), store);
|
||||||
CreateVolumeFromBaseImageContext<VolumeApiResult> context = new CreateVolumeFromBaseImageContext<VolumeApiResult>(null,
|
volume.processEvent(Event.CreateOnlyRequested);
|
||||||
(VolumeObject)volume, store, volumeOnStore, future);
|
CreateVolumeFromBaseImageContext<VolumeApiResult> context = new CreateVolumeFromBaseImageContext<VolumeApiResult>(null,
|
||||||
AsyncCallbackDispatcher<VolumeServiceImpl, CopyCommandResult> caller = AsyncCallbackDispatcher.create(this);
|
(VolumeObject)volume, store, volumeOnStore, future);
|
||||||
caller.setCallback(caller.getTarget().createVolumeFromSnapshotCallback(null, null))
|
AsyncCallbackDispatcher<VolumeServiceImpl, CopyCommandResult> caller = AsyncCallbackDispatcher.create(this);
|
||||||
.setContext(context);
|
caller.setCallback(caller.getTarget().createVolumeFromSnapshotCallback(null, null))
|
||||||
this.motionSrv.copyAsync(snapshot, volumeOnStore, caller);
|
.setContext(context);
|
||||||
|
this.motionSrv.copyAsync(snapshot, volumeOnStore, caller);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
s_logger.debug("create volume from snapshot failed", e);
|
s_logger.debug("create volume from snapshot failed", e);
|
||||||
VolumeApiResult result = new VolumeApiResult(volume);
|
VolumeApiResult result = new VolumeApiResult(volume);
|
||||||
result.setResult(e.toString());
|
result.setResult(e.toString());
|
||||||
future.complete(result);
|
future.complete(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
return future;
|
return future;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Void createVolumeFromSnapshotCallback(AsyncCallbackDispatcher<VolumeServiceImpl, CopyCommandResult> callback,
|
protected Void createVolumeFromSnapshotCallback(AsyncCallbackDispatcher<VolumeServiceImpl, CopyCommandResult> callback,
|
||||||
CreateVolumeFromBaseImageContext<VolumeApiResult> context) {
|
CreateVolumeFromBaseImageContext<VolumeApiResult> context) {
|
||||||
CopyCommandResult result = callback.getResult();
|
CopyCommandResult result = callback.getResult();
|
||||||
VolumeInfo volume = context.vo;
|
VolumeInfo volume = context.vo;
|
||||||
VolumeApiResult apiResult = new VolumeApiResult(volume);
|
VolumeApiResult apiResult = new VolumeApiResult(volume);
|
||||||
Event event = null;
|
Event event = null;
|
||||||
if (result.isFailed()) {
|
if (result.isFailed()) {
|
||||||
apiResult.setResult(result.getResult());
|
apiResult.setResult(result.getResult());
|
||||||
event = Event.OperationFailed;
|
event = Event.OperationFailed;
|
||||||
} else {
|
} else {
|
||||||
event = Event.OperationSuccessed;
|
event = Event.OperationSuccessed;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
volume.processEvent(event);
|
volume.processEvent(event);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
s_logger.debug("create volume from snapshot failed", e);
|
s_logger.debug("create volume from snapshot failed", e);
|
||||||
apiResult.setResult(e.toString());
|
apiResult.setResult(e.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
AsyncCallFuture<VolumeApiResult> future = context.future;
|
AsyncCallFuture<VolumeApiResult> future = context.future;
|
||||||
future.complete(apiResult);
|
future.complete(apiResult);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected VolumeVO duplicateVolumeOnAnotherStorage(Volume volume, StoragePool pool) {
|
protected VolumeVO duplicateVolumeOnAnotherStorage(Volume volume, StoragePool pool) {
|
||||||
Long lastPoolId = volume.getPoolId();
|
Long lastPoolId = volume.getPoolId();
|
||||||
VolumeVO newVol = new VolumeVO(volume);
|
VolumeVO newVol = new VolumeVO(volume);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user