Fix service_uuid migration for volumes with no host

For volumes that have no host assigned, this
migration will fail.  Skip those volumes, as they
don't need to be updated.

Closes-Bug: #1821207
Change-Id: I08487575e52c5cfd5a268a23d97b6bd931aeaa45
This commit is contained in:
Eric Harney 2019-03-21 13:02:26 -04:00
parent 95379fdfea
commit 47d2a98fa6
2 changed files with 8 additions and 3 deletions

View File

@ -622,7 +622,8 @@ def volume_service_uuids_online_data_migration(context, max_count):
updated = 0
query = model_query(context,
models.Volume).filter_by(service_uuid=None)
models.Volume).filter_by(service_uuid=None).\
filter(models.Volume.host.isnot(None))
total = query.count()
vol_refs = query.limit(max_count).all()

View File

@ -494,6 +494,8 @@ class DBAPIServiceTestCase(BaseTest):
self.ctxt, {'host': 'host1@lvm-driver1#lvm-driver1'})
db.volume_create(
self.ctxt, {'host': 'host1@lvm-driver1#lvm-driver1'})
# Entries with no host should be skipped
db.volume_create(self.ctxt, {'host': None})
values = {
'host': 'host1@lvm-driver1',
@ -506,12 +508,14 @@ class DBAPIServiceTestCase(BaseTest):
total, updated = db.volume_service_uuids_online_data_migration(
self.ctxt, 2)
# total = number of volumes that have hosts and don't have a
# service_uuid
self.assertEqual(3, total)
self.assertEqual(2, updated)
# Now get the ,last one (intentionally setting max > expected)
# Now get the last one (intentionally setting max > expected)
total, updated = db.volume_service_uuids_online_data_migration(
self.ctxt, 2)
self.ctxt, 99)
self.assertEqual(1, total)
self.assertEqual(1, updated)