From c29e11de93c70e29d698750b55cd0572f48053cb Mon Sep 17 00:00:00 2001 From: Alex Vandiver Date: Tue, 11 Feb 2025 21:00:48 +0000 Subject: [PATCH] cache_helpers: Use the same select_related as the cache methods use. Only prefetching `realm` and `bot_owner` means that the cache values filled by this process differ from the cache values that would be stored on a cache miss -- leading to extra database queries for those objects. Use the same `base_get_user_queryset()` to ensure we get the same related prefetches. --- zerver/lib/cache_helpers.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/zerver/lib/cache_helpers.py b/zerver/lib/cache_helpers.py index 6fcdf09eb1..94f19847c9 100644 --- a/zerver/lib/cache_helpers.py +++ b/zerver/lib/cache_helpers.py @@ -26,6 +26,11 @@ from zerver.lib.sessions import session_engine from zerver.lib.users import get_all_api_keys from zerver.models import Client, UserProfile from zerver.models.clients import get_client_cache_key +from zerver.models.users import base_get_user_queryset + + +def get_users() -> QuerySet[UserProfile]: + return base_get_user_queryset().filter(long_term_idle=False, realm__in=get_active_realm_ids()) def user_cache_items( @@ -79,12 +84,6 @@ def get_active_realm_ids() -> QuerySet[RealmCount, int]: ) -def get_users() -> QuerySet[UserProfile]: - return UserProfile.objects.select_related("realm", "bot_owner").filter( - long_term_idle=False, realm__in=get_active_realm_ids() - ) - - # Format is (objects query, items filler function, timeout, batch size) # # The objects queries are put inside lambdas to prevent Django from