From: Xi Yang <yang.xi@99cloud.net>
Date: Tue, 27 Oct 2015 04:11:15 +0000 (+0800)
Subject: Remove db access in VNX driver
X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=a113b1877c01ec52511481856d3a50915be7ea3e;p=openstack-build%2Fcinder-build.git

Remove db access in VNX driver

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
---

diff --git a/cinder/tests/unit/test_emc_vnxdirect.py b/cinder/tests/unit/test_emc_vnxdirect.py
index 336508fed..8e23887d0 100644
--- a/cinder/tests/unit/test_emc_vnxdirect.py
+++ b/cinder/tests/unit/test_emc_vnxdirect.py
@@ -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(
diff --git a/cinder/volume/drivers/emc/emc_cli_fc.py b/cinder/volume/drivers/emc/emc_cli_fc.py
index eb221a95d..37737b51c 100644
--- a/cinder/volume/drivers/emc/emc_cli_fc.py
+++ b/cinder/volume/drivers/emc/emc_cli_fc.py
@@ -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."""
diff --git a/cinder/volume/drivers/emc/emc_cli_iscsi.py b/cinder/volume/drivers/emc/emc_cli_iscsi.py
index 861df396a..eb6bc221b 100644
--- a/cinder/volume/drivers/emc/emc_cli_iscsi.py
+++ b/cinder/volume/drivers/emc/emc_cli_iscsi.py
@@ -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."""
diff --git a/cinder/volume/drivers/emc/emc_vnx_cli.py b/cinder/volume/drivers/emc/emc_vnx_cli.py
index dce80b224..8614921c1 100644
--- a/cinder/volume/drivers/emc/emc_vnx_cli.py
+++ b/cinder/volume/drivers/emc/emc_vnx_cli.py
@@ -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