Updated Branches: refs/heads/4.2 dc1ac3c45 -> c443115a4
CLOUDSTACK-3513: [Automation] Failed to copy iso and template between zones. Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c443115a Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c443115a Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c443115a Branch: refs/heads/4.2 Commit: c443115a487f2f9df311eb9fce55ffc360798b90 Parents: dc1ac3c Author: Min Chen <[email protected]> Authored: Wed Jul 17 17:24:03 2013 -0700 Committer: Min Chen <[email protected]> Committed: Wed Jul 17 17:24:23 2013 -0700 ---------------------------------------------------------------------- .../storage/image/TemplateServiceImpl.java | 26 ++++++++++++++++++-- .../com/cloud/template/TemplateManagerImpl.java | 3 --- 2 files changed, 24 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c443115a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java ---------------------------------------------------------------------- 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 b972628..4a7ef53 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<TemplateApiResult> context = new TemplateOpContext<TemplateApiResult>(null, (TemplateObject) templateOnStore, future); - AsyncCallbackDispatcher<TemplateServiceImpl, CopyCommandResult> caller = AsyncCallbackDispatcher.create(this); - caller.setCallback(caller.getTarget().copyTemplateCallBack(null, null)).setContext(context); + AsyncCallbackDispatcher<TemplateServiceImpl, CreateCmdResult> 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<TemplateServiceImpl, CreateCmdResult> callback, TemplateOpContext<TemplateApiResult> context) { + TemplateInfo destTemplate = context.getTemplate(); + CreateCmdResult result = callback.getResult(); + AsyncCallFuture<TemplateApiResult> 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(); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c443115a/server/src/com/cloud/template/TemplateManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java index 18a69ca..2d984cf 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
