]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Remove db access in VNX driver
authorXi Yang <yang.xi@99cloud.net>
Tue, 27 Oct 2015 04:11:15 +0000 (12:11 +0800)
committerXi Yang <yang.xi@99cloud.net>
Thu, 26 Nov 2015 09:07:00 +0000 (17:07 +0800)
DB access should be removed in all CG related
operations. This patch is removing the DB access
in VNX driver.

Change-Id: Ifee0cdcaba41d39500c1ce7aef0d15b2737e6a20
Closes-Bug: 1511663

cinder/tests/unit/test_emc_vnxdirect.py
cinder/volume/drivers/emc/emc_cli_fc.py
cinder/volume/drivers/emc/emc_cli_iscsi.py
cinder/volume/drivers/emc/emc_vnx_cli.py

index 336508fed7f08cf1ac7ae167991eaa189f32004f..8e23887d0592ee1c850bb9f0651e7d8504d09f4c 100644 (file)
@@ -3868,12 +3868,9 @@ Time Remaining:  0 second(s)
                     self.testData.LUN_DELETE_CMD('vol1')]
         results = [SUCCEED, SUCCEED]
         fake_cli = self.driverSetup(commands, results)
-        self.driver.db = mock.MagicMock()
-        self.driver.db.volume_get_all_by_group.return_value =\
-            self.testData.CONSISTENCY_GROUP_VOLUMES()
-        self.driver.delete_consistencygroup(None,
-                                            self.testData.test_cg,
-                                            [])
+        self.driver.delete_consistencygroup(
+            None, self.testData.test_cg,
+            self.testData.CONSISTENCY_GROUP_VOLUMES())
         expect_cmd = [
             mock.call(
                 *self.testData.DELETE_CONSISTENCYGROUP_CMD(
@@ -3882,9 +3879,7 @@ Time Remaining:  0 second(s)
             mock.call(*self.testData.LUN_DELETE_CMD('vol1'))]
         fake_cli.assert_has_calls(expect_cmd)
 
-    @mock.patch(
-        'cinder.objects.snapshot.SnapshotList.get_all_for_cgsnapshot')
-    def test_create_cgsnapshot(self, get_all_for_cgsnapshot):
+    def test_create_cgsnapshot(self):
         cgsnapshot = self.testData.test_cgsnapshot['id']
         cg_name = self.testData.test_cgsnapshot['consistencygroup_id']
         commands = [self.testData.CREATE_CG_SNAPSHOT(cg_name, cgsnapshot)]
@@ -3893,17 +3888,15 @@ Time Remaining:  0 second(s)
         snapshot_obj = fake_snapshot.fake_snapshot_obj(
             self.testData.SNAPS_IN_SNAP_GROUP())
         snapshot_obj.consistencygroup_id = cg_name
-        get_all_for_cgsnapshot.return_value = [snapshot_obj]
-        self.driver.create_cgsnapshot(None, self.testData.test_cgsnapshot, [])
+        self.driver.create_cgsnapshot(None, self.testData.test_cgsnapshot,
+                                      [snapshot_obj])
         expect_cmd = [
             mock.call(
                 *self.testData.CREATE_CG_SNAPSHOT(
                     cg_name, cgsnapshot))]
         fake_cli.assert_has_calls(expect_cmd)
 
-    @mock.patch(
-        'cinder.objects.snapshot.SnapshotList.get_all_for_cgsnapshot')
-    def test_delete_cgsnapshot(self, get_all_for_cgsnapshot):
+    def test_delete_cgsnapshot(self):
         snap_name = self.testData.test_cgsnapshot['id']
         commands = [self.testData.DELETE_CG_SNAPSHOT(snap_name)]
         results = [SUCCEED]
@@ -3912,10 +3905,9 @@ Time Remaining:  0 second(s)
             self.testData.SNAPS_IN_SNAP_GROUP())
         cg_name = self.testData.test_cgsnapshot['consistencygroup_id']
         snapshot_obj.consistencygroup_id = cg_name
-        get_all_for_cgsnapshot.return_value = [snapshot_obj]
         self.driver.delete_cgsnapshot(None,
                                       self.testData.test_cgsnapshot,
-                                      [])
+                                      [snapshot_obj])
         expect_cmd = [
             mock.call(
                 *self.testData.DELETE_CG_SNAPSHOT(
index eb221a95d5c9a2c042567e259167c838a3625fc0..37737b51c0092904fca0426a47f52660ab53b780 100644 (file)
@@ -233,16 +233,17 @@ class EMCCLIFCDriver(driver.FibreChannelDriver):
     def delete_consistencygroup(self, context, group, volumes):
         """Deletes a consistency group."""
         return self.cli.delete_consistencygroup(
-            self, context, group)
+            context, group, volumes)
 
     def create_cgsnapshot(self, context, cgsnapshot, snapshots):
         """Creates a cgsnapshot."""
         return self.cli.create_cgsnapshot(
-            self, context, cgsnapshot)
+            context, cgsnapshot, snapshots)
 
     def delete_cgsnapshot(self, context, cgsnapshot, snapshots):
         """Deletes a cgsnapshot."""
-        return self.cli.delete_cgsnapshot(self, context, cgsnapshot)
+        return self.cli.delete_cgsnapshot(
+            context, cgsnapshot, snapshots)
 
     def get_pool(self, volume):
         """Returns the pool name of a volume."""
index 861df396ae7a445ee9ad19f8df0f222e635bc90d..eb6bc221b0b2facdff74b3bf7aa923b12a1f81d6 100644 (file)
@@ -212,16 +212,17 @@ class EMCCLIISCSIDriver(driver.ISCSIDriver):
     def delete_consistencygroup(self, context, group, volumes):
         """Deletes a consistency group."""
         return self.cli.delete_consistencygroup(
-            self, context, group)
+            context, group, volumes)
 
     def create_cgsnapshot(self, context, cgsnapshot, snapshots):
         """Creates a cgsnapshot."""
         return self.cli.create_cgsnapshot(
-            self, context, cgsnapshot)
+            context, cgsnapshot, snapshots)
 
     def delete_cgsnapshot(self, context, cgsnapshot, snapshots):
         """Deletes a cgsnapshot."""
