示例#1
0
 def testDiscard(self):
     """test RangeSet.discard()"""
     r1 = RangeSet("1-100,102,105-242,800")
     self.assertEqual(len(r1), 240)
     r1.discard(100)
     self.assertEqual(len(r1), 239)
     self.assertEqual(str(r1), "1-99,102,105-242,800")
     r1.discard(101)  # should not raise KeyError
     # test remove integer-castable type (convenience)
     r1.remove("106")
     r1.discard("foo")
 def testDiscard(self):
     """test RangeSet.discard()"""
     r1 = RangeSet("1-100,102,105-242,800")
     self.assertEqual(len(r1), 240)
     r1.discard(100)
     self.assertEqual(len(r1), 239)
     self.assertEqual(str(r1), "1-99,102,105-242,800")
     r1.discard(101)     # should not raise KeyError
     # test remove integer-castable type (convenience)
     r1.remove("106")
     r1.discard("foo")
示例#3
0
 def testRemove(self):
     """test RangeSet.remove()"""
     r1 = RangeSet("1-100,102,105-242,800")
     self.assertEqual(len(r1), 240)
     r1.remove(100)
     self.assertEqual(len(r1), 239)
     self.assertEqual(str(r1), "1-99,102,105-242,800")
     self.assertRaises(KeyError, r1.remove, 101)
     # test remove integer-castable type (convenience)
     r1.remove("106")
     # non integer castable cases raise ValueError (documented since 1.6)
     self.assertRaises(ValueError, r1.remove, "foo")
 def testRemove(self):
     """test RangeSet.remove()"""
     r1 = RangeSet("1-100,102,105-242,800")
     self.assertEqual(len(r1), 240)
     r1.remove(100)
     self.assertEqual(len(r1), 239)
     self.assertEqual(str(r1), "1-99,102,105-242,800")
     self.assertRaises(KeyError, r1.remove, 101)
     # test remove integer-castable type (convenience)
     r1.remove("106")
     # non integer castable cases raise ValueError (documented since 1.6)
     self.assertRaises(ValueError, r1.remove, "foo")
示例#5
0
    def select_nodes(self, profil, name, nb_nodes, host):
        '''Select nodes to spawn'''
        # 1: recover available nodelist
        # 2: select nb_nodes among availables nodes
        # 3: return the list of nodes
        err = ""
        nodes = []
        if host is None:
            err = "Error: No host available\n"
            _LOGGER.error(err)
            self.rep_sock.send(msgpack.packb(('', [err])))
            return nodes
        if not vc.VirtualCluster.valid_clustername(name):
            err = "Error: clustername '{}' is not a valid name\n".format(name)
            _LOGGER.error(err)
            self.rep_sock.send(msgpack.packb(('', [err])))
            return nodes
        if profil not in self.profiles:
            err = "Error: Profil '{}' not found in configuration file\n".format(
                profil)
            _LOGGER.error(err)
            self.rep_sock.send(msgpack.packb(('', [err])))
            return nodes

        nodelist = self.list_nodes(byhost=False)
        nodeset = NodeSet.fromlist([node.name for node in nodelist])
        idx_min = 0
        idx_max = nb_nodes - 1
        base_range = RangeSet("%d-%d" % (idx_min, idx_max))
        base_nodeset = NodeSetBase(name + '%s', base_range)
        ndset_inter = nodeset.intersection(base_nodeset)
        while len(ndset_inter) != 0:
            indexes = [
                clustdock.VirtualNode.split_name(node)[1]
                for node in ndset_inter
            ]
            for idx in indexes:
                _LOGGER.debug("Removing %d from rangeset %s", idx, base_range)
                base_range.remove(idx)
            base_nodeset.difference_update(ndset_inter)
            _LOGGER.debug("Nodeset becomes '%s' after removing", base_nodeset)
            idx_min = max(indexes + list(base_range)) + 1
            idx_max = idx_min + max([len(indexes), nb_nodes - len(base_range)])
            base_range.add_range(idx_min, idx_max)
            _LOGGER.debug("New rangeset: %s", base_range)
            base_nodeset.update(
                NodeSetBase(name + '%s',
                            RangeSet.fromlist([range(idx_min, idx_max)])))
            _LOGGER.debug("New nodeset: %s", base_nodeset)
            ndset_inter = nodeset.intersection(base_nodeset)

        final_range = base_range
        _LOGGER.debug("final rangeset/nodeset: %s / %s", base_range,
                      base_nodeset)

        cluster = vc.VirtualCluster(name, profil, self.profiles[profil])
        nodes = []
        for idx in final_range:
            node = cluster.add_node(idx, host)
            nodes.append(node)
        return nodes