diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java index b972628409d..4a7ef535038 100644 --- a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java +++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java @@ -580,8 +580,8 @@ public class TemplateServiceImpl implements TemplateService { TemplateOpContext context = new TemplateOpContext(null, (TemplateObject) templateOnStore, future); - AsyncCallbackDispatcher caller = AsyncCallbackDispatcher.create(this); - caller.setCallback(caller.getTarget().copyTemplateCallBack(null, null)).setContext(context); + AsyncCallbackDispatcher caller = AsyncCallbackDispatcher.create(this); + caller.setCallback(caller.getTarget().copyTemplateCrossZoneCallBack(null, null)).setContext(context); destStore.getDriver().createAsync(destStore, templateOnStore, caller); return future; } @@ -652,6 +652,28 @@ public class TemplateServiceImpl implements TemplateService { return null; } + protected Void copyTemplateCrossZoneCallBack(AsyncCallbackDispatcher callback, TemplateOpContext context) { + TemplateInfo destTemplate = context.getTemplate(); + CreateCmdResult result = callback.getResult(); + AsyncCallFuture 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 cross zones callback", e); + res.setResult(e.toString()); + future.complete(res); + } + + return null; + } + @Override public void addSystemVMTemplatesToSecondary(DataStore store) { long storeId = store.getId(); diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java index 18a69ca092e..2d984cf51ba 100755 --- a/server/src/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/com/cloud/template/TemplateManagerImpl.java @@ -637,9 +637,6 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager, createEventType = EventTypes.EVENT_TEMPLATE_CREATE; } - Transaction txn = Transaction.currentTxn(); - txn.start(); - TemplateInfo srcTemplate = this._tmplFactory.getTemplate(template.getId(), srcSecStore); // Copy will just find one eligible image store for the destination zone // and copy template there, not propagate to all image stores