Merge "Handle "no RAM info was set" migration case"
This commit is contained in:
commit
df8e0335fa
@ -1053,3 +1053,25 @@ class JobInfoTestCase(test.NoDBTestCase):
|
||||
|
||||
mock_stats.assert_called_once_with()
|
||||
mock_info.assert_called_once_with()
|
||||
|
||||
@mock.patch.object(fakelibvirt.virDomain, "jobInfo")
|
||||
@mock.patch.object(fakelibvirt.virDomain, "jobStats")
|
||||
def test_job_stats_no_ram(self, mock_stats, mock_info):
|
||||
mock_stats.side_effect = fakelibvirt.make_libvirtError(
|
||||
fakelibvirt.libvirtError,
|
||||
"internal error: migration was active, but no RAM info was set",
|
||||
error_code=fakelibvirt.VIR_ERR_INTERNAL_ERROR,
|
||||
error_message="migration was active, but no RAM info was set")
|
||||
|
||||
info = self.guest.get_job_info()
|
||||
|
||||
self.assertIsInstance(info, libvirt_guest.JobInfo)
|
||||
self.assertEqual(fakelibvirt.VIR_DOMAIN_JOB_NONE, info.type)
|
||||
self.assertEqual(0, info.time_elapsed)
|
||||
self.assertEqual(0, info.time_remaining)
|
||||
self.assertEqual(0, info.memory_total)
|
||||
self.assertEqual(0, info.memory_processed)
|
||||
self.assertEqual(0, info.memory_remaining)
|
||||
|
||||
mock_stats.assert_called_once_with()
|
||||
self.assertFalse(mock_info.called)
|
||||
|
@ -674,6 +674,7 @@ class Guest(object):
|
||||
stats = self._domain.jobStats()
|
||||
return JobInfo(**stats)
|
||||
except libvirt.libvirtError as ex:
|
||||
errmsg = ex.get_error_message()
|
||||
if ex.get_error_code() == libvirt.VIR_ERR_NO_SUPPORT:
|
||||
# Remote libvirt doesn't support new API
|
||||
LOG.debug("Missing remote virDomainGetJobStats: %s", ex)
|
||||
@ -686,6 +687,12 @@ class Guest(object):
|
||||
# away completclsely
|
||||
LOG.debug("Domain has shutdown/gone away: %s", ex)
|
||||
return JobInfo(type=libvirt.VIR_DOMAIN_JOB_COMPLETED)
|
||||
elif (ex.get_error_code() == libvirt.VIR_ERR_INTERNAL_ERROR and
|
||||
errmsg and "migration was active, "
|
||||
"but no RAM info was set" in errmsg):
|
||||
LOG.debug("Migration is active or completed but "
|
||||
"virDomainGetJobStats is missing ram: %s", ex)
|
||||
return JobInfo(type=libvirt.VIR_DOMAIN_JOB_NONE)
|
||||
else:
|
||||
LOG.debug("Failed to get job stats: %s", ex)
|
||||
raise
|
||||
|
@ -0,0 +1,11 @@
|
||||
---
|
||||
other:
|
||||
- |
|
||||
A workaround has been added to the libvirt driver to catch and pass
|
||||
migrations that were previously failing with the error:
|
||||
|
||||
``libvirt.libvirtError: internal error: migration was active, but no RAM info was set``
|
||||
|
||||
See `bug 1982284`_ for more details.
|
||||
|
||||
.. _bug 1982284: https://bugs.launchpad.net/nova/+bug/1982284
|
Loading…
Reference in New Issue
Block a user