]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Huawei: Judgement failure when creating hypermetro
authorliuke2 <liuke2@huawei.com>
Tue, 16 Feb 2016 12:12:08 +0000 (20:12 +0800)
committerliuke2 <liuke2@huawei.com>
Sat, 20 Feb 2016 08:47:29 +0000 (16:47 +0800)
Huawei hypermetro is created in the absence of remote pools, it has
the judgement failure which will lead to incorrect logs. We cannot
find the location of the error according to the log.

Closes-Bug:#1545898
Change-Id:Ic99531dad4fab5e22e295e19bbfa94c7892e5635

cinder/tests/unit/test_huawei_drivers.py
cinder/volume/drivers/huawei/hypermetro.py

index 6f2bef9fe450e5068c00947656e99c1a4a4a82a7..c71879fa8bcd73f083b2fe1750e9af73621930bf 100644 (file)
@@ -2323,6 +2323,20 @@ class HuaweiISCSIDriverTestCase(test.TestCase):
                           self.driver.create_volume, hyper_volume)
         mock_delete_lun.assert_called_with('1')
 
+    @mock.patch.object(rest_client.RestClient, 'get_all_pools',
+                       return_value=FAKE_STORAGE_POOL_RESPONSE)
+    @mock.patch.object(rest_client.RestClient, 'get_pool_info',
+                       return_value={})
+    def test_create_hypermetro_remote_pool_none_fail(self,
+                                                     mock_pool_info,
+                                                     mock_all_pool_info):
+        param = {'TYPE': '11',
+                 'PARENTID': ''}
+        self.driver.client.login()
+        self.assertRaises(exception.VolumeBackendAPIException,
+                          self.driver.metro.create_hypermetro,
+                          '2', param)
+
     @mock.patch.object(rest_client.RestClient, 'check_lun_exist',
                        return_value=True)
     @mock.patch.object(rest_client.RestClient, 'check_hypermetro_exist',
index 0db361334ffd56b0f68d4627a1c1612774a80298..3031433c736ee199c7662b1c22d8c54f8bde9583 100644 (file)
@@ -40,6 +40,11 @@ class HuaweiHyperMetro(object):
             config_pool = self.configuration.metro_storage_pools
             remote_pool = self.rmt_client.get_all_pools()
             pool = self.rmt_client.get_pool_info(config_pool, remote_pool)
+            if not pool:
+                err_msg = _("Remote pool cannot be found.")
+                LOG.error(err_msg)
+                raise exception.VolumeBackendAPIException(data=err_msg)
+
             # Create remote lun.
             lun_params['pool_id'] = pool['ID']
             remotelun_info = self.rmt_client.create_lun(lun_params)