cloudstack-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mtutkow...@apache.org
Subject git commit: updated refs/heads/4.3 to fef4c79
Date Wed, 15 Jan 2014 07:19:50 GMT
Updated Branches:
  refs/heads/4.3 032888c46 -> fef4c79cb


CLOUDSTACK-5873: [Automation] Failed to attach volume to VM, if the vm is created with option
startvm=false


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

Branch: refs/heads/4.3
Commit: fef4c79cb20adbf0019e02e9fa890a2a519be554
Parents: 032888c
Author: Mike Tutkowski <mike.tutkowski@solidfire.com>
Authored: Tue Jan 14 19:40:14 2014 -0700
Committer: Mike Tutkowski <mike.tutkowski@solidfire.com>
Committed: Wed Jan 15 00:18:34 2014 -0700

----------------------------------------------------------------------
 .../apache/cloudstack/storage/volume/VolumeServiceImpl.java | 6 ++++--
 .../xen/src/com/cloud/hypervisor/XenServerGuru.java         | 6 +++++-
 server/src/com/cloud/storage/VolumeApiServiceImpl.java      | 9 ++++++---
 3 files changed, 15 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fef4c79c/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
index b9dbd92..7796565 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
@@ -159,8 +159,9 @@ public class VolumeServiceImpl implements VolumeService {
         return null;
     }
 
+    @Override
     public boolean connectVolumeToHost(VolumeInfo volumeInfo, Host host, DataStore dataStore)
{
-        DataStoreDriver dataStoreDriver = dataStore.getDriver();
+        DataStoreDriver dataStoreDriver = dataStore != null ? dataStore.getDriver() : null;
 
         if (dataStoreDriver instanceof PrimaryDataStoreDriver) {
             return ((PrimaryDataStoreDriver)dataStoreDriver).connectVolumeToHost(volumeInfo,
host, dataStore);
@@ -169,8 +170,9 @@ public class VolumeServiceImpl implements VolumeService {
         return false;
     }
 
+    @Override
     public void disconnectVolumeFromHost(VolumeInfo volumeInfo, Host host, DataStore dataStore)
{
-        DataStoreDriver dataStoreDriver = dataStore.getDriver();
+        DataStoreDriver dataStoreDriver = dataStore != null ? dataStore.getDriver() : null;
 
         if (dataStoreDriver instanceof PrimaryDataStoreDriver) {
             ((PrimaryDataStoreDriver)dataStoreDriver).disconnectVolumeFromHost(volumeInfo,
host, dataStore);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fef4c79c/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 af37068..28bd724 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/XenServerGuru.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/XenServerGuru.java
@@ -101,7 +101,11 @@ public class XenServerGuru extends HypervisorGuruBase implements HypervisorGuru
                 if (volume.getVolumeType() == Volume.Type.DATADISK) {
                     StoragePoolVO storagePool = _storagePoolDao.findById(volume.getPoolId());
 
-                    if (storagePool.isManaged()) {
+                    // storagePool should be null if we are expunging a volume that was never
+                    // attached to a VM that was started (the "trick" for storagePool to
be null
+                    // is that none of the VMs this volume may have been attached to were
ever started,
+                    // so the volume was never assigned to a storage pool)
+                    if (storagePool != null && storagePool.isManaged()) {
                         DataTO volTO = _volFactory.getVolume(volume.getId()).getTO();
                         DiskTO disk = new DiskTO(volTO, volume.getDeviceId(), volume.getPath(),
volume.getVolumeType());
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fef4c79c/server/src/com/cloud/storage/VolumeApiServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
index 3de2767..0c89541 100644
--- a/server/src/com/cloud/storage/VolumeApiServiceImpl.java
+++ b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
@@ -1489,12 +1489,13 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
             }
         }
 
-        DataStore dataStore = dataStoreMgr.getDataStore(volume.getPoolId(), DataStoreRole.Primary);
-
         if (!sendCommand || (answer != null && answer.getResult())) {
             // Mark the volume as detached
             _volsDao.detachVolume(volume.getId());
 
+            // volume.getPoolId() should be null if the VM we are attaching the disk to has
never been started before
+            DataStore dataStore = volume.getPoolId() != null ? dataStoreMgr.getDataStore(volume.getPoolId(),
DataStoreRole.Primary) : null;
+
             volService.disconnectVolumeFromHost(volFactory.getVolume(volume.getId()), host,
dataStore);
 
             return _volsDao.findById(volumeId);
@@ -1961,10 +1962,12 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
             }
         }
 
-        DataStore dataStore = dataStoreMgr.getDataStore(volumeToAttachStoragePool.getId(),
DataStoreRole.Primary);
+        // volumeToAttachStoragePool should be null if the VM we are attaching the disk to
has never been started before
+        DataStore dataStore = volumeToAttachStoragePool != null ? dataStoreMgr.getDataStore(volumeToAttachStoragePool.getId(),
DataStoreRole.Primary) : null;
 
         boolean queryForChap = true;
 
+        // if we don't have a host, the VM we are attaching the disk to has never been started
before
         if (host != null) {
             try {
                 // if connectVolumeToHost returns true, then we do not want to use CHAP because
the volume is already connected to the host(s)


Mime
View raw message