You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by an...@apache.org on 2014/02/07 23:10:50 UTC

[01/19] git commit: updated refs/heads/4.3 to c1af92f

Updated Branches:
  refs/heads/4.3 bd335d01c -> c1af92fcb


CLOUDSTACK-6007. Restore VM command fails with NPE.
If a VM instance is deployed with startVm=false, then calling restoreVm on the instance fails with NPE because CS tries to expunge a volume that has not been created in primary store.
(cherry picked from commit 92abb9439e7a4f18d79e2a48e72a0ee94d84f477)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


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

Branch: refs/heads/4.3
Commit: 31d1da56814a17ee816207619fb8281b9647a58e
Parents: bd335d0
Author: Likitha Shetty <li...@citrix.com>
Authored: Mon Feb 3 11:34:54 2014 +0530
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Fri Feb 7 13:13:49 2014 -0800

----------------------------------------------------------------------
 server/src/com/cloud/vm/UserVmManagerImpl.java | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/31d1da56/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java
index d9923d2..81be19f 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -71,6 +71,7 @@ import org.apache.cloudstack.engine.service.api.OrchestrationService;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService.VolumeApiResult;
 import org.apache.cloudstack.framework.async.AsyncCallFuture;
@@ -5113,14 +5114,17 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
         _volsDao.detachVolume(root.getId());
         volumeMgr.destroyVolume(root);
 
