class NUMANode(base.ZunObject): # Version 1.0: Initial version VERSION = '1.0' fields = { 'id': fields.IntegerField(read_only=True), 'cpuset': fields.SetOfIntegersField(), 'pinned_cpus': fields.SetOfIntegersField(), 'mem_total': fields.IntegerField(nullable=True), 'mem_available': fields.IntegerField(nullable=True), } @property def free_cpus(self): return self.cpuset - self.pinned_cpus or set() @property def avail_cpus(self): return len(self.free_cpus) def pin_cpus(self, cpus): if cpus - self.cpuset: raise exception.CPUPinningUnknown(requested=list(cpus), cpuset=list(self.pinned_cpus)) if self.pinned_cpus & cpus: raise exception.CPUPinningInvalid(requested=list(cpus), free=list(self.cpuset - self.pinned_cpus)) self.pinned_cpus |= cpus def unpin_cpus(self, cpus): if cpus - self.cpuset: raise exception.CPUUnpinningUnknown(requested=list(cpus), cpuset=list(self.pinned_cpus)) if (self.pinned_cpus & cpus) != cpus: raise exception.CPUUnpinningInvalid(requested=list(cpus), pinned=list(self.pinned_cpus)) self.pinned_cpus -= cpus def _to_dict(self): return { 'id': self.id, 'cpuset': list(self.cpuset), 'pinned_cpus': list(self.pinned_cpus), 'mem_total': self.mem_total, 'mem_available': self.mem_available } @classmethod def _from_dict(cls, data_dict): cpuset = set(data_dict.get('cpuset', '')) node_id = data_dict.get('id') pinned_cpus = set(data_dict.get('pinned_cpus')) mem_total = data_dict.get('mem_total') mem_available = data_dict.get('mem_available') return cls(id=node_id, cpuset=cpuset, pinned_cpus=pinned_cpus, mem_total=mem_total, mem_available=mem_available)
def test_repr(self): self.assertEqual( "Set(default=<class 'oslo_versionedobjects.fields." "UnspecifiedDefault'>,nullable=False)", repr(self.field)) self.assertEqual("Set(default=set([]),nullable=False)", repr(fields.SetOfIntegersField(default=set()))) self.assertEqual("Set(default=set([1,a]),nullable=False)", repr(fields.SetOfIntegersField(default={1, 'a'})))
def setUp(self): super(TestSetOfIntegers, self).setUp() self.field = fields.SetOfIntegersField() self.coerce_good_values = [(set(['1', 2]), set([1, 2]))] self.coerce_bad_values = [set(['foo'])] self.to_primitive_values = [(set([1]), tuple([1]))] self.from_primitive_values = [(tuple([1]), set([1]))]
class Cpuset(base.ZunObject): VERSION = '1.0' fields = { 'cpuset_cpus': fields.SetOfIntegersField(nullable=True), 'cpuset_mems': fields.SetOfIntegersField(nullable=True), } def _to_dict(self): return { 'cpuset_cpus': self.cpuset_cpus, 'cpuset_mems': self.cpuset_mems } @classmethod def _from_dict(cls, data_dict): if not data_dict: obj = cls(cpuset_cpus=None, cpuset_mems=None) else: cpuset_cpus = data_dict.get('cpuset_cpus') cpuset_mems = data_dict.get('cpuset_mems') obj = cls(cpuset_cpus=cpuset_cpus, cpuset_mems=cpuset_mems) obj.obj_reset_changes() return obj
class ClassWithDefaultedSetField(base.VersionedObject): VERSION = 1.0 fields = { 'empty_default': fields.SetOfIntegersField(default=set()), 'non_empty_default': fields.SetOfIntegersField(default={1, 2}) }