diff --git a/nova/compute/manager.py b/nova/compute/manager.py index fd534915da9d..693439e10995 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -4530,7 +4530,8 @@ class ComputeManager(manager.SchedulerDependentManager): mig_list_cls = migration_obj.MigrationList migrations = mig_list_cls.get_unconfirmed_by_dest_compute( - context, CONF.resize_confirm_window, self.host) + context, CONF.resize_confirm_window, self.host, + use_slave=True) migrations_info = dict(migration_count=len(migrations), confirm_window=CONF.resize_confirm_window) @@ -4557,7 +4558,8 @@ class ComputeManager(manager.SchedulerDependentManager): expected_attrs = ['metadata', 'system_metadata'] try: instance = instance_obj.Instance.get_by_uuid(context, - instance_uuid, expected_attrs=expected_attrs) + instance_uuid, expected_attrs=expected_attrs, + use_slave=True) except exception.InstanceNotFound: reason = (_("Instance %s not found") % instance_uuid) diff --git a/nova/db/api.py b/nova/db/api.py index 80ef84bb254f..b4398aa33d05 100644 --- a/nova/db/api.py +++ b/nova/db/api.py @@ -442,13 +442,13 @@ def migration_get_by_instance_and_status(context, instance_uuid, status): def migration_get_unconfirmed_by_dest_compute(context, confirm_window, - dest_compute): + dest_compute, use_slave=False): """ Finds all unconfirmed migrations within the confirmation window for a specific destination compute host. """ return IMPL.migration_get_unconfirmed_by_dest_compute(context, - confirm_window, dest_compute) + confirm_window, dest_compute, use_slave=use_slave) def migration_get_in_progress_by_host_and_node(context, host, node): diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index 78886fdfde04..2bbca96c5f44 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -4025,15 +4025,16 @@ def migration_get_by_instance_and_status(context, instance_uuid, status): @require_admin_context def migration_get_unconfirmed_by_dest_compute(context, confirm_window, - dest_compute): + dest_compute, use_slave=False): confirm_window = (timeutils.utcnow() - datetime.timedelta(seconds=confirm_window)) - return model_query(context, models.Migration, read_deleted="yes").\ - filter(models.Migration.updated_at <= confirm_window).\ - filter_by(status="finished").\ - filter_by(dest_compute=dest_compute).\ - all() + return model_query(context, models.Migration, read_deleted="yes", + use_slave=use_slave).\ + filter(models.Migration.updated_at <= confirm_window).\ + filter_by(status="finished").\ + filter_by(dest_compute=dest_compute).\ + all() @require_admin_context diff --git a/nova/objects/migration.py b/nova/objects/migration.py index 2bf16b4f79ad..18ba2447beaa 100644 --- a/nova/objects/migration.py +++ b/nova/objects/migration.py @@ -86,15 +86,19 @@ def _make_list(context, list_obj, item_cls, db_list): class MigrationList(base.ObjectListBase, base.NovaObject): + # Version 1.0: Initial version + # Version 1.1: Added use_slave to get_unconfirmed_by_dest_compute + VERSION = '1.1' + fields = { 'objects': fields.ListOfObjectsField('Migration'), } @base.remotable_classmethod def get_unconfirmed_by_dest_compute(cls, context, confirm_window, - dest_compute): + dest_compute, use_slave=False): db_migrations = db.migration_get_unconfirmed_by_dest_compute( - context, confirm_window, dest_compute) + context, confirm_window, dest_compute, use_slave=use_slave) return _make_list(context, MigrationList(), Migration, db_migrations) @base.remotable_classmethod diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index ff256720a0ec..cbdc9948b37d 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -5092,7 +5092,7 @@ class ComputeTestCase(BaseTestCase): return instance def fake_migration_get_unconfirmed_by_dest_compute(context, - resize_confirm_window, dest_compute): + resize_confirm_window, dest_compute, use_slave=False): self.assertEqual(dest_compute, CONF.host) return migrations diff --git a/nova/tests/objects/test_migration.py b/nova/tests/objects/test_migration.py index c6f8cbda8ba4..08f0f1af8018 100644 --- a/nova/tests/objects/test_migration.py +++ b/nova/tests/objects/test_migration.py @@ -118,11 +118,12 @@ class _TestMigrationObject(object): self.mox.StubOutWithMock( db, 'migration_get_unconfirmed_by_dest_compute') db.migration_get_unconfirmed_by_dest_compute( - ctxt, 'window', 'foo').AndReturn(db_migrations) + ctxt, 'window', 'foo', + use_slave=False).AndReturn(db_migrations) self.mox.ReplayAll() migrations = ( migration.MigrationList.get_unconfirmed_by_dest_compute( - ctxt, 'window', 'foo')) + ctxt, 'window', 'foo', use_slave=False)) self.assertEqual(2, len(migrations)) for index, db_migration in enumerate(db_migrations): self.compare_obj(migrations[index], db_migration)