You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by wi...@apache.org on 2015/04/30 17:32:28 UTC

[1/2] git commit: updated refs/heads/CLOUDSTACK-1302 to 10c1deb

Repository: cloudstack
Updated Branches:
  refs/heads/CLOUDSTACK-1302 [created] 10c1deb18


CLOUDSTACK-1302: Make sure the disk cache mode is passed to the KVM Agent

The StartCommand did not contain the proper cache mode due to VolumeJoinVO
not containing the cache_mode field.


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/1bc8073a
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/1bc8073a
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/1bc8073a

Branch: refs/heads/CLOUDSTACK-1302
Commit: 1bc8073a0d1eca1b3cdaa8799f285849024ae5cc
Parents: 1441ed1
Author: Wido den Hollander <wi...@widodh.nl>
Authored: Thu Apr 30 17:19:30 2015 +0200
Committer: Wido den Hollander <wi...@widodh.nl>
Committed: Thu Apr 30 17:22:25 2015 +0200

----------------------------------------------------------------------
 server/src/com/cloud/api/query/vo/VolumeJoinVO.java | 7 +++++++
 1 file changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1bc8073a/server/src/com/cloud/api/query/vo/VolumeJoinVO.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/vo/VolumeJoinVO.java b/server/src/com/cloud/api/query/vo/VolumeJoinVO.java
