You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ed...@apache.org on 2013/06/15 02:36:14 UTC
git commit: updated refs/heads/object_store to 619ec12
Updated Branches:
refs/heads/object_store c2da4eac8 -> 619ec12f6
CLOUDSTACK-2972: due to change on master, using name instead of uuid to find vm name, so break object_store branch
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/619ec12f
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/619ec12f
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/619ec12f
Branch: refs/heads/object_store
Commit: 619ec12f61e65ad1f83d1c9b4951a8f8797b54dc
Parents: c2da4ea
Author: Edison Su <su...@gmail.com>
Authored: Fri Jun 14 17:35:53 2013 -0700
Committer: Edison Su <su...@gmail.com>
Committed: Fri Jun 14 17:35:53 2013 -0700
----------------------------------------------------------------------
.../kvm/storage/KVMStorageProcessor.java | 421 ++++++++-----------
1 file changed, 179 insertions(+), 242 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/619ec12f/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
index f0f916a..6e71492 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
@@ -88,39 +88,35 @@ public class KVMStorageProcessor implements StorageProcessor {
private String _createTmplPath;
private String _manageSnapshotPath;
private int _cmdsTimeout;
+
public KVMStorageProcessor(KVMStoragePoolManager storagePoolMgr, LibvirtComputingResource resource) {
this.storagePoolMgr = storagePoolMgr;
this.resource = resource;
}
-
+
protected String getDefaultStorageScriptsDir() {
return "scripts/storage/qcow2";
}
-
- public boolean configure(String name, Map<String, Object> params)
- throws ConfigurationException {
+
+ public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
storageLayer = new JavaStorageLayer();
storageLayer.configure("StorageLayer", params);
-
+
String storageScriptsDir = (String) params.get("storage.scripts.dir");
if (storageScriptsDir == null) {
storageScriptsDir = getDefaultStorageScriptsDir();
}
-
- _createTmplPath = Script
- .findScript(storageScriptsDir, "createtmplt.sh");
+
+ _createTmplPath = Script.findScript(storageScriptsDir, "createtmplt.sh");
if (_createTmplPath == null) {
- throw new ConfigurationException(
- "Unable to find the createtmplt.sh");
+ throw new ConfigurationException("Unable to find the createtmplt.sh");
}
-
- _manageSnapshotPath = Script.findScript(storageScriptsDir,
- "managesnapshot.sh");
+
+ _manageSnapshotPath = Script.findScript(storageScriptsDir, "managesnapshot.sh");
if (_manageSnapshotPath == null) {
- throw new ConfigurationException(
- "Unable to find the managesnapshot.sh");
+ throw new ConfigurationException("Unable to find the managesnapshot.sh");
}
-
+
String value = (String) params.get("cmds.timeout");
_cmdsTimeout = NumbersUtil.parseInt(value, 7200) * 1000;
return true;
@@ -128,18 +124,18 @@ public class KVMStorageProcessor implements StorageProcessor {
@Override
public Answer copyTemplateToPrimaryStorage(CopyCommand cmd) {
- DataTO srcData = cmd.getSrcTO();
- DataTO destData = cmd.getDestTO();
- TemplateObjectTO template = (TemplateObjectTO)srcData;
+ DataTO srcData = cmd.getSrcTO();
+ DataTO destData = cmd.getDestTO();
+ TemplateObjectTO template = (TemplateObjectTO) srcData;
DataStoreTO imageStore = template.getDataStore();
- TemplateObjectTO volume = (TemplateObjectTO)destData;
- PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)volume.getDataStore();
-
+ TemplateObjectTO volume = (TemplateObjectTO) destData;
+ PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO) volume.getDataStore();
+
if (!(imageStore instanceof NfsTO)) {
return new CopyCmdAnswer("unsupported protocol");
}
-
- NfsTO nfsImageStore = (NfsTO)imageStore;
+
+ NfsTO nfsImageStore = (NfsTO) imageStore;
String tmplturl = nfsImageStore.getUrl() + File.separator + template.getPath();
int index = tmplturl.lastIndexOf("/");
String mountpoint = tmplturl.substring(0, index);
@@ -158,9 +154,8 @@ public class KVMStorageProcessor implements StorageProcessor {
secondaryPool.refresh();
List<KVMPhysicalDisk> disks = secondaryPool.listPhysicalDisks();
if (disks == null || disks.isEmpty()) {
- return new PrimaryStorageDownloadAnswer(
- "Failed to get volumes from pool: "
- + secondaryPool.getUuid());
+ return new PrimaryStorageDownloadAnswer("Failed to get volumes from pool: "
+ + secondaryPool.getUuid());
}
for (KVMPhysicalDisk disk : disks) {
if (disk.getName().endsWith("qcow2")) {
@@ -169,21 +164,19 @@ public class KVMStorageProcessor implements StorageProcessor {
}
}
if (tmplVol == null) {
- return new PrimaryStorageDownloadAnswer(
- "Failed to get template from pool: "
- + secondaryPool.getUuid());
+ return new PrimaryStorageDownloadAnswer("Failed to get template from pool: "
+ + secondaryPool.getUuid());
}
} else {
tmplVol = secondaryPool.getPhysicalDisk(tmpltname);
}
/* Copy volume to primary storage */
- KVMStoragePool primaryPool = storagePoolMgr.getStoragePool(
- primaryStore.getPoolType(),
+ KVMStoragePool primaryPool = storagePoolMgr.getStoragePool(primaryStore.getPoolType(),
primaryStore.getUuid());
- KVMPhysicalDisk primaryVol = storagePoolMgr.copyPhysicalDisk(
- tmplVol, UUID.randomUUID().toString(), primaryPool);
+ KVMPhysicalDisk primaryVol = storagePoolMgr.copyPhysicalDisk(tmplVol, UUID.randomUUID().toString(),
+ primaryPool);
TemplateObjectTO newTemplate = new TemplateObjectTO();
newTemplate.setPath(primaryVol.getName());
@@ -197,7 +190,7 @@ public class KVMStorageProcessor implements StorageProcessor {
}
}
}
-
+
// this is much like PrimaryStorageDownloadCommand, but keeping it separate
private KVMPhysicalDisk templateToPrimaryDownload(String templateUrl, KVMStoragePool primaryPool) {
int index = templateUrl.lastIndexOf("/");
@@ -235,10 +228,11 @@ public class KVMStorageProcessor implements StorageProcessor {
/* Copy volume to primary storage */
- KVMPhysicalDisk primaryVol = storagePoolMgr.copyPhysicalDisk(templateVol, UUID.randomUUID().toString(), primaryPool);
+ KVMPhysicalDisk primaryVol = storagePoolMgr.copyPhysicalDisk(templateVol, UUID.randomUUID().toString(),
+ primaryPool);
return primaryVol;
} catch (CloudRuntimeException e) {
- s_logger.error("Failed to download template to primary storage",e);
+ s_logger.error("Failed to download template to primary storage", e);
return null;
} finally {
if (secondaryPool != null) {
@@ -249,38 +243,35 @@ public class KVMStorageProcessor implements StorageProcessor {
@Override
public Answer cloneVolumeFromBaseTemplate(CopyCommand cmd) {
- DataTO srcData = cmd.getSrcTO();
- DataTO destData = cmd.getDestTO();
- TemplateObjectTO template = (TemplateObjectTO)srcData;
+ DataTO srcData = cmd.getSrcTO();
+ DataTO destData = cmd.getDestTO();
+ TemplateObjectTO template = (TemplateObjectTO) srcData;
DataStoreTO imageStore = template.getDataStore();
- VolumeObjectTO volume = (VolumeObjectTO)destData;
- PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)volume.getDataStore();
+ VolumeObjectTO volume = (VolumeObjectTO) destData;
+ PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO) volume.getDataStore();
KVMPhysicalDisk BaseVol = null;
KVMStoragePool primaryPool = null;
KVMPhysicalDisk vol = null;
-
+
try {
- primaryPool = storagePoolMgr.getStoragePool(primaryStore.getPoolType(),
- primaryStore.getUuid());
+ primaryPool = storagePoolMgr.getStoragePool(primaryStore.getPoolType(), primaryStore.getUuid());
String templatePath = template.getPath();
-
- if(primaryPool.getType() == StoragePoolType.CLVM) {
+
+ if (primaryPool.getType() == StoragePoolType.CLVM) {
vol = templateToPrimaryDownload(templatePath, primaryPool);
} else {
BaseVol = primaryPool.getPhysicalDisk(templatePath);
- vol = storagePoolMgr.createDiskFromTemplate(BaseVol, UUID
- .randomUUID().toString(), primaryPool);
+ vol = storagePoolMgr.createDiskFromTemplate(BaseVol, UUID.randomUUID().toString(), primaryPool);
}
if (vol == null) {
- return new CopyCmdAnswer(
- " Can't create storage volume on storage pool");
+ return new CopyCmdAnswer(" Can't create storage volume on storage pool");
}
VolumeObjectTO newVol = new VolumeObjectTO();
newVol.setPath(vol.getName());
newVol.setSize(vol.getSize());
-
+
return new CopyCmdAnswer(newVol);
} catch (CloudRuntimeException e) {
s_logger.debug("Failed to create volume: " + e.toString());
@@ -301,45 +292,39 @@ public class KVMStorageProcessor implements StorageProcessor {
@Override
public Answer createTemplateFromVolume(CopyCommand cmd) {
- DataTO srcData = cmd.getSrcTO();
- DataTO destData = cmd.getDestTO();
- int wait = cmd.getWait();
- TemplateObjectTO template = (TemplateObjectTO)destData;
+ DataTO srcData = cmd.getSrcTO();
+ DataTO destData = cmd.getDestTO();
+ int wait = cmd.getWait();
+ TemplateObjectTO template = (TemplateObjectTO) destData;
DataStoreTO imageStore = template.getDataStore();
- VolumeObjectTO volume = (VolumeObjectTO)srcData;
- PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)volume.getDataStore();
-
+ VolumeObjectTO volume = (VolumeObjectTO) srcData;
+ PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO) volume.getDataStore();
+
if (!(imageStore instanceof NfsTO)) {
return new CopyCmdAnswer("unsupported protocol");
}
- NfsTO nfsImageStore = (NfsTO)imageStore;
+ NfsTO nfsImageStore = (NfsTO) imageStore;
KVMStoragePool secondaryStorage = null;
KVMStoragePool primary = null;
try {
String templateFolder = template.getPath();
- secondaryStorage = storagePoolMgr.getStoragePoolByURI(
- nfsImageStore.getUrl());
+ secondaryStorage = storagePoolMgr.getStoragePoolByURI(nfsImageStore.getUrl());
try {
- primary = storagePoolMgr.getStoragePool(
- primaryStore.getPoolType(),
- primaryStore.getUuid());
+ primary = storagePoolMgr.getStoragePool(primaryStore.getPoolType(), primaryStore.getUuid());
} catch (CloudRuntimeException e) {
if (e.getMessage().contains("not found")) {
- primary = storagePoolMgr.createStoragePool(primaryStore.getUuid(),
- primaryStore.getHost(), primaryStore.getPort(),
- primaryStore.getPath(), null,
- primaryStore.getPoolType());
+ primary = storagePoolMgr.createStoragePool(primaryStore.getUuid(), primaryStore.getHost(),
+ primaryStore.getPort(), primaryStore.getPath(), null, primaryStore.getPoolType());
} else {
return new CopyCmdAnswer(e.getMessage());
}
}
KVMPhysicalDisk disk = primary.getPhysicalDisk(volume.getPath());
- String tmpltPath = secondaryStorage.getLocalPath() + File.separator
- + templateFolder;
+ String tmpltPath = secondaryStorage.getLocalPath() + File.separator + templateFolder;
this.storageLayer.mkdirs(tmpltPath);
String templateName = UUID.randomUUID().toString();
@@ -359,10 +344,7 @@ public class KVMStorageProcessor implements StorageProcessor {
s_logger.debug("Converting RBD disk " + disk.getPath() + " into template " + templateName);
QemuImgFile srcFile = new QemuImgFile(KVMPhysicalDisk.RBDStringBuilder(primary.getSourceHost(),
- primary.getSourcePort(),
- primary.getAuthUserName(),
- primary.getAuthSecret(),
- disk.getPath()));
+ primary.getSourcePort(), primary.getAuthUserName(), primary.getAuthSecret(), disk.getPath()));
srcFile.setFormat(PhysicalDiskFormat.RAW);
QemuImgFile destFile = new QemuImgFile(tmpltPath + "/" + templateName + ".qcow2");
@@ -372,8 +354,8 @@ public class KVMStorageProcessor implements StorageProcessor {
try {
q.convert(srcFile, destFile);
} catch (QemuImgException e) {
- s_logger.error("Failed to create new template while converting "
- + srcFile.getFileName() + " to " + destFile.getFileName() + " the error was: " + e.getMessage());
+ s_logger.error("Failed to create new template while converting " + srcFile.getFileName() + " to "
+ + destFile.getFileName() + " the error was: " + e.getMessage());
}
File templateProp = new File(tmpltPath + "/template.properties");
@@ -399,8 +381,7 @@ public class KVMStorageProcessor implements StorageProcessor {
qcow2Processor.configure("QCOW2 Processor", params);
- FormatInfo info = qcow2Processor.process(tmpltPath, null,
- templateName);
+ FormatInfo info = qcow2Processor.process(tmpltPath, null, templateName);
TemplateLocation loc = new TemplateLocation(this.storageLayer, tmpltPath);
loc.create(1, true, templateName);
@@ -413,8 +394,8 @@ public class KVMStorageProcessor implements StorageProcessor {
newTemplate.setFormat(ImageFormat.QCOW2);
return new CopyCmdAnswer(newTemplate);
} catch (Exception e) {
- s_logger.debug("Failed to create template from volume: " + e.toString());
- return new CopyCmdAnswer(e.toString());
+ s_logger.debug("Failed to create template from volume: " + e.toString());
+ return new CopyCmdAnswer(e.toString());
} finally {
if (secondaryStorage != null) {
secondaryStorage.delete();
@@ -424,23 +405,23 @@ public class KVMStorageProcessor implements StorageProcessor {
@Override
public Answer backupSnasphot(CopyCommand cmd) {
- DataTO srcData = cmd.getSrcTO();
- DataTO destData = cmd.getDestTO();
- int wait = cmd.getWait();
- SnapshotObjectTO snapshot = (SnapshotObjectTO)srcData;
- PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)snapshot.getDataStore();
- SnapshotObjectTO destSnapshot = (SnapshotObjectTO)destData;
+ DataTO srcData = cmd.getSrcTO();
+ DataTO destData = cmd.getDestTO();
+ int wait = cmd.getWait();
+ SnapshotObjectTO snapshot = (SnapshotObjectTO) srcData;
+ PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO) snapshot.getDataStore();
+ SnapshotObjectTO destSnapshot = (SnapshotObjectTO) destData;
DataStoreTO imageStore = destData.getDataStore();
-
+
if (!(imageStore instanceof NfsTO)) {
return new CopyCmdAnswer("unsupported protocol");
}
- NfsTO nfsImageStore = (NfsTO)imageStore;
-
+ NfsTO nfsImageStore = (NfsTO) imageStore;
+
String secondaryStoragePoolUrl = nfsImageStore.getUrl();
- //NOTE: snapshot name is encoded in snapshot path
+ // NOTE: snapshot name is encoded in snapshot path
int index = snapshot.getPath().lastIndexOf("/");
-
+
String snapshotName = snapshot.getPath().substring(index + 1);
String volumePath = snapshot.getVolume().getPath();
String snapshotDestPath = null;
@@ -450,19 +431,16 @@ public class KVMStorageProcessor implements StorageProcessor {
try {
Connect conn = LibvirtConnection.getConnectionByVmName(vmName);
- secondaryStoragePool = storagePoolMgr.getStoragePoolByURI(
- secondaryStoragePoolUrl);
+ secondaryStoragePool = storagePoolMgr.getStoragePoolByURI(secondaryStoragePoolUrl);
String ssPmountPath = secondaryStoragePool.getLocalPath();
snapshotRelPath = destSnapshot.getPath();
snapshotDestPath = ssPmountPath + File.separator + snapshotRelPath;
- KVMStoragePool primaryPool = storagePoolMgr.getStoragePool(
- primaryStore.getPoolType(),
+ KVMStoragePool primaryPool = storagePoolMgr.getStoragePool(primaryStore.getPoolType(),
primaryStore.getUuid());
KVMPhysicalDisk snapshotDisk = primaryPool.getPhysicalDisk(volumePath);
- Script command = new Script(_manageSnapshotPath, _cmdsTimeout,
- s_logger);
+ Script command = new Script(_manageSnapshotPath, _cmdsTimeout, s_logger);
command.add("-b", snapshotDisk.getPath());
command.add("-n", snapshotName);
command.add("-p", snapshotDestPath);
@@ -485,11 +463,9 @@ public class KVMStorageProcessor implements StorageProcessor {
}
}
- KVMStoragePool primaryStorage = storagePoolMgr.getStoragePool(
- primaryStore.getPoolType(),
+ KVMStoragePool primaryStorage = storagePoolMgr.getStoragePool(primaryStore.getPoolType(),
primaryStore.getUuid());
- if (state == DomainInfo.DomainState.VIR_DOMAIN_RUNNING
- && !primaryStorage.isExternalSnapshot()) {
+ if (state == DomainInfo.DomainState.VIR_DOMAIN_RUNNING && !primaryStorage.isExternalSnapshot()) {
DomainSnapshot snap = vm.snapshotLookupByName(snapshotName);
snap.delete(0);
@@ -503,21 +479,18 @@ public class KVMStorageProcessor implements StorageProcessor {
vm.resume();
}
} else {
- command = new Script(_manageSnapshotPath, _cmdsTimeout,
- s_logger);
+ command = new Script(_manageSnapshotPath, _cmdsTimeout, s_logger);
command.add("-d", snapshotDisk.getPath());
command.add("-n", snapshotName);
result = command.execute();
if (result != null) {
s_logger.debug("Failed to backup snapshot: " + result);
- return new CopyCmdAnswer(
- "Failed to backup snapshot: " + result);
+ return new CopyCmdAnswer("Failed to backup snapshot: " + result);
}
}
-
+
SnapshotObjectTO newSnapshot = new SnapshotObjectTO();
- newSnapshot.setPath(snapshotRelPath
- + File.separator + snapshotName);
+ newSnapshot.setPath(snapshotRelPath + File.separator + snapshotName);
return new CopyCmdAnswer(newSnapshot);
} catch (LibvirtException e) {
s_logger.debug("Failed to backup snapshot: " + e.toString());
@@ -532,16 +505,14 @@ public class KVMStorageProcessor implements StorageProcessor {
}
}
- protected synchronized String attachOrDetachISO(Connect conn,
- String vmName, String isoPath, boolean isAttach)
- throws LibvirtException, URISyntaxException, InternalErrorException {
+ protected synchronized String attachOrDetachISO(Connect conn, String vmName, String isoPath, boolean isAttach)
+ throws LibvirtException, URISyntaxException, InternalErrorException {
String isoXml = null;
if (isoPath != null && isAttach) {
int index = isoPath.lastIndexOf("/");
String path = isoPath.substring(0, index);
String name = isoPath.substring(index + 1);
- KVMStoragePool secondaryPool = storagePoolMgr.getStoragePoolByURI(
- path);
+ KVMStoragePool secondaryPool = storagePoolMgr.getStoragePoolByURI(path);
KVMPhysicalDisk isoVol = secondaryPool.getPhysicalDisk(name);
isoPath = isoVol.getPath();
@@ -566,19 +537,19 @@ public class KVMStorageProcessor implements StorageProcessor {
}
return result;
}
+
@Override
public Answer attachIso(AttachCommand cmd) {
DiskTO disk = cmd.getDisk();
- TemplateObjectTO isoTO = (TemplateObjectTO)disk.getData();
+ TemplateObjectTO isoTO = (TemplateObjectTO) disk.getData();
DataStoreTO store = isoTO.getDataStore();
if (!(store instanceof NfsTO)) {
- return new AttachAnswer("unsupported protocol");
+ return new AttachAnswer("unsupported protocol");
}
- NfsTO nfsStore = (NfsTO)store;
+ NfsTO nfsStore = (NfsTO) store;
try {
Connect conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName());
- attachOrDetachISO(conn, cmd.getVmName(), nfsStore.getUrl() + File.separator + isoTO.getPath(),
- true);
+ attachOrDetachISO(conn, cmd.getVmName(), nfsStore.getUrl() + File.separator + isoTO.getPath(), true);
} catch (LibvirtException e) {
return new Answer(cmd, false, e.toString());
} catch (URISyntaxException e) {
@@ -589,14 +560,12 @@ public class KVMStorageProcessor implements StorageProcessor {
return new Answer(cmd);
}
-
- protected synchronized String attachOrDetachDevice(Connect conn,
- boolean attach, String vmName, String xml) throws LibvirtException,
- InternalErrorException {
+
+ protected synchronized String attachOrDetachDevice(Connect conn, boolean attach, String vmName, String xml)
+ throws LibvirtException, InternalErrorException {
Domain dm = null;
try {
- dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes((vmName
- .getBytes())));
+ dm = conn.domainLookupByName(vmName);
if (attach) {
s_logger.debug("Attaching device: " + xml);
@@ -607,11 +576,9 @@ public class KVMStorageProcessor implements StorageProcessor {
}
} catch (LibvirtException e) {
if (attach) {
- s_logger.warn("Failed to attach device to " + vmName + ": "
- + e.getMessage());
+ s_logger.warn("Failed to attach device to " + vmName + ": " + e.getMessage());
} else {
- s_logger.warn("Failed to detach device from " + vmName + ": "
- + e.getMessage());
+ s_logger.warn("Failed to detach device from " + vmName + ": " + e.getMessage());
}
throw e;
} finally {
@@ -626,17 +593,15 @@ public class KVMStorageProcessor implements StorageProcessor {
return null;
}
-
- protected synchronized String attachOrDetachDisk(Connect conn,
- boolean attach, String vmName, KVMPhysicalDisk attachingDisk,
- int devId) throws LibvirtException, InternalErrorException {
+
+ protected synchronized String attachOrDetachDisk(Connect conn, boolean attach, String vmName,
+ KVMPhysicalDisk attachingDisk, int devId) throws LibvirtException, InternalErrorException {
List<DiskDef> disks = null;
Domain dm = null;
DiskDef diskdef = null;
try {
if (!attach) {
- dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName
- .getBytes()));
+ dm = conn.domainLookupByName(vmName);
LibvirtDomainXMLParser parser = new LibvirtDomainXMLParser();
String xml = dm.getXMLDesc(0);
parser.parseDomainXML(xml);
@@ -644,25 +609,21 @@ public class KVMStorageProcessor implements StorageProcessor {
for (DiskDef disk : disks) {
String file = disk.getDiskPath();
- if (file != null
- && file.equalsIgnoreCase(attachingDisk.getPath())) {
+ if (file != null && file.equalsIgnoreCase(attachingDisk.getPath())) {
diskdef = disk;
break;
}
}
if (diskdef == null) {
- throw new InternalErrorException("disk: "
- + attachingDisk.getPath()
- + " is not attached before");
+ throw new InternalErrorException("disk: " + attachingDisk.getPath() + " is not attached before");
}
} else {
diskdef = new DiskDef();
if (attachingDisk.getFormat() == PhysicalDiskFormat.QCOW2) {
- diskdef.defFileBasedDisk(attachingDisk.getPath(), devId,
- DiskDef.diskBus.VIRTIO, DiskDef.diskFmtType.QCOW2);
+ diskdef.defFileBasedDisk(attachingDisk.getPath(), devId, DiskDef.diskBus.VIRTIO,
+ DiskDef.diskFmtType.QCOW2);
} else if (attachingDisk.getFormat() == PhysicalDiskFormat.RAW) {
- diskdef.defBlockBasedDisk(attachingDisk.getPath(), devId,
- DiskDef.diskBus.VIRTIO);
+ diskdef.defBlockBasedDisk(attachingDisk.getPath(), devId, DiskDef.diskBus.VIRTIO);
}
}
@@ -677,20 +638,17 @@ public class KVMStorageProcessor implements StorageProcessor {
@Override
public Answer attachVolume(AttachCommand cmd) {
- DiskTO disk = cmd.getDisk();
- VolumeObjectTO vol = (VolumeObjectTO)disk.getData();
- PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)vol.getDataStore();
+ DiskTO disk = cmd.getDisk();
+ VolumeObjectTO vol = (VolumeObjectTO) disk.getData();
+ PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO) vol.getDataStore();
String vmName = cmd.getVmName();
try {
Connect conn = LibvirtConnection.getConnectionByVmName(vmName);
- KVMStoragePool primary = storagePoolMgr.getStoragePool(
- primaryStore.getPoolType(),
- primaryStore.getUuid());
-
+ KVMStoragePool primary = storagePoolMgr.getStoragePool(primaryStore.getPoolType(), primaryStore.getUuid());
+
KVMPhysicalDisk phyDisk = primary.getPhysicalDisk(vol.getPath());
- attachOrDetachDisk(conn, true, vmName, phyDisk,
- disk.getDiskSeq().intValue());
-
+ attachOrDetachDisk(conn, true, vmName, phyDisk, disk.getDiskSeq().intValue());
+
return new AttachAnswer(disk);
} catch (LibvirtException e) {
s_logger.debug("Failed to attach volume: " + vol.getPath() + ", due to " + e.toString());
@@ -709,20 +667,17 @@ public class KVMStorageProcessor implements StorageProcessor {
@Override
public Answer dettachVolume(DettachCommand cmd) {
- DiskTO disk = cmd.getDisk();
- VolumeObjectTO vol = (VolumeObjectTO)disk.getData();
- PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)vol.getDataStore();
+ DiskTO disk = cmd.getDisk();
+ VolumeObjectTO vol = (VolumeObjectTO) disk.getData();
+ PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO) vol.getDataStore();
String vmName = cmd.getVmName();
try {
Connect conn = LibvirtConnection.getConnectionByVmName(vmName);
- KVMStoragePool primary = storagePoolMgr.getStoragePool(
- primaryStore.getPoolType(),
- primaryStore.getUuid());
-
+ KVMStoragePool primary = storagePoolMgr.getStoragePool(primaryStore.getPoolType(), primaryStore.getUuid());
+
KVMPhysicalDisk phyDisk = primary.getPhysicalDisk(vol.getPath());
- attachOrDetachDisk(conn, false, vmName, phyDisk,
- disk.getDiskSeq().intValue());
-
+ attachOrDetachDisk(conn, false, vmName, phyDisk, disk.getDiskSeq().intValue());
+
return new DettachAnswer(disk);
} catch (LibvirtException e) {
s_logger.debug("Failed to attach volume: " + vol.getPath() + ", due to " + e.toString());
@@ -735,39 +690,35 @@ public class KVMStorageProcessor implements StorageProcessor {
@Override
public Answer createVolume(CreateObjectCommand cmd) {
- VolumeObjectTO volume = (VolumeObjectTO)cmd.getData();
- PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)volume.getDataStore();
-
+ VolumeObjectTO volume = (VolumeObjectTO) cmd.getData();
+ PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO) volume.getDataStore();
+
KVMStoragePool primaryPool = null;
KVMPhysicalDisk vol = null;
long disksize;
try {
- primaryPool = storagePoolMgr.getStoragePool(primaryStore.getPoolType(),
- primaryStore.getUuid());
+ primaryPool = storagePoolMgr.getStoragePool(primaryStore.getPoolType(), primaryStore.getUuid());
disksize = volume.getSize();
- vol = primaryPool.createPhysicalDisk(UUID.randomUUID()
- .toString(), disksize);
+ vol = primaryPool.createPhysicalDisk(UUID.randomUUID().toString(), disksize);
VolumeObjectTO newVol = new VolumeObjectTO();
newVol.setPath(vol.getName());
-
+
return new CreateObjectAnswer(newVol);
} catch (Exception e) {
s_logger.debug("Failed to create volume: " + e.toString());
return new CreateObjectAnswer(e.toString());
}
}
-
- protected static MessageFormat SnapshotXML = new MessageFormat(
- " <domainsnapshot>" + " <name>{0}</name>" + " <domain>"
- + " <uuid>{1}</uuid>" + " </domain>"
- + " </domainsnapshot>");
+
+ protected static MessageFormat SnapshotXML = new MessageFormat(" <domainsnapshot>" + " <name>{0}</name>"
+ + " <domain>" + " <uuid>{1}</uuid>" + " </domain>" + " </domainsnapshot>");
@Override
public Answer createSnapshot(CreateObjectCommand cmd) {
- SnapshotObjectTO snapshotTO = (SnapshotObjectTO)cmd.getData();
- PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)snapshotTO.getDataStore();
+ SnapshotObjectTO snapshotTO = (SnapshotObjectTO) cmd.getData();
+ PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO) snapshotTO.getDataStore();
VolumeObjectTO volume = snapshotTO.getVolume();
String snapshotName = UUID.randomUUID().toString();
String vmName = volume.getVmName();
@@ -784,24 +735,21 @@ public class KVMStorageProcessor implements StorageProcessor {
}
}
- KVMStoragePool primaryPool = storagePoolMgr.getStoragePool(
- primaryStore.getPoolType(),
+ KVMStoragePool primaryPool = storagePoolMgr.getStoragePool(primaryStore.getPoolType(),
primaryStore.getUuid());
if (primaryPool.getType() == StoragePoolType.RBD) {
s_logger.debug("Snapshots are not supported on RBD volumes");
- return new CreateObjectAnswer(
- "Snapshots are not supported on RBD volumes");
+ return new CreateObjectAnswer("Snapshots are not supported on RBD volumes");
}
KVMPhysicalDisk disk = primaryPool.getPhysicalDisk(volume.getPath());
- if (state == DomainInfo.DomainState.VIR_DOMAIN_RUNNING
- && !primaryPool.isExternalSnapshot()) {
+ if (state == DomainInfo.DomainState.VIR_DOMAIN_RUNNING && !primaryPool.isExternalSnapshot()) {
String vmUuid = vm.getUUIDString();
Object[] args = new Object[] { snapshotName, vmUuid };
String snapshot = SnapshotXML.format(args);
s_logger.debug(snapshot);
-
+
vm.snapshotCreateXML(snapshot);
/*
* libvirt on RHEL6 doesn't handle resume event emitted from
@@ -815,40 +763,35 @@ public class KVMStorageProcessor implements StorageProcessor {
} else {
/* VM is not running, create a snapshot by ourself */
- final Script command = new Script(_manageSnapshotPath,
- this._cmdsTimeout, s_logger);
+ final Script command = new Script(_manageSnapshotPath, this._cmdsTimeout, s_logger);
command.add("-c", disk.getPath());
command.add("-n", snapshotName);
String result = command.execute();
if (result != null) {
s_logger.debug("Failed to manage snapshot: " + result);
- return new CreateObjectAnswer(
- "Failed to manage snapshot: " + result);
+ return new CreateObjectAnswer("Failed to manage snapshot: " + result);
}
}
-
+
SnapshotObjectTO newSnapshot = new SnapshotObjectTO();
- //NOTE: sort of hack, we'd better just put snapshtoName
+ // NOTE: sort of hack, we'd better just put snapshtoName
newSnapshot.setPath(disk.getPath() + File.separator + snapshotName);
return new CreateObjectAnswer(newSnapshot);
} catch (LibvirtException e) {
s_logger.debug("Failed to manage snapshot: " + e.toString());
- return new CreateObjectAnswer(
- "Failed to manage snapshot: " + e.toString());
+ return new CreateObjectAnswer("Failed to manage snapshot: " + e.toString());
}
}
@Override
public Answer deleteVolume(DeleteCommand cmd) {
- VolumeObjectTO vol = (VolumeObjectTO)cmd.getData();
- PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)vol.getDataStore();
+ VolumeObjectTO vol = (VolumeObjectTO) cmd.getData();
+ PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO) vol.getDataStore();
try {
- KVMStoragePool pool = storagePoolMgr.getStoragePool(
- primaryStore.getPoolType(),
- primaryStore.getUuid());
+ KVMStoragePool pool = storagePoolMgr.getStoragePool(primaryStore.getPoolType(), primaryStore.getUuid());
try {
pool.getPhysicalDisk(vol.getPath());
- } catch(Exception e) {
+ } catch (Exception e) {
s_logger.debug("can't find volume: " + vol.getPath() + ", return true");
return new Answer(null);
}
@@ -862,48 +805,42 @@ public class KVMStorageProcessor implements StorageProcessor {
@Override
public Answer createVolumeFromSnapshot(CopyCommand cmd) {
- try {
- DataTO srcData = cmd.getSrcTO();
- SnapshotObjectTO snapshot = (SnapshotObjectTO)srcData;
- DataTO destData = cmd.getDestTO();
- PrimaryDataStoreTO pool = (PrimaryDataStoreTO)destData.getDataStore();
- DataStoreTO imageStore = srcData.getDataStore();
-
-
- if (!(imageStore instanceof NfsTO)) {
- return new CopyCmdAnswer("unsupported protocol");
- }
-
- NfsTO nfsImageStore = (NfsTO)imageStore;
-
- String snapshotPath = snapshot.getPath();
- int index = snapshotPath.lastIndexOf("/");
- snapshotPath = snapshotPath.substring(0, index);
- String snapshotName = snapshotPath.substring(index + 1);
- KVMStoragePool secondaryPool = storagePoolMgr.getStoragePoolByURI(
- nfsImageStore.getUrl() + File.separator + snapshotPath);
- KVMPhysicalDisk snapshotDisk = secondaryPool.getPhysicalDisk(snapshotName);
-
- String primaryUuid = pool.getUuid();
- KVMStoragePool primaryPool = storagePoolMgr
- .getStoragePool(pool.getPoolType(),
- primaryUuid);
- String volUuid = UUID.randomUUID().toString();
- KVMPhysicalDisk disk = storagePoolMgr.copyPhysicalDisk(snapshotDisk,
- volUuid, primaryPool);
- VolumeObjectTO newVol = new VolumeObjectTO();
- newVol.setPath(disk.getName());
- newVol.setSize(disk.getVirtualSize());
- return new CopyCmdAnswer(
- newVol);
- } catch (CloudRuntimeException e) {
- return new CopyCmdAnswer(e.toString()
- );
- }
+ try {
+ DataTO srcData = cmd.getSrcTO();
+ SnapshotObjectTO snapshot = (SnapshotObjectTO) srcData;
+ DataTO destData = cmd.getDestTO();
+ PrimaryDataStoreTO pool = (PrimaryDataStoreTO) destData.getDataStore();
+ DataStoreTO imageStore = srcData.getDataStore();
+
+ if (!(imageStore instanceof NfsTO)) {
+ return new CopyCmdAnswer("unsupported protocol");
+ }
+
+ NfsTO nfsImageStore = (NfsTO) imageStore;
+
+ String snapshotPath = snapshot.getPath();
+ int index = snapshotPath.lastIndexOf("/");
+ snapshotPath = snapshotPath.substring(0, index);
+ String snapshotName = snapshotPath.substring(index + 1);
+ KVMStoragePool secondaryPool = storagePoolMgr.getStoragePoolByURI(nfsImageStore.getUrl() + File.separator
+ + snapshotPath);
+ KVMPhysicalDisk snapshotDisk = secondaryPool.getPhysicalDisk(snapshotName);
+
+ String primaryUuid = pool.getUuid();
+ KVMStoragePool primaryPool = storagePoolMgr.getStoragePool(pool.getPoolType(), primaryUuid);
+ String volUuid = UUID.randomUUID().toString();
+ KVMPhysicalDisk disk = storagePoolMgr.copyPhysicalDisk(snapshotDisk, volUuid, primaryPool);
+ VolumeObjectTO newVol = new VolumeObjectTO();
+ newVol.setPath(disk.getName());
+ newVol.setSize(disk.getVirtualSize());
+ return new CopyCmdAnswer(newVol);
+ } catch (CloudRuntimeException e) {
+ return new CopyCmdAnswer(e.toString());
+ }
}
- @Override
- public Answer deleteSnapshot(DeleteCommand cmd) {
- return new Answer(cmd);
- }
+ @Override
+ public Answer deleteSnapshot(DeleteCommand cmd) {
+ return new Answer(cmd);
+ }
}