Revert "Speed up filtering of a single event in push"
This reverts commit 421fdf7460.
			
			
				pull/2200/head
			
			
		
							parent
							
								
									a59b0ad1a1
								
							
						
					
					
						commit
						78f306a6f7
					
				|  | @ -20,6 +20,7 @@ from twisted.internet import defer | |||
| from .push_rule_evaluator import PushRuleEvaluatorForEvent | ||||
| 
 | ||||
| from synapse.api.constants import EventTypes | ||||
| from synapse.visibility import filter_events_for_clients_context | ||||
| 
 | ||||
| 
 | ||||
| logger = logging.getLogger(__name__) | ||||
|  | @ -66,6 +67,17 @@ class BulkPushRuleEvaluator: | |||
|     def action_for_event_by_user(self, event, context): | ||||
|         actions_by_user = {} | ||||
| 
 | ||||
|         # None of these users can be peeking since this list of users comes | ||||
|         # from the set of users in the room, so we know for sure they're all | ||||
|         # actually in the room. | ||||
|         user_tuples = [ | ||||
|             (u, False) for u in self.rules_by_user.keys() | ||||
|         ] | ||||
| 
 | ||||
|         filtered_by_user = yield filter_events_for_clients_context( | ||||
|             self.store, user_tuples, [event], {event.event_id: context} | ||||
|         ) | ||||
| 
 | ||||
|         room_members = yield self.store.get_joined_users_from_context( | ||||
|             event, context | ||||
|         ) | ||||
|  | @ -75,14 +87,6 @@ class BulkPushRuleEvaluator: | |||
|         condition_cache = {} | ||||
| 
 | ||||
|         for uid, rules in self.rules_by_user.items(): | ||||
|             if event.sender == uid: | ||||
|                 continue | ||||
| 
 | ||||
|             if not event.is_state(): | ||||
|                 is_ignored = yield self.store.is_ignored_by(event.sender, uid) | ||||
|                 if is_ignored: | ||||
|                     continue | ||||
| 
 | ||||
|             display_name = None | ||||
|             profile_info = room_members.get(uid) | ||||
|             if profile_info: | ||||
|  | @ -94,6 +98,13 @@ class BulkPushRuleEvaluator: | |||
|                 if event.type == EventTypes.Member and event.state_key == uid: | ||||
|                     display_name = event.content.get("displayname", None) | ||||
| 
 | ||||
|             filtered = filtered_by_user[uid] | ||||
|             if len(filtered) == 0: | ||||
|                 continue | ||||
| 
 | ||||
|             if filtered[0].sender == uid: | ||||
|                 continue | ||||
| 
 | ||||
|             for rule in rules: | ||||
|                 if 'enabled' in rule and not rule['enabled']: | ||||
|                     continue | ||||
|  |  | |||
|  | @ -308,16 +308,3 @@ class AccountDataStore(SQLBaseStore): | |||
|             " WHERE stream_id < ?" | ||||
|         ) | ||||
|         txn.execute(update_max_id_sql, (next_id, next_id)) | ||||
| 
 | ||||
|     @cachedInlineCallbacks(num_args=2, cache_context=True, max_entries=5000) | ||||
|     def is_ignored_by(self, ignored_user_id, ignorer_user_id, cache_context): | ||||
|         ignored_account_data = yield self.get_global_account_data_by_type_for_user( | ||||
|             "m.ignored_user_list", ignorer_user_id, | ||||
|             on_invalidate=cache_context.invalidate, | ||||
|         ) | ||||
|         if not ignored_account_data: | ||||
|             defer.returnValue(False) | ||||
| 
 | ||||
|         defer.returnValue( | ||||
|             ignored_user_id in ignored_account_data.get("ignored_users", {}) | ||||
|         ) | ||||
|  |  | |||
|  | @ -188,7 +188,7 @@ class PushRuleStore(SQLBaseStore): | |||
|             user_ids, on_invalidate=cache_context.invalidate, | ||||
|         ) | ||||
| 
 | ||||
|         rules_by_user = {k: v for k, v in rules_by_user.iteritems() if v is not None} | ||||
|         rules_by_user = {k: v for k, v in rules_by_user.items() if v is not None} | ||||
| 
 | ||||
|         defer.returnValue(rules_by_user) | ||||
| 
 | ||||
|  | @ -398,8 +398,7 @@ class PushRuleStore(SQLBaseStore): | |||
|         with self._push_rules_stream_id_gen.get_next() as ids: | ||||
|             stream_id, event_stream_ordering = ids | ||||
|             yield self.runInteraction( | ||||
|                 "delete_push_rule", delete_push_rule_txn, stream_id, | ||||
|                 event_stream_ordering, | ||||
|                 "delete_push_rule", delete_push_rule_txn, stream_id, event_stream_ordering | ||||
|             ) | ||||
| 
 | ||||
|     @defer.inlineCallbacks | ||||
|  |  | |||
|  | @ -188,6 +188,25 @@ def filter_events_for_clients(store, user_tuples, events, event_id_to_state): | |||
|     }) | ||||
| 
 | ||||
| 
 | ||||
| @defer.inlineCallbacks | ||||
| def filter_events_for_clients_context(store, user_tuples, events, event_id_to_context): | ||||
|     user_ids = set(u[0] for u in user_tuples) | ||||
|     event_id_to_state = {} | ||||
|     for event_id, context in event_id_to_context.items(): | ||||
|         state = yield store.get_events([ | ||||
|             e_id | ||||
|             for key, e_id in context.current_state_ids.iteritems() | ||||
|             if key == (EventTypes.RoomHistoryVisibility, "") | ||||
|             or (key[0] == EventTypes.Member and key[1] in user_ids) | ||||
|         ]) | ||||
|         event_id_to_state[event_id] = state | ||||
| 
 | ||||
|     res = yield filter_events_for_clients( | ||||
|         store, user_tuples, events, event_id_to_state | ||||
|     ) | ||||
|     defer.returnValue(res) | ||||
| 
 | ||||
| 
 | ||||
| @defer.inlineCallbacks | ||||
| def filter_events_for_client(store, user_id, events, is_peeking=False): | ||||
|     """ | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Erik Johnston
						Erik Johnston