[Neo-report] r2648 gregory - in /trunk/neo: storage/ tests/storage/

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Feb 8 15:06:56 CET 2011


Author: gregory
Date: Tue Feb  8 15:06:56 2011
New Revision: 2648

Log:
Use a set instead of a dict

Signed-off-by: Grégory <gregory at nexedi.com>

Modified:
    trunk/neo/storage/replicator.py
    trunk/neo/tests/storage/testReplicator.py

Modified: trunk/neo/storage/replicator.py
==============================================================================
--- trunk/neo/storage/replicator.py [iso-8859-1] (original)
+++ trunk/neo/storage/replicator.py [iso-8859-1] Tue Feb  8 15:06:56 2011
@@ -26,9 +26,11 @@ from neo.lib.util import dump
 class Partition(object):
     """This class abstracts the state of a partition."""
 
-    def __init__(self, offset):
+    def __init__(self, offset, tid):
         self.offset = offset
-        self.tid = None
+        if tid is None:
+            tid = ZERO_TID
+        self.tid = tid
 
     def getOffset(self):
         return self.offset
@@ -36,11 +38,6 @@ class Partition(object):
     def getCriticalTID(self):
         return self.tid
 
-    def setCriticalTID(self, tid):
-        if tid is None:
-            tid = ZERO_TID
-        self.tid = tid
-
     def safe(self, min_pending_tid):
         tid = self.tid
         return tid is not None and (
@@ -117,7 +114,7 @@ class Replicator(object):
           namely, a list of serials. This is also done part by part, and
           I ask only non-existing data. """
 
-    # new_partition_dict
+    # new_partition_set
     #   outdated partitions for which no critical tid was asked to primary
     #   master yet
     # critical_tid_list
@@ -148,7 +145,7 @@ class Replicator(object):
 
     def __init__(self, app):
         self.app = app
-        self.new_partition_dict = {}
+        self.new_partition_set = set()
         self.critical_tid_list = []
         self.partition_dict = {}
         self.task_list = []
@@ -174,9 +171,8 @@ class Replicator(object):
         table is the one accepted by primary master.
         Implies a reset.
         """
-        self.new_partition_dict = {}
-        for offset in self.app.pt.getOutdatedOffsetListFor(self.app.uuid):
-            self.new_partition_dict[offset] = Partition(offset)
+        partition_list = self.app.pt.getOutdatedOffsetListFor(self.app.uuid)
+        self.new_partition_set = set(partition_list)
         self.partition_dict = {}
         self.reset()
 
@@ -191,7 +187,8 @@ class Replicator(object):
 
     def pending(self):
         """Return whether there is any pending partition."""
-        return len(self.partition_dict) or len(self.new_partition_dict)
+        return len(self.partition_dict) or len(self.new_partition_set) \
+            or self.critical_tid_list
 
     def getCurrentOffset(self):
         assert self.current_partition is not None
@@ -211,16 +208,15 @@ class Replicator(object):
     def setCriticalTID(self, tid):
         """This is a callback from MasterOperationHandler."""
         neo.lib.logging.debug('setting critical TID %s to %s', dump(tid),
-            ', '.join([str(p.getOffset()) for p in self.critical_tid_list]))
-        for partition in self.critical_tid_list:
-            partition.setCriticalTID(tid)
+            ', '.join([str(p) for p in self.critical_tid_list]))
+        for offset in self.critical_tid_list:
+            self.partition_dict[offset] = Partition(offset, tid)
         self.critical_tid_list = []
 
     def _askCriticalTID(self):
         self.app.master_conn.ask(Packets.AskLastIDs())
-        self.critical_tid_list.extend(self.new_partition_dict.values())
-        self.partition_dict.update(self.new_partition_dict)
-        self.new_partition_dict = {}
+        self.critical_tid_list.extend(self.new_partition_set)
+        self.new_partition_set.clear()
 
     def setUnfinishedTIDList(self, tid_list):
         """This is a callback from MasterOperationHandler."""
@@ -289,7 +285,7 @@ class Replicator(object):
     def act(self):
         # If the new partition list is not empty, I must ask a critical
         # TID to a primary master node.
-        if self.new_partition_dict:
+        if self.new_partition_set:
             self._askCriticalTID()
 
         if self.current_partition is not None:
@@ -335,13 +331,12 @@ class Replicator(object):
     def removePartition(self, offset):
         """This is a callback from MasterOperationHandler."""
         self.partition_dict.pop(offset, None)
-        self.new_partition_dict.pop(offset, None)
+        self.new_partition_set.discard(offset)
 
     def addPartition(self, offset):
         """This is a callback from MasterOperationHandler."""
