diff --git a/nova/virt/driver.py b/nova/virt/driver.py index 34ce9613b76..200bada2979 100644 --- a/nova/virt/driver.py +++ b/nova/virt/driver.py @@ -22,9 +22,17 @@ types that support that contract """ +from nova import context as nova_context +from nova import db +from nova import flags +from nova import log as logging from nova.compute import power_state +LOG = logging.getLogger("nova.virt.driver") +FLAGS = flags.FLAGS + + class InstanceInfo(object): def __init__(self, name, state): self.name = name @@ -500,7 +508,7 @@ def poll_rescued_instances(self, timeout): raise NotImplementedError() def poll_unconfirmed_resizes(self, resize_confirm_window): - """Poll for unconfirmed resizes""" + """Poll for unconfirmed resizes.""" # TODO(Vek): Need to pass context in for access to auth_token raise NotImplementedError() diff --git a/nova/virt/libvirt/connection.py b/nova/virt/libvirt/connection.py index 9f8971295d7..7caee1eb84b 100644 --- a/nova/virt/libvirt/connection.py +++ b/nova/virt/libvirt/connection.py @@ -688,7 +688,25 @@ def poll_rescued_instances(self, timeout): @exception.wrap_exception() def poll_unconfirmed_resizes(self, resize_confirm_window): - pass + """Poll for unconfirmed resizes. + + Look for any unconfirmed resizes that are older than + `resize_confirm_window` and automatically confirm them. + """ + ctxt = nova_context.get_admin_context() + migrations = db.migration_get_all_unconfirmed(ctxt, + resize_confirm_window) + + migrations_info = dict(migration_count=len(migrations), + confirm_window=FLAGS.resize_confirm_window) + + if migrations_info["migration_count"] > 0: + LOG.info(_("Found %(migration_count)d unconfirmed migrations " + "older than %(confirm_window)d seconds") % migrations_info) + + for migration in migrations: + LOG.info(_("Automatically confirming migration %d"), migration.id) + self.compute_api.confirm_resize(ctxt, migration.instance_uuid) # NOTE(ilyaalekseyev): Implementation like in multinics # for xenapi(tr3buchet)