]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Dell Storage Center Driver API bug
authorTom Swanson <tom_swanson@dell.com>
Fri, 27 Feb 2015 17:25:38 +0000 (11:25 -0600)
committerTom Swanson <tom_swanson@dell.com>
Sat, 28 Feb 2015 02:02:39 +0000 (20:02 -0600)
In later versions of the Dell Storage Center REST API
the index attribute is removed from the ScVolume object.
Referencing this caused an exception that failed volume
creation.  Replaced with instanceId.

Also _init_volume was mapping/unmapping to every server
that was currently up on the Storage Center rather than
a single server.  While this would certainly initialize
the volume it would create a lot of extra work on a busy
system.  We now break after the first map/unmap.

Changed copyright to 2015 to match when it will actually
be released.

Change-Id: I89f3967144d7effbb67d1498fc3b4a7a23042a59
Closes-Bug: 1426463

cinder/volume/drivers/dell/dell_storagecenter_api.py
cinder/volume/drivers/dell/dell_storagecenter_common.py
cinder/volume/drivers/dell/dell_storagecenter_fc.py
cinder/volume/drivers/dell/dell_storagecenter_iscsi.py

index 069c2157074eb05f35021addcef3e63c67a0c22e..38fb26cca20470de7e0a43433e819eb45584508f 100644 (file)
@@ -1,4 +1,4 @@
-#    Copyright 2014 Dell Inc.
+#    Copyright 2015 Dell Inc.
 #
 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
 #    not use this file except in compliance with the License. You may obtain
@@ -364,6 +364,7 @@ class StorageCenterApi(object):
                                     scserver)
                     self.unmap_volume(scvolume,
                                       scserver)
+                    break
 
     def create_volume(self, name, size, ssn, volfolder):
         '''This creates a new volume on the storage center.  It
@@ -407,10 +408,17 @@ class StorageCenterApi(object):
                       {'name': name,
                        'c': r.status_code,
                        'r': r.reason})
-        if scvolume is not None:
-            LOG.info(_LI('Created volume %(index)d: %(name)s'),
-                     {'index': scvolume['index'],
+        if scvolume:
+            LOG.info(_LI('Created volume %(instanceId)s: %(name)s'),
+                     {'instanceId': scvolume['instanceId'],
                       'name': scvolume['name']})
+        else:
+            LOG.error(_LE('ScVolume returned success with empty payload.'
+                          '  Attempting to locate volume'))
+            # In theory it is there since success was returned.
+            # Try one last time to find it before returning.
+            scvolume = self.find_volume(ssn, name, None)
+
         return scvolume
 
     def find_volume(self, ssn, name=None, instanceid=None):
@@ -1079,7 +1087,7 @@ class StorageCenterApi(object):
                        'r': r.reason})
         if vol is not None:
             LOG.debug('Volume expanded: %(i)s %(s)s',
-                      {'i': vol['index'],
+                      {'i': vol['instanceId'],
                        's': vol['configuredSize']})
         return vol
 
index 02c13a3ba3e6e5444f4acd08fc22068629f3e367..536d4608a37d707495365483a9389ff597f34c39 100644 (file)
@@ -1,4 +1,4 @@
-#    Copyright 2014 Dell Inc.
+#    Copyright 2015 Dell Inc.
 #
 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
 #    not use this file except in compliance with the License. You may obtain
index bf4d511cebdbfebdad76771bd4588593cd64b54c..d85a0d25977053bf3f8fcace750de776d19fe8b3 100644 (file)
@@ -1,4 +1,4 @@
-#    Copyright 2014 Dell Inc.
+#    Copyright 2015 Dell Inc.
 #
 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
 #    not use this file except in compliance with the License. You may obtain
index 3561ffaf0d2c05f129d336eaaf3a8e1cfec8b7ef..0f532951658a146b2dbec7d78ad208b42f93695f 100644 (file)
@@ -1,4 +1,4 @@
-#    Copyright 2014 Dell Inc.
+#    Copyright 2015 Dell Inc.
 #
 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
 #    not use this file except in compliance with the License. You may obtain