summary refs log tree commit diff
path: root/synapse/storage/transactions.py
diff options
context:
space:
mode:
Diffstat (limited to 'synapse/storage/transactions.py')
-rw-r--r--synapse/storage/transactions.py18
1 files changed, 13 insertions, 5 deletions
diff --git a/synapse/storage/transactions.py b/synapse/storage/transactions.py
index ba1969b243..6c7481a728 100644
--- a/synapse/storage/transactions.py
+++ b/synapse/storage/transactions.py
@@ -58,6 +58,8 @@ class TransactionStore(SQLBaseStore):
         # Newly delivered transactions that *were* persisted while in flight
         self.update_delivered_transactions = {}
 
+        self.last_transaction = {}
+
         reactor.addSystemEventTrigger("before", "shutdown", self._persist_in_mem_txns)
         hs.get_clock().looping_call(
             self._persist_in_mem_txns,
@@ -159,11 +161,15 @@ class TransactionStore(SQLBaseStore):
 
         self.inflight_transactions.setdefault(destination, {})[transaction_id] = txn_row
 
-        return self.runInteraction(
-            "_get_prevs_txn",
-            self._get_prevs_txn,
-            destination,
-        )
+        prev_txn = self.last_transaction.get(destination)
+        if prev_txn:
+            return defer.succeed(prev_txn)
+        else:
+            return self.runInteraction(
+                "_get_prevs_txn",
+                self._get_prevs_txn,
+                destination,
+            )
 
     def _get_prevs_txn(self, txn, destination):
         # First we find out what the prev_txns should be.
@@ -196,6 +202,8 @@ class TransactionStore(SQLBaseStore):
             destination, {}
         ).pop(transaction_id, None)
 
+        self.last_transaction[destination] = transaction_id
+
         if txn_row:
             d = self.new_delivered_transactions.setdefault(destination, {})
             d[transaction_id] = txn_row._replace(