Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Fix yields and copy instead of move push rules on room upgrade (#6144)
Browse files Browse the repository at this point in the history
Copy push rules during a room upgrade from the old room to the new room, instead of deleting them from the old room.

For instance, we've defined upgrading of a room multiple times to be possible, and push rules won't be transferred on the second upgrade if they're deleted during the first.

Also fix some missing yields that probably broke things quite a bit.
  • Loading branch information
anoadragon453 authored Oct 2, 2019
1 parent ecd254b commit 2a1470c
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 12 deletions.
1 change: 1 addition & 0 deletions changelog.d/6144.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Prevent user push rules being deleted from a room when it is upgraded.
4 changes: 2 additions & 2 deletions synapse/handlers/room_member.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,8 +216,8 @@ def _local_membership_update(
self.copy_room_tags_and_direct_to_room(
predecessor["room_id"], room_id, user_id
)
# Move over old push rules
self.store.move_push_rules_from_room_to_room_for_user(
# Copy over push rules
yield self.store.copy_push_rules_from_room_to_room_for_user(
predecessor["room_id"], room_id, user_id
)
elif event.membership == Membership.LEAVE:
Expand Down
16 changes: 6 additions & 10 deletions synapse/storage/push_rule.py
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,8 @@ def bulk_get_push_rules(self, user_ids):
return results

@defer.inlineCallbacks
def move_push_rule_from_room_to_room(self, new_room_id, user_id, rule):
"""Move a single push rule from one room to another for a specific user.
def copy_push_rule_from_room_to_room(self, new_room_id, user_id, rule):
"""Copy a single push rule from one room to another for a specific user.
Args:
new_room_id (str): ID of the new room.
Expand All @@ -209,14 +209,11 @@ def move_push_rule_from_room_to_room(self, new_room_id, user_id, rule):
actions=rule["actions"],
)

# Delete push rule for the old room
yield self.delete_push_rule(user_id, rule["rule_id"])

@defer.inlineCallbacks
def move_push_rules_from_room_to_room_for_user(
def copy_push_rules_from_room_to_room_for_user(
self, old_room_id, new_room_id, user_id
):
"""Move all of the push rules from one room to another for a specific
"""Copy all of the push rules from one room to another for a specific
user.
Args:
Expand All @@ -227,15 +224,14 @@ def move_push_rules_from_room_to_room_for_user(
# Retrieve push rules for this user
user_push_rules = yield self.get_push_rules_for_user(user_id)

# Get rules relating to the old room, move them to the new room, then
# delete them from the old room
# Get rules relating to the old room and copy them to the new room
for rule in user_push_rules:
conditions = rule.get("conditions", [])
if any(
(c.get("key") == "room_id" and c.get("pattern") == old_room_id)
for c in conditions
):
self.move_push_rule_from_room_to_room(new_room_id, user_id, rule)
yield self.copy_push_rule_from_room_to_room(new_room_id, user_id, rule)

@defer.inlineCallbacks
def bulk_get_push_rules_for_room(self, event, context):
Expand Down

0 comments on commit 2a1470c

Please sign in to comment.