[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