diff --git a/Cinder/Newton/huawei_driver.py b/Cinder/Newton/huawei_driver.py index 9a8a4c0..bddc83d 100644 --- a/Cinder/Newton/huawei_driver.py +++ b/Cinder/Newton/huawei_driver.py @@ -342,8 +342,8 @@ def _get_opts_from_specs(self, opts_capability, opts_value, "replication_type=' sync' or " "' async'.") else: - LOG.error("Extra specs must be specified as " - "capabilities:%s=' True'.", key) + LOG.warning("Extra specs must be specified as " + "capabilities:%s=' True'.", key) if ((scope in opts_capability) and (key in opts_value) diff --git a/Cinder/Newton/huawei_utils.py b/Cinder/Newton/huawei_utils.py index d704817..12c51a3 100644 --- a/Cinder/Newton/huawei_utils.py +++ b/Cinder/Newton/huawei_utils.py @@ -141,9 +141,19 @@ def get_lun_metadata(volume): if not volume.provider_location: return {} - info = json.loads(volume.provider_location) + try: + info = json.loads(volume.provider_location) + except Exception as err: + LOG.warning("get_lun_metadata get provider_location error, params: " + "%(loc)s, reason: %(err)s", + {"loc": volume.provider_location, "err": err}) + return {} + if isinstance(info, dict): - return info + if "huawei" in volume.provider_location: + return info + else: + return {} # To keep compatible with old driver version admin_metadata = get_admin_metadata(volume) diff --git a/Cinder/Newton/rest_client.py b/Cinder/Newton/rest_client.py index 10be434..3f7221a 100644 --- a/Cinder/Newton/rest_client.py +++ b/Cinder/Newton/rest_client.py @@ -343,6 +343,16 @@ def get_pool_by_name(self, pool_name): if result.get('data'): return result['data'][0] + @staticmethod + def _get_capacity_info(info, pool): + info['CAPACITY'] = pool.get('DATASPACE', pool['USERFREECAPACITY']) + info['TOTALCAPACITY'] = pool['USERTOTALCAPACITY'] + if 'totalSizeWithoutSnap' in pool: + info['LUNCONFIGEDCAPACITY'] = pool['totalSizeWithoutSnap'] + elif 'LUNCONFIGEDCAPACITY' in pool: + info['LUNCONFIGEDCAPACITY'] = pool['LUNCONFIGEDCAPACITY'] + return info + def get_pool_info(self, pool_name=None, pools=None): info = {} if not pool_name: @@ -356,11 +366,10 @@ def get_pool_info(self, pool_name=None, pools=None): break info['ID'] = pool.get('ID') - info['CAPACITY'] = pool.get('DATASPACE', pool['USERFREECAPACITY']) - info['TOTALCAPACITY'] = pool.get('USERTOTALCAPACITY') info['TIER0CAPACITY'] = pool.get('TIER0CAPACITY') info['TIER1CAPACITY'] = pool.get('TIER1CAPACITY') info['TIER2CAPACITY'] = pool.get('TIER2CAPACITY') + self._get_capacity_info(info, pool) return info @@ -1200,6 +1209,12 @@ def _get_capacity(self, pool_name, result): pool_capacity['total_capacity'] = total pool_capacity['free_capacity'] = free + configed_capacity = pool_info.get('LUNCONFIGEDCAPACITY') + if configed_capacity: + provisioned = float( + configed_capacity) / constants.CAPACITY_UNIT + pool_capacity['provisioned_capacity'] = provisioned + return pool_capacity def _get_disk_type(self, pool_name, result): @@ -1337,6 +1352,9 @@ def update_volume_stats(self): 'max_over_subscription_ratio'), smarttier=tier_support )) + if capacity.get('provisioned_capacity'): + pool['provisioned_capacity_gb'] = capacity[ + 'provisioned_capacity'] if disk_type: pool['disk_type'] = disk_type diff --git a/Cinder/Ocata/huawei_driver.py b/Cinder/Ocata/huawei_driver.py index 2697f09..5c309fe 100644 --- a/Cinder/Ocata/huawei_driver.py +++ b/Cinder/Ocata/huawei_driver.py @@ -342,8 +342,8 @@ def _get_opts_from_specs(self, opts_capability, opts_value, "replication_type=' sync' or " "' async'.") else: - LOG.error("Extra specs must be specified as " - "capabilities:%s=' True'.", key) + LOG.warning("Extra specs must be specified as " + "capabilities:%s=' True'.", key) if ((scope in opts_capability) and (key in opts_value) diff --git a/Cinder/Ocata/huawei_utils.py b/Cinder/Ocata/huawei_utils.py index d704817..12c51a3 100644 --- a/Cinder/Ocata/huawei_utils.py +++ b/Cinder/Ocata/huawei_utils.py @@ -141,9 +141,19 @@ def get_lun_metadata(volume): if not volume.provider_location: return {} - info = json.loads(volume.provider_location) + try: + info = json.loads(volume.provider_location) + except Exception as err: + LOG.warning("get_lun_metadata get provider_location error, params: " + "%(loc)s, reason: %(err)s", + {"loc": volume.provider_location, "err": err}) + return {} + if isinstance(info, dict): - return info + if "huawei" in volume.provider_location: + return info + else: + return {} # To keep compatible with old driver version admin_metadata = get_admin_metadata(volume) diff --git a/Cinder/Ocata/rest_client.py b/Cinder/Ocata/rest_client.py index 10be434..3f7221a 100644 --- a/Cinder/Ocata/rest_client.py +++ b/Cinder/Ocata/rest_client.py @@ -343,6 +343,16 @@ def get_pool_by_name(self, pool_name): if result.get('data'): return result['data'][0] + @staticmethod + def _get_capacity_info(info, pool): + info['CAPACITY'] = pool.get('DATASPACE', pool['USERFREECAPACITY']) + info['TOTALCAPACITY'] = pool['USERTOTALCAPACITY'] + if 'totalSizeWithoutSnap' in pool: + info['LUNCONFIGEDCAPACITY'] = pool['totalSizeWithoutSnap'] + elif 'LUNCONFIGEDCAPACITY' in pool: + info['LUNCONFIGEDCAPACITY'] = pool['LUNCONFIGEDCAPACITY'] + return info + def get_pool_info(self, pool_name=None, pools=None): info = {} if not pool_name: @@ -356,11 +366,10 @@ def get_pool_info(self, pool_name=None, pools=None): break info['ID'] = pool.get('ID') - info['CAPACITY'] = pool.get('DATASPACE', pool['USERFREECAPACITY']) - info['TOTALCAPACITY'] = pool.get('USERTOTALCAPACITY') info['TIER0CAPACITY'] = pool.get('TIER0CAPACITY') info['TIER1CAPACITY'] = pool.get('TIER1CAPACITY') info['TIER2CAPACITY'] = pool.get('TIER2CAPACITY') + self._get_capacity_info(info, pool) return info @@ -1200,6 +1209,12 @@ def _get_capacity(self, pool_name, result): pool_capacity['total_capacity'] = total pool_capacity['free_capacity'] = free + configed_capacity = pool_info.get('LUNCONFIGEDCAPACITY') + if configed_capacity: + provisioned = float( + configed_capacity) / constants.CAPACITY_UNIT + pool_capacity['provisioned_capacity'] = provisioned + return pool_capacity def _get_disk_type(self, pool_name, result): @@ -1337,6 +1352,9 @@ def update_volume_stats(self): 'max_over_subscription_ratio'), smarttier=tier_support )) + if capacity.get('provisioned_capacity'): + pool['provisioned_capacity_gb'] = capacity[ + 'provisioned_capacity'] if disk_type: pool['disk_type'] = disk_type diff --git a/Cinder/Pike/huawei_driver.py b/Cinder/Pike/huawei_driver.py index adb2d3f..3f9b02e 100644 --- a/Cinder/Pike/huawei_driver.py +++ b/Cinder/Pike/huawei_driver.py @@ -342,8 +342,8 @@ def _get_opts_from_specs(self, opts_capability, opts_value, "replication_type=' sync' or " "' async'.") else: - LOG.error("Extra specs must be specified as " - "capabilities:%s=' True'.", key) + LOG.warning("Extra specs must be specified as " + "capabilities:%s=' True'.", key) if ((scope in opts_capability) and (key in opts_value) @@ -816,12 +816,10 @@ def delete_volume(self, volume): if not lun_id: return - if self.support_func.get('QoS_support'): - qos_id = self.client.get_qosid_by_lunid(lun_id) - if qos_id: - smart_qos = smartx.SmartQos(self.client) - smart_qos.remove(qos_id, lun_id) - + qos_id = self.client.get_qosid_by_lunid(lun_id) + if qos_id: + smart_qos = smartx.SmartQos(self.client) + smart_qos.remove(qos_id, lun_id) self._delete_volume(volume, lun_id) def _delete_lun_with_check(self, lun_id, lun_wwn=None): @@ -829,11 +827,10 @@ def _delete_lun_with_check(self, lun_id, lun_wwn=None): return if self.client.check_lun_exist(lun_id, lun_wwn): - if self.support_func.get('QoS_support'): - qos_id = self.client.get_qosid_by_lunid(lun_id) - if qos_id: - smart_qos = smartx.SmartQos(self.client) - smart_qos.remove(qos_id, lun_id) + qos_id = self.client.get_qosid_by_lunid(lun_id) + if qos_id: + smart_qos = smartx.SmartQos(self.client) + smart_qos.remove(qos_id, lun_id) self.client.delete_lun(lun_id) diff --git a/Cinder/Pike/huawei_utils.py b/Cinder/Pike/huawei_utils.py index d704817..12c51a3 100644 --- a/Cinder/Pike/huawei_utils.py +++ b/Cinder/Pike/huawei_utils.py @@ -141,9 +141,19 @@ def get_lun_metadata(volume): if not volume.provider_location: return {} - info = json.loads(volume.provider_location) + try: + info = json.loads(volume.provider_location) + except Exception as err: + LOG.warning("get_lun_metadata get provider_location error, params: " + "%(loc)s, reason: %(err)s", + {"loc": volume.provider_location, "err": err}) + return {} + if isinstance(info, dict): - return info + if "huawei" in volume.provider_location: + return info + else: + return {} # To keep compatible with old driver version admin_metadata = get_admin_metadata(volume) diff --git a/Cinder/Pike/rest_client.py b/Cinder/Pike/rest_client.py index ecf7906..bc72c7f 100644 --- a/Cinder/Pike/rest_client.py +++ b/Cinder/Pike/rest_client.py @@ -338,6 +338,16 @@ def get_pool_by_name(self, pool_name): if result.get('data'): return result['data'][0] + @staticmethod + def _get_capacity_info(info, pool): + info['CAPACITY'] = pool.get('DATASPACE', pool['USERFREECAPACITY']) + info['TOTALCAPACITY'] = pool['USERTOTALCAPACITY'] + if 'totalSizeWithoutSnap' in pool: + info['LUNCONFIGEDCAPACITY'] = pool['totalSizeWithoutSnap'] + elif 'LUNCONFIGEDCAPACITY' in pool: + info['LUNCONFIGEDCAPACITY'] = pool['LUNCONFIGEDCAPACITY'] + return info + def get_pool_info(self, pool_name=None, pools=None): info = {} if not pool_name: @@ -351,11 +361,10 @@ def get_pool_info(self, pool_name=None, pools=None): break info['ID'] = pool.get('ID') - info['CAPACITY'] = pool.get('DATASPACE', pool['USERFREECAPACITY']) - info['TOTALCAPACITY'] = pool.get('USERTOTALCAPACITY') info['TIER0CAPACITY'] = pool.get('TIER0CAPACITY') info['TIER1CAPACITY'] = pool.get('TIER1CAPACITY') info['TIER2CAPACITY'] = pool.get('TIER2CAPACITY') + self._get_capacity_info(info, pool) return info @@ -1195,6 +1204,12 @@ def _get_capacity(self, pool_name, result): pool_capacity['total_capacity'] = total pool_capacity['free_capacity'] = free + configed_capacity = pool_info.get('LUNCONFIGEDCAPACITY') + if configed_capacity: + provisioned = float( + configed_capacity) / constants.CAPACITY_UNIT + pool_capacity['provisioned_capacity'] = provisioned + return pool_capacity def _get_disk_type(self, pool_name, result): @@ -1332,6 +1347,9 @@ def update_volume_stats(self): 'max_over_subscription_ratio'), smarttier=tier_support )) + if capacity.get('provisioned_capacity'): + pool['provisioned_capacity_gb'] = capacity[ + 'provisioned_capacity'] if disk_type: pool['disk_type'] = disk_type diff --git a/Cinder/Queens/huawei_driver.py b/Cinder/Queens/huawei_driver.py index adb2d3f..3f9b02e 100644 --- a/Cinder/Queens/huawei_driver.py +++ b/Cinder/Queens/huawei_driver.py @@ -342,8 +342,8 @@ def _get_opts_from_specs(self, opts_capability, opts_value, "replication_type=' sync' or " "' async'.") else: - LOG.error("Extra specs must be specified as " - "capabilities:%s=' True'.", key) + LOG.warning("Extra specs must be specified as " + "capabilities:%s=' True'.", key) if ((scope in opts_capability) and (key in opts_value) @@ -816,12 +816,10 @@ def delete_volume(self, volume): if not lun_id: return - if self.support_func.get('QoS_support'): - qos_id = self.client.get_qosid_by_lunid(lun_id) - if qos_id: - smart_qos = smartx.SmartQos(self.client) - smart_qos.remove(qos_id, lun_id) - + qos_id = self.client.get_qosid_by_lunid(lun_id) + if qos_id: + smart_qos = smartx.SmartQos(self.client) + smart_qos.remove(qos_id, lun_id) self._delete_volume(volume, lun_id) def _delete_lun_with_check(self, lun_id, lun_wwn=None): @@ -829,11 +827,10 @@ def _delete_lun_with_check(self, lun_id, lun_wwn=None): return if self.client.check_lun_exist(lun_id, lun_wwn): - if self.support_func.get('QoS_support'): - qos_id = self.client.get_qosid_by_lunid(lun_id) - if qos_id: - smart_qos = smartx.SmartQos(self.client) - smart_qos.remove(qos_id, lun_id) + qos_id = self.client.get_qosid_by_lunid(lun_id) + if qos_id: + smart_qos = smartx.SmartQos(self.client) + smart_qos.remove(qos_id, lun_id) self.client.delete_lun(lun_id) diff --git a/Cinder/Queens/huawei_utils.py b/Cinder/Queens/huawei_utils.py index d704817..12c51a3 100644 --- a/Cinder/Queens/huawei_utils.py +++ b/Cinder/Queens/huawei_utils.py @@ -141,9 +141,19 @@ def get_lun_metadata(volume): if not volume.provider_location: return {} - info = json.loads(volume.provider_location) + try: + info = json.loads(volume.provider_location) + except Exception as err: + LOG.warning("get_lun_metadata get provider_location error, params: " + "%(loc)s, reason: %(err)s", + {"loc": volume.provider_location, "err": err}) + return {} + if isinstance(info, dict): - return info + if "huawei" in volume.provider_location: + return info + else: + return {} # To keep compatible with old driver version admin_metadata = get_admin_metadata(volume) diff --git a/Cinder/Queens/rest_client.py b/Cinder/Queens/rest_client.py index ecf7906..bc72c7f 100644 --- a/Cinder/Queens/rest_client.py +++ b/Cinder/Queens/rest_client.py @@ -338,6 +338,16 @@ def get_pool_by_name(self, pool_name): if result.get('data'): return result['data'][0] + @staticmethod + def _get_capacity_info(info, pool): + info['CAPACITY'] = pool.get('DATASPACE', pool['USERFREECAPACITY']) + info['TOTALCAPACITY'] = pool['USERTOTALCAPACITY'] + if 'totalSizeWithoutSnap' in pool: + info['LUNCONFIGEDCAPACITY'] = pool['totalSizeWithoutSnap'] + elif 'LUNCONFIGEDCAPACITY' in pool: + info['LUNCONFIGEDCAPACITY'] = pool['LUNCONFIGEDCAPACITY'] + return info + def get_pool_info(self, pool_name=None, pools=None): info = {} if not pool_name: @@ -351,11 +361,10 @@ def get_pool_info(self, pool_name=None, pools=None): break info['ID'] = pool.get('ID') - info['CAPACITY'] = pool.get('DATASPACE', pool['USERFREECAPACITY']) - info['TOTALCAPACITY'] = pool.get('USERTOTALCAPACITY') info['TIER0CAPACITY'] = pool.get('TIER0CAPACITY') info['TIER1CAPACITY'] = pool.get('TIER1CAPACITY') info['TIER2CAPACITY'] = pool.get('TIER2CAPACITY') + self._get_capacity_info(info, pool) return info @@ -1195,6 +1204,12 @@ def _get_capacity(self, pool_name, result): pool_capacity['total_capacity'] = total pool_capacity['free_capacity'] = free + configed_capacity = pool_info.get('LUNCONFIGEDCAPACITY') + if configed_capacity: + provisioned = float( + configed_capacity) / constants.CAPACITY_UNIT + pool_capacity['provisioned_capacity'] = provisioned + return pool_capacity def _get_disk_type(self, pool_name, result): @@ -1332,6 +1347,9 @@ def update_volume_stats(self): 'max_over_subscription_ratio'), smarttier=tier_support )) + if capacity.get('provisioned_capacity'): + pool['provisioned_capacity_gb'] = capacity[ + 'provisioned_capacity'] if disk_type: pool['disk_type'] = disk_type diff --git a/Cinder/Rocky/huawei_base_driver.py b/Cinder/Rocky/huawei_base_driver.py index 9384201..6d7b5bc 100644 --- a/Cinder/Rocky/huawei_base_driver.py +++ b/Cinder/Rocky/huawei_base_driver.py @@ -150,8 +150,14 @@ def _get_capacity(self, pool_info): """Get free capacity and total capacity of the pool.""" free = pool_info.get('DATASPACE', pool_info['USERFREECAPACITY']) total = pool_info.get('USERTOTALCAPACITY') + provisioned = 0 + if 'totalSizeWithoutSnap' in pool_info: + provisioned = pool_info['totalSizeWithoutSnap'] + elif 'LUNCONFIGEDCAPACITY' in pool_info: + provisioned = pool_info['LUNCONFIGEDCAPACITY'] return (float(total) / constants.CAPACITY_UNIT, - float(free) / constants.CAPACITY_UNIT) + float(free) / constants.CAPACITY_UNIT, + float(provisioned) / constants.CAPACITY_UNIT) def _get_disk_type(self, pool_info): """Get disk type of the pool.""" @@ -209,7 +215,8 @@ def _update_pool_stats(self): pool_info = self.local_cli.get_pool_by_name(pool_name) if pool_info: - total_capacity, free_capacity = self._get_capacity(pool_info) + total_capacity, free_capacity, provisioned_capacity = ( + self._get_capacity(pool_info)) disk_type = self._get_disk_type(pool_info) tier_support = self._get_smarttier(disk_type) @@ -217,6 +224,8 @@ def _update_pool_stats(self): pool['free_capacity_gb'] = free_capacity pool['smarttier'] = (self.support_capability['SmartTier'] and tier_support) + if provisioned_capacity: + pool['provisioned_capacity_gb'] = provisioned_capacity if disk_type: pool['disk_type'] = disk_type diff --git a/Cinder/Rocky/huawei_utils.py b/Cinder/Rocky/huawei_utils.py index 6e7414d..0218810 100644 --- a/Cinder/Rocky/huawei_utils.py +++ b/Cinder/Rocky/huawei_utils.py @@ -346,9 +346,12 @@ def get_volume_private_data(volume): return {} if isinstance(info, dict): - info['hypermetro'] = (info.get('hypermetro_id') - or info.get('hypermetro')) - return info + if "huawei" in volume.provider_location: + info['hypermetro'] = (info.get('hypermetro_id') + or info.get('hypermetro')) + return info + else: + return {} # To keep compatible with old driver version return {'huawei_lun_id': six.text_type(info), diff --git a/Cinder/Stein/huawei_base_driver.py b/Cinder/Stein/huawei_base_driver.py index 9384201..6d7b5bc 100644 --- a/Cinder/Stein/huawei_base_driver.py +++ b/Cinder/Stein/huawei_base_driver.py @@ -150,8 +150,14 @@ def _get_capacity(self, pool_info): """Get free capacity and total capacity of the pool.""" free = pool_info.get('DATASPACE', pool_info['USERFREECAPACITY']) total = pool_info.get('USERTOTALCAPACITY') + provisioned = 0 + if 'totalSizeWithoutSnap' in pool_info: + provisioned = pool_info['totalSizeWithoutSnap'] + elif 'LUNCONFIGEDCAPACITY' in pool_info: + provisioned = pool_info['LUNCONFIGEDCAPACITY'] return (float(total) / constants.CAPACITY_UNIT, - float(free) / constants.CAPACITY_UNIT) + float(free) / constants.CAPACITY_UNIT, + float(provisioned) / constants.CAPACITY_UNIT) def _get_disk_type(self, pool_info): """Get disk type of the pool.""" @@ -209,7 +215,8 @@ def _update_pool_stats(self): pool_info = self.local_cli.get_pool_by_name(pool_name) if pool_info: - total_capacity, free_capacity = self._get_capacity(pool_info) + total_capacity, free_capacity, provisioned_capacity = ( + self._get_capacity(pool_info)) disk_type = self._get_disk_type(pool_info) tier_support = self._get_smarttier(disk_type) @@ -217,6 +224,8 @@ def _update_pool_stats(self): pool['free_capacity_gb'] = free_capacity pool['smarttier'] = (self.support_capability['SmartTier'] and tier_support) + if provisioned_capacity: + pool['provisioned_capacity_gb'] = provisioned_capacity if disk_type: pool['disk_type'] = disk_type diff --git a/Cinder/Stein/huawei_utils.py b/Cinder/Stein/huawei_utils.py index 6e7414d..0218810 100644 --- a/Cinder/Stein/huawei_utils.py +++ b/Cinder/Stein/huawei_utils.py @@ -346,9 +346,12 @@ def get_volume_private_data(volume): return {} if isinstance(info, dict): - info['hypermetro'] = (info.get('hypermetro_id') - or info.get('hypermetro')) - return info + if "huawei" in volume.provider_location: + info['hypermetro'] = (info.get('hypermetro_id') + or info.get('hypermetro')) + return info + else: + return {} # To keep compatible with old driver version return {'huawei_lun_id': six.text_type(info), diff --git a/Cinder/Train/huawei_base_driver.py b/Cinder/Train/huawei_base_driver.py index 9384201..6d7b5bc 100644 --- a/Cinder/Train/huawei_base_driver.py +++ b/Cinder/Train/huawei_base_driver.py @@ -150,8 +150,14 @@ def _get_capacity(self, pool_info): """Get free capacity and total capacity of the pool.""" free = pool_info.get('DATASPACE', pool_info['USERFREECAPACITY']) total = pool_info.get('USERTOTALCAPACITY') + provisioned = 0 + if 'totalSizeWithoutSnap' in pool_info: + provisioned = pool_info['totalSizeWithoutSnap'] + elif 'LUNCONFIGEDCAPACITY' in pool_info: + provisioned = pool_info['LUNCONFIGEDCAPACITY'] return (float(total) / constants.CAPACITY_UNIT, - float(free) / constants.CAPACITY_UNIT) + float(free) / constants.CAPACITY_UNIT, + float(provisioned) / constants.CAPACITY_UNIT) def _get_disk_type(self, pool_info): """Get disk type of the pool.""" @@ -209,7 +215,8 @@ def _update_pool_stats(self): pool_info = self.local_cli.get_pool_by_name(pool_name) if pool_info: - total_capacity, free_capacity = self._get_capacity(pool_info) + total_capacity, free_capacity, provisioned_capacity = ( + self._get_capacity(pool_info)) disk_type = self._get_disk_type(pool_info) tier_support = self._get_smarttier(disk_type) @@ -217,6 +224,8 @@ def _update_pool_stats(self): pool['free_capacity_gb'] = free_capacity pool['smarttier'] = (self.support_capability['SmartTier'] and tier_support) + if provisioned_capacity: + pool['provisioned_capacity_gb'] = provisioned_capacity if disk_type: pool['disk_type'] = disk_type diff --git a/Cinder/Train/huawei_utils.py b/Cinder/Train/huawei_utils.py index 6e7414d..0218810 100644 --- a/Cinder/Train/huawei_utils.py +++ b/Cinder/Train/huawei_utils.py @@ -346,9 +346,12 @@ def get_volume_private_data(volume): return {} if isinstance(info, dict): - info['hypermetro'] = (info.get('hypermetro_id') - or info.get('hypermetro')) - return info + if "huawei" in volume.provider_location: + info['hypermetro'] = (info.get('hypermetro_id') + or info.get('hypermetro')) + return info + else: + return {} # To keep compatible with old driver version return {'huawei_lun_id': six.text_type(info), diff --git a/ReleaseDoc/en/OpenStack Cinder Driver Configuration Guide.pdf b/ReleaseDoc/en/OpenStack Cinder Driver Configuration Guide.pdf index 69700ed..8b677a2 100644 Binary files a/ReleaseDoc/en/OpenStack Cinder Driver Configuration Guide.pdf and b/ReleaseDoc/en/OpenStack Cinder Driver Configuration Guide.pdf differ diff --git "a/ReleaseDoc/zh/OpenStack Cinder Driver\351\205\215\347\275\256\346\214\207\345\215\227.pdf" "b/ReleaseDoc/zh/OpenStack Cinder Driver\351\205\215\347\275\256\346\214\207\345\215\227.pdf" index 40de543..885f5a2 100644 Binary files "a/ReleaseDoc/zh/OpenStack Cinder Driver\351\205\215\347\275\256\346\214\207\345\215\227.pdf" and "b/ReleaseDoc/zh/OpenStack Cinder Driver\351\205\215\347\275\256\346\214\207\345\215\227.pdf" differ