summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--changelog.d/8654.bugfix1
-rw-r--r--changelog.d/8656.bugfix1
-rw-r--r--synapse/handlers/appservice.py7
-rw-r--r--synapse/storage/databases/main/metrics.py9
4 files changed, 11 insertions, 7 deletions
diff --git a/changelog.d/8654.bugfix b/changelog.d/8654.bugfix
new file mode 100644
index 0000000000..91d3265b7f
--- /dev/null
+++ b/changelog.d/8654.bugfix
@@ -0,0 +1 @@
+Fix `user_daily_visits` to not have duplicate rows for UA. Broke in v1.22.0rc1.
diff --git a/changelog.d/8656.bugfix b/changelog.d/8656.bugfix
new file mode 100644
index 0000000000..d6415e8282
--- /dev/null
+++ b/changelog.d/8656.bugfix
@@ -0,0 +1 @@
+Fix a bug introduced in v1.22.0rc1 where presence events were not properly passed to application services.
diff --git a/synapse/handlers/appservice.py b/synapse/handlers/appservice.py
index 03e9ec4d4e..3ed29a2c16 100644
--- a/synapse/handlers/appservice.py
+++ b/synapse/handlers/appservice.py
@@ -288,7 +288,7 @@ class ApplicationServicesHandler:
                 user=user, service=service, from_key=from_key,
             )
             time_now = self.clock.time_msec()
-            presence_events = [
+            events.extend(
                 {
                     "type": "m.presence",
                     "sender": event.user_id,
@@ -297,8 +297,9 @@ class ApplicationServicesHandler:
                     ),
                 }
                 for event in presence_events
-            ]
-            events = events + presence_events
+            )
+
+        return events
 
     async def query_user_exists(self, user_id):
         """Check if any application service knows this user_id exists.
diff --git a/synapse/storage/databases/main/metrics.py b/synapse/storage/databases/main/metrics.py
index 79b01d16f9..ab18cc4d79 100644
--- a/synapse/storage/databases/main/metrics.py
+++ b/synapse/storage/databases/main/metrics.py
@@ -282,9 +282,10 @@ class ServerMetricsStore(EventPushActionsWorkerStore, SQLBaseStore):
             now = self._clock.time_msec()
 
             # A note on user_agent. Technically a given device can have multiple
-            # user agents, so we need to decide which one to pick. We could have handled this
-            # in number of ways, but given that we don't _that_ much have gone for MAX()
-            # For more details of the other options considered see
+            # user agents, so we need to decide which one to pick. We could have
+            # handled this in number of ways, but given that we don't care
+            # _that_ much we have gone for MAX(). For more details of the other
+            # options considered see
             # https://github.com/matrix-org/synapse/pull/8503#discussion_r502306111
             sql = """
                 INSERT INTO user_daily_visits (user_id, device_id, timestamp, user_agent)
@@ -299,7 +300,7 @@ class ServerMetricsStore(EventPushActionsWorkerStore, SQLBaseStore):
                     WHERE last_seen > ? AND last_seen <= ?
                     AND udv.timestamp IS NULL AND users.is_guest=0
                     AND users.appservice_id IS NULL
-                    GROUP BY u.user_id, u.device_id, u.user_agent
+                    GROUP BY u.user_id, u.device_id
             """
 
             # This means that the day has rolled over but there could still