From 583d5e9965719cca38a84591229d97c000babee4 Mon Sep 17 00:00:00 2001 From: edison Date: Tue, 23 Nov 2010 16:21:18 -0800 Subject: [PATCH] bug 7280: make sure secondary storage is mounted on agent host status 7280: resolved fixed --- .../computing/LibvirtComputingResource.java | 46 +++++++++++++++---- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java index 3157bd86c35..30e7ec3a0a2 100644 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java @@ -1537,16 +1537,28 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } protected CreateVolumeFromSnapshotAnswer execute(final CreateVolumeFromSnapshotCommand cmd) { - String snapshotPath = cmd.getSnapshotUuid(); - String primaryUuid = cmd.getPrimaryStoragePoolNameLabel(); - String primaryPath = _mountPoint + File.separator + primaryUuid; - String volUuid = UUID.randomUUID().toString(); - String volPath = primaryPath + File.separator + volUuid; - String result = Script.runSimpleBashScript("cp " + snapshotPath + " " + volPath); - if (result != null) { - return new CreateVolumeFromSnapshotAnswer(cmd, false, result, null); + StoragePool secondaryPool = null; + try { + /*Make sure secondary storage is mounted*/ + secondaryPool = getNfsSPbyURI(_conn, new URI(cmd.getSecondaryStoragePoolURL())); + + String snapshotPath = cmd.getSnapshotUuid(); + String primaryUuid = cmd.getPrimaryStoragePoolNameLabel(); + String primaryPath = _mountPoint + File.separator + primaryUuid; + String volUuid = UUID.randomUUID().toString(); + String volPath = primaryPath + File.separator + volUuid; + String result = executeBashScript("cp " + snapshotPath + " " + volPath); + if (result != null) { + return new CreateVolumeFromSnapshotAnswer(cmd, false, result, null); + } + return new CreateVolumeFromSnapshotAnswer(cmd, true, "", volPath); + } catch (LibvirtException e) { + return new CreateVolumeFromSnapshotAnswer(cmd, false, e.toString(), null); + } catch (URISyntaxException e) { + return new CreateVolumeFromSnapshotAnswer(cmd, false, e.toString(), null); + } finally { + } - return new CreateVolumeFromSnapshotAnswer(cmd, true, "", volPath); } protected CreatePrivateTemplateAnswer execute(final CreatePrivateTemplateFromSnapshotCommand cmd) { @@ -4245,4 +4257,20 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv return _storagePools.get(uuid); } } + + private void destroyStoragePool(StoragePool sp) { + if (sp != null) { + try { + String uuid = sp.getUUIDString(); + synchronized (getStoragePool(uuid)) { + sp.destroy(); + sp.undefine(); + sp.free(); + } + rmStoragePool(uuid); + } catch (LibvirtException e) { + s_logger.debug("Failed to destroy storage pool: " + e.toString()); + } + } + } }