diff --git a/synapse/push/__init__.py b/synapse/push/__init__.py
index d1dfb406d4..57c4d70466 100644
--- a/synapse/push/__init__.py
+++ b/synapse/push/__init__.py
@@ -43,11 +43,6 @@ The general interaction of the classes are:
+---------------------------------------------+
|
v
- +-----------------+
- | ActionGenerator |
- +-----------------+
- |
- v
+-----------------------+ +---------------------------+
| BulkPushRuleEvaluator |---->| PushRuleEvaluatorForEvent |
+-----------------------+ +---------------------------+
diff --git a/synapse/push/action_generator.py b/synapse/push/action_generator.py
deleted file mode 100644
index 730d9cd354..0000000000
--- a/synapse/push/action_generator.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# Copyright 2015 OpenMarket Ltd
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import logging
-from typing import TYPE_CHECKING
-
-from synapse.events import EventBase
-from synapse.events.snapshot import EventContext
-from synapse.push.bulk_push_rule_evaluator import BulkPushRuleEvaluator
-from synapse.util.metrics import Measure
-
-if TYPE_CHECKING:
- from synapse.server import HomeServer
-
-logger = logging.getLogger(__name__)
-
-
-class ActionGenerator:
- def __init__(self, hs: "HomeServer"):
- self.clock = hs.get_clock()
- self.bulk_evaluator = BulkPushRuleEvaluator(hs)
- # really we want to get all user ids and all profile tags too,
- # since we want the actions for each profile tag for every user and
- # also actions for a client with no profile tag for each user.
- # Currently the event stream doesn't support profile tags on an
- # event stream, so we just run the rules for a client with no profile
- # tag (ie. we just need all the users).
-
- async def handle_push_actions_for_event(
- self, event: EventBase, context: EventContext
- ) -> None:
- if event.internal_metadata.is_outlier():
- # This can happen due to out of band memberships
- return
-
- with Measure(self.clock, "action_for_event_by_user"):
- await self.bulk_evaluator.action_for_event_by_user(event, context)
diff --git a/synapse/push/bulk_push_rule_evaluator.py b/synapse/push/bulk_push_rule_evaluator.py
index 85ddb56c6e..0ffafc882b 100644
--- a/synapse/push/bulk_push_rule_evaluator.py
+++ b/synapse/push/bulk_push_rule_evaluator.py
@@ -29,6 +29,7 @@ from synapse.util.async_helpers import Linearizer
from synapse.util.caches import CacheMetric, register_cache
from synapse.util.caches.descriptors import lru_cache
from synapse.util.caches.lrucache import LruCache
+from synapse.util.metrics import measure_func
from .push_rule_evaluator import PushRuleEvaluatorForEvent
@@ -105,6 +106,7 @@ class BulkPushRuleEvaluator:
def __init__(self, hs: "HomeServer"):
self.hs = hs
self.store = hs.get_datastores().main
+ self.clock = hs.get_clock()
self._event_auth_handler = hs.get_event_auth_handler()
# Used by `RulesForRoom` to ensure only one thing mutates the cache at a
@@ -185,6 +187,7 @@ class BulkPushRuleEvaluator:
return pl_event.content if pl_event else {}, sender_level
+ @measure_func("action_for_event_by_user")
async def action_for_event_by_user(
self, event: EventBase, context: EventContext
) -> None:
@@ -192,6 +195,10 @@ class BulkPushRuleEvaluator:
should increment the unread count, and insert the results into the
event_push_actions_staging table.
"""
+ if event.internal_metadata.is_outlier():
+ # This can happen due to out of band memberships
+ return
+
count_as_unread = _should_count_as_unread(event, context)
rules_by_user = await self._get_rules_for_event(event, context)
|