You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mt...@apache.org on 2014/06/24 23:16:58 UTC

git commit: updated refs/heads/master to 4d6c682

Repository: cloudstack
Updated Branches:
  refs/heads/master cb5e8c591 -> 4d6c682f1


supporting nfs protocol and resize feature for managed storage for xenserver

resize feature refactored

Signed-off-by: Mike Tutkowski <mi...@solidfire.com>


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

Branch: refs/heads/master
Commit: 4d6c682f18d9bca50c145b55d8fa61ea1ab71755
Parents: cb5e8c5
Author: punith-cloudbyte <pu...@cloudbyte.com>
Authored: Mon Jun 16 18:53:18 2014 +0530
Committer: Mike Tutkowski <mi...@solidfire.com>
Committed: Tue Jun 24 15:16:45 2014 -0600

----------------------------------------------------------------------
 api/src/com/cloud/agent/api/to/DiskTO.java      |  2 +
 .../orchestration/VolumeOrchestrator.java       |  3 ++
 .../xenserver/resource/CitrixResourceBase.java  | 46 +++++++++++++++-----
 .../com/cloud/storage/VolumeApiServiceImpl.java |  2 +
 4 files changed, 43 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4d6c682f/api/src/com/cloud/agent/api/to/DiskTO.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/to/DiskTO.java b/api/src/com/cloud/agent/api/to/DiskTO.java
index 5901367..afab856 100644
--- a/api/src/com/cloud/agent/api/to/DiskTO.java
+++ b/api/src/com/cloud/agent/api/to/DiskTO.java
@@ -32,6 +32,8 @@ public class DiskTO {
     public static final String STORAGE_HOST = "storageHost";
     public static final String STORAGE_PORT = "storagePort";
     public static final String VOLUME_SIZE = "volumeSize";
+    public static final String MOUNT_POINT = "mountpoint";
+    public static final String PROTOCOL_TYPE = "protocoltype";
 
     private DataTO data;
     private Long diskSeq;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4d6c682f/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
index 050143c..ab0a76c 100644
--- a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
@@ -1050,6 +1050,9 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati
         details.put(DiskTO.STORAGE_PORT, String.valueOf(storagePool.getPort()));
         details.put(DiskTO.VOLUME_SIZE, String.valueOf(volumeInfo.getSize()));
         details.put(DiskTO.IQN, volumeInfo.get_iScsiName());
+        details.put(DiskTO.MOUNT_POINT, volumeInfo.get_iScsiName());
+        VolumeVO volume = _volumeDao.findById(volumeInfo.getId());
+        details.put(DiskTO.PROTOCOL_TYPE, (volume.getPoolType()!=null)?volume.getPoolType().toString():null);
 
         ChapInfo chapInfo = volService.getChapInfo(volumeInfo, dataStore);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4d6c682f/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
index af76760..397e665 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
@@ -1883,20 +1883,48 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
         String storageHost = details.get(DiskTO.STORAGE_HOST);
         String chapInitiatorUsername = details.get(DiskTO.CHAP_INITIATOR_USERNAME);
         String chapInitiatorSecret = details.get(DiskTO.CHAP_INITIATOR_SECRET);
+        String mountpoint = details.get(DiskTO.MOUNT_POINT);
+        String protocoltype=details.get(DiskTO.PROTOCOL_TYPE);
+
+        if(StoragePoolType.NetworkFilesystem.toString().equalsIgnoreCase(protocoltype)){
+        String poolid = storageHost+":"+mountpoint;
+        String namelable = mountpoint;
+        String volumedesc = storageHost+":"+mountpoint;
+
+        return getNfsSR(conn, poolid, namelable, storageHost, mountpoint, volumedesc);
+
+        }else{
 
         return getIscsiSR(conn, iScsiName, storageHost, iScsiName, chapInitiatorUsername, chapInitiatorSecret, true);
+        }
     }
 
     protected VDI prepareManagedStorage(Connection conn, Map<String, String> details, String path, String vdiNameLabel) throws Exception {
         SR sr = prepareManagedSr(conn, details);
 
         VDI vdi = getVDIbyUuid(conn, path, false);
+        Long volumeSize = Long.parseLong(details.get(DiskTO.VOLUME_SIZE));
 
         if (vdi == null) {
-            Long volumeSize = Long.parseLong(details.get(DiskTO.VOLUME_SIZE));
 
             vdi = createVdi(sr, vdiNameLabel, volumeSize);
-        }
+        }else {
+
+            // if vdi is not null, it must have been already created, check whether a resize of volume was done
+            // if true , resize the vdi to the volume size
+            s_logger.info("checking for the resize of the datadisk");
+            long vdiVirtualsize = vdi.getVirtualSize(conn);
+
+            if(vdiVirtualsize != volumeSize){
+                s_logger.info("resizing the datadisk(vdi) from vdiVirtualsize :"+ vdiVirtualsize + "to volumeSize :" + volumeSize);
+
+                try {
+                    vdi.resize(conn, volumeSize);
+                } catch (Exception e) {
+                    s_logger.warn("Unable to resize volume",e);
+                }
+            }
+         }
 
         return vdi;
     }
