From 33b02a02ddea349de30d741c98ba72c69907981e Mon Sep 17 00:00:00 2001 From: Tim Abbott Date: Mon, 23 Jan 2017 17:07:51 -0800 Subject: [PATCH] update_message_backend: Fix memcached queries in loop. This fixes a bug where update_message_backend would do one memcached query per user receiving a given message. Right now we just do a single bulk database query, but in principle we could use generic_bulk_cached_fetch to use the cache as well. --- zerver/views/messages.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/zerver/views/messages.py b/zerver/views/messages.py index ba8d91ed3e..f99e8cc780 100644 --- a/zerver/views/messages.py +++ b/zerver/views/messages.py @@ -928,9 +928,13 @@ def update_message_backend(request, user_profile, # probably are not relevant for reprocessed alert_words, # mentions and similar rendering features. This may be a # decision we change in the future. - ums = UserMessage.objects.filter(message=message.id, - flags=~UserMessage.flags.historical) - message_users = {get_user_profile_by_id(um.user_profile_id) for um in ums} + ums = UserMessage.objects.filter( + message=message.id, + flags=~UserMessage.flags.historical) + + message_users = UserProfile.objects.select_related().filter( + id__in={um.user_profile_id for um in ums}) + # We render the message using the current user's realm; since # the cross-realm bots never edit messages, this should be # always correct.