index 62384c1..d9c482c 100644
--- a/server/src/com/cloud/api/query/vo/VolumeJoinVO.java
+++ b/server/src/com/cloud/api/query/vo/VolumeJoinVO.java
@@ -201,6 +201,9 @@ public class VolumeJoinVO extends BaseViewVO implements ControlledViewEntity {
     @Column(name = "iops_write_rate")
     Long iopsWriteRate;
 
+    @Column(name = "cache_mode")
+    String cacheMode;
+
     @Column(name = "pool_id")
     private long poolId;
 
@@ -492,6 +495,10 @@ public class VolumeJoinVO extends BaseViewVO implements ControlledViewEntity {
         return iopsWriteRate;
     }
 
+    public String getCacheMode() {
+        return cacheMode;
+    }
+
     public long getPoolId() {
         return poolId;
     }


[2/2] git commit: updated refs/heads/CLOUDSTACK-1302 to 10c1deb

Posted by wi...@apache.org.
CLOUDSTACK-1302: Fix passing cacheMode to hypervisor

The cacheMode setting was not being set from the UI, but it was also
not passed to the Hypervisor when it was set manually in the database.


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/10c1deb1
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/10c1deb1
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/10c1deb1

Branch: refs/heads/CLOUDSTACK-1302
Commit: 10c1deb1892d3eb8b1d20a2c2cd7fc6c7a9e6902
Parents: 1bc8073
Author: Wido den Hollander <wi...@widodh.nl>
Authored: Thu Apr 30 16:10:18 2015 +0200
Committer: Wido den Hollander <wi...@widodh.nl>
Committed: Thu Apr 30 17:22:34 2015 +0200

----------------------------------------------------------------------
 .../org/apache/cloudstack/api/ApiConstants.java |  1 +
 .../admin/offering/CreateDiskOfferingCmd.java   |  7 +++
 .../hypervisor/kvm/resource/LibvirtVMDef.java   | 64 ++++++++++++++++++++
 .../kvm/storage/KVMStorageProcessor.java        | 14 +++--
 .../api/query/vo/ServiceOfferingJoinVO.java     |  7 +++
 5 files changed, 87 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/10c1deb1/api/src/org/apache/cloudstack/api/ApiConstants.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java
index 2b64258..0630d64 100644
--- a/api/src/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/org/apache/cloudstack/api/ApiConstants.java
@@ -69,6 +69,7 @@ public class ApiConstants {
     public static final String CUSTOM_JOB_ID = "customjobid";
     public static final String MIN_IOPS = "miniops";
     public static final String MAX_IOPS = "maxiops";
+    public static final String CACHE_MODE = "cachemode";
     public static final String HYPERVISOR_SNAPSHOT_RESERVE = "hypervisorsnapshotreserve";
     public static final String DESCRIPTION = "description";
     public static final String DESTINATION_ZONE_ID = "destzoneid";

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/10c1deb1/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java
index 747da05..87995cf 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java
@@ -98,6 +98,9 @@ public class CreateDiskOfferingCmd extends BaseCmd {
     @Parameter(name = ApiConstants.MAX_IOPS, type = CommandType.LONG, required = false, description = "max iops of the disk offering")
     private Long maxIops;
 
+    @Parameter(name = ApiConstants.CACHE_MODE, type = CommandType.STRING, required = false, description="the cache mode to use for this disk offering. none, writeback or writethrough")
+    private String cacheMode;
+
     @Parameter(name = ApiConstants.HYPERVISOR_SNAPSHOT_RESERVE,
             type = CommandType.INTEGER,
             required = false,
@@ -164,6 +167,10 @@ public class CreateDiskOfferingCmd extends BaseCmd {
         return storageType;
     }
 
+    public String getCacheMode() {
+        return cacheMode;
+    }
+
     public String getProvisioningType(){
         return provisioningType;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/10c1deb1/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
index 9be12c3..7fd64a4 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
@@ -554,6 +554,18 @@ public class LibvirtVMDef {
 
         }
 
+        public void defFileBasedDisk(String filePath, int devId, diskBus bus, diskFmtType diskFmtType, diskCacheMode diskCacheMode) {
+
+            _diskType = diskType.FILE;
+            _deviceType = deviceType.DISK;
+            _diskCacheMode = diskCacheMode;
+            _sourcePath = filePath;
+            _diskLabel = getDevLabel(devId, bus);
+            _diskFmtType = diskFmtType;
+            _bus = bus;
+
+        }
+
         public void defISODisk(String volPath) {
             _diskType = diskType.FILE;
             _deviceType = deviceType.CDROM;
@@ -584,6 +596,26 @@ public class LibvirtVMDef {
             _bus = bus;
         }
 
+        public void defBlockBasedDisk(String diskName, int devId, diskBus bus, diskCacheMode diskCacheMode) {
+            _diskType = diskType.BLOCK;
+            _deviceType = deviceType.DISK;
+            _diskFmtType = diskFmtType.RAW;
+            _diskCacheMode = diskCacheMode;
+            _sourcePath = diskName;
+            _diskLabel = getDevLabel(devId, bus);
+            _bus = bus;
+        }
+
+        public void defBlockBasedDisk(String diskName, String diskLabel, diskBus bus, diskCacheMode diskCacheMode) {
+            _diskType = diskType.BLOCK;
+            _deviceType = deviceType.DISK;
+            _diskFmtType = diskFmtType.RAW;
+            _diskCacheMode = diskCacheMode;
+            _sourcePath = diskName;
+            _diskLabel = diskLabel;
+            _bus = bus;
+        }
+
         public void defNetworkBasedDisk(String diskName, String sourceHost, int sourcePort, String authUserName, String authSecretUUID, int devId, diskBus bus,
                 diskProtocol protocol, diskFmtType diskFmtType) {
             _diskType = diskType.NETWORK;
@@ -600,6 +632,22 @@ public class LibvirtVMDef {
             _diskProtocol = protocol;
         }
 
+        public void defNetworkBasedDisk(String diskName, String sourceHost, int sourcePort, String authUserName, String authSecretUUID, int devId, diskBus bus,
+                diskProtocol protocol, diskFmtType diskFmtType, diskCacheMode diskCacheMode) {
+            _diskType = diskType.NETWORK;
+            _deviceType = deviceType.DISK;
+            _diskFmtType = diskFmtType;
+            _diskCacheMode = diskCacheMode;
+            _sourcePath = diskName;
+            _sourceHost = sourceHost;
+            _sourcePort = sourcePort;
+            _authUserName = authUserName;
+            _authSecretUUID = authSecretUUID;
+            _diskLabel = getDevLabel(devId, bus);
+            _bus = bus;
+            _diskProtocol = protocol;
+        }
+
         public void defNetworkBasedDisk(String diskName, String sourceHost, int sourcePort, String authUserName, String authSecretUUID, String diskLabel, diskBus bus,
                 diskProtocol protocol, diskFmtType diskFmtType) {
             _diskType = diskType.NETWORK;
@@ -616,6 +664,22 @@ public class LibvirtVMDef {
             _diskProtocol = protocol;
         }
 
+        public void defNetworkBasedDisk(String diskName, String sourceHost, int sourcePort, String authUserName, String authSecretUUID, String diskLabel, diskBus bus,
+                diskProtocol protocol, diskFmtType diskFmtType, diskCacheMode diskCacheMode) {
+            _diskType = diskType.NETWORK;
+            _deviceType = deviceType.DISK;
+            _diskFmtType = diskFmtType;
+            _diskCacheMode = diskCacheMode;
+            _sourcePath = diskName;
+            _sourceHost = sourceHost;
+            _sourcePort = sourcePort;
+            _authUserName = authUserName;
+            _authSecretUUID = authSecretUUID;
+            _diskLabel = diskLabel;
+            _bus = bus;
+            _diskProtocol = protocol;
+        }
+
         public void setReadonly() {
             _readonly = true;
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/10c1deb1/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 3b806e9..19be81d 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
@@ -940,12 +940,14 @@ public class KVMStorageProcessor implements StorageProcessor {
         return null;
     }
 
-    protected synchronized String attachOrDetachDisk(Connect conn, boolean attach, String vmName, KVMPhysicalDisk attachingDisk, int devId) throws LibvirtException,
+    protected synchronized String attachOrDetachDisk(Connect conn, boolean attach, String vmName, KVMPhysicalDisk attachingDisk, int devId, String diskCacheMode) throws LibvirtException,
         InternalErrorException {
         List<DiskDef> disks = null;
         Domain dm = null;
         DiskDef diskdef = null;
         KVMStoragePool attachingPool = attachingDisk.getPool();
+        DiskDef.diskCacheMode cacheMode = DiskDef.diskCacheMode.valueOf(diskCacheMode.toUpperCase());
+
         try {
             if (!attach) {
                 dm = conn.domainLookupByName(vmName);
@@ -988,7 +990,7 @@ public class KVMStorageProcessor implements StorageProcessor {
                         }
                     } else {
                         diskdef.defNetworkBasedDisk(attachingDisk.getPath(), attachingPool.getSourceHost(), attachingPool.getSourcePort(), attachingPool.getAuthUserName(),
-                                attachingPool.getUuid(), devId, DiskDef.diskBus.VIRTIO, diskProtocol.RBD, DiskDef.diskFmtType.RAW);
+                                attachingPool.getUuid(), devId, DiskDef.diskBus.VIRTIO, diskProtocol.RBD, DiskDef.diskFmtType.RAW, cacheMode);
                     }
                 } else if (attachingPool.getType() == StoragePoolType.Gluster) {
                     String mountpoint = attachingPool.getLocalPath();
@@ -997,9 +999,9 @@ public class KVMStorageProcessor implements StorageProcessor {
                     diskdef.defNetworkBasedDisk(glusterVolume + path.replace(mountpoint, ""), attachingPool.getSourceHost(), attachingPool.getSourcePort(), null,
                         null, devId, DiskDef.diskBus.VIRTIO, diskProtocol.GLUSTER, DiskDef.diskFmtType.QCOW2);
                 } else 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, cacheMode);
                 } else if (attachingDisk.getFormat() == PhysicalDiskFormat.RAW) {
-                    diskdef.defBlockBasedDisk(attachingDisk.getPath(), devId, DiskDef.diskBus.VIRTIO);
+                    diskdef.defBlockBasedDisk(attachingDisk.getPath(), devId, DiskDef.diskBus.VIRTIO, cacheMode);
                 }
             }
 
@@ -1025,7 +1027,7 @@ public class KVMStorageProcessor implements StorageProcessor {
 
             KVMPhysicalDisk phyDisk = storagePoolMgr.getPhysicalDisk(primaryStore.getPoolType(), primaryStore.getUuid(), vol.getPath());
 
-            attachOrDetachDisk(conn, true, vmName, phyDisk, disk.getDiskSeq().intValue());
+            attachOrDetachDisk(conn, true, vmName, phyDisk, disk.getDiskSeq().intValue(), vol.getCacheMode().toString());
 
             return new AttachAnswer(disk);
         } catch (LibvirtException e) {
@@ -1049,7 +1051,7 @@ public class KVMStorageProcessor implements StorageProcessor {
 
             KVMPhysicalDisk phyDisk = storagePoolMgr.getPhysicalDisk(primaryStore.getPoolType(), primaryStore.getUuid(), vol.getPath());
 
-            attachOrDetachDisk(conn, false, vmName, phyDisk, disk.getDiskSeq().intValue());
+            attachOrDetachDisk(conn, false, vmName, phyDisk, disk.getDiskSeq().intValue(), vol.getCacheMode().toString());
 
             storagePoolMgr.disconnectPhysicalDisk(primaryStore.getPoolType(), primaryStore.getUuid(), vol.getPath());
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/10c1deb1/server/src/com/cloud/api/query/vo/ServiceOfferingJoinVO.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/vo/ServiceOfferingJoinVO.java b/server/src/com/cloud/api/query/vo/ServiceOfferingJoinVO.java
index f16ba83..facb286 100644
--- a/server/src/com/cloud/api/query/vo/ServiceOfferingJoinVO.java
+++ b/server/src/com/cloud/api/query/vo/ServiceOfferingJoinVO.java
@@ -119,6 +119,9 @@ public class ServiceOfferingJoinVO extends BaseViewVO implements InternalIdentit
     @Column(name = "iops_write_rate")
     Long iopsWriteRate;
 
+    @Column(name = "cache_mode")
+    String cacheMode;
+
     @Column(name = GenericDao.CREATED_COLUMN)
     private Date created;
 
@@ -285,6 +288,10 @@ public class ServiceOfferingJoinVO extends BaseViewVO implements InternalIdentit
         return iopsWriteRate;
     }
 
+    public String getCacheMode() {
+        return cacheMode;
+    }
+
     public boolean isDynamic() {
         return cpu == null || speed == null || ramSize == null;
     }