[Neo-report] r2411 vincent - in /trunk/neo: storage/handlers/ tests/storage/

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Nov 3 15:39:13 CET 2010


Author: vincent
Date: Wed Nov  3 15:39:13 2010
New Revision: 2411

Log:
Move on to next chunk after having received row list.

Otherwise, we would check the same chunk multiple times, if last range
check was successful: at this point, we wouldn't know criterion to find
the first row after replicated chunk.

Modified:
    trunk/neo/storage/handlers/replication.py
    trunk/neo/tests/storage/testReplicationHandler.py

Modified: trunk/neo/storage/handlers/replication.py
==============================================================================
--- trunk/neo/storage/handlers/replication.py [iso-8859-1] (original)
+++ trunk/neo/storage/handlers/replication.py [iso-8859-1] Wed Nov  3 15:39:13 2010
@@ -118,6 +118,7 @@ class ReplicationHandler(EventHandler):
         missing_tid_set = tid_set - my_tid_set
         for tid in missing_tid_set:
             ask(Packets.AskTransactionInformation(tid), timeout=300)
+        ask(self._doAskCheckTIDRange(add64(tid_list[-1], 1), RANGE_LENGTH))
 
     @checkConnectionIsReplicatorConnection
     def answerTransactionInformation(self, conn, tid,
@@ -157,6 +158,8 @@ class ReplicationHandler(EventHandler):
                 missing_serial_set = serial_list
             for serial in missing_serial_set:
                 ask(Packets.AskObject(oid, serial, None), timeout=300)
+        ask(self._doAskCheckSerialRange(max_oid, add64(max_serial, 1),
+            RANGE_LENGTH))
 
     @checkConnectionIsReplicatorConnection
     def answerObject(self, conn, oid, serial_start,
@@ -249,10 +252,7 @@ class ReplicationHandler(EventHandler):
         if action == CHECK_REPLICATE:
             (min_tid, ) = params
             ask(self._doAskTIDsFrom(min_tid, count))
-            if length == count:
-                action = CHECK_CHUNK
-                params = (next_tid, RANGE_LENGTH)
-            else:
+            if length != count:
                 action = CHECK_DONE
         if action == CHECK_CHUNK:
             (min_tid, count) = params
@@ -279,10 +279,7 @@ class ReplicationHandler(EventHandler):
         if action == CHECK_REPLICATE:
             ((min_oid, min_serial), ) = params
             ask(self._doAskObjectHistoryFrom(min_oid, min_serial, count))
-            if length == count:
-                action = CHECK_CHUNK
-                params = (next_params, RANGE_LENGTH)
-            else:
+            if length != count:
                 action = CHECK_DONE
         if action == CHECK_CHUNK:
             ((min_oid, min_serial), count) = params

Modified: trunk/neo/tests/storage/testReplicationHandler.py
==============================================================================
--- trunk/neo/tests/storage/testReplicationHandler.py [iso-8859-1] (original)
+++ trunk/neo/tests/storage/testReplicationHandler.py [iso-8859-1] Wed Nov  3 15:39:13 2010
@@ -111,8 +111,19 @@ class StorageReplicationHandlerTests(Neo
         self.assertEqual(len(calls), 1)
         calls[0].checkArgs(min_tid, length, partition)
 
-    def _checkPacketTIDList(self, conn, tid_list):
+    def _checkPacketTIDList(self, conn, tid_list, next_tid, app):
         packet_list = [x.getParam(0) for x in conn.mockGetNamedCalls('ask')]
+        packet_list, next_range = packet_list[:-1], packet_list[-1]
+
+        self.assertEqual(next_range.getType(), Packets.AskCheckTIDRange)
+        pmin_tid, plength, ppartition = next_range.decode()
+        self.assertEqual(pmin_tid, add64(next_tid, 1))
+        self.assertEqual(plength, RANGE_LENGTH)
+        self.assertEqual(ppartition, app.replicator.getCurrentRID())
+        calls = app.replicator.mockGetNamedCalls('checkTIDRange')
+        self.assertEqual(len(calls), 1)
+        calls[0].checkArgs(pmin_tid, plength, ppartition)
+
         self.assertEqual(len(packet_list), len(tid_list))
         for packet in packet_list:
             self.assertEqual(packet.getType(),
@@ -126,9 +137,21 @@ class StorageReplicationHandlerTests(Neo
                 raise AssertionFailed, '%s not found in %r' % (dump(ptid),
                     [dump(x) for x in tid_list])
 
-    def _checkPacketSerialList(self, conn, object_list):
+    def _checkPacketSerialList(self, conn, object_list, next_oid, next_serial, app):
         packet_list = [x.getParam(0) for x in conn.mockGetNamedCalls('ask')]
-        self.assertEqual(len(packet_list), len(object_list))
+        packet_list, next_range = packet_list[:-1], packet_list[-1]
+
+        self.assertEqual(next_range.getType(), Packets.AskCheckSerialRange)
+        pmin_oid, pmin_serial, plength, ppartition = next_range.decode()
+        self.assertEqual(pmin_oid, next_oid)
+        self.assertEqual(pmin_serial, add64(next_serial, 1))
+        self.assertEqual(plength, RANGE_LENGTH)
+        self.assertEqual(ppartition, app.replicator.getCurrentRID())
+        calls = app.replicator.mockGetNamedCalls('checkSerialRange')
+        self.assertEqual(len(calls), 1)
+        calls[0].checkArgs(pmin_oid, pmin_serial, plength, ppartition)
+
+        self.assertEqual(len(packet_list), len(object_list), packet_list)
         for packet, (oid, serial) in zip(packet_list, object_list):
             self.assertEqual(packet.getType(),
                 Packets.AskObject)
@@ -166,14 +189,14 @@ class StorageReplicationHandlerTests(Neo
         app = self.getApp(conn=conn, tid_result=[])
         # With no known TID
         ReplicationHandler(app).answerTIDsFrom(conn, tid_list)
-        self._checkPacketTIDList(conn, tid_list[:])
+        self._checkPacketTIDList(conn, tid_list[:], tid_list[-1], app)
         # With first TID known
         conn = self.getFakeConnection()
         known_tid_list = [tid_list[0], ]
         unknown_tid_list = [tid_list[1], ]
         app = self.getApp(conn=conn, tid_result=known_tid_list)
         ReplicationHandler(app).answerTIDsFrom(conn, tid_list)
-        self._checkPacketTIDList(conn, unknown_tid_list)
+        self._checkPacketTIDList(conn, unknown_tid_list, tid_list[-1], app)
 
     def test_answerTransactionInformation(self):
         conn = self.getFakeConnection()
@@ -209,7 +232,8 @@ class StorageReplicationHandlerTests(Neo
         app = self.getApp(conn=conn, history_result={})
         # With no known OID/Serial
         ReplicationHandler(app).answerObjectHistoryFrom(conn, oid_dict)
-        self._checkPacketSerialList(conn, flat_oid_list)
+        self._checkPacketSerialList(conn, flat_oid_list, oid_3, tid_list[5],
+            app)
         # With some known OID/Serials
         # For test to be realist, history_result should contain the same
         # number of serials as oid_dict, otherise it just tests the special
@@ -224,7 +248,7 @@ class StorageReplicationHandlerTests(Neo
         self._checkPacketSerialList(conn, (
             (oid_1, oid_dict[oid_1][1]),
             (oid_2, oid_dict[oid_2][0]),
-        ))
+        ), oid_3, tid_list[5], app)
         calls = app.dm.mockGetNamedCalls('deleteObject')
         self.assertEqual(len(calls), 1)
         calls[0].checkArgs(oid_3, tid_list[4])
@@ -382,10 +406,8 @@ class StorageReplicationHandlerTests(Neo
         handler.answerCheckTIDRange(conn, min_tid, length, length, 0, max_tid)
         # Result: ask tid list, and ask next chunk
         calls = conn.mockGetNamedCalls('ask')
-        self.assertEqual(len(calls), 2)
-        tid_call, next_call = calls
-        tid_packet = tid_call.getParam(0)
-        next_packet = next_call.getParam(0)
+        self.assertEqual(len(calls), 1)
+        tid_packet = calls[0].getParam(0)
         self.assertEqual(tid_packet.getType(), Packets.AskTIDsFrom)
         pmin_tid, pmax_tid, plength, ppartition = tid_packet.decode()
         self.assertEqual(pmin_tid, min_tid)
@@ -395,14 +417,6 @@ class StorageReplicationHandlerTests(Neo
         calls = app.replicator.mockGetNamedCalls('getTIDsFrom')
         self.assertEqual(len(calls), 1)
         calls[0].checkArgs(pmin_tid, pmax_tid, plength, ppartition)
-        self.assertEqual(next_packet.getType(), Packets.AskCheckTIDRange)
-        pmin_tid, plength, ppartition = next_packet.decode()
-        self.assertEqual(pmin_tid, add64(max_tid, 1))
-        self.assertEqual(plength, RANGE_LENGTH)
-        self.assertEqual(ppartition, rid)
-        calls = app.replicator.mockGetNamedCalls('checkTIDRange')
-        self.assertEqual(len(calls), 1)
-        calls[0].checkArgs(pmin_tid, plength, ppartition)
 
     def test_answerCheckTIDRangeDifferentSmallChunkWithoutNext(self):
         min_tid = self.getNextTID()
@@ -420,9 +434,7 @@ class StorageReplicationHandlerTests(Neo
         # Result: ask tid list, and start replicating object range
         calls = conn.mockGetNamedCalls('ask')
         self.assertEqual(len(calls), 2)
-        tid_call, next_call = calls
-        tid_packet = tid_call.getParam(0)
-        next_packet = next_call.getParam(0)
+        tid_packet = calls[0].getParam(0)
         self.assertEqual(tid_packet.getType(), Packets.AskTIDsFrom)
         pmin_tid, pmax_tid, plength, ppartition = tid_packet.decode()
         self.assertEqual(pmin_tid, min_tid)
@@ -432,15 +444,6 @@ class StorageReplicationHandlerTests(Neo
         calls = app.replicator.mockGetNamedCalls('getTIDsFrom')
         self.assertEqual(len(calls), 1)
         calls[0].checkArgs(pmin_tid, pmax_tid, plength, ppartition)
-        self.assertEqual(next_packet.getType(), Packets.AskCheckSerialRange)
-        pmin_oid, pmin_serial, plength, ppartition = next_packet.decode()
-        self.assertEqual(pmin_oid, ZERO_OID)
-        self.assertEqual(pmin_serial, ZERO_TID)
-        self.assertEqual(plength, RANGE_LENGTH)
-        self.assertEqual(ppartition, rid)
-        calls = app.replicator.mockGetNamedCalls('checkSerialRange')
-        self.assertEqual(len(calls), 1)
-        calls[0].checkArgs(pmin_oid, pmin_serial, plength, ppartition)
 
     # CheckSerialRange
     def test_answerCheckSerialFullRangeIdenticalChunkWithNext(self):
@@ -553,10 +556,8 @@ class StorageReplicationHandlerTests(Neo
             length, 0, max_oid, 1, max_serial)
         # Result: ask serial list, and ask next chunk
         calls = conn.mockGetNamedCalls('ask')
-        self.assertEqual(len(calls), 2)
-        serial_call, next_call = calls
-        serial_packet = serial_call.getParam(0)
-        next_packet = next_call.getParam(0)
+        self.assertEqual(len(calls), 1)
+        serial_packet = calls[0].getParam(0)
         self.assertEqual(serial_packet.getType(), Packets.AskObjectHistoryFrom)
         pmin_oid, pmin_serial, pmax_serial, plength, ppartition = \
             serial_packet.decode()
@@ -569,15 +570,6 @@ class StorageReplicationHandlerTests(Neo
         self.assertEqual(len(calls), 1)
         calls[0].checkArgs(pmin_oid, pmin_serial, pmax_serial, plength,
             ppartition)
-        self.assertEqual(next_packet.getType(), Packets.AskCheckSerialRange)
-        pmin_oid, pmin_serial, plength, ppartition = next_packet.decode()
-        self.assertEqual(pmin_oid, max_oid)
-        self.assertEqual(pmin_serial, add64(max_serial, 1))
-        self.assertEqual(plength, RANGE_LENGTH)
-        self.assertEqual(ppartition, rid)
-        calls = app.replicator.mockGetNamedCalls('checkSerialRange')
-        self.assertEqual(len(calls), 1)
-        calls[0].checkArgs(pmin_oid, pmin_serial, plength, ppartition)
 
     def test_answerCheckSerialRangeDifferentSmallChunkWithoutNext(self):
         min_oid = self.getOID(1)





More information about the Neo-report mailing list