Merge "Handle "no RAM info was set" migration case"

This commit is contained in:
Zuul 2022-10-06 23:49:17 +00:00 committed by Gerrit Code Review
commit df8e0335fa
3 changed files with 40 additions and 0 deletions

View File

@ -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)

View File

@ -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

View File

@ -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