@@ -580,8 +580,8 @@ public AsyncCallFuture<TemplateApiResult> copyTemplate(TemplateInfo srcTemplate,
580580
581581 TemplateOpContext <TemplateApiResult > context = new TemplateOpContext <TemplateApiResult >(null ,
582582 (TemplateObject ) templateOnStore , future );
583- AsyncCallbackDispatcher <TemplateServiceImpl , CopyCommandResult > caller = AsyncCallbackDispatcher .create (this );
584- caller .setCallback (caller .getTarget ().copyTemplateCallBack (null , null )).setContext (context );
583+ AsyncCallbackDispatcher <TemplateServiceImpl , CreateCmdResult > caller = AsyncCallbackDispatcher .create (this );
584+ caller .setCallback (caller .getTarget ().copyTemplateCrossZoneCallBack (null , null )).setContext (context );
585585 destStore .getDriver ().createAsync (destStore , templateOnStore , caller );
586586 return future ;
587587 }
@@ -652,6 +652,28 @@ protected Void copyTemplateCallBack(AsyncCallbackDispatcher<TemplateServiceImpl,
652652 return null ;
653653 }
654654
655+ protected Void copyTemplateCrossZoneCallBack (AsyncCallbackDispatcher <TemplateServiceImpl , CreateCmdResult > callback , TemplateOpContext <TemplateApiResult > context ) {
656+ TemplateInfo destTemplate = context .getTemplate ();
657+ CreateCmdResult result = callback .getResult ();
658+ AsyncCallFuture <TemplateApiResult > future = context .getFuture ();
659+ TemplateApiResult res = new TemplateApiResult (destTemplate );
660+ try {
661+ if (result .isFailed ()) {
662+ res .setResult (result .getResult ());
663+ destTemplate .processEvent (Event .OperationFailed );
664+ } else {
665+ destTemplate .processEvent (Event .OperationSuccessed , result .getAnswer ());
666+ }
667+ future .complete (res );
668+ } catch (Exception e ) {
669+ s_logger .debug ("Failed to process copy template cross zones callback" , e );
670+ res .setResult (e .toString ());
671+ future .complete (res );
672+ }
673+
674+ return null ;
675+ }
676+
655677 @ Override
656678 public void addSystemVMTemplatesToSecondary (DataStore store ) {
657679 long storeId = store .getId ();
0 commit comments