summary refs log tree commit diff
path: root/synapse/handlers
diff options
context:
space:
mode:
authorOlivier Wilkinson (reivilibre) <olivier@librepush.net>2019-08-29 14:10:21 +0100
committerOlivier Wilkinson (reivilibre) <olivier@librepush.net>2019-08-29 14:10:21 +0100
commit39dbee2a3e129415e2c20aa9a4f5f866e723fe41 (patch)
treef392fbcfefd4a35b46da7c08a7d68de0eb300ab1 /synapse/handlers
parentUpdate total_events and total_event_bytes on new events. (diff)
downloadsynapse-39dbee2a3e129415e2c20aa9a4f5f866e723fe41.tar.xz
Count total_events and total_event_bytes within the loop.
In this case, we still update these counts if we get stuck in the loop
because the server is busy.

Signed-off-by: Olivier Wilkinson (reivilibre) <olivier@librepush.net>
Diffstat (limited to 'synapse/handlers')
-rw-r--r--synapse/handlers/stats.py22
1 files changed, 11 insertions, 11 deletions
diff --git a/synapse/handlers/stats.py b/synapse/handlers/stats.py
index e9b1646e0e..f44adfc07b 100644
--- a/synapse/handlers/stats.py
+++ b/synapse/handlers/stats.py
@@ -91,31 +91,31 @@ class StatsHandler(StateDeltasHandler):
             return None
 
         # Loop round handling deltas until we're up to date
-        with Measure(self.clock, "stats_delta"):
-            while True:
+
+        while True:
+            with Measure(self.clock, "stats_delta"):
                 deltas = yield self.store.get_current_state_deltas(
                     self.pos["state_delta_stream_id"]
                 )
-                if not deltas:
-                    break
 
                 logger.debug("Handling %d state deltas", len(deltas))
                 yield self._handle_deltas(deltas)
 
                 self.pos["state_delta_stream_id"] = deltas[-1]["stream_id"]
+                yield self.store.update_stats_positions(self.pos)
 
                 event_processing_positions.labels("stats").set(
                     self.pos["state_delta_stream_id"]
                 )
 
-                if self.pos is not None:
-                    yield self.store.update_stats_positions(self.pos)
+            # Then count deltas for total_events and total_event_bytes.
+            with Measure(self.clock, "stats_total_events_and_bytes"):
+                self.pos, had_counts = yield self.store.incremental_update_room_total_events_and_bytes(
+                    self.pos
+                )
 
-        # Then count deltas for total_events and total_event_bytes.
-        with Measure(self.clock, "stats_total_events_and_bytes"):
-            self.pos = yield self.store.incremental_update_total_events_and_bytes(
-                self.pos
-            )
+            if not deltas and not had_counts:
+                break
 
     @defer.inlineCallbacks
     def _handle_deltas(self, deltas):