mirror of https://github.com/zulip/zulip.git
digest: Reduce queries using select_related().
We use the message a lot for the query modified here, so I think it's worth taking the up-front hit of getting bulkier objects to avoid O(N) hops back to the database.
This commit is contained in:
parent
51aa313833
commit
f961408782
|
@ -201,7 +201,8 @@ def handle_digest_email(user_profile_id: int, cutoff: float) -> None:
|
||||||
|
|
||||||
all_messages = UserMessage.objects.filter(
|
all_messages = UserMessage.objects.filter(
|
||||||
user_profile=user_profile,
|
user_profile=user_profile,
|
||||||
message__pub_date__gt=cutoff_date).order_by("message__pub_date")
|
message__pub_date__gt=cutoff_date
|
||||||
|
).select_related('message').order_by("message__pub_date")
|
||||||
|
|
||||||
context = common_context(user_profile)
|
context = common_context(user_profile)
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,8 @@ from zerver.lib.digest import gather_new_streams, handle_digest_email, enqueue_e
|
||||||
gather_new_users
|
gather_new_users
|
||||||
from zerver.lib.test_classes import ZulipTestCase
|
from zerver.lib.test_classes import ZulipTestCase
|
||||||
from zerver.lib.test_helpers import queries_captured
|
from zerver.lib.test_helpers import queries_captured
|
||||||
from zerver.models import get_client, get_realm, Realm, Message, UserActivity, UserProfile
|
from zerver.models import get_client, get_realm, flush_per_request_caches, \
|
||||||
|
Realm, Message, UserActivity, UserProfile
|
||||||
|
|
||||||
class TestDigestEmailMessages(ZulipTestCase):
|
class TestDigestEmailMessages(ZulipTestCase):
|
||||||
|
|
||||||
|
@ -116,10 +117,11 @@ class TestDigestEmailMessages(ZulipTestCase):
|
||||||
result = self.client_post("/json/messages", payload)
|
result = self.client_post("/json/messages", payload)
|
||||||
self.assert_json_success(result)
|
self.assert_json_success(result)
|
||||||
|
|
||||||
|
flush_per_request_caches()
|
||||||
with queries_captured() as queries:
|
with queries_captured() as queries:
|
||||||
handle_digest_email(othello.id, cutoff)
|
handle_digest_email(othello.id, cutoff)
|
||||||
|
|
||||||
self.assertTrue(41 <= len(queries) <= 42)
|
self.assertTrue(34 <= len(queries) <= 35)
|
||||||
|
|
||||||
self.assertEqual(mock_send_future_email.call_count, 1)
|
self.assertEqual(mock_send_future_email.call_count, 1)
|
||||||
kwargs = mock_send_future_email.call_args[1]
|
kwargs = mock_send_future_email.call_args[1]
|
||||||
|
|
Loading…
Reference in New Issue