-        if not self.partition_dict.has_key(offset) \
-                and not self.new_partition_dict.has_key(offset):
-            self.new_partition_dict[offset] = Partition(offset)
+        if not self.partition_dict.has_key(offset):
+            self.new_partition_set.add(offset)
 
     def _addTask(self, key, func, args=(), kw=None):
         task = Task(func, args, kw)

Modified: trunk/neo/tests/storage/testReplicator.py
==============================================================================
--- trunk/neo/tests/storage/testReplicator.py [iso-8859-1] (original)
+++ trunk/neo/tests/storage/testReplicator.py [iso-8859-1] Tue Feb  8 15:06:56 2011
@@ -39,14 +39,10 @@ class StorageReplicatorTests(NeoUnitTest
             'getOutdatedOffsetListFor': [0],
         })
         replicator = Replicator(app)
-        self.assertEqual(replicator.new_partition_dict, {})
+        self.assertEqual(replicator.new_partition_set, set())
         replicator.replication_done = False
         replicator.populate()
-        self.assertEqual(len(replicator.new_partition_dict), 1)
-        partition = replicator.new_partition_dict[0]
-        self.assertEqual(partition.getOffset(), 0)
-        self.assertEqual(partition.getCriticalTID(), None)
-        self.assertTrue(replicator.replication_done)
+        self.assertEqual(replicator.new_partition_set, set([0]))
 
     def test_reset(self):
         replicator = Replicator(None)
@@ -66,15 +62,9 @@ class StorageReplicatorTests(NeoUnitTest
 
     def test_setCriticalTID(self):
         replicator = Replicator(None)
-        partition_list = [Partition(0), Partition(5)]
-        replicator.critical_tid_list = partition_list[:]
         critical_tid = self.getNextTID()
-        for partition in partition_list:
-            self.assertEqual(partition.getCriticalTID(), None)
-        replicator.setCriticalTID(critical_tid)
-        self.assertEqual(replicator.critical_tid_list, [])
-        for partition in partition_list:
-            self.assertEqual(partition.getCriticalTID(), critical_tid)
+        partition = Partition(0, critical_tid)
+        self.assertEqual(partition.getCriticalTID(), critical_tid)
 
     def test_setUnfinishedTIDList(self):
         replicator = Replicator(None)
@@ -134,7 +124,7 @@ class StorageReplicatorTests(NeoUnitTest
         last_ids, unfinished_tids = [x.getParam(0) for x in \
             app.master_conn.mockGetNamedCalls('ask')]
         self.assertEqual(last_ids.getType(), Packets.AskLastIDs)
-        self.assertFalse(replicator.new_partition_dict)
+        self.assertFalse(replicator.new_partition_set)
         self.assertEqual(unfinished_tids.getType(),
             Packets.AskUnfinishedTransactions)
         self.assertTrue(replicator.waiting_for_unfinished_tids)
@@ -192,32 +182,29 @@ class StorageReplicatorTests(NeoUnitTest
     def test_removePartition(self):
         replicator = Replicator(None)
         replicator.partition_dict = {0: None, 2: None}
-        replicator.new_partition_dict = {1: None}
+        replicator.new_partition_set = set([1])
         replicator.removePartition(0)
         self.assertEqual(replicator.partition_dict, {2: None})
-        self.assertEqual(replicator.new_partition_dict, {1: None})
+        self.assertEqual(replicator.new_partition_set, set([1]))
         replicator.removePartition(1)
         replicator.removePartition(2)
         self.assertEqual(replicator.partition_dict, {})
-        self.assertEqual(replicator.new_partition_dict, {})
+        self.assertEqual(replicator.new_partition_set, set())
         # Must not raise
         replicator.removePartition(3)
 
     def test_addPartition(self):
         replicator = Replicator(None)
         replicator.partition_dict = {0: None}
-        replicator.new_partition_dict = {1: None}
+        replicator.new_partition_set = set([1])
         replicator.addPartition(0)
         replicator.addPartition(1)
         self.assertEqual(replicator.partition_dict, {0: None})
-        self.assertEqual(replicator.new_partition_dict, {1: None})
+        self.assertEqual(replicator.new_partition_set, set([1]))
         replicator.addPartition(2)
         self.assertEqual(replicator.partition_dict, {0: None})
-        self.assertEqual(len(replicator.new_partition_dict), 2)
-        self.assertEqual(replicator.new_partition_dict[1], None)
-        partition = replicator.new_partition_dict[2]
-        self.assertEqual(partition.getOffset(), 2)
-        self.assertEqual(partition.getCriticalTID(), None)
+        self.assertEqual(len(replicator.new_partition_set), 2)
+        self.assertEqual(replicator.new_partition_set, set([1, 2]))
 
     def test_processDelayedTasks(self):
         replicator = Replicator(None)




More information about the Neo-report mailing list