-        return self.cli.delete_cgsnapshot(self, context, cgsnapshot)
+        return self.cli.delete_cgsnapshot(
+            context, cgsnapshot, snapshots)
 
     def get_pool(self, volume):
         """Returns the pool name of a volume."""
index dce80b2247f2f17255c32b65094694b918889018..8614921c107362f866c757d124c758a7088e74e6 100644 (file)
@@ -40,7 +40,6 @@ from taskflow.types import failure
 
 from cinder import exception
 from cinder.i18n import _, _LE, _LI, _LW
-from cinder import objects
 from cinder import utils
 from cinder.volume import configuration as config
 from cinder.volume.drivers.san import san
@@ -3043,12 +3042,12 @@ class EMCVnxCliBase(object):
 
         return model_update
 
-    def delete_consistencygroup(self, driver, context, group):
+    def delete_consistencygroup(self, context, group, volumes):
         """Deletes a consistency group."""
         cg_name = group['id']
-        volumes = driver.db.volume_get_all_by_group(context, group['id'])
 
         model_update = {}
+        volumes_model_update = []
         model_update['status'] = group['status']
         LOG.info(_LI('Start to delete consistency group: %(cg_name)s'),
                  {'cg_name': cg_name})
@@ -3061,12 +3060,13 @@ class EMCVnxCliBase(object):
         for volume_ref in volumes:
             try:
                 self._client.delete_lun(volume_ref['name'])
-                volume_ref['status'] = 'deleted'
+                volumes_model_update.append(
+                    {'id': volume_ref['id'], 'status': 'deleted'})
             except Exception:
-                volume_ref['status'] = 'error_deleting'
-                model_update['status'] = 'error_deleting'
+                volumes_model_update.append(
+                    {'id': volume_ref['id'], 'status': 'error_deleting'})
 
-        return model_update, volumes
+        return model_update, volumes_model_update
 
     def update_consistencygroup(self, context,
                                 group,
@@ -3103,13 +3103,12 @@ class EMCVnxCliBase(object):
                                                           ids_later)
         return model_update, None, None
 
-    def create_cgsnapshot(self, driver, context, cgsnapshot):
+    def create_cgsnapshot(self, context, cgsnapshot, snapshots):
         """Creates a cgsnapshot (snap group)."""
         cgsnapshot_id = cgsnapshot['id']
-        snapshots = objects.SnapshotList().get_all_for_cgsnapshot(
-            context, cgsnapshot_id)
 
         model_update = {}
+        snapshots_model_update = []
         LOG.info(_LI('Start to create cgsnapshot for consistency group'
                      ': %(group_name)s'),
                  {'group_name': cgsnapshot['consistencygroup_id']})
@@ -3118,7 +3117,8 @@ class EMCVnxCliBase(object):
             self._client.create_cgsnapshot(cgsnapshot['consistencygroup_id'],
                                            cgsnapshot['id'])
             for snapshot in snapshots:
-                snapshot['status'] = 'available'
+                snapshots_model_update.append(
+                    {'id': snapshot['id'], 'status': 'available'})
         except Exception:
             with excutils.save_and_reraise_exception():
                 LOG.error(_LE('Create cg snapshot %s failed.'),
@@ -3126,15 +3126,14 @@ class EMCVnxCliBase(object):
 
         model_update['status'] = 'available'
 
-        return model_update, snapshots
+        return model_update, snapshots_model_update
 
-    def delete_cgsnapshot(self, driver, context, cgsnapshot):
+    def delete_cgsnapshot(self, context, cgsnapshot, snapshots):
         """Deletes a cgsnapshot (snap group)."""
         cgsnapshot_id = cgsnapshot['id']
-        snapshots = objects.SnapshotList().get_all_for_cgsnapshot(
-            context, cgsnapshot_id)
 
         model_update = {}
+        snapshots_model_update = []
         model_update['status'] = cgsnapshot['status']
         LOG.info(_LI('Delete cgsnapshot %(snap_name)s for consistency group: '
                      '%(group_name)s'), {'snap_name': cgsnapshot['id'],
@@ -3143,13 +3142,14 @@ class EMCVnxCliBase(object):
         try:
             self._client.delete_cgsnapshot(cgsnapshot['id'])
             for snapshot in snapshots:
-                snapshot['status'] = 'deleted'
+                snapshots_model_update.append(
+                    {'id': snapshot['id'], 'status': 'deleted'})
         except Exception:
             with excutils.save_and_reraise_exception():
                 LOG.error(_LE('Delete cgsnapshot %s failed.'),
                           cgsnapshot_id)
 
-        return model_update, snapshots
+        return model_update, snapshots_model_update
 
     def get_lun_id(self, volume):
         lun_id = None