You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bh...@apache.org on 2015/04/16 14:15:03 UTC

[1/3] git commit: updated refs/heads/master to 05e4ba7

Repository: cloudstack
Updated Branches:
  refs/heads/master e262a3a4b -> 05e4ba735


vmware: support vmfs as local storage pool type

Signed-off-by: Rohit Yadav <ro...@shapeblue.com>
(cherry picked from commit 752d784d92b4ce461ec6a19a6b54220bb967d4d0)
Signed-off-by: Rohit Yadav <ro...@shapeblue.com>


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

Branch: refs/heads/master
Commit: 06e353e5c75a39799dbb1d79790baaeb3678b947
Parents: e262a3a
Author: Rohit Yadav <ro...@shapeblue.com>
Authored: Thu Apr 16 16:39:24 2015 +0530
Committer: Rohit Yadav <ro...@shapeblue.com>
Committed: Thu Apr 16 17:36:52 2015 +0530

----------------------------------------------------------------------
 .../com/cloud/upgrade/dao/Upgrade450to451.java  | 33 ++++++++++++++++++--
 .../com/cloud/hypervisor/guru/VMwareGuru.java   | 12 ++++++-
 .../vmware/resource/VmwareResource.java         |  2 +-
 .../com/cloud/storage/StorageManagerImpl.java   | 11 +++++--
 4 files changed, 50 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/06e353e5/engine/schema/src/com/cloud/upgrade/dao/Upgrade450to451.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade450to451.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade450to451.java
index 218f4ec..d56db85 100644
--- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade450to451.java
+++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade450to451.java
@@ -22,6 +22,7 @@ import com.cloud.utils.db.TransactionLegacy;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.script.Script;
 import org.apache.log4j.Logger;
+import org.jasypt.exceptions.EncryptionOperationNotPossibleException;
 
 import java.io.File;
 import java.io.UnsupportedEncodingException;
