diff --git a/cinder/db/sqlalchemy/api.py b/cinder/db/sqlalchemy/api.py index 69fe9f7b174..cc502d9e88f 100644 --- a/cinder/db/sqlalchemy/api.py +++ b/cinder/db/sqlalchemy/api.py @@ -621,7 +621,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() diff --git a/cinder/tests/unit/test_db_api.py b/cinder/tests/unit/test_db_api.py index 450e638ff53..6731c9da369 100644 --- a/cinder/tests/unit/test_db_api.py +++ b/cinder/tests/unit/test_db_api.py @@ -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)