From e02d909439bc7549622c937ed9f46ecd8a682f1d Mon Sep 17 00:00:00 2001 From: xuanyandong Date: Thu, 8 Oct 2020 09:02:07 +0800 Subject: [PATCH] Remove six of dir cinder/volume/* Replace the following items with Python 3 style code. - six.add_metaclass - six.PY3 - six.text_type - six.string_types - six.integer_types Change-Id: Ifc3484ef0897d25c3a5ed3c10efe4312dbbbd384 Implements: blueprint six-removal --- cinder/volume/api.py | 9 ++- cinder/volume/driver.py | 28 +++------- cinder/volume/flows/api/create_volume.py | 3 +- cinder/volume/flows/common.py | 3 +- cinder/volume/flows/manager/create_volume.py | 3 +- cinder/volume/group_types.py | 3 +- cinder/volume/manager.py | 58 +++++++++----------- cinder/volume/targets/driver.py | 4 +- cinder/volume/targets/nvmet.py | 3 +- cinder/volume/volume_utils.py | 24 +++----- 10 files changed, 54 insertions(+), 84 deletions(-) diff --git a/cinder/volume/api.py b/cinder/volume/api.py index e04a04e4c0d..4bcad1c14fd 100644 --- a/cinder/volume/api.py +++ b/cinder/volume/api.py @@ -27,7 +27,6 @@ from oslo_utils import excutils from oslo_utils import strutils from oslo_utils import timeutils from oslo_utils import versionutils -import six from cinder.api import common from cinder.common import constants @@ -619,7 +618,7 @@ class API(base.Base): filters['no_migration_targets'] = True if filters: - LOG.debug("Searching by: %s.", six.text_type(filters)) + LOG.debug("Searching by: %s.", filters) if context.is_admin and allTenants: # Need to remove all_tenants to pass the filtering below. @@ -1407,7 +1406,7 @@ class API(base.Base): "to extend, currently %(status)s.") % {'vol_id': volume.id, 'status': volume.status, - 'expected': six.text_type(expected)}) + 'expected': str(expected)}) raise exception.InvalidVolume(reason=msg) rollback = True @@ -1626,7 +1625,7 @@ class API(base.Base): 'vol_status': volume['status']} raise exception.InvalidVolume(reason=msg) self.update_volume_admin_metadata(context.elevated(), volume, - {'readonly': six.text_type(flag)}) + {'readonly': str(flag)}) LOG.info("Update readonly setting on volume " "completed successfully.", resource=volume) @@ -1934,7 +1933,7 @@ class API(base.Base): def _replication_db_change(self, ctxt, field, expected_value, new_value, host, cluster_name, check_up=False): def _error_msg(service): - expected = utils.build_or_str(six.text_type(expected_value)) + expected = utils.build_or_str(str(expected_value)) up_msg = 'and must be up ' if check_up else '' msg = (_('%(field)s in %(service)s must be %(expected)s ' '%(up_msg)sto failover.') diff --git a/cinder/volume/driver.py b/cinder/volume/driver.py index d21473430c3..10c90604252 100644 --- a/cinder/volume/driver.py +++ b/cinder/volume/driver.py @@ -24,7 +24,6 @@ from oslo_config import cfg from oslo_config import types from oslo_log import log as logging from oslo_utils import excutils -import six from cinder import exception from cinder.i18n import _ @@ -357,8 +356,7 @@ CONF.register_opts(fqdn_opts, group=configuration.SHARED_CONF_GROUP) CONF.import_opt('backup_use_same_host', 'cinder.backup.api') -@six.add_metaclass(abc.ABCMeta) -class BaseVD(object): +class BaseVD(object, metaclass=abc.ABCMeta): """Executes commands relating to Volumes. Base Driver for Cinder Volume Control Path, @@ -1046,15 +1044,13 @@ class BaseVD(object): except Exception as err: try: err_msg = (_('Unable to fetch connection information from ' - 'backend: %(err)s') % - {'err': six.text_type(err)}) + 'backend: %(err)s') % {'err': err}) LOG.error(err_msg) LOG.debug("Cleaning up failed connect initialization.") self.remove_export(context, volume) except Exception as ex: ex_msg = (_('Error encountered during cleanup ' - 'of a failed attach: %(ex)s') % - {'ex': six.text_type(ex)}) + 'of a failed attach: %(ex)s') % {'ex': ex}) LOG.error(err_msg) raise exception.VolumeBackendAPIException(data=ex_msg) raise exception.VolumeBackendAPIException(data=err_msg) @@ -1112,15 +1108,13 @@ class BaseVD(object): except Exception as err: try: err_msg = (_('Unable to fetch connection information from ' - 'backend: %(err)s') % - {'err': six.text_type(err)}) + 'backend: %(err)s') % {'err': err}) LOG.error(err_msg) LOG.debug("Cleaning up failed connect initialization.") self.remove_export_snapshot(ctxt, snapshot) except Exception as ex: ex_msg = (_('Error encountered during cleanup ' - 'of a failed attach: %(ex)s') % - {'ex': six.text_type(ex)}) + 'of a failed attach: %(ex)s') % {'ex': ex}) LOG.error(err_msg) raise exception.VolumeBackendAPIException(data=ex_msg) raise exception.VolumeBackendAPIException(data=err_msg) @@ -1953,8 +1947,7 @@ class BaseVD(object): for cfg_name in cfg_names] -@six.add_metaclass(abc.ABCMeta) -class CloneableImageVD(object): +class CloneableImageVD(object, metaclass=abc.ABCMeta): @abc.abstractmethod def clone_image(self, volume, image_location, image_id, image_meta, image_service): @@ -1983,8 +1976,7 @@ class CloneableImageVD(object): return None, False -@six.add_metaclass(abc.ABCMeta) -class MigrateVD(object): +class MigrateVD(object, metaclass=abc.ABCMeta): @abc.abstractmethod def migrate_volume(self, context, volume, host): """Migrate the volume to the specified host. @@ -2001,8 +1993,7 @@ class MigrateVD(object): return (False, None) -@six.add_metaclass(abc.ABCMeta) -class ManageableVD(object): +class ManageableVD(object, metaclass=abc.ABCMeta): @abc.abstractmethod def manage_existing(self, volume, existing_ref): """Brings an existing backend storage object under Cinder management. @@ -2098,8 +2089,7 @@ class ManageableVD(object): pass -@six.add_metaclass(abc.ABCMeta) -class ManageableSnapshotsVD(object): +class ManageableSnapshotsVD(object, metaclass=abc.ABCMeta): # NOTE: Can't use abstractmethod before all drivers implement it def manage_existing_snapshot(self, snapshot, existing_ref): """Brings an existing backend storage object under Cinder management. diff --git a/cinder/volume/flows/api/create_volume.py b/cinder/volume/flows/api/create_volume.py index 7fdc0efcef8..a598fa726be 100644 --- a/cinder/volume/flows/api/create_volume.py +++ b/cinder/volume/flows/api/create_volume.py @@ -12,7 +12,6 @@ from oslo_config import cfg from oslo_log import log as logging -import six import taskflow.engines from taskflow.patterns import linear_flow from taskflow.types import failure as ft @@ -175,7 +174,7 @@ class ExtractVolumeRequestTask(flow_utils.CinderTask): raise exception.InvalidInput(reason=msg) def validate_int(size): - if not isinstance(size, six.integer_types) or size <= 0: + if not isinstance(size, int) or size <= 0: msg = _("Volume size '%(size)s' must be an integer and" " greater than 0") % {'size': size} raise exception.InvalidInput(reason=msg) diff --git a/cinder/volume/flows/common.py b/cinder/volume/flows/common.py index d9fee1755be..164c96e72cb 100644 --- a/cinder/volume/flows/common.py +++ b/cinder/volume/flows/common.py @@ -17,7 +17,6 @@ # under the License. from oslo_log import log as logging -import six from cinder import exception @@ -66,7 +65,7 @@ def restore_source_status(context, db, volume_spec): def _clean_reason(reason): if reason is None: return 'Unknown reason' - reason = six.text_type(reason) + reason = str(reason) if len(reason) <= REASON_LENGTH: return reason else: diff --git a/cinder/volume/flows/manager/create_volume.py b/cinder/volume/flows/manager/create_volume.py index 0b438e0f441..3b8899d46d4 100644 --- a/cinder/volume/flows/manager/create_volume.py +++ b/cinder/volume/flows/manager/create_volume.py @@ -21,7 +21,6 @@ from oslo_log import log as logging from oslo_utils import excutils from oslo_utils import fileutils from oslo_utils import timeutils -import six import taskflow.engines from taskflow.patterns import linear_flow from taskflow.types import failure as ft @@ -531,7 +530,7 @@ class CreateVolumeFromSpecTask(flow_utils.CinderTask): LOG.debug("attempting attach for rekey, attach_info: %s", attach_info) - if (isinstance(attach_info['device']['path'], six.string_types)): + if (isinstance(attach_info['device']['path'], str)): image_info = image_utils.qemu_img_info( attach_info['device']['path']) else: diff --git a/cinder/volume/group_types.py b/cinder/volume/group_types.py index 8b18d0e6223..6c9ab0d9030 100644 --- a/cinder/volume/group_types.py +++ b/cinder/volume/group_types.py @@ -18,7 +18,6 @@ from oslo_config import cfg from oslo_db import exception as db_exc from oslo_log import log as logging -import six import webob from cinder import context @@ -80,7 +79,7 @@ def destroy(context, id): try: db.group_type_destroy(elevated, id) except exception.GroupTypeInUse as e: - msg = _('Target group type is still in use. %s') % six.text_type(e) + msg = _('Target group type is still in use. %s') % e raise webob.exc.HTTPBadRequest(explanation=msg) diff --git a/cinder/volume/manager.py b/cinder/volume/manager.py index e7cdf318c5e..b9fa41c1a3d 100644 --- a/cinder/volume/manager.py +++ b/cinder/volume/manager.py @@ -50,7 +50,6 @@ from oslo_utils import units from oslo_utils import uuidutils profiler = importutils.try_import('osprofiler.profiler') import requests -import six from taskflow import exceptions as tfe from cinder.common import constants @@ -1071,7 +1070,7 @@ class VolumeManager(manager.CleanableManager, 'snapshot %(s_id)s failed with %(error)s.') msg_args = {'v_id': volume.id, 's_id': snapshot.id, - 'error': six.text_type(error)} + 'error': error} v_res = volume.update_single_status_where( 'error', 'reverting') @@ -1184,7 +1183,7 @@ class VolumeManager(manager.CleanableManager, exception=ex, detail=message_field.Detail.SNAPSHOT_UPDATE_METADATA_FAILED ) - raise exception.MetadataCopyFailure(reason=six.text_type(ex)) + raise exception.MetadataCopyFailure(reason=str(ex)) snapshot.status = fields.SnapshotStatus.AVAILABLE snapshot.progress = '100%' @@ -1467,7 +1466,7 @@ class VolumeManager(manager.CleanableManager, "remove-export failure.", resource=volume) raise exception.RemoveExportException(volume=volume_id, - reason=six.text_type(ex)) + reason=str(ex)) volume.finish_detach(attachment.id) self._notify_about_volume_usage(context, volume, "detach.end") @@ -1688,7 +1687,7 @@ class VolumeManager(manager.CleanableManager, # Deletes the image if it is in queued or saving state self._delete_image(context, image_meta['id'], image_service) with excutils.save_and_reraise_exception(): - payload['message'] = six.text_type(error) + payload['message'] = str(error) finally: self.db.volume_update_status_based_on_attachment(context, volume_id) @@ -1834,10 +1833,10 @@ class VolumeManager(manager.CleanableManager, try: self.driver.validate_connector(connector) except exception.InvalidConnectorException as err: - raise exception.InvalidInput(reason=six.text_type(err)) + raise exception.InvalidInput(reason=str(err)) except Exception as err: err_msg = (_("Validate volume connection failed " - "(error: %(err)s).") % {'err': six.text_type(err)}) + "(error: %(err)s).") % {'err': err}) LOG.exception(err_msg, resource=volume) raise exception.VolumeBackendAPIException(data=err_msg) @@ -1859,13 +1858,13 @@ class VolumeManager(manager.CleanableManager, self.driver.remove_export(context.elevated(), volume) except Exception: LOG.exception('Could not remove export after DB model failed.') - raise exception.ExportFailure(reason=six.text_type(ex)) + raise exception.ExportFailure(reason=str(ex)) try: conn_info = self.driver.initialize_connection(volume, connector) except Exception as err: err_msg = (_("Driver initialize connection failed " - "(error: %(err)s).") % {'err': six.text_type(err)}) + "(error: %(err)s).") % {'err': err}) LOG.exception(err_msg, resource=volume) self.driver.remove_export(context.elevated(), volume) @@ -1883,10 +1882,10 @@ class VolumeManager(manager.CleanableManager, try: self.driver.validate_connector(connector) except exception.InvalidConnectorException as err: - raise exception.InvalidInput(reason=six.text_type(err)) + raise exception.InvalidInput(reason=str(err)) except Exception as err: err_msg = (_("Validate snapshot connection failed " - "(error: %(err)s).") % {'err': six.text_type(err)}) + "(error: %(err)s).") % {'err': err}) LOG.exception(err_msg, resource=snapshot) raise exception.VolumeBackendAPIException(data=err_msg) @@ -1912,7 +1911,7 @@ class VolumeManager(manager.CleanableManager, snapshot.save() except exception.CinderException as ex: LOG.exception("Model update failed.", resource=snapshot) - raise exception.ExportFailure(reason=six.text_type(ex)) + raise exception.ExportFailure(reason=str(ex)) try: conn = self.driver.initialize_connection_snapshot(snapshot, @@ -1920,15 +1919,13 @@ class VolumeManager(manager.CleanableManager, except Exception as err: try: err_msg = (_('Unable to fetch connection information from ' - 'backend: %(err)s') % - {'err': six.text_type(err)}) + 'backend: %(err)s') % {'err': err}) LOG.error(err_msg) LOG.debug("Cleaning up failed connect initialization.") self.driver.remove_export_snapshot(ctxt.elevated(), snapshot) except Exception as ex: ex_msg = (_('Error encountered during cleanup ' - 'of a failed attach: %(ex)s') % - {'ex': six.text_type(ex)}) + 'of a failed attach: %(ex)s') % {'ex': ex}) LOG.error(ex_msg) raise exception.VolumeBackendAPIException(data=ex_msg) raise exception.VolumeBackendAPIException(data=err_msg) @@ -1953,7 +1950,7 @@ class VolumeManager(manager.CleanableManager, force=force) except Exception as err: err_msg = (_('Terminate volume connection failed: %(err)s') - % {'err': six.text_type(err)}) + % {'err': err}) LOG.exception(err_msg, resource=volume_ref) raise exception.VolumeBackendAPIException(data=err_msg) LOG.info("Terminate volume connection completed successfully.", @@ -1969,7 +1966,7 @@ class VolumeManager(manager.CleanableManager, force=force) except Exception as err: err_msg = (_('Terminate snapshot connection failed: %(err)s') - % {'err': six.text_type(err)}) + % {'err': err}) LOG.exception(err_msg, resource=snapshot) raise exception.VolumeBackendAPIException(data=err_msg) LOG.info("Terminate snapshot connection completed successfully.", @@ -2053,7 +2050,7 @@ class VolumeManager(manager.CleanableManager, root_access = True if not connector.check_valid_device(vol_handle['path'], root_access): - if isinstance(vol_handle['path'], six.string_types): + if isinstance(vol_handle['path'], str): raise exception.DeviceUnavailable( path=vol_handle['path'], reason=(_("Unable to access the backend storage via the " @@ -3467,7 +3464,7 @@ class VolumeManager(manager.CleanableManager, if group: group.status = fields.GroupStatus.ERROR group.save() - raise exception.MetadataCopyFailure(reason=six.text_type(ex)) + raise exception.MetadataCopyFailure(reason=str(ex)) self.db.volume_update(context, vol['id'], update) @@ -3935,7 +3932,7 @@ class VolumeManager(manager.CleanableManager, snapshot.status = fields.SnapshotStatus.ERROR snapshot.save() raise exception.MetadataCopyFailure( - reason=six.text_type(ex)) + reason=str(ex)) snapshot.status = fields.SnapshotStatus.AVAILABLE snapshot.progress = '100%' @@ -4498,10 +4495,10 @@ class VolumeManager(manager.CleanableManager, try: self.driver.validate_connector(connector) except exception.InvalidConnectorException as err: - raise exception.InvalidInput(reason=six.text_type(err)) + raise exception.InvalidInput(reason=str(err)) except Exception as err: err_msg = (_("Validate volume connection failed " - "(error: %(err)s).") % {'err': six.text_type(err)}) + "(error: %(err)s).") % {'err': err}) LOG.error(err_msg, resource=volume) raise exception.VolumeBackendAPIException(data=err_msg) @@ -4519,13 +4516,13 @@ class VolumeManager(manager.CleanableManager, volume.save() except exception.CinderException as ex: LOG.exception("Model update failed.", resource=volume) - raise exception.ExportFailure(reason=six.text_type(ex)) + raise exception.ExportFailure(reason=str(ex)) try: conn_info = self.driver.initialize_connection(volume, connector) except Exception as err: err_msg = (_("Driver initialize connection failed " - "(error: %(err)s).") % {'err': six.text_type(err)}) + "(error: %(err)s).") % {'err': err}) LOG.exception(err_msg, resource=volume) self.driver.remove_export(ctxt.elevated(), volume) raise exception.VolumeBackendAPIException(data=err_msg) @@ -4641,7 +4638,7 @@ class VolumeManager(manager.CleanableManager, except Exception as err: err_msg = (_('Terminate volume connection failed: %(err)s') - % {'err': six.text_type(err)}) + % {'err': err}) LOG.exception(err_msg, resource=volume) raise exception.VolumeBackendAPIException(data=err_msg) LOG.info("Terminate volume connection completed successfully.", @@ -4770,8 +4767,7 @@ class VolumeManager(manager.CleanableManager, vol.status = 'error' vol.replication_status = fields.ReplicationStatus.ERROR vol.save() - err_msg = _("Enable replication group failed: " - "%s.") % six.text_type(ex) + err_msg = _("Enable replication group failed: %s.") % ex raise exception.ReplicationGroupError(reason=err_msg, group_id=group.id) @@ -4855,8 +4851,7 @@ class VolumeManager(manager.CleanableManager, vol.status = 'error' vol.replication_status = fields.ReplicationStatus.ERROR vol.save() - err_msg = _("Disable replication group failed: " - "%s.") % six.text_type(ex) + err_msg = _("Disable replication group failed: %s.") % ex raise exception.ReplicationGroupError(reason=err_msg, group_id=group.id) @@ -4947,8 +4942,7 @@ class VolumeManager(manager.CleanableManager, vol.status = 'error' vol.replication_status = fields.ReplicationStatus.ERROR vol.save() - err_msg = _("Failover replication group failed: " - "%s.") % six.text_type(ex) + err_msg = _("Failover replication group failed: %s.") % ex raise exception.ReplicationGroupError(reason=err_msg, group_id=group.id) diff --git a/cinder/volume/targets/driver.py b/cinder/volume/targets/driver.py index fbee7f61327..581e28cc2a5 100644 --- a/cinder/volume/targets/driver.py +++ b/cinder/volume/targets/driver.py @@ -13,13 +13,11 @@ import abc from oslo_config import cfg -import six CONF = cfg.CONF -@six.add_metaclass(abc.ABCMeta) -class Target(object): +class Target(object, metaclass=abc.ABCMeta): """Target object for block storage devices. Base class for target object, where target diff --git a/cinder/volume/targets/nvmet.py b/cinder/volume/targets/nvmet.py index 5eab08c2155..59c7b5fb2b5 100644 --- a/cinder/volume/targets/nvmet.py +++ b/cinder/volume/targets/nvmet.py @@ -17,7 +17,6 @@ from oslo_log import log as logging from oslo_serialization import jsonutils as json from oslo_utils import excutils from oslo_utils import uuidutils -import six from cinder import exception from cinder.privsep import nvmcli @@ -122,7 +121,7 @@ class NVMET(nvmeof.NVMeOF): "namespaces": [ { "device": { - "nguid": six.text_type(uuidutils.generate_uuid()), + "nguid": str(uuidutils.generate_uuid()), "path": volume_path, }, "enable": 1, diff --git a/cinder/volume/volume_utils.py b/cinder/volume/volume_utils.py index 668b5574aa8..915a4707f1e 100644 --- a/cinder/volume/volume_utils.py +++ b/cinder/volume/volume_utils.py @@ -43,8 +43,6 @@ from oslo_utils import netutils from oslo_utils import strutils from oslo_utils import timeutils from oslo_utils import units -import six -from six.moves import range from cinder.brick.local_dev import lvm as brick_lvm from cinder import context @@ -550,11 +548,11 @@ def _transfer_data(src, dest, length, chunk_size): def _copy_volume_with_file(src, dest, size_in_m): src_handle = src - if isinstance(src, six.string_types): + if isinstance(src, str): src_handle = _open_volume_with_path(src, 'rb') dest_handle = dest - if isinstance(dest, six.string_types): + if isinstance(dest, str): dest_handle = _open_volume_with_path(dest, 'wb') if not src_handle: @@ -571,9 +569,9 @@ def _copy_volume_with_file(src, dest, size_in_m): duration = max(1, timeutils.delta_seconds(start_time, timeutils.utcnow())) - if isinstance(src, six.string_types): + if isinstance(src, str): src_handle.close() - if isinstance(dest, six.string_types): + if isinstance(dest, str): dest_handle.close() mbps = (size_in_m / duration) @@ -598,8 +596,8 @@ def copy_volume(src, dest, size_in_m, blocksize, sync=False, instead of file paths and, at present moment, throttling is unavailable. """ - if (isinstance(src, six.string_types) and - isinstance(dest, six.string_types)): + if (isinstance(src, str) and + isinstance(dest, str)): if not throttle: throttle = throttling.Throttle.get_default() with throttle.subcommand(src, dest) as throttle_cmd: @@ -823,7 +821,7 @@ def check_already_managed_volume(vol_id): volume id exists, otherwise return False """ try: - return (vol_id and isinstance(vol_id, six.string_types) and + return (vol_id and isinstance(vol_id, str) and uuid.UUID(vol_id, version=4) and objects.Volume.exists(context.get_admin_context(), vol_id)) except ValueError: @@ -1215,12 +1213,8 @@ def sanitize_host(host): def sanitize_hostname(hostname): """Return a hostname which conforms to RFC-952 and RFC-1123 specs.""" - if six.PY3: - hostname = hostname.encode('latin-1', 'ignore') - hostname = hostname.decode('latin-1') - else: - if isinstance(hostname, six.text_type): - hostname = hostname.encode('latin-1', 'ignore') + hostname = hostname.encode('latin-1', 'ignore') + hostname = hostname.decode('latin-1') hostname = re.sub(r'[ _]', '-', hostname) hostname = re.sub(r'[^\w.-]+', '', hostname)