mirror of
				https://github.com/matrix-org/synapse.git
				synced 2025-11-04 02:01:03 +01:00 
			
		
		
		
	Ignore AS users when fetching push rules
By ignoring AS users early on when fetching push rules for a room we can avoid needlessly hitting the DB and filling up the caches.
This commit is contained in:
		
							parent
							
								
									baf9e74a73
								
							
						
					
					
						commit
						0163466d72
					
				@ -39,6 +39,14 @@ class ApplicationServiceStore(SQLBaseStore):
 | 
				
			|||||||
    def get_app_services(self):
 | 
					    def get_app_services(self):
 | 
				
			||||||
        return self.services_cache
 | 
					        return self.services_cache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_if_app_services_interested_in_user(self, user_id):
 | 
				
			||||||
 | 
					        """Check if the user is one associated with an app service
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        for service in self.services_cache:
 | 
				
			||||||
 | 
					            if service.is_interested_in_user(user_id):
 | 
				
			||||||
 | 
					                return True
 | 
				
			||||||
 | 
					        return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_app_service_by_user_id(self, user_id):
 | 
					    def get_app_service_by_user_id(self, user_id):
 | 
				
			||||||
        """Retrieve an application service from their user ID.
 | 
					        """Retrieve an application service from their user ID.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -156,12 +156,20 @@ class PushRuleStore(SQLBaseStore):
 | 
				
			|||||||
            event=event,
 | 
					            event=event,
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        local_users_in_room = set(u for u in users_in_room if self.hs.is_mine_id(u))
 | 
					        # We ignore app service users for now. This is so that we don't fill
 | 
				
			||||||
 | 
					        # up the `get_if_users_have_pushers` cache with AS entries that we
 | 
				
			||||||
 | 
					        # know don't have pushers, nor even read receipts.
 | 
				
			||||||
 | 
					        local_users_in_room = set(
 | 
				
			||||||
 | 
					            u for u in users_in_room
 | 
				
			||||||
 | 
					            if self.hs.is_mine_id(u)
 | 
				
			||||||
 | 
					            and not self.get_if_app_services_interested_in_user(u)
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # users in the room who have pushers need to get push rules run because
 | 
					        # users in the room who have pushers need to get push rules run because
 | 
				
			||||||
        # that's how their pushers work
 | 
					        # that's how their pushers work
 | 
				
			||||||
        if_users_with_pushers = yield self.get_if_users_have_pushers(
 | 
					        if_users_with_pushers = yield self.get_if_users_have_pushers(
 | 
				
			||||||
            local_users_in_room, on_invalidate=cache_context.invalidate,
 | 
					            local_users_in_room,
 | 
				
			||||||
 | 
					            on_invalidate=cache_context.invalidate,
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        user_ids = set(
 | 
					        user_ids = set(
 | 
				
			||||||
            uid for uid, have_pusher in if_users_with_pushers.items() if have_pusher
 | 
					            uid for uid, have_pusher in if_users_with_pushers.items() if have_pusher
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user