Remove "API Service Version" upgrade check
With change I11083aa3c78bd8b6201558561457f3d65007a177 the code for the API Service Version upgrade check no longer exists and therefore the upgrade check itself is meaningless now. Change-Id: I68b13002bc745c2c9ca7209b806f08c30272550e
This commit is contained in:
parent
7737acdc20
commit
63a32c230c
@ -127,6 +127,8 @@ Upgrade
|
||||
* The "Resource Providers" upgrade check was removed since the placement
|
||||
service code is being extracted from nova and the related tables are no
|
||||
longer used in the ``nova_api`` database.
|
||||
* The "API Service Version" upgrade check was removed since the corresponding
|
||||
code for that check was removed in Stein.
|
||||
|
||||
See Also
|
||||
========
|
||||
|
@ -299,65 +299,6 @@ class UpgradeCommands(upgradecheck.UpgradeCommands):
|
||||
services.c.deleted == 0,
|
||||
services.c.forced_down == false())).scalar()
|
||||
|
||||
def _check_api_service_version(self):
|
||||
"""Checks nova-osapi_compute service versions across cells.
|
||||
|
||||
For non-cellsv1 deployments, based on how the [database]/connection
|
||||
is configured for the nova-api service, the nova-osapi_compute service
|
||||
versions before 15 will only attempt to lookup instances from the
|
||||
local database configured for the nova-api service directly.
|
||||
|
||||
This can cause issues if there are newer API service versions in cell1
|
||||
after the upgrade to Ocata, but lingering older API service versions
|
||||
in an older database.
|
||||
|
||||
This check will scan all cells looking for a minimum nova-osapi_compute
|
||||
service version less than 15 and if found, emit a warning that those
|
||||
service entries likely need to be cleaned up.
|
||||
"""
|
||||
# If we're using cells v1 then we don't care about this.
|
||||
if CONF.cells.enable:
|
||||
return upgradecheck.Result(upgradecheck.Code.SUCCESS)
|
||||
|
||||
meta = MetaData(bind=db_session.get_api_engine())
|
||||
cell_mappings = Table('cell_mappings', meta, autoload=True)
|
||||
mappings = cell_mappings.select().execute().fetchall()
|
||||
|
||||
if not mappings:
|
||||
# There are no cell mappings so we can't determine this, just
|
||||
# return a warning. The cellsv2 check would have already failed
|
||||
# on this.
|
||||
msg = (_('Unable to determine API service versions without '
|
||||
'cell mappings.'))
|
||||
return upgradecheck.Result(upgradecheck.Code.WARNING, msg)
|
||||
|
||||
ctxt = nova_context.get_admin_context()
|
||||
cells_with_old_api_services = []
|
||||
for mapping in mappings:
|
||||
with nova_context.target_cell(ctxt, mapping) as cctxt:
|
||||
# Get the minimum nova-osapi_compute service version in this
|
||||
# cell.
|
||||
min_version = self._get_min_service_version(
|
||||
cctxt, 'nova-osapi_compute')
|
||||
if min_version is not None and min_version < 15:
|
||||
cells_with_old_api_services.append(mapping['uuid'])
|
||||
|
||||
# If there are any cells with older API versions, we report it as a
|
||||
# warning since we don't know how the actual nova-api service is
|
||||
# configured, but we need to give the operator some indication that
|
||||
# they have something to investigate/cleanup.
|
||||
if cells_with_old_api_services:
|
||||
msg = (_("The following cells have 'nova-osapi_compute' services "
|
||||
"with version < 15 which may cause issues when querying "
|
||||
"instances from the API: %s. Depending on how nova-api "
|
||||
"is configured, this may not be a problem, but is worth "
|
||||
"investigating and potentially cleaning up those older "
|
||||
"records. See "
|
||||
"https://bugs.launchpad.net/nova/+bug/1759316 for "
|
||||
"details.") % ', '.join(cells_with_old_api_services))
|
||||
return upgradecheck.Result(upgradecheck.Code.WARNING, msg)
|
||||
return upgradecheck.Result(upgradecheck.Code.SUCCESS)
|
||||
|
||||
def _check_request_spec_migration(self):
|
||||
"""Checks to make sure request spec migrations are complete.
|
||||
|
||||
@ -513,8 +454,6 @@ class UpgradeCommands(upgradecheck.UpgradeCommands):
|
||||
(_('Placement API'), _check_placement),
|
||||
# Added in Rocky (but also useful going back to Pike)
|
||||
(_('Ironic Flavor Migration'), _check_ironic_flavor_migration),
|
||||
# Added in Rocky (but is backportable to Ocata)
|
||||
(_('API Service Version'), _check_api_service_version),
|
||||
# Added in Rocky
|
||||
(_('Request Spec Migration'), _check_request_spec_migration),
|
||||
# Added in Stein (but also useful going back to Rocky)
|
||||
|
@ -509,110 +509,6 @@ class TestUpgradeCheckIronicFlavorMigration(test.NoDBTestCase):
|
||||
result.details)
|
||||
|
||||
|
||||
class TestUpgradeCheckAPIServiceVersion(test.NoDBTestCase):
|
||||
"""Tests for the nova-status upgrade API service version specific check."""
|
||||
|
||||
# We'll setup the database ourselves because we need to use cells fixtures
|
||||
# for multiple cell mappings.
|
||||
USES_DB_SELF = True
|
||||
|
||||
# This will create three cell mappings: cell0, cell1 (default) and cell2
|
||||
NUMBER_OF_CELLS = 2
|
||||
|
||||
def setUp(self):
|
||||
super(TestUpgradeCheckAPIServiceVersion, self).setUp()
|
||||
self.output = StringIO()
|
||||
self.useFixture(fixtures.MonkeyPatch('sys.stdout', self.output))
|
||||
self.useFixture(nova_fixtures.Database(database='api'))
|
||||
self.cmd = status.UpgradeCommands()
|
||||
|
||||
def test_check_cells_v1_enabled(self):
|
||||
"""This is a 'success' case since the API service version check is
|
||||
ignored when running cells v1.
|
||||
"""
|
||||
self.flags(enable=True, group='cells')
|
||||
result = self.cmd._check_api_service_version()
|
||||
self.assertEqual(upgradecheck.Code.SUCCESS, result.code)
|
||||
|
||||
def test_check_no_cell_mappings_warning(self):
|
||||
"""Warn when there are no cell mappings."""
|
||||
result = self.cmd._check_api_service_version()
|
||||
self.assertEqual(upgradecheck.Code.WARNING, result.code)
|
||||
self.assertEqual('Unable to determine API service versions without '
|
||||
'cell mappings.', result.details)
|
||||
|
||||
@staticmethod
|
||||
def _create_service(ctxt, host, binary, version):
|
||||
svc = objects.Service(ctxt, host=host, binary=binary)
|
||||
svc.version = version
|
||||
svc.create()
|
||||
return svc
|
||||
|
||||
def test_check_warning(self):
|
||||
"""This is a failure scenario where we have the following setup:
|
||||
|
||||
Three cells where:
|
||||
|
||||
1. The first cell has two API services, one with version < 15 and one
|
||||
with version >= 15.
|
||||
2. The second cell has two services, one with version < 15 but it's
|
||||
deleted so it gets filtered out, and one with version >= 15.
|
||||
3. The third cell doesn't have any API services, just old compute
|
||||
services which should be filtered out.
|
||||
|
||||
In this scenario, the first cell should be reported with a warning.
|
||||
"""
|
||||
self._setup_cells()
|
||||
ctxt = context.get_admin_context()
|
||||
cell0 = self.cell_mappings['cell0']
|
||||
with context.target_cell(ctxt, cell0) as cctxt:
|
||||
self._create_service(cctxt, host='cell0host1',
|
||||
binary='nova-osapi_compute', version=14)
|
||||
self._create_service(cctxt, host='cell0host2',
|
||||
binary='nova-osapi_compute', version=15)
|
||||
|
||||
cell1 = self.cell_mappings['cell1']
|
||||
with context.target_cell(ctxt, cell1) as cctxt:
|
||||
svc = self._create_service(
|
||||
cctxt, host='cell1host1', binary='nova-osapi_compute',
|
||||
version=14)
|
||||
# This deleted record with the old version should get filtered out.
|
||||
svc.destroy()
|
||||
self._create_service(cctxt, host='cell1host2',
|
||||
binary='nova-osapi_compute', version=16)
|
||||
|
||||
cell2 = self.cell_mappings['cell2']
|
||||
with context.target_cell(ctxt, cell2) as cctxt:
|
||||
self._create_service(cctxt, host='cell2host1',
|
||||
binary='nova-compute', version=14)
|
||||
|
||||
result = self.cmd._check_api_service_version()
|
||||
self.assertEqual(upgradecheck.Code.WARNING, result.code)
|
||||
# The only cell in the message should be cell0.
|
||||
self.assertIn(cell0.uuid, result.details)
|
||||
self.assertNotIn(cell1.uuid, result.details)
|
||||
self.assertNotIn(cell2.uuid, result.details)
|
||||
|
||||
def test_check_success(self):
|
||||
"""Tests the success scenario where we have cell0 with a current API
|
||||
service, cell1 with no API services, and an empty cell2.
|
||||
"""
|
||||
self._setup_cells()
|
||||
ctxt = context.get_admin_context()
|
||||
cell0 = self.cell_mappings['cell0']
|
||||
with context.target_cell(ctxt, cell0) as cctxt:
|
||||
self._create_service(cctxt, host='cell0host1',
|
||||
binary='nova-osapi_compute', version=15)
|
||||
|
||||
cell1 = self.cell_mappings['cell1']
|
||||
with context.target_cell(ctxt, cell1) as cctxt:
|
||||
self._create_service(cctxt, host='cell1host1',
|
||||
binary='nova-compute', version=15)
|
||||
|
||||
result = self.cmd._check_api_service_version()
|
||||
self.assertEqual(upgradecheck.Code.SUCCESS, result.code)
|
||||
|
||||
|
||||
def _create_minimal_request_spec(ctxt, instance):
|
||||
request_spec = objects.RequestSpec.from_components(
|
||||
ctxt, instance.uuid, instance.image_meta,
|
||||
|
Loading…
Reference in New Issue
Block a user