mirror of
https://github.com/element-hq/synapse.git
synced 2026-07-25 21:22:09 +00:00
Clear all old ProfileUpdate rows from profile_updates_per_user on a leave
Regardless of action. This is cleaner and also ensures a join/leave/join/leave case might not get confused.
This commit is contained in:
@@ -958,7 +958,7 @@ class ProfileWorkerStore(SQLBaseStore):
|
||||
self, user_id: UserID, users_to_remove: set[str]
|
||||
) -> None:
|
||||
"""
|
||||
Clear all the ProfileUpdateAction.UPDATE rows from the
|
||||
Clear all the ProfileUpdateAction rows from the
|
||||
`profile_updates_per_user` table from a particular user for
|
||||
a list of target users.
|
||||
|
||||
@@ -983,10 +983,10 @@ class ProfileWorkerStore(SQLBaseStore):
|
||||
) -> None:
|
||||
sql = """
|
||||
SELECT stream_id FROM profile_updates
|
||||
WHERE user_id = ? AND action = ?
|
||||
WHERE user_id = ?
|
||||
"""
|
||||
|
||||
txn.execute(sql, (user_id.to_string(), ProfileUpdateAction.UPDATE.value))
|
||||
txn.execute(sql, (user_id.to_string(),))
|
||||
res = txn.fetchall()
|
||||
if not res:
|
||||
return
|
||||
|
||||
@@ -439,6 +439,8 @@ class ProfileTestCase(unittest.HomeserverTestCase):
|
||||
roger_token = self.login("roger", "password")
|
||||
self.register_user("millie", "password")
|
||||
millie_token = self.login("millie", "password")
|
||||
self.register_user("gracie", "password")
|
||||
gracie_token = self.login("gracie", "password")
|
||||
room_id = self.helper.create_room_as(
|
||||
room_creator=self.frank.to_string(),
|
||||
tok=self.frank_token,
|
||||
@@ -449,6 +451,7 @@ class ProfileTestCase(unittest.HomeserverTestCase):
|
||||
)
|
||||
self.helper.join(room_id, "@roger:test", tok=roger_token)
|
||||
self.helper.join(room_with_millie_id, "@millie:test", tok=millie_token)
|
||||
self.helper.join(room_id, "@gracie:test", tok=gracie_token)
|
||||
self.get_success(
|
||||
self.handler.set_field(
|
||||
target_user=self.frank,
|
||||
@@ -470,6 +473,12 @@ class ProfileTestCase(unittest.HomeserverTestCase):
|
||||
[
|
||||
ProfileUpdate(
|
||||
stream_id=4,
|
||||
user_id="@gracie:test",
|
||||
action="joined_room",
|
||||
field_name=None,
|
||||
),
|
||||
ProfileUpdate(
|
||||
stream_id=5,
|
||||
user_id=self.frank.to_string(),
|
||||
action="update",
|
||||
field_name="m.status",
|
||||
@@ -488,7 +497,7 @@ class ProfileTestCase(unittest.HomeserverTestCase):
|
||||
per_user_updates,
|
||||
[
|
||||
ProfileUpdate(
|
||||
stream_id=4,
|
||||
stream_id=5,
|
||||
user_id=self.frank.to_string(),
|
||||
action="update",
|
||||
field_name="m.status",
|
||||
@@ -496,7 +505,8 @@ class ProfileTestCase(unittest.HomeserverTestCase):
|
||||
],
|
||||
)
|
||||
|
||||
# Leave room and verify only the "left room" exists for roger
|
||||
# Make frank leave room and verify only the "left room" + gracies join exists
|
||||
# for roger
|
||||
self.helper.leave(room_id, self.frank.to_string(), tok=self.frank_token)
|
||||
per_user_updates = self.get_success(
|
||||
self.store.get_profile_updates_for_user_and_fields(
|
||||
@@ -510,13 +520,46 @@ class ProfileTestCase(unittest.HomeserverTestCase):
|
||||
per_user_updates,
|
||||
[
|
||||
ProfileUpdate(
|
||||
stream_id=5,
|
||||
stream_id=4,
|
||||
user_id="@gracie:test",
|
||||
action="joined_room",
|
||||
field_name=None,
|
||||
),
|
||||
ProfileUpdate(
|
||||
stream_id=6,
|
||||
user_id=self.frank.to_string(),
|
||||
action="left_room",
|
||||
field_name=None,
|
||||
),
|
||||
],
|
||||
)
|
||||
# Make gracie leave room and verify only the "left room"'s
|
||||
self.helper.leave(room_id, "@gracie:test", tok=gracie_token)
|
||||
per_user_updates = self.get_success(
|
||||
self.store.get_profile_updates_for_user_and_fields(
|
||||
from_id=0,
|
||||
to_id=10,
|
||||
user_id="@roger:test",
|
||||
field_names={"m.status"},
|
||||
)
|
||||
)
|
||||
self.assertEqual(
|
||||
per_user_updates,
|
||||
[
|
||||
ProfileUpdate(
|
||||
stream_id=6,
|
||||
user_id=self.frank.to_string(),
|
||||
action="left_room",
|
||||
field_name=None,
|
||||
),
|
||||
ProfileUpdate(
|
||||
stream_id=7,
|
||||
user_id="@gracie:test",
|
||||
action="left_room",
|
||||
field_name=None,
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
# Sanity check we didn't clear any rows for millie
|
||||
per_user_updates = self.get_success(
|
||||
@@ -531,7 +574,7 @@ class ProfileTestCase(unittest.HomeserverTestCase):
|
||||
per_user_updates,
|
||||
[
|
||||
ProfileUpdate(
|
||||
stream_id=4,
|
||||
stream_id=5,
|
||||
user_id=self.frank.to_string(),
|
||||
action="update",
|
||||
field_name="m.status",
|
||||
|
||||
Reference in New Issue
Block a user