[Neo-report] r2549 gregory - in /trunk/neo: pt.py tests/testPT.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Dec 15 18:23:00 CET 2010
Author: gregory
Date: Wed Dec 15 18:22:59 2010
New Revision: 2549
Log:
Add getNodeMap to partition table.
Modified:
trunk/neo/pt.py
trunk/neo/tests/testPT.py
Modified: trunk/neo/pt.py
==============================================================================
--- trunk/neo/pt.py [iso-8859-1] (original)
+++ trunk/neo/pt.py [iso-8859-1] Wed Dec 15 18:22:59 2010
@@ -318,6 +318,13 @@ class PartitionTable(object):
getRow = self.getRow
return [(x, getRow(x)) for x in xrange(self.np)]
+ def getNodeMap(self):
+ """ Return a list of 2-tuple: (uuid, partition_list) """
+ uuid_map = {}
+ for index, row in enumerate(self.partition_list):
+ for cell in row:
+ uuid_map.setdefault(cell.getNode(), []).append(index)
+ return uuid_map
def thread_safe(method):
def wrapper(self, *args, **kwargs):
@@ -367,3 +374,7 @@ class MTPartitionTable(PartitionTable):
def getNodeList(self, *args, **kwargs):
return PartitionTable.getNodeList(self, *args, **kwargs)
+ @thread_safe
+ def getNodeMap(self, *args, **kwargs):
+ return PartitionTable.getNodeMap(self, *args, **kwargs)
+
Modified: trunk/neo/tests/testPT.py
==============================================================================
--- trunk/neo/tests/testPT.py [iso-8859-1] (original)
+++ trunk/neo/tests/testPT.py [iso-8859-1] Wed Dec 15 18:22:59 2010
@@ -421,6 +421,35 @@ class PartitionTableTests(NeoUnitTestBas
# unknwon row
self.assertRaises(IndexError, pt.getRow, 5)
+ def test_getNodeMap(self):
+ num_partitions = 5
+ num_replicas = 2
+ pt = PartitionTable(num_partitions, num_replicas)
+ uuid1 = self.getNewUUID()
+ uuid2 = self.getNewUUID()
+ uuid3 = self.getNewUUID()
+ sn1 = StorageNode(Mock(),("127.0.0.1", 19001) , uuid1)
+ pt.setCell(0, sn1, CellStates.UP_TO_DATE)
+ pt.setCell(1, sn1, CellStates.UP_TO_DATE)
+ pt.setCell(2, sn1, CellStates.UP_TO_DATE)
+ self.assertEqual(pt.getNodeMap(), {
+ sn1: [0, 1, 2],
+ })
+ sn2 = StorageNode(Mock(), ("127.0.0.2", 19001), uuid2)
+ pt.setCell(0, sn2, CellStates.UP_TO_DATE)
+ pt.setCell(1, sn2, CellStates.UP_TO_DATE)
+ self.assertEqual(pt.getNodeMap(), {
+ sn1: [0, 1, 2],
+ sn2: [0, 1],
+ })
+ sn3 = StorageNode(Mock(), ("127.0.0.3", 19001), uuid3)
+ pt.setCell(0, sn3, CellStates.UP_TO_DATE)
+ self.assertEqual(pt.getNodeMap(), {
+ sn1: [0, 1, 2],
+ sn2: [0, 1],
+ sn3: [0],
+ })
+
if __name__ == '__main__':
unittest.main()
More information about the Neo-report
mailing list