-        // For VMware hypervisor since the old root volume is replaced by the new root volume in storage, force expunge old root volume
+        // For VMware hypervisor since the old root volume is replaced by the new root volume, force expunge old root volume if it has been created in storage
         if (vm.getHypervisorType() == HypervisorType.VMware) {
-            s_logger.info("Expunging volume " + root.getId() + " from primary data store");
-            AsyncCallFuture<VolumeApiResult> future = _volService.expungeVolumeAsync(volFactory.getVolume(root.getId()));
-            try {
-                future.get();
-            } catch (Exception e) {
-                s_logger.debug("Failed to expunge volume:" + root.getId(), e);
+            VolumeInfo volumeInStorage = volFactory.getVolume(root.getId());
+            if (volumeInStorage != null) {
+                s_logger.info("Expunging volume " + root.getId() + " from primary data store");
+                AsyncCallFuture<VolumeApiResult> future = _volService.expungeVolumeAsync(volFactory.getVolume(root.getId()));
+                try {
+                    future.get();
+                } catch (Exception e) {
+                    s_logger.debug("Failed to expunge volume:" + root.getId(), e);
+                }
             }
         }
 


[18/19] git commit: updated refs/heads/4.3 to c1af92f

Posted by an...@apache.org.
CLOUDSTACK-6023: Non windows instances are created on XenServer with a vcpu-max above supported xenserver limits

Changed the VCPU max limit to 16 and provided a cluster level configuration parameter for this max limit named xen.vm.vcpu.max
(cherry picked from commit 95e41fdf0da50c165a9317847058fce4efeddbcf)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


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

Branch: refs/heads/4.3
Commit: 01289b1647db2b08d42c8834577772aae6ca7dda
Parents: 7d71827
Author: Harikrishna Patnala <ha...@citrix.com>
Authored: Fri Feb 7 16:44:11 2014 +0530
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Fri Feb 7 13:32:01 2014 -0800

----------------------------------------------------------------------
 .../cloud/agent/api/to/VirtualMachineTO.java    |  9 ++++++
 .../src/com/cloud/hypervisor/XenServerGuru.java | 30 +++++++++++++++++++-
 .../xen/resource/CitrixResourceBase.java        | 14 ++++++---
 3 files changed, 48 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/01289b16/api/src/com/cloud/agent/api/to/VirtualMachineTO.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/to/VirtualMachineTO.java b/api/src/com/cloud/agent/api/to/VirtualMachineTO.java
index e6240ff..a5860d7 100644
--- a/api/src/com/cloud/agent/api/to/VirtualMachineTO.java
+++ b/api/src/com/cloud/agent/api/to/VirtualMachineTO.java
@@ -60,6 +60,7 @@ public class VirtualMachineTO {
 
     DiskTO[] disks;
     NicTO[] nics;
+    Integer vcpuMaxLimit;
 
     public VirtualMachineTO(long id, String instanceName, VirtualMachine.Type type, int cpus, Integer speed, long minRam, long maxRam, BootloaderType bootloader, String os, boolean enableHA, boolean limitCpuUse, String vncPassword) {
         this.id = id;
@@ -263,5 +264,13 @@ public class VirtualMachineTO {
         this.uuid = uuid;
     }
 
+    public Integer getVcpuMaxLimit() {
+        return vcpuMaxLimit;
+    }
+
+    public void setVcpuMaxLimit(Integer vcpuMaxLimit) {
+        this.vcpuMaxLimit = vcpuMaxLimit;
+    }
+
 
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/01289b16/plugins/hypervisors/xen/src/com/cloud/hypervisor/XenServerGuru.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/XenServerGuru.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/XenServerGuru.java
index 28bd724..47ab90a 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/XenServerGuru.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/XenServerGuru.java
@@ -35,19 +35,24 @@ import com.cloud.storage.dao.GuestOSDao;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.template.VirtualMachineTemplate.BootloaderType;
 import com.cloud.utils.Pair;
+import com.cloud.vm.UserVmVO;
 import com.cloud.vm.VirtualMachine;
 import com.cloud.vm.VirtualMachineProfile;
+import com.cloud.vm.dao.UserVmDao;
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
 import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
+import org.apache.cloudstack.framework.config.Configurable;
 import org.apache.cloudstack.storage.command.CopyCommand;
 import org.apache.cloudstack.storage.command.DettachCommand;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
+import org.apache.cloudstack.framework.config.ConfigKey;
+
 
 @Local(value=HypervisorGuru.class)
-public class XenServerGuru extends HypervisorGuruBase implements HypervisorGuru {
+public class XenServerGuru extends HypervisorGuruBase implements HypervisorGuru, Configurable{
     @Inject GuestOSDao _guestOsDao;
     @Inject
     EndPointSelector endPointSelector;
@@ -59,6 +64,11 @@ public class XenServerGuru extends HypervisorGuruBase implements HypervisorGuru
     PrimaryDataStoreDao _storagePoolDao;
     @Inject
     VolumeDataFactory _volFactory;
+    @Inject
+    UserVmDao _userVmDao;
+
+    static final ConfigKey<Integer> MaxNumberOfVCPUSPerVM = new ConfigKey<Integer>("Advanced", Integer.class, "xen.vm.vcpu.max", "16",
+            "Maximum number of VCPUs that VM can get in XenServer.", true, ConfigKey.Scope.Cluster);
 
     protected XenServerGuru() {
         super();
@@ -76,6 +86,14 @@ public class XenServerGuru extends HypervisorGuruBase implements HypervisorGuru
         	 bt = vm.getBootLoaderType();
         }
         VirtualMachineTO to = toVirtualMachineTO(vm);
+        UserVmVO userVmVO = _userVmDao.findById(vm.getId());
+        if (userVmVO != null) {
+            HostVO host = hostDao.findById(userVmVO.getHostId());
+            if (host != null) {
+                to.setVcpuMaxLimit(MaxNumberOfVCPUSPerVM.valueIn(host.getClusterId()));
+            }
+        }
+
         to.setBootloader(bt);
         
         // Determine the VM's OS description
@@ -151,4 +169,14 @@ public class XenServerGuru extends HypervisorGuruBase implements HypervisorGuru
         }
         return new Pair<Boolean, Long>(Boolean.FALSE, new Long(hostId));
     }
+
+    @Override
+    public String getConfigComponentName() {
+        return XenServerGuru.class.getSimpleName();
+    }
+
+    @Override
+    public ConfigKey<?>[] getConfigKeys() {
+        return new ConfigKey<?>[] {MaxNumberOfVCPUSPerVM};
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/01289b16/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
index ba47df4..3c7b4ac 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
@@ -1276,6 +1276,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
         vmr.nameLabel = vmSpec.getName();
         vmr.actionsAfterCrash = Types.OnCrashBehaviour.DESTROY;
         vmr.actionsAfterShutdown = Types.OnNormalExit.DESTROY;
+        vmr.VCPUsMax = (long) vmSpec.getCpus(); // FIX ME: In case of dynamic scaling this VCPU max should be the minumum of
+                                                // recommended value for that template and capacity remaining on host
 
         if (isDmcEnabled(conn, host) && vmSpec.isEnableDynamicallyScaleVm()) {
             //scaling is allowed
@@ -1283,6 +1285,14 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
             vmr.memoryStaticMax = getStaticMax(vmSpec.getOs(), vmSpec.getBootloader() == BootloaderType.CD, vmSpec.getMinRam(), vmSpec.getMaxRam());
             vmr.memoryDynamicMin = vmSpec.getMinRam();
             vmr.memoryDynamicMax = vmSpec.getMaxRam();
+
+            if (guestOsTypeName.toLowerCase().contains("windows")) {
+                vmr.VCPUsMax = (long) vmSpec.getCpus();
+            } else {
+                if (vmSpec.getVcpuMaxLimit() != null) {
+                    vmr.VCPUsMax = (long) vmSpec.getVcpuMaxLimit();
+                }
+            }
         } else {
             //scaling disallowed, set static memory target
             if (vmSpec.isEnableDynamicallyScaleVm() && !isDmcEnabled(conn, host)) {
@@ -1292,12 +1302,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
             vmr.memoryStaticMax = vmSpec.getMaxRam();
             vmr.memoryDynamicMin = vmSpec.getMinRam();
             vmr.memoryDynamicMax = vmSpec.getMaxRam();
-        }
 
-        if (guestOsTypeName.toLowerCase().contains("windows")) {
             vmr.VCPUsMax = (long) vmSpec.getCpus();
-        } else {
-            vmr.VCPUsMax = 32L;
         }
 
         vmr.VCPUsAtStartup = (long) vmSpec.getCpus();


[02/19] git commit: updated refs/heads/4.3 to c1af92f

Posted by an...@apache.org.
CLOUDSTACK-6018: Increase dnsmasq dhcp-lease-max to 2100

Would able to accomodate one /21 network then.
(cherry picked from commit 50234ea72b29b3e192a3d80b8cb8d69e4309d141)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


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

Branch: refs/heads/4.3
Commit: 41e516b1a6a29d0bf0ad781ec043f94fe61d50dd
Parents: 31d1da5
Author: Sheng Yang <sh...@citrix.com>
Authored: Mon Feb 3 14:49:31 2014 -0800
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Fri Feb 7 13:14:36 2014 -0800

----------------------------------------------------------------------
 systemvm/patches/debian/config/etc/dnsmasq.conf.tmpl | 2 +-
 systemvm/patches/debian/config/etc/vpcdnsmasq.conf   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/41e516b1/systemvm/patches/debian/config/etc/dnsmasq.conf.tmpl
----------------------------------------------------------------------
diff --git a/systemvm/patches/debian/config/etc/dnsmasq.conf.tmpl b/systemvm/patches/debian/config/etc/dnsmasq.conf.tmpl
index a3e0bc8..07c5902 100644
--- a/systemvm/patches/debian/config/etc/dnsmasq.conf.tmpl
+++ b/systemvm/patches/debian/config/etc/dnsmasq.conf.tmpl
@@ -501,7 +501,7 @@ dhcp-option=vendor:MSFT,2,1i
 #dhcp-boot=/var/ftpd/pxelinux.0,boothost,tftp_server_name
 
 # Set the limit on DHCP leases, the default is 150
-#dhcp-lease-max=150
+dhcp-lease-max=2100
 
 # The DHCP server needs somewhere on disk to keep its lease database.
 # This defaults to a sane location, but if you want to change it, use

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/41e516b1/systemvm/patches/debian/config/etc/vpcdnsmasq.conf
----------------------------------------------------------------------
diff --git a/systemvm/patches/debian/config/etc/vpcdnsmasq.conf b/systemvm/patches/debian/config/etc/vpcdnsmasq.conf
index 3622d0e..d46d623 100644
--- a/systemvm/patches/debian/config/etc/vpcdnsmasq.conf
+++ b/systemvm/patches/debian/config/etc/vpcdnsmasq.conf
@@ -334,7 +334,7 @@ dhcp-option=vendor:MSFT,2,1i
 #dhcp-boot=/var/ftpd/pxelinux.0,boothost,192.168.0.3
 
 # Set the limit on DHCP leases, the default is 150
-#dhcp-lease-max=150
+dhcp-lease-max=2100
 
 # The DHCP server needs somewhere on disk to keep its lease database.
 # This defaults to a sane location, but if you want to change it, use


[12/19] git commit: updated refs/heads/4.3 to c1af92f

Posted by an...@apache.org.
CLOUDSTACK-6053: While adding a primary or secondary of type smb the password wasn't
encoded. This cause createStoragePool or addImageStore command to fail if special
characters were present. Updated the code to pass user, password and domain as part
of details while adding primary or secondary. Also made changes on server side to
handle it.
(cherry picked from commit f0b861fedeea9e752665a42231f910112c5b8b46)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


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

Branch: refs/heads/4.3
Commit: 4961c1385a210fd33d1a43a5721b98b0563cb60b
Parents: 9536569
Author: Devdeep Singh <de...@gmail.com>
Authored: Fri Feb 7 17:46:03 2014 +0530
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Fri Feb 7 13:21:39 2014 -0800

----------------------------------------------------------------------
 .../storage/datastore/db/ImageStoreVO.java      |  3 --
 .../storage/datastore/db/StoragePoolVO.java     |  3 --
 .../image/datastore/ImageStoreHelper.java       | 25 +++++++++++++++++
 .../datastore/PrimaryDataStoreHelper.java       | 29 ++++++++++++++++++++
 .../api/query/dao/ImageStoreJoinDaoImpl.java    |  4 +--
 ui/scripts/sharedFunctions.js                   |  2 +-
 ui/scripts/system.js                            | 15 ++++++++--
 ui/scripts/zoneWizard.js                        | 15 ++++++++--
 utils/src/com/cloud/utils/UriUtils.java         | 25 ++++++-----------
 9 files changed, 90 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4961c138/engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreVO.java b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreVO.java
index 97ae9c8..387e096 100644
--- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreVO.java
+++ b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreVO.java
@@ -154,9 +154,6 @@ public class ImageStoreVO implements ImageStore {
 
     public void setUrl(String url) {
         this.url = url;
-        if ("cifs".equalsIgnoreCase(this.protocol)) {
-            this.url = UriUtils.getUpdateUri(url, true);
-        }
     }
 
     public Date getCreated() {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4961c138/engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java
index 7d52858..0d1e43d 100644
--- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java
+++ b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java
@@ -279,9 +279,6 @@ public class StoragePoolVO implements StoragePool {
 
     public void setPath(String path) {
         this.path = path;
-        if (this.poolType == StoragePoolType.SMB) {
-            this.path = UriUtils.getUpdateUri(this.path, true);
-        }
     }
 
     public void setUserInfo(String userInfo) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4961c138/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageStoreHelper.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageStoreHelper.java b/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageStoreHelper.java
index 0f5b817..187d6e4 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageStoreHelper.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageStoreHelper.java
@@ -18,6 +18,8 @@
  */
 package org.apache.cloudstack.storage.image.datastore;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.UUID;
@@ -34,6 +36,7 @@ import org.apache.cloudstack.storage.datastore.db.ImageStoreDetailsDao;
 import org.apache.cloudstack.storage.datastore.db.ImageStoreVO;
 import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreDao;
 
+import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.storage.DataStoreRole;
 import com.cloud.storage.ScopeType;
 import com.cloud.utils.crypt.DBEncryptionUtil;
@@ -96,6 +99,28 @@ public class ImageStoreHelper {
             store.setName(store.getUuid());
         }
         store.setRole((DataStoreRole) params.get("role"));
+
+        if ("cifs".equalsIgnoreCase((String) params.get("protocol")) && details != null) {
+            String user = details.get("user");
+            String password = details.get("password");
+            String domain = details.get("domain");
+            String updatedPath = (String) params.get("url");
+
+            if (user == null || password == null) {
+                String errMsg = "Missing cifs user and password details. Add them as details parameter.";
+                throw new InvalidParameterValueException(errMsg);
+            } else {
+                try {
+                    password = DBEncryptionUtil.encrypt(URLEncoder.encode(password, "UTF-8"));
+                    details.put("password", password);
+                    updatedPath += "?user=" + user + "&password=" + password + "&domain=" + domain;
+                } catch (UnsupportedEncodingException e) {
+                    throw new CloudRuntimeException("Error while generating the cifs url. " + e.getMessage());
+                }
+                store.setUrl(updatedPath);
+            }
+        }
+
         store = imageStoreDao.persist(store);
 
         // persist details

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4961c138/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java b/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java
index 95dc40b..c2bb31f 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java
@@ -18,6 +18,8 @@
  */
 package org.apache.cloudstack.storage.volume.datastore;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
 import java.util.List;
 import java.util.Map;
 
@@ -36,13 +38,17 @@ import com.cloud.agent.api.StoragePoolInfo;
 import com.cloud.capacity.Capacity;
 import com.cloud.capacity.CapacityVO;
 import com.cloud.capacity.dao.CapacityDao;
+import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.storage.DataStoreRole;
 import com.cloud.storage.ScopeType;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.storage.StorageManager;
 import com.cloud.storage.StoragePoolHostVO;
 import com.cloud.storage.StoragePoolStatus;
+import com.cloud.storage.Storage.StoragePoolType;
 import com.cloud.storage.dao.StoragePoolHostDao;
+import com.cloud.utils.UriUtils;
+import com.cloud.utils.crypt.DBEncryptionUtil;
 import com.cloud.utils.db.TransactionLegacy;
 import com.cloud.utils.exception.CloudRuntimeException;
 
@@ -86,6 +92,29 @@ public class PrimaryDataStoreHelper {
         dataStoreVO.setHypervisor(params.getHypervisorType());
 
         Map<String, String> details = params.getDetails();
+        if (params.getType() == StoragePoolType.SMB && details != null) {
+            String user = details.get("user");
+            String password = details.get("password");
+            String domain = details.get("domain");
+            String updatedPath = params.getPath();
+
+            if (user == null || password == null) {
+                String errMsg = "Missing cifs user and password details. Add them as details parameter.";
+                s_logger.warn(errMsg);
+                throw new InvalidParameterValueException(errMsg);
+            } else {
+                try {
+                    password = DBEncryptionUtil.encrypt(URLEncoder.encode(password, "UTF-8"));
+                    details.put("password", password);
+                    updatedPath += "?user=" + user + "&password=" + password + "&domain=" + domain;
+                } catch (UnsupportedEncodingException e) {
+                    throw new CloudRuntimeException("Error while generating the cifs url. " + e.getMessage());
+                }
+            }
+
+            dataStoreVO.setPath(updatedPath);
+        }
+
         String tags = params.getTags();
         if (tags != null) {
             String[] tokens = tags.split(",");

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4961c138/server/src/com/cloud/api/query/dao/ImageStoreJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/ImageStoreJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/ImageStoreJoinDaoImpl.java
index 447a1ad..23cde00 100644
--- a/server/src/com/cloud/api/query/dao/ImageStoreJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/ImageStoreJoinDaoImpl.java
@@ -86,7 +86,7 @@ public class ImageStoreJoinDaoImpl extends GenericDaoBase<ImageStoreJoinVO, Long
         osResponse.setZoneName(ids.getZoneName());
 
         String detailName = ids.getDetailName();
-        if ( detailName != null && detailName.length() > 0 ){
+        if ( detailName != null && detailName.length() > 0 && !detailName.equals(ApiConstants.PASSWORD)) {
             String detailValue = ids.getDetailValue();
             if (detailName.equals(ApiConstants.KEY) || detailName.equals(ApiConstants.S3_SECRET_KEY)) {
                 detailValue = DBEncryptionUtil.decrypt(detailValue);
@@ -105,7 +105,7 @@ public class ImageStoreJoinDaoImpl extends GenericDaoBase<ImageStoreJoinVO, Long
     @Override
     public ImageStoreResponse setImageStoreResponse(ImageStoreResponse response, ImageStoreJoinVO ids) {
         String detailName = ids.getDetailName();
-        if ( detailName != null && detailName.length() > 0 ){
+        if ( detailName != null && detailName.length() > 0 && !detailName.equals(ApiConstants.PASSWORD)) {
             String detailValue = ids.getDetailValue();
             if (detailName.equals(ApiConstants.KEY) || detailName.equals(ApiConstants.S3_SECRET_KEY)) {
                 detailValue = DBEncryptionUtil.decrypt(detailValue);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4961c138/ui/scripts/sharedFunctions.js
----------------------------------------------------------------------
diff --git a/ui/scripts/sharedFunctions.js b/ui/scripts/sharedFunctions.js
index b9dc2f3..2a15967 100644
--- a/ui/scripts/sharedFunctions.js
+++ b/ui/scripts/sharedFunctions.js
@@ -1253,7 +1253,7 @@ var processPropertiesInImagestoreObject = function(jsonObj) {
         	url += 'cifs://';
         }
         
-        url += (server + path + '?user=' + smbUsername + '&password=' + smbPassword + '&domain=' + smbDomain);
+        url += (server + path);
                
         return url;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4961c138/ui/scripts/system.js
----------------------------------------------------------------------
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index 743427b..500a339 100644
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -14759,7 +14759,10 @@
                                     var path = args.data.path;
                                     if (path.substring(0, 1) != "/")
                                         path = "/" + path;
-                                    url = smbURL(server, path, args.data.smbUsername, args.data.smbPassword, args.data.smbDomain);                                
+                                    url = smbURL(server, path);
+                                    array1.push("&details[0].user=" + args.data.smbUsername);
+                                    array1.push("&details[1].password=" + todb(args.data.smbPassword));
+                                    array1.push("&details[2].domain=" + args.data.smbDomain);
                                 } else if (args.data.protocol == "PreSetup") {                                    
                                     var path = args.data.path;
                                     if (path.substring(0, 1) != "/")
@@ -16157,12 +16160,18 @@
                                         	var zoneid = args.data.zoneid;
                                             var nfs_server = args.data.nfsServer;
                                             var path = args.data.path;
-                                            var url = smbURL(nfs_server, path, args.data.smbUsername, args.data.smbPassword, args.data.smbDomain);
+                                            var url = smbURL(nfs_server, path);
 
                                             $.extend(data, {
                                                 provider: args.data.provider,
                                                 zoneid: zoneid,
-                                                url: url
+                                                url: url,
+                                                'details[0].key': 'user',
+                                                'details[0].value': args.data.smbUsername,
+                                                'details[1].key': 'password',
+                                                'details[1].value': args.data.smbPassword,
+                                                'details[2].key': 'domain',
+                                                'details[2].value': args.data.smbDomain
                                             });
 
                                             $.ajax({

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4961c138/ui/scripts/zoneWizard.js
----------------------------------------------------------------------
diff --git a/ui/scripts/zoneWizard.js b/ui/scripts/zoneWizard.js
index b26c8bf..006bf7d 100755
--- a/ui/scripts/zoneWizard.js
+++ b/ui/scripts/zoneWizard.js
@@ -4128,7 +4128,10 @@
                     	var path = args.data.primaryStorage.path;
                         if (path.substring(0, 1) != "/")
                             path = "/" + path;
-                        url = smbURL(server, path, args.data.primaryStorage.smbUsername, args.data.primaryStorage.smbPassword, args.data.primaryStorage.smbDomain);
+                        url = smbURL(server, path);
+                        array1.push("&details[0].user=" + args.data.primaryStorage.smbUsername);
+                        array1.push("&details[1].password=" + todb(args.data.primaryStorage.smbPassword));
+                        array1.push("&details[2].domain=" + args.data.primaryStorage.smbDomain);
                     } else if (args.data.primaryStorage.protocol == "PreSetup") {                        
                         var path = args.data.primaryStorage.path;
                         if (path.substring(0, 1) != "/")
@@ -4237,12 +4240,18 @@
                     } else if (args.data.secondaryStorage.provider == 'SMB') {
                         var nfs_server = args.data.secondaryStorage.nfsServer;
                         var path = args.data.secondaryStorage.path;
-                        var url = smbURL(nfs_server, path, args.data.secondaryStorage.smbUsername, args.data.secondaryStorage.smbPassword, args.data.secondaryStorage.smbDomain);
+                        var url = smbURL(nfs_server, path);
 
                         $.extend(data, {
                             provider: args.data.secondaryStorage.provider,
                             zoneid: args.data.returnedZone.id,
-                            url: url
+                            url: url,
+                            'details[0].key': 'user',
+                            'details[0].value': args.data.secondaryStorage.smbUsername,
+                            'details[1].key': 'password',
+                            'details[1].value': args.data.secondaryStorage.smbPassword,
+                            'details[2].key': 'domain',
+                            'details[2].value': args.data.secondaryStorage.smbDomain
                         });
 
                         $.ajax({

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4961c138/utils/src/com/cloud/utils/UriUtils.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/UriUtils.java b/utils/src/com/cloud/utils/UriUtils.java
index 9261b07..67b86b8 100644
--- a/utils/src/com/cloud/utils/UriUtils.java
+++ b/utils/src/com/cloud/utils/UriUtils.java
@@ -111,17 +111,8 @@ public class UriUtils {
 
     public static String getCifsUriParametersProblems(URI uri) {
         if (!UriUtils.hostAndPathPresent(uri)) {
-            String errMsg = "cifs URI missing host and/or path.  "
-                    + " Make sure it's of the format "
-                    + "cifs://hostname/path?user=<username>&password=<password>";
-            s_logger.warn(errMsg);
-            return errMsg;
-        }
-        if (!UriUtils.cifsCredentialsPresent(uri))
-        {
-            String errMsg = "cifs URI missing user and password details. "
-                    + "Add them as query parameters, e.g. "
-                    + "cifs://example.com/some_share?user=foo&password=bar";
+            String errMsg = "cifs URI missing host and/or path. Make sure it is "
+                    + " of the format cifs://hostname/path";
             s_logger.warn(errMsg);
             return errMsg;
         }
@@ -194,11 +185,13 @@ public class UriUtils {
 
     private static List<NameValuePair> getUserDetails(String query) {
         List<NameValuePair> details = new ArrayList<NameValuePair>();
-        StringTokenizer allParams = new StringTokenizer(query, "&");
-        while (allParams.hasMoreTokens()) {
-            String param = allParams.nextToken();
-            details.add(new BasicNameValuePair(param.substring(0, param.indexOf("=")),
-                    param.substring(param.indexOf("=") + 1)));
+        if (query != null && !query.isEmpty()) {
+            StringTokenizer allParams = new StringTokenizer(query, "&");
+            while (allParams.hasMoreTokens()) {
+                String param = allParams.nextToken();
+                details.add(new BasicNameValuePair(param.substring(0, param.indexOf("=")),
+                        param.substring(param.indexOf("=") + 1)));
+            }
         }
 
         return details;


[17/19] git commit: updated refs/heads/4.3 to c1af92f

Posted by an...@apache.org.
CLOUDSTACK-6049: Give priority to cache stores where data object is
already there instead of randomly picking one in case there are multiple
cache stores in the scope.(cherry picked from commit e00241f41d6542cf1c5d93216fed55609cd7746a)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


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

Branch: refs/heads/4.3
Commit: 7d718273218aac1427113aecf68f2f2b8678b087
Parents: 3cd9dee
Author: Min Chen <mi...@citrix.com>
Authored: Thu Feb 6 17:11:36 2014 -0800
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Fri Feb 7 13:25:39 2014 -0800

----------------------------------------------------------------------
 .../api/storage/StorageCacheManager.java        |  2 +
 .../cache/allocator/StorageCacheAllocator.java  |  3 ++
 .../allocator/StorageCacheRandomAllocator.java  | 39 ++++++++++++++++++++
 .../cache/manager/StorageCacheManagerImpl.java  | 13 +++++++
 .../motion/AncientDataMotionStrategy.java       |  2 +-
 5 files changed, 58 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d718273/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageCacheManager.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageCacheManager.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageCacheManager.java
index 92724c9..92263a7 100644
--- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageCacheManager.java
+++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageCacheManager.java
@@ -20,6 +20,8 @@ package org.apache.cloudstack.engine.subsystem.api.storage;
 
 public interface StorageCacheManager {
     DataStore getCacheStorage(Scope scope);
+    
+    DataStore getCacheStorage(DataObject data, Scope scope);
 
     DataObject createCacheObject(DataObject data, Scope scope);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d718273/engine/storage/cache/src/org/apache/cloudstack/storage/cache/allocator/StorageCacheAllocator.java
----------------------------------------------------------------------
diff --git a/engine/storage/cache/src/org/apache/cloudstack/storage/cache/allocator/StorageCacheAllocator.java b/engine/storage/cache/src/org/apache/cloudstack/storage/cache/allocator/StorageCacheAllocator.java
index 4259d9e..9f0052f 100644
--- a/engine/storage/cache/src/org/apache/cloudstack/storage/cache/allocator/StorageCacheAllocator.java
+++ b/engine/storage/cache/src/org/apache/cloudstack/storage/cache/allocator/StorageCacheAllocator.java
@@ -18,9 +18,12 @@
  */
 package org.apache.cloudstack.storage.cache.allocator;
 
+import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
 import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
 
 public interface StorageCacheAllocator {
     DataStore getCacheStore(Scope scope);
+    
+    DataStore getCacheStore(DataObject data, Scope scope);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d718273/engine/storage/cache/src/org/apache/cloudstack/storage/cache/allocator/StorageCacheRandomAllocator.java
----------------------------------------------------------------------
diff --git a/engine/storage/cache/src/org/apache/cloudstack/storage/cache/allocator/StorageCacheRandomAllocator.java b/engine/storage/cache/src/org/apache/cloudstack/storage/cache/allocator/StorageCacheRandomAllocator.java
index 3b434d1..0054e3d 100644
--- a/engine/storage/cache/src/org/apache/cloudstack/storage/cache/allocator/StorageCacheRandomAllocator.java
+++ b/engine/storage/cache/src/org/apache/cloudstack/storage/cache/allocator/StorageCacheRandomAllocator.java
@@ -23,9 +23,14 @@ import java.util.List;
 
 import javax.inject.Inject;
 
+import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
+import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine;
 import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
+import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -36,6 +41,8 @@ public class StorageCacheRandomAllocator implements StorageCacheAllocator {
     private static final Logger s_logger = Logger.getLogger(StorageCacheRandomAllocator.class);
     @Inject
     DataStoreManager dataStoreMgr;
+    @Inject
+    ObjectInDataStoreManager objectInStoreMgr;    
 
     @Override
     public DataStore getCacheStore(Scope scope) {
@@ -53,4 +60,36 @@ public class StorageCacheRandomAllocator implements StorageCacheAllocator {
         Collections.shuffle(cacheStores);
         return cacheStores.get(0);
     }
+
+    @Override
+    public DataStore getCacheStore(DataObject data, Scope scope) {
+        if (scope.getScopeType() != ScopeType.ZONE) {
+            s_logger.debug("Can only support zone wide cache storage");
+            return null;
+        }
+
+        List<DataStore> cacheStores = dataStoreMgr.getImageCacheStores(scope);
+        if (cacheStores.size() <= 0) {
+            s_logger.debug("Can't find staging storage in zone: " + scope.getScopeId());
+            return null;
+        }
+        
+        // if there are multiple cache stores, we give priority to the one where data is already there
+        if (cacheStores.size() > 1) {
+            for (DataStore store : cacheStores) {
+                DataObjectInStore obj = objectInStoreMgr.findObject(data, store);
+                if (obj != null && obj.getState() == ObjectInDataStoreStateMachine.State.Ready) {
+                    s_logger.debug("pick the cache store " + store.getId() + " where data is already there");
+                    return store;
+                }
+            }
+
+            // otherwise, just random pick one
+            Collections.shuffle(cacheStores);
+        }
+        return cacheStores.get(0);        
+
+    }
+    
+    
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d718273/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java b/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java
index bb8d67d..7c74729 100644
--- a/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java
+++ b/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java
@@ -90,6 +90,19 @@ public class StorageCacheManagerImpl implements StorageCacheManager, Manager {
         return null;
     }
 
+    
+    @Override
+    public DataStore getCacheStorage(DataObject data, Scope scope) {
+        for (StorageCacheAllocator allocator : storageCacheAllocator) {
+            DataStore store = allocator.getCacheStore(data, scope);
+            if (store != null) {
+                return store;
+            }
+        }
+        return null;
+    }
+
+
     protected List<DataStore> getCacheStores() {
         QueryBuilder<ImageStoreVO> sc = QueryBuilder.create(ImageStoreVO.class);
         sc.and(sc.entity().getRole(), SearchCriteria.Op.EQ,DataStoreRole.ImageCache);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d718273/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
----------------------------------------------------------------------
diff --git a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java b/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
index f2ed667..d6759cb 100644
--- a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
+++ b/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
@@ -201,7 +201,7 @@ AncientDataMotionStrategy implements DataMotionStrategy {
 
     protected DataObject cacheSnapshotChain(SnapshotInfo snapshot, Scope scope) {
         DataObject leafData = null;
-        DataStore store = cacheMgr.getCacheStorage(scope);
+        DataStore store = cacheMgr.getCacheStorage(snapshot, scope);
         while (snapshot != null) {
             DataObject cacheData = cacheMgr.createCacheObject(snapshot, store);
             if (leafData == null) {


[11/19] git commit: updated refs/heads/4.3 to c1af92f

Posted by an...@apache.org.
CLOUDSTACK-6030: Encrypt the primary and secondary smb storage password when it is stored in the db.
(cherry picked from commit 96d8e3c945b24af4d27429c4bd62b459e807e2a1)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


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

Branch: refs/heads/4.3
Commit: 9536569e1f064d400910abf7fe6ff61d540fdfdf
Parents: 74c98a1
Author: Devdeep Singh <de...@gmail.com>
Authored: Wed Feb 5 14:58:12 2014 +0530
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Fri Feb 7 13:21:18 2014 -0800

----------------------------------------------------------------------
 api/src/com/cloud/storage/Storage.java          |  5 +-
 .../storage/datastore/db/ImageStoreVO.java      | 10 +++-
 .../storage/datastore/db/StoragePoolVO.java     | 17 ++++--
 .../datastore/PrimaryDataStoreHelper.java       |  2 +-
 .../HypervResource/CloudStackTypes.cs           |  8 ++-
 .../HypervResource/HypervResourceController.cs  |  8 ++-
 ...CloudStackPrimaryDataStoreLifeCycleImpl.java |  9 ++-
 utils/src/com/cloud/utils/UriUtils.java         | 61 ++++++++++++++++++++
 8 files changed, 102 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9536569e/api/src/com/cloud/storage/Storage.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/storage/Storage.java b/api/src/com/cloud/storage/Storage.java
index 07b6667..54c22c8 100755
--- a/api/src/com/cloud/storage/Storage.java
+++ b/api/src/com/cloud/storage/Storage.java
@@ -95,7 +95,7 @@ public class Storage {
 
     public static enum StoragePoolType {
         Filesystem(false), // local directory
-        NetworkFilesystem(true), // NFS or CIFS
+        NetworkFilesystem(true), // NFS
         IscsiLUN(true), // shared LUN, with a clusterfs overlay
         Iscsi(true), // for e.g., ZFS Comstar
         ISO(false), // for iso image
@@ -106,7 +106,8 @@ public class Storage {
         VMFS(true), // VMware VMFS storage
         PreSetup(true), // for XenServer, Storage Pool is set up by customers.
         EXT(false), // XenServer local EXT SR
-        OCFS2(true);
+        OCFS2(true),
+        SMB(true);
 
         boolean shared;
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9536569e/engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreVO.java b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreVO.java
index 5ed48a3..97ae9c8 100644
--- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreVO.java
+++ b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreVO.java
@@ -31,6 +31,7 @@ import javax.persistence.TableGenerator;
 import com.cloud.storage.DataStoreRole;
 import com.cloud.storage.ImageStore;
 import com.cloud.storage.ScopeType;
+import com.cloud.utils.UriUtils;
 import com.cloud.utils.db.GenericDao;
 
 @Entity
@@ -144,11 +145,18 @@ public class ImageStoreVO implements ImageStore {
     }
 
     public String getUrl() {
-        return url;
+        String updatedUrl = url;
+        if ("cifs".equalsIgnoreCase(this.protocol)) {
+            updatedUrl = UriUtils.getUpdateUri(updatedUrl, false);
+        }
+        return updatedUrl;
     }
 
     public void setUrl(String url) {
         this.url = url;
+        if ("cifs".equalsIgnoreCase(this.protocol)) {
+            this.url = UriUtils.getUpdateUri(url, true);
+        }
     }
 
     public Date getCreated() {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9536569e/engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java
index 557c964..7d52858 100644
--- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java
+++ b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java
@@ -30,10 +30,11 @@ import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.storage.Storage.StoragePoolType;
 import com.cloud.storage.ScopeType;
+import com.cloud.storage.Storage.StoragePoolType;
 import com.cloud.storage.StoragePool;
 import com.cloud.storage.StoragePoolStatus;
+import com.cloud.utils.UriUtils;
 import com.cloud.utils.db.GenericDao;
 
 @Entity
@@ -135,10 +136,10 @@ public class StoragePoolVO implements StoragePool {
         this.usedBytes = availableBytes;
         this.capacityBytes = capacityBytes;
         this.hostAddress = hostAddress;
-        this.path = hostPath;
         this.port = port;
         this.podId = podId;
         this.setStatus(StoragePoolStatus.Initial);
+        this.setPath(hostPath);
     }
 
     public StoragePoolVO(StoragePoolVO that) {
@@ -150,9 +151,9 @@ public class StoragePoolVO implements StoragePool {
         this.poolType = type;
         this.hostAddress = hostAddress;
         this.port = port;
-        this.path = path;
         this.setStatus(StoragePoolStatus.Initial);
         this.uuid = UUID.randomUUID().toString();
+        this.setPath(path);
     }
 
     public String getName() {
@@ -244,7 +245,12 @@ public class StoragePoolVO implements StoragePool {
     }
 
     public String getPath() {
-        return path;
+        String updatedPath = path;
+        if (this.poolType == StoragePoolType.SMB) {
+            updatedPath = UriUtils.getUpdateUri(updatedPath, false);
+        }
+
+        return updatedPath;
     }
 
     public String getUserInfo() {
@@ -273,6 +279,9 @@ public class StoragePoolVO implements StoragePool {
 
     public void setPath(String path) {
         this.path = path;
+        if (this.poolType == StoragePoolType.SMB) {
+            this.path = UriUtils.getUpdateUri(this.path, true);
+        }
     }
 
     public void setUserInfo(String userInfo) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9536569e/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java b/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java
index 90ad17a..95dc40b 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java
@@ -69,8 +69,8 @@ public class PrimaryDataStoreHelper {
         dataStoreVO = new StoragePoolVO();
         dataStoreVO.setStorageProviderName(params.getProviderName());
         dataStoreVO.setHostAddress(params.getHost());
-        dataStoreVO.setPath(params.getPath());
         dataStoreVO.setPoolType(params.getType());
+        dataStoreVO.setPath(params.getPath());
         dataStoreVO.setPort(params.getPort());
         dataStoreVO.setName(params.getName());
         dataStoreVO.setUuid(params.getUuid());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9536569e/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/CloudStackTypes.cs
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/CloudStackTypes.cs b/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/CloudStackTypes.cs
index d54295c..9637994 100644
--- a/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/CloudStackTypes.cs
+++ b/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/CloudStackTypes.cs
@@ -61,7 +61,7 @@ namespace HypervResource
             get
             {
                 string uncPath = null;
-                if (uri != null && (uri.Scheme.Equals("cifs") || uri.Scheme.Equals("networkfilesystem")))
+                if (uri != null && (uri.Scheme.Equals("cifs") || uri.Scheme.Equals("networkfilesystem") || uri.Scheme.Equals("smb")))
                 {
                     uncPath = @"\\" + uri.Host + uri.LocalPath;
                 }
@@ -584,7 +584,11 @@ namespace HypervResource
         /// <summary>
         /// 
         /// </summary>
-        OCFS2
+        OCFS2,
+        /// <summary>
+        /// for hyper-v
+        /// </summary>
+        SMB
     }
 
     public enum StorageResourceType

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9536569e/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/HypervResourceController.cs
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/HypervResourceController.cs b/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/HypervResourceController.cs
index 81ab42a..a132606 100644
--- a/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/HypervResourceController.cs
+++ b/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/HypervResourceController.cs
@@ -916,7 +916,8 @@ namespace HypervResource
                     GetCapacityForLocalPath(localPath, out capacityBytes, out availableBytes);
                     hostPath = localPath;
                 }
-                else if (poolType == StoragePoolType.NetworkFilesystem)
+                else if (poolType == StoragePoolType.NetworkFilesystem ||
+                    poolType == StoragePoolType.SMB)
                 {
                     NFSTO share = new NFSTO();
                     String uriStr = "cifs://" + (string)cmd.pool.host + (string)cmd.pool.path;
@@ -972,7 +973,8 @@ namespace HypervResource
             }
 
             if (poolType != StoragePoolType.Filesystem &&
-                poolType != StoragePoolType.NetworkFilesystem)
+                poolType != StoragePoolType.NetworkFilesystem &&
+                poolType != StoragePoolType.SMB)
             {
                 details = "Request to create / modify unsupported pool type: " + (poolTypeStr == null ? "NULL" : poolTypeStr) + "in cmd " + JsonConvert.SerializeObject(cmd);
                 logger.Error(details);
@@ -1715,7 +1717,7 @@ namespace HypervResource
                         used = capacity - available;
                         result = true;
                     }
-                    else if (poolType == StoragePoolType.NetworkFilesystem)
+                    else if (poolType == StoragePoolType.NetworkFilesystem || poolType == StoragePoolType.SMB)
                     {
                         string sharePath = config.getPrimaryStorage((string)cmd.id);
                         if (sharePath != null)

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9536569e/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java
----------------------------------------------------------------------
diff --git a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java b/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java
index 3933915..7a7257a 100644
--- a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java
+++ b/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java
@@ -28,7 +28,6 @@ import java.util.UUID;
 import javax.inject.Inject;
 
 import org.apache.log4j.Logger;
-
 import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
@@ -206,12 +205,11 @@ public class CloudStackPrimaryDataStoreLifeCycleImpl implements PrimaryDataStore
             if (port == -1) {
                 port = 445;
             }
-            parameters.setType(StoragePoolType.NetworkFilesystem);
+
+            parameters.setType(StoragePoolType.SMB);
             parameters.setHost(storageHost);
             parameters.setPort(port);
             parameters.setPath(hostPath);
-            parameters.setUserInfo(uri.getQuery());
-
         } else if (scheme.equalsIgnoreCase("file")) {
             if (port == -1) {
                 port = 0;
@@ -356,7 +354,8 @@ public class CloudStackPrimaryDataStoreLifeCycleImpl implements PrimaryDataStore
                 && pool.getPoolType() != StoragePoolType.IscsiLUN && pool.getPoolType() != StoragePoolType.Iscsi
                 && pool.getPoolType() != StoragePoolType.VMFS && pool.getPoolType() != StoragePoolType.SharedMountPoint
                 && pool.getPoolType() != StoragePoolType.PreSetup && pool.getPoolType() != StoragePoolType.OCFS2
-                && pool.getPoolType() != StoragePoolType.RBD && pool.getPoolType() != StoragePoolType.CLVM) {
+                && pool.getPoolType() != StoragePoolType.RBD && pool.getPoolType() != StoragePoolType.CLVM
+                && pool.getPoolType() != StoragePoolType.SMB) {
             s_logger.warn(" Doesn't support storage pool type " + pool.getPoolType());
             return false;
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9536569e/utils/src/com/cloud/utils/UriUtils.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/UriUtils.java b/utils/src/com/cloud/utils/UriUtils.java
index bf96707..9261b07 100644
--- a/utils/src/com/cloud/utils/UriUtils.java
+++ b/utils/src/com/cloud/utils/UriUtils.java
@@ -26,7 +26,10 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URLEncoder;
 import java.net.UnknownHostException;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.ListIterator;
+import java.util.StringTokenizer;
 
 import javax.net.ssl.HttpsURLConnection;
 
@@ -37,10 +40,14 @@ import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
 import org.apache.commons.httpclient.UsernamePasswordCredentials;
 import org.apache.commons.httpclient.auth.AuthScope;
 import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.util.URIUtil;
 import org.apache.http.NameValuePair;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.client.utils.URIBuilder;
 import org.apache.http.client.utils.URLEncodedUtils;
 import org.apache.log4j.Logger;
 
+import com.cloud.utils.crypt.DBEncryptionUtil;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 public class UriUtils {
@@ -143,6 +150,60 @@ public class UriUtils {
         }
         return (foundUser && foundPswd);
     }
+
+    public static String getUpdateUri(String url, boolean encrypt) {
+        String updatedPath = null;
+        try {
+            String query = URIUtil.getQuery(url);
+            URIBuilder builder = new URIBuilder(url);
+            builder.removeQuery();
+
+            String updatedQuery = new String();
+            List<NameValuePair> queryParams = getUserDetails(query);
+            ListIterator<NameValuePair> iterator = queryParams.listIterator();
+            while (iterator.hasNext()) {
+                NameValuePair param = iterator.next();
+                String value = null;
+                if ("password".equalsIgnoreCase(param.getName()) &&
+                        param.getValue() != null) {
+                    value = encrypt ? DBEncryptionUtil.encrypt(param.getValue()) : DBEncryptionUtil.decrypt(param.getValue());
+                } else {
+                    value = param.getValue();
+                }
+
+                if (updatedQuery.isEmpty()) {
+                    updatedQuery += (param.getName() + "=" + value);
+                } else {
+                    updatedQuery += ("&" + param.getName() + "=" + value);
+                }
+            }
+
+            String schemeAndHost = new String();
+            URI newUri = builder.build();
+            if (newUri.getScheme() != null) {
+                schemeAndHost = newUri.getScheme() + "://" + newUri.getHost();
+            }
+
+            updatedPath = schemeAndHost + newUri.getPath() + "?" + updatedQuery;
+        } catch (URISyntaxException e) {
+            throw new CloudRuntimeException("Couldn't generate an updated uri. " + e.getMessage());
+        }
+
+        return updatedPath;
+    }
+
+    private static List<NameValuePair> getUserDetails(String query) {
+        List<NameValuePair> details = new ArrayList<NameValuePair>();
+        StringTokenizer allParams = new StringTokenizer(query, "&");
+        while (allParams.hasMoreTokens()) {
+            String param = allParams.nextToken();
+            details.add(new BasicNameValuePair(param.substring(0, param.indexOf("=")),
+                    param.substring(param.indexOf("=") + 1)));
+        }
+
+        return details;
+    }
+
     // Get the size of a file from URL response header.
     public static Long getRemoteSize(String url) {
         Long remoteSize = (long) 0;


[10/19] git commit: updated refs/heads/4.3 to c1af92f

Posted by an...@apache.org.
CLOUDSTACK-6031: UI > infrastructure > count > pass listAll=true to all listXXXXXXX API for counting resource.
(cherry picked from commit e0dfe0ab15ee71c2cdf8fe7cce46b73258120a8e)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


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

Branch: refs/heads/4.3
Commit: 74c98a1d3fd4dc6ffe5a9fdcd811375164f79df3
Parents: 3c891fc
Author: Jessica Wang <je...@apache.org>
Authored: Wed Feb 5 14:09:27 2014 -0800
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Fri Feb 7 13:20:17 2014 -0800

----------------------------------------------------------------------
 ui/scripts/system.js | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/74c98a1d/ui/scripts/system.js
----------------------------------------------------------------------
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index 6b89182..743427b 100644
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -203,6 +203,11 @@
                     zoneCount: function(data) {
                         $.ajax({
                             url: createURL('listZones'),
+                            data: {
+                            	listAll: true,
+                                page: 1,
+                                pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property.
+                            },
                             success: function(json) {
                                 dataFns.podCount($.extend(data, {
                                     zoneCount: json.listzonesresponse.count ? json.listzonesresponse.count : 0,
@@ -216,6 +221,7 @@
                         $.ajax({
                             url: createURL('listPods'),
                             data: {
+                            	listAll: true,
                                 page: 1,
                                 pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property.
                             },
@@ -231,6 +237,7 @@
                         $.ajax({
                             url: createURL('listClusters'),
                             data: {
+                            	listAll: true,
                                 page: 1,
                                 pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property.
                             },
@@ -254,6 +261,7 @@
                     hostCount: function(data) {
                         var data2 = {
                             type: 'routing',
+                            listAll: true,
                             page: 1,
                             pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property.
                         };
@@ -270,6 +278,7 @@
 
                     primaryStorageCount: function(data) {
                         var data2 = {
+                        	listAll: true,
                             page: 1,
                             pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property.
                         };
@@ -287,6 +296,7 @@
                     secondaryStorageCount: function(data) {
                         var data2 = {
                             type: 'SecondaryStorage',
+                            listAll: true,
                             page: 1,
                             pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property.
                         };
@@ -305,6 +315,7 @@
                         $.ajax({
                             url: createURL('listSystemVms'),
                             data: {
+                            	listAll: true,
                                 page: 1,
                                 pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property.
                             },
@@ -318,6 +329,7 @@
 
                     virtualRouterCount: function(data) {
                         var data2 = {
+                        	listAll: true,
                             page: 1,
                             pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property.
                         };
@@ -336,7 +348,7 @@
                                 if (cloudStack.context && cloudStack.context.projects == null) { //non-project view
                                 var data3 = {
                                     listAll: true,
-	                                    projectid: -1,
+	                                projectid: -1,
                                     page: 1,
                                     pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property.
                                 };
@@ -350,11 +362,11 @@
 	                                });
                                 }
                                                                 
-                                        dataFns.capacity($.extend(data, {
-                                            virtualRouterCount: (total1 + total2)
-                                        }));
-                                    }
-                                });
+                                dataFns.capacity($.extend(data, {
+                                    virtualRouterCount: (total1 + total2)
+                                }));
+                            }
+                        });
                     },
 
                     capacity: function(data) {


[07/19] git commit: updated refs/heads/4.3 to c1af92f

Posted by an...@apache.org.
stratosphere-ssp plugin: Fix HttpClient4 connection leak

Replaced HttpClient#execute(HttpUriRequest) with
HttpClient#execute(HttpUriRequest,ResponseHandler<T>).
The former requires extra EntityUtils#consume(HttpEntity).
(cherry picked from commit 09e27fd7bf92a7ff723e36c8ca485e54ee00e8c7)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


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

Branch: refs/heads/4.3
Commit: f5b9fedb11c991e81d48bf9b55c7559f315c73e5
Parents: f0b2879
Author: Hiroaki KAWAI <ka...@stratosphere.co.jp>
Authored: Wed Feb 5 16:35:18 2014 +0900
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Fri Feb 7 13:16:31 2014 -0800

----------------------------------------------------------------------
 .../cloudstack/network/element/SspClient.java   | 110 ++++++-------------
 .../network/element/SspClientTest.java          |  20 +---
 2 files changed, 36 insertions(+), 94 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f5b9fedb/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/element/SspClient.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/element/SspClient.java b/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/element/SspClient.java
index c0db92c..30630a3 100644
--- a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/element/SspClient.java
+++ b/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/element/SspClient.java
@@ -17,15 +17,15 @@
 package org.apache.cloudstack.network.element;
 
 import java.io.IOException;
-import java.io.InputStreamReader;
 import java.io.UnsupportedEncodingException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.Arrays;
 
-import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
+import org.apache.http.client.ClientProtocolException;
 import org.apache.http.client.HttpClient;
+import org.apache.http.client.HttpResponseException;
 import org.apache.http.client.entity.UrlEncodedFormEntity;
 import org.apache.http.client.methods.HttpDelete;
 import org.apache.http.client.methods.HttpPost;
@@ -35,6 +35,7 @@ import org.apache.http.client.params.ClientPNames;
 import org.apache.http.client.params.CookiePolicy;
 import org.apache.http.entity.ContentType;
 import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.BasicResponseHandler;
 import org.apache.http.impl.client.DefaultHttpClient;
 import org.apache.http.impl.conn.PoolingClientConnectionManager;
 import org.apache.http.message.BasicNameValuePair;
@@ -42,8 +43,6 @@ import org.apache.http.params.CoreConnectionPNames;
 import org.apache.log4j.Logger;
 
 import com.google.gson.Gson;
-import com.google.gson.JsonIOException;
-import com.google.gson.JsonSyntaxException;
 import com.google.gson.annotations.SerializedName;
 
 /**
@@ -74,7 +73,7 @@ public class SspClient {
         return s_client;
     }
 
-    private HttpResponse innerExecuteMethod(HttpRequestBase req, String path) {
+    private String executeMethod(HttpRequestBase req, String path) {
         try {
             URI base = new URI(apiUrl);
             req.setURI(new URI(base.getScheme(), base.getUserInfo(), base.getHost(),
@@ -83,23 +82,26 @@ public class SspClient {
             s_logger.error("invalid API URL " + apiUrl + " path " + path, e);
             return null;
         }
-        HttpResponse res = null;
         try {
-            res = getHttpClient().execute(req);
-            s_logger.info("ssp api call:" + req + " status=" + res.getStatusLine());
+            String content = null;
+            try {
+                content = getHttpClient().execute(req, new BasicResponseHandler());
+                s_logger.info("ssp api call: " + req);
+            } catch (HttpResponseException e) {
+                s_logger.info("ssp api call failed: " + req, e);
+                if (e.getStatusCode() == HttpStatus.SC_UNAUTHORIZED && login()) {
+                    req.reset();
+                    content = getHttpClient().execute(req, new BasicResponseHandler());
+                    s_logger.info("ssp api retry call: " + req);
+                }
+            }
+            return content;
+        } catch (ClientProtocolException e) { // includes HttpResponseException
+            s_logger.error("ssp api call failed: " + req, e);
         } catch (IOException e) {
             s_logger.error("ssp api call failed: " + req, e);
         }
-        return res;
-    }
-
-    private HttpResponse executeMethod(HttpRequestBase req, String path) {
-        HttpResponse res = innerExecuteMethod(req, path);
-        if (res.getStatusLine().getStatusCode() == HttpStatus.SC_UNAUTHORIZED && login()) {
-            req.reset();
-            res = innerExecuteMethod(req, path);
-        }
-        return res;
+        return null;
     }
 
     public boolean login() {
@@ -112,9 +114,7 @@ public class SspClient {
             s_logger.error("invalid username or password", e);
             return false;
         }
-
-        HttpResponse res = this.innerExecuteMethod(method, "/ws.v1/login");
-        if (res != null && res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
+        if (executeMethod(method, "/ws.v1/login") != null) {
             return true;
         }
         return false;
@@ -134,29 +134,14 @@ public class SspClient {
 
         HttpPost method = new HttpPost();
         method.setEntity(new StringEntity(new Gson().toJson(req), ContentType.APPLICATION_JSON));
-        HttpResponse res = executeMethod(method, "/ssp.v1/tenant-networks");
-        if (res == null || res.getStatusLine().getStatusCode() != HttpStatus.SC_CREATED) {
-            return null;
-        }
-        try {
-            return new Gson().fromJson(new InputStreamReader(res.getEntity().getContent()),
-                    TenantNetwork.class);
-        } catch (JsonSyntaxException e) {
-            s_logger.error("reading response body failed", e);
-        } catch (JsonIOException e) {
-            s_logger.error("reading response body failed", e);
-        } catch (IllegalStateException e) {
-            s_logger.error("reading response body failed", e);
-        } catch (IOException e) {
-            s_logger.error("reading response body failed", e);
-        }
-        return null;
+        return new Gson().fromJson(
+                executeMethod(method, "/ssp.v1/tenant-networks"),
+                TenantNetwork.class);
     }
 
     public boolean deleteTenantNetwork(String tenantNetworkUuid) {
         HttpDelete method = new HttpDelete();
-        HttpResponse res = executeMethod(method, "/ssp.v1/tenant-networks/" + tenantNetworkUuid);
-        if (res != null && res.getStatusLine().getStatusCode() == HttpStatus.SC_NO_CONTENT) {
+        if (executeMethod(method, "/ssp.v1/tenant-networks/" + tenantNetworkUuid) != null) {
             return true;
         }
         return false;
@@ -182,31 +167,14 @@ public class SspClient {
 
         HttpPost method = new HttpPost();
         method.setEntity(new StringEntity(new Gson().toJson(req), ContentType.APPLICATION_JSON));
-        HttpResponse res = executeMethod(method, "/ssp.v1/tenant-ports");
-
-        if (res == null || res.getStatusLine().getStatusCode() != HttpStatus.SC_CREATED) {
-            return null;
-        }
-        try {
-            return new Gson().fromJson(new InputStreamReader(res.getEntity().getContent()),
-                    TenantPort.class);
-        } catch (JsonSyntaxException e) {
-            s_logger.error("reading response body failed", e);
-        } catch (JsonIOException e) {
-            s_logger.error("reading response body failed", e);
-        } catch (IllegalStateException e) {
-            s_logger.error("reading response body failed", e);
-        } catch (IOException e) {
-            s_logger.error("reading response body failed", e);
-        }
-        return null;
+        return new Gson().fromJson(
+                executeMethod(method, "/ssp.v1/tenant-ports"),
+                TenantPort.class);
     }
 
     public boolean deleteTenantPort(String tenantPortUuid) {
         HttpDelete method = new HttpDelete();
-        HttpResponse res = executeMethod(method, "/ssp.v1/tenant-ports/" + tenantPortUuid);
-
-        if (res != null && res.getStatusLine().getStatusCode() == HttpStatus.SC_NO_CONTENT) {
+        if (executeMethod(method, "/ssp.v1/tenant-ports/" + tenantPortUuid) != null) {
             return true;
         }
         return false;
@@ -223,22 +191,8 @@ public class SspClient {
 
         HttpPut method = new HttpPut();
         method.setEntity(new StringEntity(new Gson().toJson(req), ContentType.APPLICATION_JSON));
-        HttpResponse res = executeMethod(method, "/ssp.v1/tenant-ports/" + portUuid);
-        if (res == null || res.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
-            return null;
-        }
-        try {
-            return new Gson().fromJson(new InputStreamReader(res.getEntity().getContent()),
-                    TenantPort.class);
-        } catch (JsonSyntaxException e) {
-            s_logger.error("reading response body failed", e);
-        } catch (JsonIOException e) {
-            s_logger.error("reading response body failed", e);
-        } catch (IllegalStateException e) {
-            s_logger.error("reading response body failed", e);
-        } catch (IOException e) {
-            s_logger.error("reading response body failed", e);
-        }
-        return null;
+        return new Gson().fromJson(
+                executeMethod(method, "/ssp.v1/tenant-ports/" + portUuid),
+                TenantPort.class);
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f5b9fedb/plugins/network-elements/stratosphere-ssp/test/org/apache/cloudstack/network/element/SspClientTest.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/stratosphere-ssp/test/org/apache/cloudstack/network/element/SspClientTest.java b/plugins/network-elements/stratosphere-ssp/test/org/apache/cloudstack/network/element/SspClientTest.java
index 627cc87..a6b723c 100644
--- a/plugins/network-elements/stratosphere-ssp/test/org/apache/cloudstack/network/element/SspClientTest.java
+++ b/plugins/network-elements/stratosphere-ssp/test/org/apache/cloudstack/network/element/SspClientTest.java
@@ -23,15 +23,11 @@ import static org.mockito.Mockito.when;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
-
-import java.io.ByteArrayInputStream;
 import java.util.UUID;
 
-import org.apache.commons.httpclient.HttpStatus;
-import org.apache.http.HttpResponse;
 import org.apache.http.client.HttpClient;
 import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.impl.client.BasicResponseHandler;
 import org.junit.Test;
 
 public class SspClientTest {
@@ -46,10 +42,8 @@ public class SspClientTest {
         SspClient sspClient = spy(new SspClient(apiUrl, username, password));
 
         HttpClient client = mock(HttpClient.class);
-        HttpResponse res = mock(HttpResponse.class, RETURNS_DEEP_STUBS);
         doReturn(client).when(sspClient).getHttpClient();
-        when(client.execute(any(HttpUriRequest.class))).thenReturn(res);
-        when(res.getStatusLine().getStatusCode()).thenReturn(HttpStatus.SC_OK);
+        when(client.execute(any(HttpUriRequest.class), any(BasicResponseHandler.class))).thenReturn("");
 
         assertTrue(sspClient.login());
         assertTrue(sspClient.login());
@@ -63,14 +57,10 @@ public class SspClientTest {
         SspClient sspClient = spy(new SspClient(apiUrl, username, password));
 
         HttpClient client = mock(HttpClient.class);
-        HttpResponse res = mock(HttpResponse.class, RETURNS_DEEP_STUBS);
         doReturn(client).when(sspClient).getHttpClient();
-        when(client.execute(any(HttpUriRequest.class))).thenReturn(res);
-        when(res.getStatusLine().getStatusCode()).thenReturn(HttpStatus.SC_CREATED);
         String body = "{\"uuid\":\"" + tenant_net_uuid + "\",\"name\":\"" + networkName
                 + "\",\"tenant_uuid\":\"" + uuid + "\"}";
-        when(res.getEntity().getContent()).thenReturn(
-                new ByteArrayInputStream(body.getBytes("UTF-8")));
+        when(client.execute(any(HttpUriRequest.class), any(BasicResponseHandler.class))).thenReturn(body);
 
         SspClient.TenantNetwork tnet = sspClient.createTenantNetwork(uuid, networkName);
         assertEquals(tnet.name, networkName);
@@ -84,10 +74,8 @@ public class SspClientTest {
         SspClient sspClient = spy(new SspClient(apiUrl, username, password));
 
         HttpClient client = mock(HttpClient.class);
-        HttpResponse res = mock(HttpResponse.class, RETURNS_DEEP_STUBS);
         doReturn(client).when(sspClient).getHttpClient();
-        when(client.execute(any(HttpUriRequest.class))).thenReturn(res);
-        when(res.getStatusLine().getStatusCode()).thenReturn(HttpStatus.SC_NO_CONTENT);
+        when(client.execute(any(HttpUriRequest.class), any(BasicResponseHandler.class))).thenReturn("");
 
         sspClient.deleteTenantNetwork(tenant_net_uuid);
     }


[14/19] git commit: updated refs/heads/4.3 to c1af92f

Posted by an...@apache.org.
CLOUDSTACK-5953: In hypervisor_capabilities, max_guests_limit are
not correct for XS 6.2 or other specific version hypervisor.
(cherry picked from commit bba6b77177a6404f1d27f7adc278b46fe00759f0)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


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

Branch: refs/heads/4.3
Commit: 8a9b1f70b89a55290c42e10e33bb8e20ef765566
Parents: cf7b627
Author: Sanjay Tripathi <sa...@citrix.com>
Authored: Thu Feb 6 17:42:14 2014 +0530
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Fri Feb 7 13:23:33 2014 -0800

----------------------------------------------------------------------
 setup/db/db/schema-421to430.sql | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8a9b1f70/setup/db/db/schema-421to430.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-421to430.sql b/setup/db/db/schema-421to430.sql
index 316cbe9..43e94db 100644
--- a/setup/db/db/schema-421to430.sql
+++ b/setup/db/db/schema-421to430.sql
@@ -828,6 +828,8 @@ CREATE TABLE `cloud`.`network_acl_item_details` (
 
 ALTER TABLE `cloud`.`alert` ADD COLUMN `name` varchar(255) DEFAULT NULL COMMENT 'name of the alert';
 
+UPDATE `cloud`.`hypervisor_capabilities` set max_guests_limit='150' WHERE hypervisor_version='6.1.0';
+UPDATE `cloud`.`hypervisor_capabilities` set max_guests_limit='500' WHERE hypervisor_version='6.2.0';
 UPDATE `cloud`.`hypervisor_capabilities` SET `max_data_volumes_limit`=13 WHERE `hypervisor_type`='Vmware';
 INSERT IGNORE INTO `cloud`.`hypervisor_capabilities`(uuid, hypervisor_type, hypervisor_version, max_guests_limit, security_group_enabled, max_data_volumes_limit, storage_motion_supported) VALUES (UUID(), 'Hyperv', '6.2', 1024, 0, 64, 0);
 


[05/19] git commit: updated refs/heads/4.3 to c1af92f

Posted by an...@apache.org.
CLOUDSTACK-6027:CreateVolume from snapshot is failing with S3 on Vmware.
(cherry picked from commit d7ec9ca815609d95c29b9db09ee1720bc7df4816)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


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

Branch: refs/heads/4.3
Commit: 85091e9b6b05a263ca47e1eca483d398b28b4e31
Parents: a439ec9
Author: Min Chen <mi...@citrix.com>
Authored: Tue Feb 4 15:04:11 2014 -0800
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Fri Feb 7 13:15:45 2014 -0800

----------------------------------------------------------------------
 .../src/com/cloud/storage/resource/VmwareStorageProcessor.java | 6 ++++++
 1 file changed, 6 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/85091e9b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
index fe568cd..6f3f2ef 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
@@ -1705,6 +1705,12 @@ public class VmwareStorageProcessor implements StorageProcessor {
                 throw new Exception(msg);
             }
 
+            // strip off the extension since restoreVolumeFromSecStorage internally will append suffix there.
+            if (backedUpSnapshotUuid.endsWith(".ova")){
+                backedUpSnapshotUuid = backedUpSnapshotUuid.replace(".ova", "");
+            } else if (backedUpSnapshotUuid.endsWith(".ovf")){
+                backedUpSnapshotUuid = backedUpSnapshotUuid.replace(".ovf", "");
+            }            
             DatastoreMO primaryDsMo = new DatastoreMO(hyperHost.getContext(), morPrimaryDs);
             restoreVolumeFromSecStorage(hyperHost, primaryDsMo,
                     newVolumeName, secondaryStorageUrl, backupPath, backedUpSnapshotUuid);


[04/19] git commit: updated refs/heads/4.3 to c1af92f

Posted by an...@apache.org.
CLOUDSTACK-6025:CreateTemplate from snapshot in NFS is failing , after
migarting to S3 datastore.(cherry picked from commit a3caea7e0aca15c74362bbe8469070228177c96f)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


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

Branch: refs/heads/4.3
Commit: a439ec9b622aeab23cd06f698aa2601b5b34f7cc
Parents: 0d72e2c
Author: Min Chen <mi...@citrix.com>
Authored: Tue Feb 4 10:46:30 2014 -0800
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Fri Feb 7 13:15:18 2014 -0800

----------------------------------------------------------------------
 .../storage/snapshot/SnapshotServiceImpl.java   |  6 +--
 .../VmwareStorageSubsystemCommandHandler.java   | 44 ++++++++++----------
 2 files changed, 26 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a439ec9b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
index 3b456ce..e967b06 100644
--- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
+++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
@@ -463,9 +463,6 @@ public class SnapshotServiceImpl implements SnapshotService {
     
     // push one individual snapshots currently on cache store to region store if it is not there already
     private void syncSnapshotToRegionStore(long snapshotId, DataStore store){
-        if (s_logger.isDebugEnabled()) {
-            s_logger.debug("sync snapshot " + snapshotId + " from cache to object store...");
-        }
         // if snapshot is already on region wide object store, check if it is really downloaded there (by checking install_path). Sync snapshot to region
         // wide store if it is not there physically.
         SnapshotInfo snapOnStore = _snapshotFactory.getSnapshot(snapshotId, store);
@@ -473,6 +470,9 @@ public class SnapshotServiceImpl implements SnapshotService {
             throw new CloudRuntimeException("Cannot find an entry in snapshot_store_ref for snapshot " + snapshotId + " on region store: " + store.getName());
         }
         if (snapOnStore.getPath() == null || snapOnStore.getPath().length() == 0) {
+            if (s_logger.isDebugEnabled()) {
+                s_logger.debug("sync snapshot " + snapshotId + " from cache to object store...");
+            }
             // snapshot is not on region store yet, sync to region store
             SnapshotInfo srcSnapshot = _snapshotFactory.getReadySnapshotOnCache(snapshotId);
             if (srcSnapshot == null) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a439ec9b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java
index 5eccc3c..a708add 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java
@@ -95,7 +95,8 @@ public class VmwareStorageSubsystemCommandHandler extends StorageSubsystemComman
             } else if (srcData.getObjectType() == DataObjectType.TEMPLATE) {
                 // sync template from NFS cache to S3 in NFS migration to S3 case
                 storageManager.createOvaForTemplate((TemplateObjectTO)srcData);
-            } else if (srcData.getObjectType() == DataObjectType.SNAPSHOT && destData.getObjectType() == DataObjectType.SNAPSHOT) {
+            } else if (srcData.getObjectType() == DataObjectType.SNAPSHOT) {
+                // pack ova first
                 // sync snapshot from NFS cache to S3 in NFS migration to S3 case
                 String parentPath = storageResource.getRootDir(srcDataStore.getUrl());
                 SnapshotObjectTO snap = (SnapshotObjectTO)srcData;
@@ -104,27 +105,28 @@ public class VmwareStorageSubsystemCommandHandler extends StorageSubsystemComman
                 String name = path.substring(index + 1);
                 String snapDir = path.substring(0, index);
                 storageManager.createOva(parentPath + File.separator + snapDir, name);
-            } else if (srcData.getObjectType() == DataObjectType.SNAPSHOT && destData.getObjectType() == DataObjectType.TEMPLATE) {
-                //create template from snapshot on src at first, then copy it to s3
-                TemplateObjectTO cacheTemplate = (TemplateObjectTO)destData;
-                cacheTemplate.setDataStore(srcDataStore);
-                CopyCmdAnswer answer = (CopyCmdAnswer)processor.createTemplateFromSnapshot(cmd);
-                if (!answer.getResult()) {
-                    return answer;
+                if (destData.getObjectType() == DataObjectType.TEMPLATE) {
+                    //create template from snapshot on src at first, then copy it to s3
+                    TemplateObjectTO cacheTemplate = (TemplateObjectTO)destData;
+                    cacheTemplate.setDataStore(srcDataStore);
+                    CopyCmdAnswer answer = (CopyCmdAnswer)processor.createTemplateFromSnapshot(cmd);
+                    if (!answer.getResult()) {
+                        return answer;
+                    }
+                    cacheTemplate.setDataStore(destDataStore);
+                    TemplateObjectTO template = (TemplateObjectTO)answer.getNewData();
+                    template.setDataStore(srcDataStore);
+                    CopyCommand newCmd = new CopyCommand(template, destData, cmd.getWait(), cmd.executeInSequence());
+                    Answer result = storageResource.defaultAction(newCmd);
+                    //clean up template data on staging area
+                    try {
+                        DeleteCommand deleteCommand = new DeleteCommand(template);
+                        storageResource.defaultAction(deleteCommand);
+                    } catch (Exception e) {
+                        s_logger.debug("Failed to clean up staging area:", e);
+                    }
+                    return result;
                 }
-                cacheTemplate.setDataStore(destDataStore);
-                TemplateObjectTO template = (TemplateObjectTO)answer.getNewData();
-                template.setDataStore(srcDataStore);
-                CopyCommand newCmd = new CopyCommand(template, destData, cmd.getWait(), cmd.executeInSequence());
-                Answer result = storageResource.defaultAction(newCmd);
-                //clean up template data on staging area
-                try {
-                    DeleteCommand deleteCommand = new DeleteCommand(template);
-                    storageResource.defaultAction(deleteCommand);
-                } catch (Exception e) {
-                    s_logger.debug("Failed to clean up staging area:", e);
-                }
-                return result;
             }
             needDelegation = true;
         }


[15/19] git commit: updated refs/heads/4.3 to c1af92f

Posted by an...@apache.org.
CLOUDSTACK-6040: Updated the ip addr validation in create port forwarding
(cherry picked from commit 7a71cf33ce103392914ac51cd4689a6f5a340d0a)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


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

Branch: refs/heads/4.3
Commit: 278c54a9709a50580edcc45adc5b0585793e4d24
Parents: 8a9b1f7
Author: Jayapal <ja...@apache.org>
Authored: Thu Feb 6 17:58:26 2014 +0530
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Fri Feb 7 13:24:28 2014 -0800

----------------------------------------------------------------------
 .../api/command/user/firewall/CreatePortForwardingRuleCmd.java    | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/278c54a9/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java
index ff63d08..2e8f662 100644
--- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java
@@ -18,6 +18,7 @@ package org.apache.cloudstack.api.command.user.firewall;
 
 import java.util.List;
 
+import com.cloud.utils.net.NetUtils;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiCommandJobType;
 import org.apache.cloudstack.api.ApiConstants;
@@ -317,7 +318,7 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P
 
         Ip privateIp = getVmSecondaryIp();
         if (privateIp != null) {
-            if ( !privateIp.isIp4()) {
+            if (!NetUtils.isValidIp(privateIp.toString())) {
                 throw new InvalidParameterValueException("Invalid vm ip address");
             }
         }


[13/19] git commit: updated refs/heads/4.3 to c1af92f

Posted by an...@apache.org.
CLOUDSTACK-6001: Fixed hyperv vm console not working for 3 minutes after migration.
(cherry picked from commit fb87c85b2a313d75af7cd4b790118fea30a2dd1b)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


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

Branch: refs/heads/4.3
Commit: cf7b62748d51d7be42e903d5e2a786b17e4bea09
Parents: 4961c13
Author: Anshul Gangwar <an...@citrix.com>
Authored: Fri Jan 31 13:04:36 2014 +0530
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Fri Feb 7 13:23:11 2014 -0800

----------------------------------------------------------------------
 .../consoleproxy/ConsoleProxyRdpClient.java     | 147 ++++++++++---------
 1 file changed, 78 insertions(+), 69 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cf7b6274/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyRdpClient.java
----------------------------------------------------------------------
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyRdpClient.java b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyRdpClient.java
index d5a3fcd..7d49b19 100644
--- a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyRdpClient.java
+++ b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyRdpClient.java
@@ -19,7 +19,6 @@ package com.cloud.consoleproxy;
 import java.awt.event.InputEvent;
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseEvent;
-import java.io.IOException;
 import java.net.InetSocketAddress;
 
 import org.apache.log4j.Logger;
@@ -55,7 +54,8 @@ public class ConsoleProxyRdpClient extends ConsoleProxyClientBase {
     private RdpBufferedImageCanvas _canvas = null;
 
     private Thread _worker;
-    private volatile boolean _workerDone = false;
+    private volatile boolean _workerDone = true;
+    private volatile long _threadStopTime;
 
     private AwtMouseEventSource _mouseEventSource = null;
     private AwtKeyEventSource _keyEventSource = null;
@@ -231,77 +231,86 @@ public class ConsoleProxyRdpClient extends ConsoleProxyClientBase {
 
     @Override
     public void initClient(final ConsoleProxyClientParam param) {
-        _workerDone = false;
-
-        int canvasWidth = 1024;
-        int canvasHeight = 768;
-        setClientParam(param);
-
-        final String host = param.getHypervHost();
-        final String password = param.getPassword();
-        final String instanceId = param.getClientHostAddress();
-        final int port = param.getClientHostPort();
-
-        _screen = new ScreenDescription();
-        _canvas = new RdpBufferedImageCanvas(this, canvasWidth, canvasHeight);
-        onFramebufferSizeChange(canvasWidth, canvasHeight);
-
-        _screen.addSizeChangeListener(new SizeChangeListener() {
-            @Override
-            public void sizeChanged(int width, int height) {
-                if (_canvas != null) {
-                    _canvas.setCanvasSize(width, height);
-                }
-            }
-        });
+        if ((System.currentTimeMillis() - _threadStopTime) < 1000) {
+            return;
+        }
 
-        final SSLState sslState = new SSLState();
+        try {
+            int canvasWidth = 1024;
+            int canvasHeight = 768;
+            setClientParam(param);
+
+            final String host = param.getHypervHost();
+            final String password = param.getPassword();
+            final String instanceId = param.getClientHostAddress();
+            final int port = param.getClientHostPort();
+
+            final SSLState sslState = new SSLState();
+
+            final String username = param.getUsername();
+            String name = null;
+            String domain = null;
+            if (username.contains("\\")) {
+                String[] tokens = username.split("\\\\");
+                name = tokens[1];
+                domain = tokens[0];
+            } else {
+                name = username;
+                domain = "Workgroup";
+            }
 
-        final String username = param.getUsername();
-        String name = null;
-        String domain = null;
-        if (username.contains("\\")) {
-            String[] tokens = username.split("\\\\");
-            name = tokens[1];
-            domain = tokens[0];
-        } else {
-            name = username;
-            domain = "Workgroup";
-        }
+            _screen = new ScreenDescription();
+            _canvas = new RdpBufferedImageCanvas(this, canvasWidth, canvasHeight);
+            onFramebufferSizeChange(canvasWidth, canvasHeight);
 
-        _client = new RdpClient("client", host, domain, name, password, instanceId, _screen, _canvas,
-                sslState);
-
-        _mouseEventSource = _client.getMouseEventSource();
-        _keyEventSource = _client.getKeyEventSource();
-
-        _worker = new Thread(new Runnable() {
-            @Override
-            public void run() {
-                _socket = new AprSocketWrapperImpl("socket", sslState);
-                Pipeline pipeline = new PipelineImpl("Client");
-                pipeline.add(_socket, _client);
-                pipeline.link("socket", _client.getId(), "socket");
-                pipeline.validate();
-
-                InetSocketAddress address = new InetSocketAddress(host, port);
-                ConsoleProxy.ensureRoute(host);
-
-                try {
-                    // Connect socket to remote server and run main loop(s)
-                    _socket.connect(address);
-                } catch (IOException e) {
-                    e.printStackTrace();
-                } finally {
-                    shutdown();
+            _screen.addSizeChangeListener(new SizeChangeListener() {
+                @Override
+                public void sizeChanged(int width, int height) {
+                    if (_canvas != null) {
+                        _canvas.setCanvasSize(width, height);
+                    }
                 }
-
-                s_logger.info("Receiver thread stopped.");
-                _workerDone = true;
-            }
-        });
-        _worker.setDaemon(true);
-        _worker.start();
+            });
+
+            s_logger.info("connecting to instance " + instanceId + " on host " + host);
+            _client = new RdpClient("client", host, domain, name, password, instanceId, _screen, _canvas, sslState);
+
+            _mouseEventSource = _client.getMouseEventSource();
+            _keyEventSource = _client.getKeyEventSource();
+
+            _worker = new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    _socket = new AprSocketWrapperImpl("socket", sslState);
+                    Pipeline pipeline = new PipelineImpl("Client");
+                    pipeline.add(_socket, _client);
+                    pipeline.link("socket", _client.getId(), "socket");
+                    pipeline.validate();
+
+                    InetSocketAddress address = new InetSocketAddress(host, port);
+                    ConsoleProxy.ensureRoute(host);
+
+                    try {
+                        _workerDone = false;
+                        s_logger.info("Connecting socket to remote server and run main loop(s)");
+                        _socket.connect(address);
+                    } catch (Exception e) {
+                        s_logger.info(" error occurred in connecting to socket " + e.getMessage());
+                    } finally {
+                        shutdown();
+                    }
+
+                    _threadStopTime = System.currentTimeMillis();
+                    s_logger.info("Receiver thread stopped.");
+                    _workerDone = true;
+                }
+            });
+            _worker.setDaemon(true);
+            _worker.start();
+        } catch (Exception e) {
+            _workerDone = true;
+            s_logger.info("error occurred in initializing rdp client " + e.getMessage());
+        }
     }
 
     @Override


[08/19] git commit: updated refs/heads/4.3 to c1af92f

Posted by an...@apache.org.
CLOUDSTACK-5967: GRE tunnel creation is failing

after network orchestrator refactor, only network elements providingg
services as defined by network offering, are invloved network design and
imlement phase. So OVS network element need to be enables as
'Connectivity' service provider to make GRE tunnels work. This fix
introduced 'Ovs' provider as Connectivity service provider.
(cherry picked from commit 2e004878b1da0f7fb5ec12e77babbb626e96c1ef)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


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

Branch: refs/heads/4.3
Commit: f93be7b2b609be540f86eb22a6da6f963014dfc5
Parents: f5b9fed
Author: Murali Reddy <mu...@gmail.com>
Authored: Wed Feb 5 17:12:58 2014 +0530
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Fri Feb 7 13:16:52 2014 -0800

----------------------------------------------------------------------
 api/src/com/cloud/network/Network.java                    |  1 +
 .../cloud/hypervisor/xen/resource/CitrixResourceBase.java |  7 ++++++-
 .../ovs/src/com/cloud/network/element/OvsElement.java     |  7 +++++--
 server/src/com/cloud/network/NetworkServiceImpl.java      | 10 ++++++++++
 4 files changed, 22 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f93be7b2/api/src/com/cloud/network/Network.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java
index a7701da..b5e8173 100644
--- a/api/src/com/cloud/network/Network.java
+++ b/api/src/com/cloud/network/Network.java
@@ -130,6 +130,7 @@ public interface Network extends ControlledEntity, StateObject<Network.State>, I
         public static final Provider NiciraNvp = new Provider("NiciraNvp", false);
         public static final Provider InternalLbVm = new Provider("InternalLbVm", false);
         public static final Provider CiscoVnmc = new Provider("CiscoVnmc", true);
+        public static final Provider Ovs = new Provider("Ovs", false);
 
         private final String name;
         private final boolean isExternal;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f93be7b2/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
index 48ccf70..ba47df4 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
@@ -881,7 +881,12 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
             dom0vif = VIF.create(conn, vifr);
         }
         // At this stage we surely have a VIF
-        dom0vif.plug(conn);
+        try {
+            dom0vif.plug(conn);
+        } catch (Exception e) {
+            // though wierd exception is thrown, VIF actually gets plugged-in to dom0, so just ignore exception
+            s_logger.info("Ignoring the benign error thrown while plugging VIF to dom0");
+        }
         dom0vif.unplug(conn);
         synchronized(_tmpDom0Vif) {
             _tmpDom0Vif.add(dom0vif);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f93be7b2/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java b/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java
index 0366143..6ebc070 100644
--- a/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java
+++ b/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java
@@ -16,6 +16,7 @@
 // under the License.
 package com.cloud.network.element;
 
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
@@ -53,12 +54,14 @@ public class OvsElement extends AdapterBase implements NetworkElement {
 
     @Override
     public Map<Service, Map<Capability, String>> getCapabilities() {
-        return null;
+        Map<Service, Map<Capability, String>> capabilities = new HashMap<Service, Map<Capability, String>>();
+        capabilities.put(Service.Connectivity, null);
+        return capabilities;
     }
 
     @Override
     public Provider getProvider() {
-        return null;
+        return Network.Provider.Ovs;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f93be7b2/server/src/com/cloud/network/NetworkServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java
index d4310d4..270ff7b 100755
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@ -2502,6 +2502,11 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService {
                     //Add Internal Load Balancer element as a default network service provider
                     addDefaultInternalLbProviderToPhysicalNetwork(pNetwork.getId());
 
+                    // Add OVS provider as default network service provider
+                    if (pNetwork.getIsolationMethods().contains("GRE")) {
+                        addDefaultOvsToPhysicalNetwork(pNetwork.getId());
+                    }
+
                     return pNetwork;
                 }
             });
@@ -3796,6 +3801,11 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService {
         return null;
     }
 
+    private PhysicalNetworkServiceProvider addDefaultOvsToPhysicalNetwork(long physicalNetworkId) {
+        PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, Network.Provider.Ovs.getName(), null, null);
+        return nsp;
+    }
+
     protected boolean isNetworkSystem(Network network) {
         NetworkOffering no = _networkOfferingDao.findByIdIncludingRemoved(network.getNetworkOfferingId());
         if (no.isSystemOnly()) {


[16/19] git commit: updated refs/heads/4.3 to c1af92f

Posted by an...@apache.org.
CLOUDSTACK-6046:CreateVolume from snapshot is failing with S3 as
secondary storage and zone-wide primary storage.(cherry picked from commit 900c51103ab1e29b86ea5f76cb73c72b3de51db7)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


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

Branch: refs/heads/4.3
Commit: 3cd9dee1db21794f19fff3699ed79115bfe02ecc
Parents: 278c54a
Author: Min Chen <mi...@citrix.com>
Authored: Thu Feb 6 15:33:05 2014 -0800
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Fri Feb 7 13:24:48 2014 -0800

----------------------------------------------------------------------
 .../cloudstack/storage/motion/AncientDataMotionStrategy.java      | 2 +-
 .../cloudstack/storage/endpoint/DefaultEndPointSelector.java      | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3cd9dee1/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
----------------------------------------------------------------------
diff --git a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java b/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
index 30edf68..f2ed667 100644
--- a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
+++ b/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
@@ -249,7 +249,7 @@ AncientDataMotionStrategy implements DataMotionStrategy {
             if (srcData.getDataStore().getRole() == DataStoreRole.Primary) {
                 ep = selector.select(volObj);
             } else {
-                ep = selector.select(snapObj, volObj);
+                ep = selector.select(srcData, volObj);
             }
 
             CopyCommand cmd = new CopyCommand(srcData.getTO(), volObj.getTO(), _createVolumeFromSnapshotWait, VirtualMachineManager.ExecuteInSequence.value());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3cd9dee1/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java b/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
index 967251f..39bc839 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
@@ -167,10 +167,11 @@ public class DefaultEndPointSelector implements EndPointSelector {
             poolId = destStore.getId();
         } else {
             // if both are zone scope
-            selectedScope = srcScope;
             if (srcStore.getRole() == DataStoreRole.Primary) {
+                selectedScope = srcScope;
                 poolId = srcStore.getId();
             } else if (destStore.getRole() == DataStoreRole.Primary) {
+                selectedScope = destScope;
                 poolId = destStore.getId();
             }
         }


[06/19] git commit: updated refs/heads/4.3 to c1af92f

Posted by an...@apache.org.
CLOUDSTACK-6026: UI > create network offering > pass serviceofferingid parameter instead of systemOfferingForRouter parameter to API.
(cherry picked from commit e7ec79b5f34f9f5cbe06653ec1948c7064c5b784)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


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

Branch: refs/heads/4.3
Commit: f0b28794dd0b634632d7877a0f44c21fe92aab77
Parents: 85091e9
Author: Jessica Wang <je...@apache.org>
Authored: Tue Feb 4 16:16:31 2014 -0800
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Fri Feb 7 13:16:09 2014 -0800

----------------------------------------------------------------------
 ui/scripts/configuration.js | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f0b28794/ui/scripts/configuration.js
----------------------------------------------------------------------
diff --git a/ui/scripts/configuration.js b/ui/scripts/configuration.js
index 42ae5ee..420cb7b 100644
--- a/ui/scripts/configuration.js
+++ b/ui/scripts/configuration.js
@@ -1716,7 +1716,7 @@
                                 preFilter: function(args) {
                                     var $availability = args.$form.find('.form-item[rel=availability]');
                                     var $lbType = args.$form.find('.form-item[rel=lbType]');
-                                    var $systemOfferingForRouter = args.$form.find('.form-item[rel=systemOfferingForRouter]');
+                                    var $serviceofferingid = args.$form.find('.form-item[rel=serviceofferingid]');
                                     var $conservemode = args.$form.find('.form-item[rel=conservemode]');
                                     var $serviceSourceNatRedundantRouterCapabilityCheckbox = args.$form.find('.form-item[rel="service.SourceNat.redundantRouterCapabilityCheckbox"]');
                                     var hasAdvancedZones = false;
@@ -1858,9 +1858,9 @@
                                             }
                                         });
                                         if (havingVirtualRouterForAtLeastOneService == true) {
-                                            $systemOfferingForRouter.css('display', 'inline-block');
+                                            $serviceofferingid.css('display', 'inline-block');
                                         } else {
-                                            $systemOfferingForRouter.hide();
+                                            $serviceofferingid.hide();
                                         }
 
 
@@ -2281,7 +2281,7 @@
                                     },
 
                                     //show or hide upon checked services and selected providers above (begin)
-                                    systemOfferingForRouter: {
+                                    serviceofferingid: {
                                         label: 'System Offering for Router',
                                         isHidden: true,
                                         docID: 'helpNetworkOfferingSystemOffering',
@@ -2574,8 +2574,8 @@
                                     delete inputData.egresspolicy;
                                 }
 
-                                if (args.$form.find('.form-item[rel=systemOfferingForRouter]').css("display") == "none")
-                                    delete inputData.systemOfferingForRouter;
+                                if (args.$form.find('.form-item[rel=serviceofferingid]').css("display") == "none")
+                                    delete inputData.serviceofferingid;
 
                                 inputData['traffictype'] = 'GUEST'; //traffic type dropdown has been removed since it has only one option ('Guest'). Hardcode traffic type value here.
 


[19/19] git commit: updated refs/heads/4.3 to c1af92f

Posted by an...@apache.org.
Added Fix for CLOUDSTACK-5875

Added fix for exception and listing. Mentioned details under bug.
Post the fix, simulator works fine.

Signed-off-by: Santhosh Edukulla <Sa...@citrix.com>
Signed-off-by: Koushik Das <ko...@apache.org>
(cherry picked from commit d31fa09c7e5bb04fcc4594c0352d9b91171e9d1a)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


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

Branch: refs/heads/4.3
Commit: c1af92fcbbc183873d6519f0660b68acfb33bd44
Parents: 01289b1
Author: Santhosh Edukulla <Sa...@citrix.com>
Authored: Thu Jan 23 17:24:43 2014 +0530
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Fri Feb 7 13:48:18 2014 -0800

----------------------------------------------------------------------
 .../src/com/cloud/agent/manager/MockAgentManagerImpl.java    | 7 +++++++
 setup/db/templates.simulator.sql                             | 8 ++++----
 2 files changed, 11 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c1af92fc/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java
index 4071aeb..447482b 100644
--- a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java
+++ b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java
@@ -32,6 +32,8 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
+import com.cloud.user.AccountManager;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -87,6 +89,7 @@ public class MockAgentManagerImpl extends ManagerBase implements MockAgentManage
     MockStorageManager _storageMgr = null;
     @Inject
     ResourceManager _resourceMgr;
+    @Inject private AccountManager _accountMgr;
     
     SimulatorSecondaryDiscoverer discoverer;
     @Inject
@@ -306,8 +309,10 @@ public class MockAgentManagerImpl extends ManagerBase implements MockAgentManage
         @Override
         @DB
         public void run() {
+            CallContext.register(_accountMgr.getSystemUser(), _accountMgr.getSystemAccount());
             if (this.mode.equalsIgnoreCase("Stop")) {
                 handleSystemVMStop();
+                CallContext.unregister();
                 return;
             }
 
@@ -363,10 +368,12 @@ public class MockAgentManagerImpl extends ManagerBase implements MockAgentManage
                         _resourceMgr.discoverHosts(cmd);
                     } catch (DiscoveryException e) {
                         s_logger.debug("Failed to discover host: " + e.toString());
+                        CallContext.unregister();
                         return;
                     }
                 } catch (ConfigurationException e) {
                     s_logger.debug("Failed to load secondary storage resource: " + e.toString());
+                    CallContext.unregister();
                     return;
                 }
             }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c1af92fc/setup/db/templates.simulator.sql
----------------------------------------------------------------------
diff --git a/setup/db/templates.simulator.sql b/setup/db/templates.simulator.sql
index 5f9b67d..25e91bd 100755
--- a/setup/db/templates.simulator.sql
+++ b/setup/db/templates.simulator.sql
@@ -16,7 +16,7 @@
 -- under the License.
 
 
-INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type)
-    VALUES (100, UUID(), 'simulator-domR', 'SystemVM Template (simulator)', 0, now(), 'SYSTEM', 0, 64, 1, 'http://nfs1.lab.vmops.com/templates/routing/debian/latest/systemvm.vhd.bz2', '', 0, 'SystemVM Template (simulator)', 'VHD', 15, 0, 1, 'Simulator');
-INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text,  format, guest_os_id, featured, cross_zones, hypervisor_type)
-    VALUES (111, UUID(), 'simulator-Centos', 'CentOS 5.3(64-bit) no GUI (Simulator)', 1, now(), 'BUILTIN', 0, 64, 1, 'http://nfs1.lab.vmops.com/templates/centos53-x86_64/latest/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2', '', 0, 'CentOS 5.3(64-bit) no GUI (Simulator)', 'VHD', 11, 1, 1, 'Simulator');
+INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type, state)
+    VALUES (100, UUID(), 'simulator-domR', 'SystemVM Template (simulator)', 0, now(), 'SYSTEM', 0, 64, 1, 'http://nfs1.lab.vmops.com/templates/routing/debian/latest/systemvm.vhd.bz2', '', 0, 'SystemVM Template (simulator)', 'VHD', 15, 0, 1, 'Simulator','Active');
+INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text,  format, guest_os_id, featured, cross_zones, hypervisor_type,state)
+    VALUES (111, UUID(), 'simulator-Centos', 'CentOS 5.3(64-bit) no GUI (Simulator)', 1, now(), 'BUILTIN', 0, 64, 1, 'http://nfs1.lab.vmops.com/templates/centos53-x86_64/latest/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2', '', 0, 'CentOS 5.3(64-bit) no GUI (Simulator)', 'VHD', 11, 1, 1, 'Simulator','Active');


[09/19] git commit: updated refs/heads/4.3 to c1af92f

Posted by an...@apache.org.
Fixed agent code to handle untagged public vlan while parsing the vlan id
(cherry picked from commit 7df148c762510f669b60edff9d8d690c800b1f95)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


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

Branch: refs/heads/4.3
Commit: 3c891fcf66531b96e74ce98d57faa1713928d9ca
Parents: f93be7b
Author: Rajesh Battala <ra...@citrix.com>
Authored: Wed Feb 5 23:44:14 2014 +0530
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Fri Feb 7 13:17:16 2014 -0800

----------------------------------------------------------------------
 .../DotNet/ServerResource/HypervResource/WmiCallsV2.cs       | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3c891fcf/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/WmiCallsV2.cs
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/WmiCallsV2.cs b/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/WmiCallsV2.cs
index 2e3aca5..f5a04dc 100644
--- a/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/WmiCallsV2.cs
+++ b/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/WmiCallsV2.cs
@@ -391,7 +391,7 @@ namespace HypervResource
                     string vlan = null;
                     string isolationUri = nic.isolationUri;
                     string broadcastUri = nic.broadcastUri;
-                    if ( (broadcastUri != null ) || (isolationUri != null && isolationUri.StartsWith("vlan://")) && !isolationUri.Equals("vlan://untagged"))
+                    if ( (broadcastUri != null ) || (isolationUri != null && isolationUri.StartsWith("vlan://")))
                     {
                         if (broadcastUri != null && broadcastUri.StartsWith("storage"))
                         {
@@ -402,7 +402,11 @@ namespace HypervResource
                             vlan = isolationUri.Substring("vlan://".Length);
                         }
                         int tmp;
-                        if (!int.TryParse(vlan, out tmp))
+                        if (vlan.Equals("untagged", StringComparison.CurrentCultureIgnoreCase) ) {
+                            // recevied vlan is untagged, don't parse for the vlan in the isolation uri
+                            vlan = null;
+                        }
+                        else if (!int.TryParse(vlan, out tmp))
                         {
                             // TODO: double check exception type
                             errMsg = string.Format("Invalid VLAN value {0} for on vm {1} for nic uuid {2}", isolationUri, vmName, nic.uuid);


[03/19] git commit: updated refs/heads/4.3 to c1af92f

Posted by an...@apache.org.
CLOUDSTACK-6019:CreateVolume from snapshot in NFS is throwing Warning
"sync snapshot from cache to region wide store failed for image store
test".
(cherry picked from commit b11c13d4a120a6361231ee415082576dac6fe385)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


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

Branch: refs/heads/4.3
Commit: 0d72e2ccf51035b7b1ac9bba0a9a3cee407ac61e
Parents: 41e516b
Author: Min Chen <mi...@citrix.com>
Authored: Mon Feb 3 16:26:40 2014 -0800
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Fri Feb 7 13:14:55 2014 -0800

----------------------------------------------------------------------
 .../resource/VmwareStorageSubsystemCommandHandler.java      | 9 +++++++++
 1 file changed, 9 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0d72e2cc/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java
index d1b8be8..5eccc3c 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java
@@ -95,6 +95,15 @@ public class VmwareStorageSubsystemCommandHandler extends StorageSubsystemComman
             } else if (srcData.getObjectType() == DataObjectType.TEMPLATE) {
                 // sync template from NFS cache to S3 in NFS migration to S3 case
                 storageManager.createOvaForTemplate((TemplateObjectTO)srcData);
+            } else if (srcData.getObjectType() == DataObjectType.SNAPSHOT && destData.getObjectType() == DataObjectType.SNAPSHOT) {
+                // sync snapshot from NFS cache to S3 in NFS migration to S3 case
+                String parentPath = storageResource.getRootDir(srcDataStore.getUrl());
+                SnapshotObjectTO snap = (SnapshotObjectTO)srcData;
+                String path = snap.getPath();
+                int index = path.lastIndexOf(File.separator);
+                String name = path.substring(index + 1);
+                String snapDir = path.substring(0, index);
+                storageManager.createOva(parentPath + File.separator + snapDir, name);
             } else if (srcData.getObjectType() == DataObjectType.SNAPSHOT && destData.getObjectType() == DataObjectType.TEMPLATE) {
                 //create template from snapshot on src at first, then copy it to s3
                 TemplateObjectTO cacheTemplate = (TemplateObjectTO)destData;