Handle MessageTimeout to MigrationPreCheckError
There are a few checks before live-migration, if any of the check failed, the live-migration can't be done. However during _call_livem_checks_on_host check, because it's a RPC call ,so it might result in a MessageTimeout exception. If this occurs, we should safely revert its state, since no real opperation occured. This patch translates the MessageTimeout to MigrationPreCheckError and leverage existing MigrationPreCheckError processing to revert instance to normal state instead of error Closes-Bug: 1435633 Change-Id: I8b484abb6650e14e2d225ca5e476d1fa7a6ee990
This commit is contained in:
parent
5e61bc6d83
commit
c0d0e5ccf6
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
|
import oslo_messaging as messaging
|
||||||
|
|
||||||
from nova.compute import power_state
|
from nova.compute import power_state
|
||||||
from nova.conductor.tasks import base
|
from nova.conductor.tasks import base
|
||||||
@ -141,9 +142,14 @@ class LiveMigrationTask(base.TaskBase):
|
|||||||
raise exception.DestinationHypervisorTooOld()
|
raise exception.DestinationHypervisorTooOld()
|
||||||
|
|
||||||
def _call_livem_checks_on_host(self, destination):
|
def _call_livem_checks_on_host(self, destination):
|
||||||
self.migrate_data = self.compute_rpcapi.\
|
try:
|
||||||
check_can_live_migrate_destination(self.context, self.instance,
|
self.migrate_data = self.compute_rpcapi.\
|
||||||
destination, self.block_migration, self.disk_over_commit)
|
check_can_live_migrate_destination(self.context, self.instance,
|
||||||
|
destination, self.block_migration, self.disk_over_commit)
|
||||||
|
except messaging.MessagingTimeout:
|
||||||
|
msg = _("Timeout while checking if we can live migrate to host: "
|
||||||
|
"%s") % destination
|
||||||
|
raise exception.MigrationPreCheckError(msg)
|
||||||
|
|
||||||
def _find_destination(self):
|
def _find_destination(self):
|
||||||
# TODO(johngarbutt) this retry loop should be shared
|
# TODO(johngarbutt) this retry loop should be shared
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
import mock
|
import mock
|
||||||
from mox3 import mox
|
from mox3 import mox
|
||||||
|
import oslo_messaging as messaging
|
||||||
|
|
||||||
from nova.compute import power_state
|
from nova.compute import power_state
|
||||||
from nova.compute import rpcapi as compute_rpcapi
|
from nova.compute import rpcapi as compute_rpcapi
|
||||||
@ -445,3 +446,10 @@ class LiveMigrationTaskTestCase(test.NoDBTestCase):
|
|||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
self.assertRaises(exception.NoValidHost, self.task._find_destination)
|
self.assertRaises(exception.NoValidHost, self.task._find_destination)
|
||||||
|
|
||||||
|
def test_call_livem_checks_on_host(self):
|
||||||
|
with mock.patch.object(self.task.compute_rpcapi,
|
||||||
|
'check_can_live_migrate_destination',
|
||||||
|
side_effect=messaging.MessagingTimeout):
|
||||||
|
self.assertRaises(exception.MigrationPreCheckError,
|
||||||
|
self.task._call_livem_checks_on_host, {})
|
||||||
|
Loading…
Reference in New Issue
Block a user