Periodic task _poll_unconfirmed_resizes can now use slave db
This allows the _poll_unconfirmed_resizes periodic task to use the slave db for reads if the deployment has a slave configured. For slaveless deployments behavior remains unchanged. This commit advances the MigrationList object to version 1.1 Change-Id: I10bf729e92dc599819ef74a97a834c7f2df5b162 Partially-implements: blueprint periodic-tasks-to-db-slave
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user