From 8133092907b6957277c296b80b2a698085afac4c Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Mon, 13 Jul 2020 11:41:34 +0100 Subject: [PATCH] Remove use of pkg_resources Use of this library has significant performance implications. While we're probably not too badly affected, we don't actually need to use it here. The 'parse_version' utility it exposes is intended to parse PEP440-compliant version identifiers, not the simple microversions placement uses, which the 'microversion_parse' library can competently parse for us. Change-Id: I9b7281caec6fa53600dea316492d052787cf799b Signed-off-by: Stephen Finucane --- nova/cmd/status.py | 6 +++--- nova/tests/functional/test_report_client.py | 15 ++++++++------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/nova/cmd/status.py b/nova/cmd/status.py index af62ee840192..048ca6d1d3a4 100644 --- a/nova/cmd/status.py +++ b/nova/cmd/status.py @@ -21,10 +21,10 @@ import sys import traceback from keystoneauth1 import exceptions as ks_exc +import microversion_parse from oslo_config import cfg from oslo_upgradecheck import common_checks from oslo_upgradecheck import upgradecheck -import pkg_resources import sqlalchemy as sa from sqlalchemy import func as sqlfunc @@ -175,9 +175,9 @@ class UpgradeCommands(upgradecheck.UpgradeCommands): try: # TODO(efried): Use ksa's version filtering in _placement_get versions = self._placement_get("/") - max_version = pkg_resources.parse_version( + max_version = microversion_parse.parse_version_string( versions["versions"][0]["max_version"]) - needs_version = pkg_resources.parse_version( + needs_version = microversion_parse.parse_version_string( MIN_PLACEMENT_MICROVERSION) if max_version < needs_version: msg = (_('Placement API version %(needed)s needed, ' diff --git a/nova/tests/functional/test_report_client.py b/nova/tests/functional/test_report_client.py index 7f9e3bbb791d..81003f53f038 100644 --- a/nova/tests/functional/test_report_client.py +++ b/nova/tests/functional/test_report_client.py @@ -14,11 +14,11 @@ import copy import ddt from keystoneauth1 import exceptions as kse +import microversion_parse import mock import os_resource_classes as orc import os_traits as ot from oslo_utils.fixture import uuidsentinel as uuids -import pkg_resources from nova.cmd import status from nova.compute import provider_tree @@ -39,9 +39,6 @@ from nova.tests.functional import fixtures as func_fixtures CONF = conf.CONF -CMD_STATUS_MIN_MICROVERSION = pkg_resources.parse_version( - status.MIN_PLACEMENT_MICROVERSION) - class VersionCheckingReportClient(report.SchedulerReportClient): """This wrapper around SchedulerReportClient checks microversions for @@ -57,14 +54,18 @@ class VersionCheckingReportClient(report.SchedulerReportClient): if not microversion: return - seen_microversion = pkg_resources.parse_version(microversion) - if seen_microversion > CMD_STATUS_MIN_MICROVERSION: + min_microversion = microversion_parse.parse_version_string( + status.MIN_PLACEMENT_MICROVERSION) + got_microversion = microversion_parse.parse_version_string( + microversion) + if got_microversion > min_microversion: raise ValueError( "Report client is using microversion %s, but nova.cmd.status " "is only requiring %s. See " "I4369f7fb1453e896864222fa407437982be8f6b5 for an example of " "how to bump the minimum requirement." % - (microversion, status.MIN_PLACEMENT_MICROVERSION)) + (got_microversion, min_microversion) + ) def get(self, *args, **kwargs): self._check_microversion(kwargs)