@@ -75,6 +76,7 @@ public class Upgrade450to451 implements DbUpgrade {
         encryptIpSecPresharedKeysOfRemoteAccessVpn(conn);
         encryptStoragePoolUserInfo(conn);
         updateUserVmDetailsWithNicAdapterType(conn);
+        upgradeVMWareLocalStorage(conn);
     }
 
     private void encryptKeyInKeyStore(Connection conn) {
@@ -85,9 +87,11 @@ public class Upgrade450to451 implements DbUpgrade {
             selectStatement = conn.prepareStatement("SELECT ks.id, ks.key FROM cloud.keystore ks WHERE ks.key IS NOT null");
             selectResultSet = selectStatement.executeQuery();
             while (selectResultSet.next()) {
+                Long keyId = selectResultSet.getLong(1);
+                String preSharedKey = selectResultSet.getString(2);
                 updateStatement = conn.prepareStatement("UPDATE cloud.keystore ks SET ks.key = ? WHERE ks.id = ?");
-                updateStatement.setString(1, DBEncryptionUtil.encrypt(selectResultSet.getString(2)));
-                updateStatement.setLong(2, selectResultSet.getLong(1));
+                updateStatement.setString(1, DBEncryptionUtil.encrypt(preSharedKey));
+                updateStatement.setLong(2, keyId);
                 updateStatement.executeUpdate();
                 updateStatement.close();
             }
@@ -121,10 +125,16 @@ public class Upgrade450to451 implements DbUpgrade {
             selectStatement = conn.prepareStatement("SELECT id, ipsec_psk FROM `cloud`.`remote_access_vpn`");
             resultSet = selectStatement.executeQuery();
             while (resultSet.next()) {
+                Long rowId = resultSet.getLong(1);
                 String preSharedKey = resultSet.getString(2);
+                try {
+                    preSharedKey = DBEncryptionUtil.decrypt(preSharedKey);
+                } catch (EncryptionOperationNotPossibleException ignored) {
+                    s_logger.debug("The ipsec_psk preshared key id=" + rowId + "in remote_access_vpn is not encrypted, encrypting it.");
+                }
                 updateStatement = conn.prepareStatement("UPDATE `cloud`.`remote_access_vpn` SET ipsec_psk=? WHERE id=?");
                 updateStatement.setString(1, DBEncryptionUtil.encrypt(preSharedKey));
-                updateStatement.setLong(2, resultSet.getLong(1));
+                updateStatement.setLong(2, rowId);
                 updateStatement.executeUpdate();
                 updateStatement.close();
             }
@@ -193,4 +203,21 @@ public class Upgrade450to451 implements DbUpgrade {
         }
         s_logger.debug("Done. Updated user_vm_details table with nicAdapter entries by copying from vm_template_detail table. This affects only VM/templates with hypervisor_type as VMware.");
     }
+
+    private void upgradeVMWareLocalStorage(Connection conn) {
+        PreparedStatement updatePstmt = null;
+        try {
+            updatePstmt = conn.prepareStatement("UPDATE storage_pool SET pool_type='VMFS',host_address=@newaddress WHERE (@newaddress:=concat('VMFS datastore: ', path)) IS NOT NULL AND scope = 'HOST' AND pool_type = 'LVM' AND id IN (SELECT * FROM (SELECT storage_pool.id FROM storage_pool,cluster WHERE storage_pool.cluster_id = cluster.id AND cluster.hypervisor_type='VMware') AS t);");
+            updatePstmt.executeUpdate();
+        } catch (SQLException e) {
+            throw new CloudRuntimeException("Unable to upgrade VMWare local storage pool type", e);
+        } finally {
+            try {
+                if (updatePstmt != null)
+                    updatePstmt.close();
+            } catch (SQLException e) {
+            }
+            s_logger.debug("Done, upgraded VMWare local storage pool type to VMFS and host_address to the VMFS format");
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/06e353e5/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java
index 808cb5b..9ac32d4 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java
@@ -378,12 +378,22 @@ public class VMwareGuru extends HypervisorGuruBase implements HypervisorGuru, Co
         //NOTE: the hostid can be a hypervisor host, or a ssvm agent. For copycommand, if it's for volume upload, the hypervisor
         //type is empty, so we need to check the format of volume at first.
         if (cmd instanceof CopyCommand) {
-            CopyCommand cpyCommand = (CopyCommand)cmd;
+            CopyCommand cpyCommand = (CopyCommand) cmd;
             DataTO srcData = cpyCommand.getSrcTO();
             DataStoreTO srcStoreTO = srcData.getDataStore();
             DataTO destData = cpyCommand.getDestTO();
             DataStoreTO destStoreTO = destData.getDataStore();
 
+            boolean inSeq = true;
+            if ((srcData.getObjectType() == DataObjectType.SNAPSHOT) || (destData.getObjectType() == DataObjectType.SNAPSHOT)) {
+                inSeq = false;
+            } else if ((destStoreTO.getRole() == DataStoreRole.Image) || (destStoreTO.getRole() == DataStoreRole.ImageCache)) {
+                inSeq = false;
+            } else if (!VmwareFullClone.value()) {
+                inSeq = false;
+            }
+            cpyCommand.setExecuteInSequence(inSeq);
+
             if (srcData.getObjectType() == DataObjectType.VOLUME) {
                 VolumeObjectTO volumeObjectTO = (VolumeObjectTO)srcData;
                 if (Storage.ImageFormat.OVA == volumeObjectTO.getFormat()) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/06e353e5/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
index 796999b..a628fb7 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
@@ -4245,7 +4245,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
                     DatastoreSummary dsSummary = dsMo.getSummary();
                     String address = hostMo.getHostName();
                     StoragePoolInfo pInfo =
-                            new StoragePoolInfo(poolUuid, address, dsMo.getMor().getValue(), "", StoragePoolType.LVM, dsSummary.getCapacity(), dsSummary.getFreeSpace());
+                            new StoragePoolInfo(poolUuid, address, dsMo.getMor().getValue(), "", StoragePoolType.VMFS, dsSummary.getCapacity(), dsSummary.getFreeSpace());
                     StartupStorageCommand cmd = new StartupStorageCommand();
                     cmd.setName(poolUuid);
                     cmd.setPoolInfo(pInfo);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/06e353e5/server/src/com/cloud/storage/StorageManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java
index fafcdcd..2a46592 100644
--- a/server/src/com/cloud/storage/StorageManagerImpl.java
+++ b/server/src/com/cloud/storage/StorageManagerImpl.java
@@ -41,6 +41,7 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
+import com.cloud.hypervisor.Hypervisor;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -545,7 +546,11 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
         }
         DataStore store;
         try {
-            StoragePoolVO pool = _storagePoolDao.findPoolByHostPath(host.getDataCenterId(), host.getPodId(), pInfo.getHost(), pInfo.getHostPath(), pInfo.getUuid());
+            String hostAddress = pInfo.getHost();
+            if (host.getHypervisorType() == Hypervisor.HypervisorType.VMware) {
+                hostAddress = "VMFS datastore: " + pInfo.getHostPath();
+            }
+            StoragePoolVO pool = _storagePoolDao.findPoolByHostPath(host.getDataCenterId(), host.getPodId(), hostAddress, pInfo.getHostPath(), pInfo.getUuid());
             if (pool == null && host.getHypervisorType() == HypervisorType.VMware) {
                 // perform run-time upgrade. In versions prior to 2.2.12, there
                 // is a bug that we don't save local datastore info (host path
@@ -554,12 +559,12 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
                 // available on the host, to support smooth migration, we
                 // need to perform runtime upgrade here
                 if (pInfo.getHostPath().length() > 0) {
-                    pool = _storagePoolDao.findPoolByHostPath(host.getDataCenterId(), host.getPodId(), pInfo.getHost(), "", pInfo.getUuid());
+                    pool = _storagePoolDao.findPoolByHostPath(host.getDataCenterId(), host.getPodId(), hostAddress, "", pInfo.getUuid());
                 }
             }
             if (pool == null) {
                 //the path can be different, but if they have the same uuid, assume they are the same storage
-                pool = _storagePoolDao.findPoolByHostPath(host.getDataCenterId(), host.getPodId(), pInfo.getHost(), null,
+                pool = _storagePoolDao.findPoolByHostPath(host.getDataCenterId(), host.getPodId(), hostAddress, null,
                         pInfo.getUuid());
                 if (pool != null) {
                     s_logger.debug("Found a storage pool: " + pInfo.getUuid() + ", but with different hostpath " + pInfo.getHostPath() + ", still treat it as the same pool");


[2/3] git commit: updated refs/heads/master to 05e4ba7

Posted by bh...@apache.org.
server: NPE checks and improved case checking

- pool allocation checks for both root and data disks
- NPE checks to not add null object in collection or try to migrate null VM
- HA work tries need to increment and be given up when max retries are crossed
- VM creation should check IP address format for IPv4 and IPv6
- If userdata is not supported by a network, then fail early if userdata, ssh key,
  or password enabled template is passed/used

Signed-off-by: Rohit Yadav <ro...@shapeblue.com>
(cherry picked from commit 24435dd6bc2424da18277ca00229d1d3bb0ec284)
Signed-off-by: Rohit Yadav <ro...@shapeblue.com>


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

Branch: refs/heads/master
Commit: ca9960332183f3b13e16e432f0e14f3156efc39f
Parents: 06e353e
Author: Rohit Yadav <ro...@shapeblue.com>
Authored: Thu Apr 16 16:51:02 2015 +0530
Committer: Rohit Yadav <ro...@shapeblue.com>
Committed: Thu Apr 16 17:37:03 2015 +0530

----------------------------------------------------------------------
 .../cloud/deploy/DeploymentPlanningManagerImpl.java |  2 +-
 .../com/cloud/ha/HighAvailabilityManagerImpl.java   | 14 +++++++++++++-
 server/src/com/cloud/vm/UserVmManagerImpl.java      | 16 ++++++++++++++++
 3 files changed, 30 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ca996033/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
index e6c3f3a..7345c2a 100644
--- a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
+++ b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
@@ -1215,7 +1215,7 @@ StateListener<State, VirtualMachine.Event, VirtualMachine> {
             // volume is ready and the pool should be reused.
             // In this case, also check if rest of the volumes are ready and can
             // be reused.
-            if (plan.getPoolId() != null) {
+            if (plan.getPoolId() != null || (toBeCreated.getVolumeType() == Volume.Type.DATADISK && toBeCreated.getPoolId() != null && toBeCreated.getState() == Volume.State.Ready)) {
                 s_logger.debug("Volume has pool already allocated, checking if pool can be reused, poolId: " + toBeCreated.getPoolId());
                 List<StoragePool> suitablePools = new ArrayList<StoragePool>();
                 StoragePool pool = null;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ca996033/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java b/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
index f15889d..1ecdfcd 100644
--- a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
+++ b/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
@@ -638,6 +638,9 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
             _haDao.update(work.getId(), work);
 
             VMInstanceVO vm = _instanceDao.findById(vmId);
+            if (vm == null) {
+                return null;
+            }
             // First try starting the vm with its original planner, if it doesn't succeed send HAPlanner as its an emergency.
             _itMgr.migrateAway(vm.getUuid(), srcHostId);
             return null;
@@ -757,7 +760,10 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
         List<HaWorkVO> works = _haDao.findTakenWorkItems(WorkType.Migration);
         List<VMInstanceVO> vms = new ArrayList<VMInstanceVO>(works.size());
         for (HaWorkVO work : works) {
-            vms.add(_instanceDao.findById(work.getInstanceId()));
+            VMInstanceVO vm = _instanceDao.findById(work.getInstanceId());
+            if (vm != null) {
+                vms.add(vm);
+            }
         }
         return vms;
     }
@@ -917,6 +923,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
                     } else {
                         s_logger.info("Rescheduling " + work + " to try again at " + new Date(nextTime << 10));
                         work.setTimeToTry(nextTime);
+                        work.setTimesTried(work.getTimesTried() + 1);
                         work.setServerId(null);
                         work.setDateTaken(null);
                     }
@@ -927,6 +934,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
 
                     s_logger.info("Rescheduling " + work + " to try again at " + new Date(nextTime << 10));
                     work.setTimeToTry(nextTime);
+                    work.setTimesTried(work.getTimesTried() + 1);
                     work.setServerId(null);
                     work.setDateTaken(null);
 
@@ -935,6 +943,10 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
                     VMInstanceVO vm = _instanceDao.findById(work.getInstanceId());
                     work.setUpdateTime(vm.getUpdated());
                     work.setPreviousState(vm.getState());
+                    if (!Step.Done.equals(work.getStep()) && work.getTimesTried() >= _maxRetries) {
+                        s_logger.warn("Giving up, retries max times for work: " + work);
+                        work.setStep(Step.Done);
+                    }
                 }
                 _haDao.update(work.getId(), work);
             } catch (final Throwable th) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ca996033/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 46275be..38ca390 100644
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -1016,6 +1016,9 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
 
         NicProfile profile = new NicProfile(null, null);
         if (ipAddress != null) {
+            if (!(NetUtils.isValidIp(ipAddress) || NetUtils.isValidIpv6(ipAddress))) {
+                throw new InvalidParameterValueException("Invalid format for IP address parameter: " + ipAddress);
+            }
             profile = new NicProfile(ipAddress, null);
         }
 
@@ -2892,6 +2895,19 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
                 }
 
                 profile.setDefaultNic(true);
+                if (!_networkModel.areServicesSupportedInNetwork(network.getId(), new Service[]{Service.UserData})) {
+                    if ((userData != null) && (!userData.isEmpty())) {
+                        throw new InvalidParameterValueException("Unable to deploy VM as UserData is provided while deploying the VM, but there is no support for " + Network.Service.UserData.getName() + " service in the default network " + network.getId());
+                    }
+
+                    if ((sshPublicKey != null) && (!sshPublicKey.isEmpty())) {
+                        throw new InvalidParameterValueException("Unable to deploy VM as SSH keypair is provided while deploying the VM, but there is no support for " + Network.Service.UserData.getName() + " service in the default network " + network.getId());
+                    }
+
+                    if (template.getEnablePassword()) {
+                        throw new InvalidParameterValueException("Unable to deploy VM as template " + template.getId() + " is password enabled, but there is no support for " + Network.Service.UserData.getName() + " service in the default network " + network.getId());
+                    }
+                }
             }
 
             networks.add(new Pair<NetworkVO, NicProfile>(network, profile));


[3/3] git commit: updated refs/heads/master to 05e4ba7

Posted by bh...@apache.org.
kvm: fallback to eu.ceph.com mvn repo as ceph.com is down

As suggested by Wido on the dev ML changing the repo to eu.ceph.com to avoid
build failures. Will revert if ceph.com is up again.

Signed-off-by: Rohit Yadav <ro...@shapeblue.com>
(cherry picked from commit c9fd57fff3aa1c7428ab15d0aea3067601b16fba)
Signed-off-by: Rohit Yadav <ro...@shapeblue.com>


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

Branch: refs/heads/master
Commit: 05e4ba7350e7da36e3b9511d5e987c84b0be7ab5
Parents: ca99603
Author: Rohit Yadav <ro...@shapeblue.com>
Authored: Thu Apr 16 17:09:13 2015 +0530
Committer: Rohit Yadav <ro...@shapeblue.com>
Committed: Thu Apr 16 17:37:11 2015 +0530

----------------------------------------------------------------------
 plugins/hypervisors/kvm/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/05e4ba73/plugins/hypervisors/kvm/pom.xml
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/pom.xml b/plugins/hypervisors/kvm/pom.xml
index 3f3a3e9..e116a7a 100644
--- a/plugins/hypervisors/kvm/pom.xml
+++ b/plugins/hypervisors/kvm/pom.xml
@@ -28,7 +28,7 @@
     </repository>
     <repository>
       <id>ceph-com</id>
-      <url>http://ceph.com/maven</url>
+      <url>http://eu.ceph.com/maven</url>
       <snapshots>
         <enabled>false</enabled>
       </snapshots>