@@ -428,51 +428,52 @@ public boolean destroyVolume(long volumeId)
428428 public AsyncCallFuture <VolumeApiResult > createVolumeFromSnapshot (
429429 VolumeInfo volume , DataStore store , SnapshotInfo snapshot ) {
430430 AsyncCallFuture <VolumeApiResult > future = new AsyncCallFuture <VolumeApiResult >();
431-
431+
432432 try {
433- DataObject volumeOnStore = store .create (volume );
434- volume .processEvent (Event .CreateOnlyRequested );
435- CreateVolumeFromBaseImageContext <VolumeApiResult > context = new CreateVolumeFromBaseImageContext <VolumeApiResult >(null ,
436- (VolumeObject )volume , store , volumeOnStore , future );
437- AsyncCallbackDispatcher <VolumeServiceImpl , CopyCommandResult > caller = AsyncCallbackDispatcher .create (this );
438- caller .setCallback (caller .getTarget ().createVolumeFromSnapshotCallback (null , null ))
439- .setContext (context );
440- this .motionSrv .copyAsync (snapshot , volumeOnStore , caller );
433+ DataObject volumeOnStore = store .create (volume );
434+ volume = this .volFactory .getVolume (volume .getId (), store );
435+ volume .processEvent (Event .CreateOnlyRequested );
436+ CreateVolumeFromBaseImageContext <VolumeApiResult > context = new CreateVolumeFromBaseImageContext <VolumeApiResult >(null ,
437+ (VolumeObject )volume , store , volumeOnStore , future );
438+ AsyncCallbackDispatcher <VolumeServiceImpl , CopyCommandResult > caller = AsyncCallbackDispatcher .create (this );
439+ caller .setCallback (caller .getTarget ().createVolumeFromSnapshotCallback (null , null ))
440+ .setContext (context );
441+ this .motionSrv .copyAsync (snapshot , volumeOnStore , caller );
441442 } catch (Exception e ) {
442- s_logger .debug ("create volume from snapshot failed" , e );
443- VolumeApiResult result = new VolumeApiResult (volume );
444- result .setResult (e .toString ());
445- future .complete (result );
443+ s_logger .debug ("create volume from snapshot failed" , e );
444+ VolumeApiResult result = new VolumeApiResult (volume );
445+ result .setResult (e .toString ());
446+ future .complete (result );
446447 }
447-
448+
448449 return future ;
449450 }
450-
451- protected Void createVolumeFromSnapshotCallback (AsyncCallbackDispatcher <VolumeServiceImpl , CopyCommandResult > callback ,
452- CreateVolumeFromBaseImageContext <VolumeApiResult > context ) {
453- CopyCommandResult result = callback .getResult ();
454- VolumeInfo volume = context .vo ;
455- VolumeApiResult apiResult = new VolumeApiResult (volume );
456- Event event = null ;
457- if (result .isFailed ()) {
458- apiResult .setResult (result .getResult ());
459- event = Event .OperationFailed ;
460- } else {
461- event = Event .OperationSuccessed ;
462- }
463-
464- try {
465- volume .processEvent (event );
466- } catch (Exception e ) {
467- s_logger .debug ("create volume from snapshot failed" , e );
468- apiResult .setResult (e .toString ());
469- }
470-
471- AsyncCallFuture <VolumeApiResult > future = context .future ;
472- future .complete (apiResult );
473- return null ;
451+
452+ protected Void createVolumeFromSnapshotCallback (AsyncCallbackDispatcher <VolumeServiceImpl , CopyCommandResult > callback ,
453+ CreateVolumeFromBaseImageContext <VolumeApiResult > context ) {
454+ CopyCommandResult result = callback .getResult ();
455+ VolumeInfo volume = context .vo ;
456+ VolumeApiResult apiResult = new VolumeApiResult (volume );
457+ Event event = null ;
458+ if (result .isFailed ()) {
459+ apiResult .setResult (result .getResult ());
460+ event = Event .OperationFailed ;
461+ } else {
462+ event = Event .OperationSuccessed ;
463+ }
464+
465+ try {
466+ volume .processEvent (event );
467+ } catch (Exception e ) {
468+ s_logger .debug ("create volume from snapshot failed" , e );
469+ apiResult .setResult (e .toString ());
470+ }
471+
472+ AsyncCallFuture <VolumeApiResult > future = context .future ;
473+ future .complete (apiResult );
474+ return null ;
474475 }
475-
476+
476477 protected VolumeVO duplicateVolumeOnAnotherStorage (Volume volume , StoragePool pool ) {
477478 Long lastPoolId = volume .getPoolId ();
478479 VolumeVO newVol = new VolumeVO (volume );
0 commit comments