From: liuke2 Date: Tue, 16 Feb 2016 12:12:08 +0000 (+0800) Subject: Huawei: Judgement failure when creating hypermetro X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=36cee8f1c04b9d9928cf4819f76e5d20ea50fad0;p=openstack-build%2Fcinder-build.git Huawei: Judgement failure when creating hypermetro 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 --- diff --git a/cinder/tests/unit/test_huawei_drivers.py b/cinder/tests/unit/test_huawei_drivers.py index 6f2bef9fe..c71879fa8 100644 --- a/cinder/tests/unit/test_huawei_drivers.py +++ b/cinder/tests/unit/test_huawei_drivers.py @@ -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', diff --git a/cinder/volume/drivers/huawei/hypermetro.py b/cinder/volume/drivers/huawei/hypermetro.py index 0db361334..3031433c7 100644 --- a/cinder/volume/drivers/huawei/hypermetro.py +++ b/cinder/volume/drivers/huawei/hypermetro.py @@ -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)