@@ -5058,7 +5086,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
         StorageFilerTO pool = cmd.getPool();
         try {
             if (pool.getType() == StoragePoolType.NetworkFilesystem) {
-                getNfsSR(conn, pool);
+                getNfsSR(conn, Long.toString(pool.getId()),pool.getUuid(),pool.getHost(),pool.getPath(),pool.toString());
             } else if (pool.getType() == StoragePoolType.IscsiLUN) {
                 getIscsiSR(conn, pool.getUuid(), pool.getHost(), pool.getPath(), null, null, false);
             } else if (pool.getType() == StoragePoolType.PreSetup) {
@@ -6068,11 +6096,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
         }
     }
 
-    protected SR getNfsSR(Connection conn, StorageFilerTO pool) {
+    protected SR getNfsSR(Connection conn,String poolid,String uuid, String server,String serverpath,String pooldesc) {
         Map<String, String> deviceConfig = new HashMap<String, String>();
         try {
-            String server = pool.getHost();
-            String serverpath = pool.getPath();
             serverpath = serverpath.replace("//", "/");
             Set<SR> srs = SR.getAll(conn);
             for (SR sr : srs) {
@@ -6103,7 +6129,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
 
                 if (server.equals(dc.get("server")) && serverpath.equals(dc.get("serverpath"))) {
                     throw new CloudRuntimeException("There is a SR using the same configuration server:" + dc.get("server") + ", serverpath:" + dc.get("serverpath") +
-                            " for pool " + pool.getUuid() + "on host:" + _host.uuid);
+                            " for pool " + uuid + "on host:" + _host.uuid);
                 }
 
             }
@@ -6112,13 +6138,13 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
             Host host = Host.getByUuid(conn, _host.uuid);
             Map<String, String> smConfig = new HashMap<String, String>();
             smConfig.put("nosubdir", "true");
-            SR sr = SR.create(conn, host, deviceConfig, new Long(0), pool.getUuid(), Long.toString(pool.getId()), SRType.NFS.toString(), "user", true, smConfig);
+            SR sr = SR.create(conn, host, deviceConfig, new Long(0), uuid, poolid, SRType.NFS.toString(), "user", true, smConfig);
             sr.scan(conn);
             return sr;
         } catch (XenAPIException e) {
-            throw new CloudRuntimeException("Unable to create NFS SR " + pool.toString(), e);
+            throw new CloudRuntimeException("Unable to create NFS SR " + pooldesc, e);
         } catch (XmlRpcException e) {
-            throw new CloudRuntimeException("Unable to create NFS SR " + pool.toString(), e);
+            throw new CloudRuntimeException("Unable to create NFS SR " + pooldesc, e);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4d6c682f/server/src/com/cloud/storage/VolumeApiServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
index fff6b11..76bc50c 100644
--- a/server/src/com/cloud/storage/VolumeApiServiceImpl.java
+++ b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
@@ -2093,6 +2093,8 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
             details.put(DiskTO.STORAGE_PORT, String.valueOf(volumeToAttachStoragePool.getPort()));
             details.put(DiskTO.VOLUME_SIZE, String.valueOf(volumeToAttach.getSize()));
             details.put(DiskTO.IQN, volumeToAttach.get_iScsiName());
+            details.put(DiskTO.MOUNT_POINT, volumeToAttach.get_iScsiName());
+            details.put(DiskTO.PROTOCOL_TYPE, (volumeToAttach.getPoolType()!=null) ? volumeToAttach.getPoolType().toString() : null);
 
             if (chapInfo != null) {
                 details.put(DiskTO.CHAP_INITIATOR_USERNAME, chapInfo.getInitiatorUsername());