From ec20076d24455860b38fd9a143910f75741ac8f6 Mon Sep 17 00:00:00 2001 From: Armando Migliaccio Date: Thu, 1 Mar 2012 19:10:54 +0000 Subject: bug 944145: race condition causes VM's state to be SHUTOFF ensure we close down the contention window between _sync_power_states and live migration/host evacuation. Change-Id: Ie6cbd9bf2eee206b4a821a4b77a6dced409f3983 --- nova/virt/xenapi/host.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'nova/virt') diff --git a/nova/virt/xenapi/host.py b/nova/virt/xenapi/host.py index 7e047da51..567e1d003 100644 --- a/nova/virt/xenapi/host.py +++ b/nova/virt/xenapi/host.py @@ -23,6 +23,7 @@ import logging import json import random +from nova.compute import vm_states from nova import context from nova import db from nova import exception @@ -73,17 +74,22 @@ class Host(object): instance = db.instance_get_by_uuid(ctxt, uuid) vm_counter = vm_counter + 1 + dest = _host_find(ctxt, self._session, host, host_ref) + db.instance_update(ctxt, instance.id, + {'host': dest, + 'vm_state': vm_states.MIGRATING}) self._session.call_xenapi('VM.pool_migrate', vm_ref, host_ref, {}) - new_host = _host_find(ctxt, self._session, - host, host_ref) - db.instance_update(ctxt, - instance.id, {'host': new_host}) migrations_counter = migrations_counter + 1 + db.instance_update(ctxt, instance.id, + {'vm_state': vm_states.ACTIVE}) break except self.XenAPI.Failure: LOG.exception('Unable to migrate VM %(vm_ref)s' 'from %(host)s' % locals()) + db.instance_update(ctxt, instance.id, + {'host': host, + 'vm_state': vm_states.ACTIVE}) if vm_counter == migrations_counter: return 'on_maintenance' else: -- cgit