Added better error messages during (un)pinning CPUs

Error messages during pinning and unpinning are same.
It's a confusing especially during migration for example.
You got message like "Cannot pin/unpin cpus [17] from the
following pinned set [3]" and you can't understand is it
a problem with removing a VM from old compute node
or with booting a VM on new compute node.

We should split these two cases.

Change-Id: Ic70ecdfa414fd8558d453fbf1c21640c8acc3ea1
This commit is contained in:
Sergey Nikitin 2016-04-14 11:17:13 +03:00
parent 2d551ce83d
commit b10948913d
3 changed files with 23 additions and 12 deletions

View File

@ -1966,12 +1966,22 @@ class CPUPinningNotSupported(Invalid):
class CPUPinningInvalid(Invalid):
msg_fmt = _("Cannot pin/unpin cpus %(requested)s from the following "
"pinned set %(pinned)s")
msg_fmt = _("CPU set to pin %(requested)s must be a subset of "
"free CPU set %(free)s")
class CPUUnpinningInvalid(Invalid):
msg_fmt = _("CPU set to unpin %(requested)s must be a subset of "
"pinned CPU set %(pinned)s")
class CPUPinningUnknown(Invalid):
msg_fmt = _("CPU set to pin/unpin %(requested)s must be a subset of "
msg_fmt = _("CPU set to pin %(requested)s must be a subset of "
"known CPU set %(cpuset)s")
class CPUUnpinningUnknown(Invalid):
msg_fmt = _("CPU set to unpin %(requested)s must be a subset of "
"known CPU set %(cpuset)s")

View File

@ -82,16 +82,17 @@ class NUMACell(base.NovaObject):
cpuset=list(self.pinned_cpus))
if self.pinned_cpus & cpus:
raise exception.CPUPinningInvalid(requested=list(cpus),
pinned=list(self.pinned_cpus))
free=list(self.cpuset -
self.pinned_cpus))
self.pinned_cpus |= cpus
def unpin_cpus(self, cpus):
if cpus - self.cpuset:
raise exception.CPUPinningUnknown(requested=list(cpus),
cpuset=list(self.pinned_cpus))
raise exception.CPUUnpinningUnknown(requested=list(cpus),
cpuset=list(self.pinned_cpus))
if (self.pinned_cpus & cpus) != cpus:
raise exception.CPUPinningInvalid(requested=list(cpus),
pinned=list(self.pinned_cpus))
raise exception.CPUUnpinningInvalid(requested=list(cpus),
pinned=list(self.pinned_cpus))
self.pinned_cpus -= cpus
def pin_cpus_with_siblings(self, cpus):

View File

@ -93,9 +93,9 @@ class _TestNUMA(object):
numacell.pin_cpus, set([1, 55]))
self.assertRaises(exception.CPUPinningInvalid,
numacell.pin_cpus, set([1, 4]))
self.assertRaises(exception.CPUPinningUnknown,
self.assertRaises(exception.CPUUnpinningUnknown,
numacell.unpin_cpus, set([1, 55]))
self.assertRaises(exception.CPUPinningInvalid,
self.assertRaises(exception.CPUUnpinningInvalid,
numacell.unpin_cpus, set([1, 4]))
numacell.unpin_cpus(set([1, 2, 3]))
self.assertEqual(set([1, 2, 3, 4]), numacell.free_cpus)
@ -111,13 +111,13 @@ class _TestNUMA(object):
self.assertEqual(set(), numacell.free_cpus)
numacell.unpin_cpus_with_siblings(set([1]))
self.assertEqual(set([1, 3]), numacell.free_cpus)
self.assertRaises(exception.CPUPinningInvalid,
self.assertRaises(exception.CPUUnpinningInvalid,
numacell.unpin_cpus_with_siblings,
set([3]))
self.assertRaises(exception.CPUPinningInvalid,
numacell.pin_cpus_with_siblings,
set([4]))
self.assertRaises(exception.CPUPinningInvalid,
self.assertRaises(exception.CPUUnpinningInvalid,
numacell.unpin_cpus_with_siblings,
set([3, 4]))
self.assertEqual(set([1, 3]), numacell.free_cpus)