summary refs log tree commit diff
path: root/synapse/federation/replication.py
diff options
context:
space:
mode:
authorKegan Dougal <kegan@matrix.org>2014-09-15 15:27:58 +0100
committerKegan Dougal <kegan@matrix.org>2014-09-15 15:27:58 +0100
commit14bc4ed59f0d98e80db96ed8232983f814082305 (patch)
tree27e70665764b41f5f16f8662eb1328e2ba20aba7 /synapse/federation/replication.py
parentUpdate spec to include m.login.email.identity (diff)
parentCorrectly handle the 'age' key in events and pdus (diff)
downloadsynapse-14bc4ed59f0d98e80db96ed8232983f814082305.tar.xz
Merge branch 'develop' of github.com:matrix-org/synapse into registration-api-changes in preparation for re-merge to develop.
Diffstat (limited to 'synapse/federation/replication.py')
-rw-r--r--synapse/federation/replication.py15
1 files changed, 12 insertions, 3 deletions
diff --git a/synapse/federation/replication.py b/synapse/federation/replication.py
index e12510017f..c79ce44688 100644
--- a/synapse/federation/replication.py
+++ b/synapse/federation/replication.py
@@ -291,6 +291,12 @@ class ReplicationLayer(object):
     def on_incoming_transaction(self, transaction_data):
         transaction = Transaction(**transaction_data)
 
+        for p in transaction.pdus:
+            if "age" in p:
+                p["age_ts"] = int(self.clock.time_msec()) - int(p["age"])
+
+        pdu_list = [Pdu(**p) for p in transaction.pdus]
+
         logger.debug("[%s] Got transaction", transaction.transaction_id)
 
         response = yield self.transaction_actions.have_responded(transaction)
@@ -303,8 +309,6 @@ class ReplicationLayer(object):
 
         logger.debug("[%s] Transacition is new", transaction.transaction_id)
 
-        pdu_list = [Pdu(**p) for p in transaction.pdus]
-
         dl = []
         for pdu in pdu_list:
             dl.append(self._handle_new_pdu(pdu))
@@ -405,9 +409,14 @@ class ReplicationLayer(object):
         """Returns a new Transaction containing the given PDUs suitable for
         transmission.
         """
+        pdus = [p.get_dict() for p in pdu_list]
+        for p in pdus:
+            if "age_ts" in pdus:
+                p["age"] = int(self.clock.time_msec()) - p["age_ts"]
+
         return Transaction(
-            pdus=[p.get_dict() for p in pdu_list],
             origin=self.server_name,
+            pdus=pdus,
             ts=int(self._clock.time_msec()),
             destination=None,
         )