Skip to content

2.3.rc2 #27

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 17 additions & 13 deletions Cinder/Mitaka/dsware.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@

class DSWAREDriver(driver.VolumeDriver):
"""Huawei FusionStorage Driver."""
VERSION = '1.0'
VERSION = '2.3.RC2'

# ThirdPartySystems wiki page
CI_WIKI_NAME = "Huawei_FusionStorage_CI"
Expand Down Expand Up @@ -599,15 +599,15 @@ def create_volume_from_snapshot(self, volume, snapshot):
full_clone = '1'

if full_clone == '0':
self._create_volume_from_snap(dsware_volume_name, volume_size,
snapshot_name)
create_volume_info = self._create_volume_from_snap(
dsware_volume_name, volume_size, snapshot_name)
else:
is_thin = self.configuration.dsware_isthin
self._create_volume(dsware_volume_name, volume_size,
is_thin, volume['host'],
meta_data.get('__system__encrypted'),
meta_data.get('__system__cmkid'),
volume._context.auth_token)
create_volume_info = self._create_volume(
dsware_volume_name, volume_size, is_thin, volume['host'],
meta_data.get('__system__encrypted'),
meta_data.get('__system__cmkid'),
volume._context.auth_token)
self._create_fullvol_from_snap(dsware_volume_name,
snapshot_name)
ret = self._wait_for_create_cloned_volume_finish_timer(
Expand All @@ -620,6 +620,7 @@ def create_volume_from_snapshot(self, volume, snapshot):
replication_driver_data = {'ip': dsw_manager_ip,
'pool': pool_id,
'vol_name': dsware_volume_name}
meta_data['lun_wwn'] = create_volume_info.get('wwn')
volume_info = {
"metadata": meta_data,
"provider_location": json.dumps(provider_location),
Expand Down Expand Up @@ -772,7 +773,7 @@ def create_cloned_volume(self, volume, src_volume):
replication_driver_data = {'ip': dsw_manager_ip,
'pool': pool_id,
'vol_name': dsware_volume_name}

meta_data['lun_wwn'] = create_volume_info.get('wwn')
volume_info = {
"metadata": meta_data,
"provider_location": json.dumps(provider_location),
Expand Down Expand Up @@ -2240,6 +2241,8 @@ def manage_existing(self, volume, existing_ref):
msg = _('quickstart volume create failed')
raise exception.VolumeBackendAPIException(data=msg)

meta_data = {'lun_name': dsware_volume_name,
'lun_wwn': result.get('wwn')}
provider_location = {'offset': 0,
'storage_type': 'FusionStorage',
'ip': self.dsware_client.get_manage_ip(),
Expand All @@ -2254,6 +2257,7 @@ def manage_existing(self, volume, existing_ref):
volume['id'],
volume_image_meta)
return {
"metadata": meta_data,
"provider_location": json.dumps(provider_location),
}

Expand Down Expand Up @@ -2485,7 +2489,7 @@ def __create_and_associate_qos_for_retype(self, volume, new_type):
Result:%(qos)d, ") % {'qos': qos['result']})
raise exception.VolumeBackendAPIException(data=msg)

dsware_volume_name = self._construct_dsware_volume_name(volume)
dsware_volume_name = self._get_dsware_volume_name(volume)
result = self.dsware_client.associate_qos_with_volume(
qos['qos_name'], dsware_volume_name)
if result != 0:
Expand Down Expand Up @@ -2521,7 +2525,7 @@ def _check_and_disasso_qos(self, volume):
"""
LOG.info(_LI("DSWARE _check_and_disasso_qos"))
vol_qos = self.query_volume_qos(volume)
volume_name = self._construct_dsware_volume_name(volume)
volume_name = self._get_dsware_volume_name(volume)
if vol_qos['result'] != 0:
msg = _("DSWARE Disassociate Qos with volume %(volume)s Query Qos"
" failed! Result:%(vol_qos)s") % {
Expand Down Expand Up @@ -2800,7 +2804,7 @@ def _create_qos_for_volume(self, volume, qos_id=None):
LOG.info(_LI('_create_qos_for_volume: not support'))
return qos_info

volume_name = self._construct_dsware_volume_name(volume)
volume_name = self._get_dsware_volume_name(volume)
qos_info['qos_name'] = self._generate_qos_name(volume_name)

LOG.info(_LI('dsware create qos: %s'), str(qos_info))
Expand Down Expand Up @@ -2938,7 +2942,7 @@ def associate_qos_with_volume(self, qos_id, volume):

def disassociate_qos_with_volume(self, qos_id, volume):
vol_qos = self.query_volume_qos(volume)
volume_name = self._construct_dsware_volume_name(volume)
volume_name = self._get_dsware_volume_name(volume)
if vol_qos['result'] != 0:
msg = _("DSWARE Disassociate Qos with volume %(volume)s Query Qos "
"failed! Result:%(vol_qos)s") % {'volume': volume_name,
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
41 changes: 35 additions & 6 deletions Cinder/Rocky/dsware.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,11 @@
cfg.BoolOpt('use_ipv6',
default=False,
help='Whether to return target_portal and target_iqn in '
'IPV6 format')
'IPV6 format'),
cfg.BoolOpt('force_delete_volume',
default=False,
help='When deleting a LUN, if the LUN is in the mapping view,'
' whether to delete it forcibly')
]

CONF = cfg.CONF
Expand All @@ -80,7 +84,7 @@

@interface.volumedriver
class DSWAREBaseDriver(driver.VolumeDriver):
VERSION = '2.2.RC4'
VERSION = '2.3.RC2'
CI_WIKI_NAME = 'Huawei_FusionStorage_CI'

def __init__(self, *args, **kwargs):
Expand Down Expand Up @@ -131,8 +135,7 @@ def _update_pool_stats(self):
backend_name = self.configuration.safe_get(
'volume_backend_name') or self.__class__.__name__
data = {"volume_backend_name": backend_name,
"driver_version": "2.2.RC4",
"thin_provisioning_support": False,
"driver_version": "2.3.RC2",
"pools": [],
"vendor_name": "Huawei"
}
Expand Down Expand Up @@ -167,6 +170,9 @@ def _update_single_pool_info_status(self, pool_info):
"provisioned_capacity_gb": capacity['provisioned_capacity_gb'],
"QoS_support": True,
'multiattach': True,
"thin_provisioning_support": True,
'max_over_subscription_ratio':
self.configuration.max_over_subscription_ratio,
})
return status

Expand All @@ -181,6 +187,19 @@ def _check_volume_exist(self, volume):
if result:
return result

def _check_volume_mapped(self, vol_name):
host_list = self.client.get_host_by_volume(vol_name)
if ((len(host_list) > 1 and self.conf.force_delete_volume) or
len(host_list) == 1):
msg = ('Volume %s has been mapped to host.'
' Now force to delete it') % vol_name
LOG.warning(msg)
for host in host_list:
self.client.unmap_volume_from_host(host['hostName'], vol_name)
elif len(host_list) > 1 and not self.conf.force_delete_volume:
msg = 'Volume %s has been mapped to more than one host' % vol_name
self._raise_exception(msg)

@staticmethod
def _raise_exception(msg):
LOG.error(msg)
Expand Down Expand Up @@ -249,10 +268,13 @@ def create_volume(self, volume):
pool_id=pool_id, vol_name=vol_name, vol_size=vol_size)

self._add_qos_to_volume(volume, vol_name)
result = self.client.query_volume_by_name(vol_name=vol_name)
return {"metadata": {'lun_wwn': result.get('wwn')}} if result else {}

def delete_volume(self, volume):
vol_name = self._get_vol_name(volume)
if self._check_volume_exist(volume):
self._check_volume_mapped(vol_name)
self.fs_qos.remove(vol_name)
self.client.delete_volume(vol_name=vol_name)

Expand Down Expand Up @@ -320,6 +342,9 @@ def create_volume_from_snapshot(self, volume, snapshot):
vol_size=vol_size)
self._add_qos_to_volume(volume, vol_name)
self._expand_volume_when_create(vol_name, vol_size)
result = self.client.query_volume_by_name(vol_name=vol_name)
return ({"metadata": {'lun_wwn': result.get('wwn')}}
if result else {})

def create_cloned_volume(self, volume, src_volume):
vol_name = self._get_vol_name(volume)
Expand All @@ -338,6 +363,9 @@ def create_cloned_volume(self, volume, src_volume):
src_vol_name=src_vol_name)
self._add_qos_to_volume(volume, vol_name)
self._expand_volume_when_create(vol_name, vol_size)
result = self.client.query_volume_by_name(vol_name=vol_name)
return ({"metadata": {'lun_wwn': result.get('wwn')}}
if result else {})

def create_snapshot(self, snapshot):
snapshot_name = self._get_snapshot_name(snapshot)
Expand Down Expand Up @@ -439,9 +467,10 @@ def manage_existing(self, volume, existing_ref):
change_opts = self._check_need_changes_for_manage(volume, vol_name)
self._change_lun(vol_name, change_opts.get("new_opts"),
change_opts.get("old_opts"))

meta_data = {'lun_wwn': vol_info.get('wwn')}
provider_location = {"name": vol_name}
return {'provider_location': json.dumps(provider_location)}
return {"metadata": meta_data,
'provider_location': json.dumps(provider_location)}

def manage_existing_get_size(self, volume, existing_ref):
pool = self._get_pool_id(volume)
Expand Down
41 changes: 35 additions & 6 deletions Cinder/Stein/dsware.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,11 @@
cfg.BoolOpt('use_ipv6',
default=False,
help='Whether to return target_portal and target_iqn in '
'IPV6 format')
'IPV6 format'),
cfg.BoolOpt('force_delete_volume',
default=False,
help='When deleting a LUN, if the LUN is in the mapping view,'
' whether to delete it forcibly')
]

CONF = cfg.CONF
Expand All @@ -80,7 +84,7 @@

@interface.volumedriver
class DSWAREBaseDriver(driver.VolumeDriver):
VERSION = '2.2.RC4'
VERSION = '2.3.RC2'
CI_WIKI_NAME = 'Huawei_FusionStorage_CI'

def __init__(self, *args, **kwargs):
Expand Down Expand Up @@ -131,8 +135,7 @@ def _update_pool_stats(self):
backend_name = self.configuration.safe_get(
'volume_backend_name') or self.__class__.__name__
data = {"volume_backend_name": backend_name,
"driver_version": "2.2.RC4",
"thin_provisioning_support": False,
"driver_version": "2.3.RC2",
"pools": [],
"vendor_name": "Huawei"
}
Expand Down Expand Up @@ -167,6 +170,9 @@ def _update_single_pool_info_status(self, pool_info):
"provisioned_capacity_gb": capacity['provisioned_capacity_gb'],
"QoS_support": True,
'multiattach': True,
"thin_provisioning_support": True,
'max_over_subscription_ratio':
self.configuration.max_over_subscription_ratio,
})
return status

Expand All @@ -181,6 +187,19 @@ def _check_volume_exist(self, volume):
if result:
return result

def _check_volume_mapped(self, vol_name):
host_list = self.client.get_host_by_volume(vol_name)
if ((len(host_list) > 1 and self.conf.force_delete_volume) or
len(host_list) == 1):
msg = ('Volume %s has been mapped to host.'
' Now force to delete it') % vol_name
LOG.warning(msg)
for host in host_list:
self.client.unmap_volume_from_host(host['hostName'], vol_name)
elif len(host_list) > 1 and not self.conf.force_delete_volume:
msg = 'Volume %s has been mapped to more than one host' % vol_name
self._raise_exception(msg)

@staticmethod
def _raise_exception(msg):
LOG.error(msg)
Expand Down Expand Up @@ -249,10 +268,13 @@ def create_volume(self, volume):
pool_id=pool_id, vol_name=vol_name, vol_size=vol_size)

self._add_qos_to_volume(volume, vol_name)
result = self.client.query_volume_by_name(vol_name=vol_name)
return {"metadata": {'lun_wwn': result.get('wwn')}} if result else {}

def delete_volume(self, volume):
vol_name = self._get_vol_name(volume)
if self._check_volume_exist(volume):
self._check_volume_mapped(vol_name)
self.fs_qos.remove(vol_name)
self.client.delete_volume(vol_name=vol_name)

Expand Down Expand Up @@ -320,6 +342,9 @@ def create_volume_from_snapshot(self, volume, snapshot):
vol_size=vol_size)
self._add_qos_to_volume(volume, vol_name)
self._expand_volume_when_create(vol_name, vol_size)
result = self.client.query_volume_by_name(vol_name=vol_name)
return ({"metadata": {'lun_wwn': result.get('wwn')}}
if result else {})

def create_cloned_volume(self, volume, src_volume):
vol_name = self._get_vol_name(volume)
Expand All @@ -338,6 +363,9 @@ def create_cloned_volume(self, volume, src_volume):
src_vol_name=src_vol_name)
self._add_qos_to_volume(volume, vol_name)
self._expand_volume_when_create(vol_name, vol_size)
result = self.client.query_volume_by_name(vol_name=vol_name)
return ({"metadata": {'lun_wwn': result.get('wwn')}}
if result else {})

def create_snapshot(self, snapshot):
snapshot_name = self._get_snapshot_name(snapshot)
Expand Down Expand Up @@ -439,9 +467,10 @@ def manage_existing(self, volume, existing_ref):
change_opts = self._check_need_changes_for_manage(volume, vol_name)
self._change_lun(vol_name, change_opts.get("new_opts"),
change_opts.get("old_opts"))

meta_data = {'lun_wwn': vol_info.get('wwn')}
provider_location = {"name": vol_name}
return {'provider_location': json.dumps(provider_location)}
return {"metadata": meta_data,
'provider_location': json.dumps(provider_location)}

def manage_existing_get_size(self, volume, existing_ref):
pool = self._get_pool_id(volume)
Expand Down
Loading