reactions: Fix buggy migration for realm emoji.

The original implementation of this migration had a highly unfortunate
bug that would result in it deleting all reactions to realm emoji on
the server; we missed this in review, so essentially all historical
realm emoji reactions on chat.zulip.org were lost :(.

We both correct the problem, and also add logging of the deleted rows
that would help should anything be deleted erroneously.
This commit is contained in:
Tim Abbott 2018-03-20 21:31:47 -07:00
parent 2a178b52fb
commit b94a24ffe3
1 changed files with 3 additions and 1 deletions

View File

@ -14,7 +14,7 @@ def realm_emoji_name_to_id(apps: StateApps, schema_editor: DatabaseSchemaEditor)
RealmEmoji = apps.get_model('zerver', 'RealmEmoji')
realm_emoji_by_realm_id = defaultdict(dict) # type: Dict[int, Dict[str, Any]]
for realm_emoji in RealmEmoji.objects.all():
realm_emoji_by_realm_id[realm_emoji.realm_id] = {
realm_emoji_by_realm_id[realm_emoji.realm_id][realm_emoji.name] = {
'id': str(realm_emoji.id),
'name': realm_emoji.name,
'deactivated': realm_emoji.deactivated,
@ -27,6 +27,8 @@ def realm_emoji_name_to_id(apps: StateApps, schema_editor: DatabaseSchemaEditor)
# Realm emoji used in this reaction has been deleted so this
# reaction should also be deleted. We don't need to reverse
# this step in migration reversal code.
print("Reaction for (%s, %s) refers to deleted custom emoji %s; deleting" %
(emoji_name, reaction.message_id, reaction.user_profile_id))
reaction.delete()
else:
reaction.emoji_code = realm_emoji["id"]