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:19 UTC

[1/3] git commit: updated refs/heads/4.5 to c9fd57f

Repository: cloudstack
Updated Branches:
  refs/heads/4.5 b34202a84 -> c9fd57fff


vmware: support vmfs as local storage pool type

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/752d784d
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/752d784d
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/752d784d

Branch: refs/heads/4.5
Commit: 752d784d92b4ce461ec6a19a6b54220bb967d4d0
Parents: b34202a
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:10:43 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/752d784d/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/752d784d/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/752d784d/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 fd10830..3c7735d 100755
--- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
@@ -4194,7 +4194,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/752d784d/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 c8f5d29..9c442ac 100755
--- 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;
 
@@ -542,7 +543,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
@@ -551,12 +556,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");


[3/3] git commit: updated refs/heads/4.5 to c9fd57f

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>


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

Branch: refs/heads/4.5
Commit: c9fd57fff3aa1c7428ab15d0aea3067601b16fba
Parents: 24435dd
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:28:20 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/c9fd57ff/plugins/hypervisors/kvm/pom.xml
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/pom.xml b/plugins/hypervisors/kvm/pom.xml
index d2e5708..96ec2b5 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>


[2/3] git commit: updated refs/heads/4.5 to c9fd57f

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>


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

Branch: refs/heads/4.5
Commit: 24435dd6bc2424da18277ca00229d1d3bb0ec284
Parents: 752d784
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:28:20 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/24435dd6/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 54149c5..7986b3a 100755
--- a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
+++ b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
@@ -1208,7 +1208,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/24435dd6/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 111b9ce..ce6239a 100755
--- a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
+++ b/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
@@ -634,6 +634,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;
@@ -753,7 +756,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;
     }
@@ -913,6 +919,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);
                     }
@@ -923,6 +930,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);
 
@@ -931,6 +939,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/24435dd6/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 e82a210..13ed97e 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -1010,6 +1010,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);
         }
 
@@ -2874,6 +2877,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));