mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	This new function optimizes how we fetch subscriptions for streams. Basically, it excludes most long-term-idle users from the query. With 8k users, of which all but 400 are long term idle, this speeds up get_recipient_info from about 150ms to 50ms. Overall this change appears to save a factor of 2-3 in the backend processing time for sending or editing a message in large, public streams in chat.zulip.org (at 18K users today).
		
			
				
	
	
		
			26 lines
		
	
	
		
			721 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			26 lines
		
	
	
		
			721 B
		
	
	
	
		
			Python
		
	
	
	
	
	
from typing import Set
 | 
						|
 | 
						|
from zerver.models import MutedTopic
 | 
						|
 | 
						|
 | 
						|
class StreamTopicTarget:
 | 
						|
    """
 | 
						|
    This class is designed to help us move to a
 | 
						|
    StreamTopic table or something similar.  It isolates
 | 
						|
    places where we are are still using `topic_name` as
 | 
						|
    a key into tables.
 | 
						|
    """
 | 
						|
 | 
						|
    def __init__(self, stream_id: int, topic_name: str) -> None:
 | 
						|
        self.stream_id = stream_id
 | 
						|
        self.topic_name = topic_name
 | 
						|
 | 
						|
    def user_ids_muting_topic(self) -> Set[int]:
 | 
						|
        query = MutedTopic.objects.filter(
 | 
						|
            stream_id=self.stream_id,
 | 
						|
            topic_name__iexact=self.topic_name,
 | 
						|
        ).values(
 | 
						|
            "user_profile_id",
 | 
						|
        )
 | 
						|
        return {row["user_profile_id"] for row in query}
 |