[Neo-report] r2205 vincent - /trunk/neo/storage/handlers/replication.py

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Aug 19 12:01:42 CEST 2010


Author: vincent
Date: Thu Aug 19 12:01:41 2010
New Revision: 2205

Log:
Factorise replicator connection checks.

Modified:
    trunk/neo/storage/handlers/replication.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] Thu Aug 19 12:01:41 2010
@@ -21,6 +21,16 @@ from neo import logging
 from neo.handler import EventHandler
 from neo.protocol import Packets
 
+def checkConnectionIsReplicatorConnection(func):
+    def decorator(self, conn, *args, **kw):
+        if self.app.replicator.current_connection is conn:
+            result = func(self, conn, *args, **kw)
+        else:
+            # Should probably raise & close connection...
+            result = None
+        return result
+    return decorator
+
 class ReplicationHandler(EventHandler):
     """This class handles events for replications."""
 
@@ -41,11 +51,9 @@ class ReplicationHandler(EventHandler):
         # set the UUID on the connection
         conn.setUUID(uuid)
 
+    @checkConnectionIsReplicatorConnection
     def answerTIDs(self, conn, tid_list):
         app = self.app
-        if app.replicator.current_connection is not conn:
-            return
-
         if tid_list:
             # If I have pending TIDs, check which TIDs I don't have, and
             # request the data.
@@ -68,21 +76,17 @@ class ReplicationHandler(EventHandler):
             conn.ask(p, timeout=300)
             app.replicator.oid_offset = 0
 
+    @checkConnectionIsReplicatorConnection
     def answerTransactionInformation(self, conn, tid,
                                            user, desc, ext, packed, oid_list):
         app = self.app
-        if app.replicator.current_connection is not conn:
-            return
-
         # Directly store the transaction.
         app.dm.storeTransaction(tid, (), (oid_list, user, desc, ext, packed),
             False)
 
+    @checkConnectionIsReplicatorConnection
     def answerOIDs(self, conn, oid_list):
         app = self.app
-        if app.replicator.current_connection is not conn:
-            return
-
         if oid_list:
             # Pick one up, and ask the history.
             oid = oid_list.pop()
@@ -94,11 +98,9 @@ class ReplicationHandler(EventHandler):
             # finished.
             app.replicator.replication_done = True
 
+    @checkConnectionIsReplicatorConnection
     def answerObjectHistory(self, conn, oid, history_list):
         app = self.app
-        if app.replicator.current_connection is not conn:
-            return
-
         if history_list:
             # Check if I have objects, request those which I don't have.
             serial_list = [t[0] for t in history_list]
@@ -128,12 +130,10 @@ class ReplicationHandler(EventHandler):
                           app.replicator.current_partition.getRID())
                 conn.ask(p, timeout=300)
 
+    @checkConnectionIsReplicatorConnection
     def answerObject(self, conn, oid, serial_start,
             serial_end, compression, checksum, data, data_serial):
         app = self.app
-        if app.replicator.current_connection is not conn:
-            return
-
         # Directly store the transaction.
         obj = (oid, compression, checksum, data, data_serial)
         app.dm.storeTransaction(serial_start, [obj], None, False)





More information about the Neo-report mailing list