mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-07-24 05:20:38 -04:00
Remove the experimental implementation of MSC3772. (#14094)
MSC3772 has been abandoned.
This commit is contained in:
parent
3f057e4c54
commit
09be8ab5f9
12 changed files with 22 additions and 365 deletions
|
@ -95,8 +95,6 @@ class ExperimentalConfig(Config):
|
|||
# MSC2815 (allow room moderators to view redacted event content)
|
||||
self.msc2815_enabled: bool = experimental.get("msc2815_enabled", False)
|
||||
|
||||
# MSC3772: A push rule for mutual relations.
|
||||
self.msc3772_enabled: bool = experimental.get("msc3772_enabled", False)
|
||||
# MSC3773: Thread notifications
|
||||
self.msc3773_enabled: bool = experimental.get("msc3773_enabled", False)
|
||||
|
||||
|
|
|
@ -13,18 +13,15 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import itertools
|
||||
import logging
|
||||
from typing import (
|
||||
TYPE_CHECKING,
|
||||
Any,
|
||||
Collection,
|
||||
Dict,
|
||||
Iterable,
|
||||
List,
|
||||
Mapping,
|
||||
Optional,
|
||||
Set,
|
||||
Tuple,
|
||||
Union,
|
||||
)
|
||||
|
@ -38,7 +35,7 @@ from synapse.events.snapshot import EventContext
|
|||
from synapse.state import POWER_KEY
|
||||
from synapse.storage.databases.main.roommember import EventIdMembership
|
||||
from synapse.storage.state import StateFilter
|
||||
from synapse.synapse_rust.push import FilteredPushRules, PushRule, PushRuleEvaluator
|
||||
from synapse.synapse_rust.push import FilteredPushRules, PushRuleEvaluator
|
||||
from synapse.util.caches import register_cache
|
||||
from synapse.util.metrics import measure_func
|
||||
from synapse.visibility import filter_event_for_clients_with_state
|
||||
|
@ -117,9 +114,6 @@ class BulkPushRuleEvaluator:
|
|||
resizable=False,
|
||||
)
|
||||
|
||||
# Whether to support MSC3772 is supported.
|
||||
self._relations_match_enabled = self.hs.config.experimental.msc3772_enabled
|
||||
|
||||
async def _get_rules_for_event(
|
||||
self,
|
||||
event: EventBase,
|
||||
|
@ -200,51 +194,6 @@ class BulkPushRuleEvaluator:
|
|||
|
||||
return pl_event.content if pl_event else {}, sender_level
|
||||
|
||||
async def _get_mutual_relations(
|
||||
self, parent_id: str, rules: Iterable[Tuple[PushRule, bool]]
|
||||
) -> Dict[str, Set[Tuple[str, str]]]:
|
||||
"""
|
||||
Fetch event metadata for events which related to the same event as the given event.
|
||||
|
||||
If the given event has no relation information, returns an empty dictionary.
|
||||
|
||||
Args:
|
||||
parent_id: The event ID which is targeted by relations.
|
||||
rules: The push rules which will be processed for this event.
|
||||
|
||||
Returns:
|
||||
A dictionary of relation type to:
|
||||
A set of tuples of:
|
||||
The sender
|
||||
The event type
|
||||
"""
|
||||
|
||||
# If the experimental feature is not enabled, skip fetching relations.
|
||||
if not self._relations_match_enabled:
|
||||
return {}
|
||||
|
||||
# Pre-filter to figure out which relation types are interesting.
|
||||
rel_types = set()
|
||||
for rule, enabled in rules:
|
||||
if not enabled:
|
||||
continue
|
||||
|
||||
for condition in rule.conditions:
|
||||
if condition["kind"] != "org.matrix.msc3772.relation_match":
|
||||
continue
|
||||
|
||||
# rel_type is required.
|
||||
rel_type = condition.get("rel_type")
|
||||
if rel_type:
|
||||
rel_types.add(rel_type)
|
||||
|
||||
# If no valid rules were found, no mutual relations.
|
||||
if not rel_types:
|
||||
return {}
|
||||
|
||||
# If any valid rules were found, fetch the mutual relations.
|
||||
return await self.store.get_mutual_event_relations(parent_id, rel_types)
|
||||
|
||||
@measure_func("action_for_event_by_user")
|
||||
async def action_for_event_by_user(
|
||||
self, event: EventBase, context: EventContext
|
||||
|
@ -276,16 +225,11 @@ class BulkPushRuleEvaluator:
|
|||
sender_power_level,
|
||||
) = await self._get_power_levels_and_sender_level(event, context)
|
||||
|
||||
# Find the event's thread ID.
|
||||
relation = relation_from_event(event)
|
||||
# If the event does not have a relation, then cannot have any mutual
|
||||
# relations or thread ID.
|
||||
relations = {}
|
||||
# If the event does not have a relation, then it cannot have a thread ID.
|
||||
thread_id = MAIN_TIMELINE
|
||||
if relation:
|
||||
relations = await self._get_mutual_relations(
|
||||
relation.parent_id,
|
||||
itertools.chain(*(r.rules() for r in rules_by_user.values())),
|
||||
)
|
||||
# Recursively attempt to find the thread this event relates to.
|
||||
if relation.rel_type == RelationTypes.THREAD:
|
||||
thread_id = relation.parent_id
|
||||
|
@ -306,8 +250,6 @@ class BulkPushRuleEvaluator:
|
|||
room_member_count,
|
||||
sender_power_level,
|
||||
notification_levels,
|
||||
relations,
|
||||
self._relations_match_enabled,
|
||||
)
|
||||
|
||||
users = rules_by_user.keys()
|
||||
|
|
|
@ -259,9 +259,6 @@ class CacheInvalidationWorkerStore(SQLBaseStore):
|
|||
self._attempt_to_invalidate_cache("get_applicable_edit", (relates_to,))
|
||||
self._attempt_to_invalidate_cache("get_thread_summary", (relates_to,))
|
||||
self._attempt_to_invalidate_cache("get_thread_participated", (relates_to,))
|
||||
self._attempt_to_invalidate_cache(
|
||||
"get_mutual_event_relations_for_rel_type", (relates_to,)
|
||||
)
|
||||
|
||||
async def invalidate_cache_and_stream(
|
||||
self, cache_name: str, keys: Tuple[Any, ...]
|
||||
|
|
|
@ -2024,11 +2024,6 @@ class PersistEventsStore:
|
|||
self.store._invalidate_cache_and_stream(
|
||||
txn, self.store.get_thread_participated, (redacted_relates_to,)
|
||||
)
|
||||
self.store._invalidate_cache_and_stream(
|
||||
txn,
|
||||
self.store.get_mutual_event_relations_for_rel_type,
|
||||
(redacted_relates_to,),
|
||||
)
|
||||
|
||||
self.db_pool.simple_delete_txn(
|
||||
txn, table="event_relations", keyvalues={"event_id": redacted_event_id}
|
||||
|
|
|
@ -29,7 +29,6 @@ from typing import (
|
|||
)
|
||||
|
||||
from synapse.api.errors import StoreError
|
||||
from synapse.config.homeserver import ExperimentalConfig
|
||||
from synapse.replication.slave.storage._slaved_id_tracker import SlavedIdTracker
|
||||
from synapse.storage._base import SQLBaseStore
|
||||
from synapse.storage.database import (
|
||||
|
@ -63,9 +62,7 @@ logger = logging.getLogger(__name__)
|
|||
|
||||
|
||||
def _load_rules(
|
||||
rawrules: List[JsonDict],
|
||||
enabled_map: Dict[str, bool],
|
||||
experimental_config: ExperimentalConfig,
|
||||
rawrules: List[JsonDict], enabled_map: Dict[str, bool]
|
||||
) -> FilteredPushRules:
|
||||
"""Take the DB rows returned from the DB and convert them into a full
|
||||
`FilteredPushRules` object.
|
||||
|
@ -83,9 +80,7 @@ def _load_rules(
|
|||
|
||||
push_rules = PushRules(ruleslist)
|
||||
|
||||
filtered_rules = FilteredPushRules(
|
||||
push_rules, enabled_map, msc3772_enabled=experimental_config.msc3772_enabled
|
||||
)
|
||||
filtered_rules = FilteredPushRules(push_rules, enabled_map)
|
||||
|
||||
return filtered_rules
|
||||
|
||||
|
@ -165,7 +160,7 @@ class PushRulesWorkerStore(
|
|||
|
||||
enabled_map = await self.get_push_rules_enabled_for_user(user_id)
|
||||
|
||||
return _load_rules(rows, enabled_map, self.hs.config.experimental)
|
||||
return _load_rules(rows, enabled_map)
|
||||
|
||||
async def get_push_rules_enabled_for_user(self, user_id: str) -> Dict[str, bool]:
|
||||
results = await self.db_pool.simple_select_list(
|
||||
|
@ -224,9 +219,7 @@ class PushRulesWorkerStore(
|
|||
results: Dict[str, FilteredPushRules] = {}
|
||||
|
||||
for user_id, rules in raw_rules.items():
|
||||
results[user_id] = _load_rules(
|
||||
rules, enabled_map_by_user.get(user_id, {}), self.hs.config.experimental
|
||||
)
|
||||
results[user_id] = _load_rules(rules, enabled_map_by_user.get(user_id, {}))
|
||||
|
||||
return results
|
||||
|
||||
|
|
|
@ -776,59 +776,6 @@ class RelationsWorkerStore(SQLBaseStore):
|
|||
"get_if_user_has_annotated_event", _get_if_user_has_annotated_event
|
||||
)
|
||||
|
||||
@cached(iterable=True)
|
||||
async def get_mutual_event_relations_for_rel_type(
|
||||
self, event_id: str, relation_type: str
|
||||
) -> Set[Tuple[str, str]]:
|
||||
raise NotImplementedError()
|
||||
|
||||
@cachedList(
|
||||
cached_method_name="get_mutual_event_relations_for_rel_type",
|
||||
list_name="relation_types",
|
||||
)
|
||||
async def get_mutual_event_relations(
|
||||
self, event_id: str, relation_types: Collection[str]
|
||||
) -> Dict[str, Set[Tuple[str, str]]]:
|
||||
"""
|
||||
Fetch event metadata for events which related to the same event as the given event.
|
||||
|
||||
If the given event has no relation information, returns an empty dictionary.
|
||||
|
||||
Args:
|
||||
event_id: The event ID which is targeted by relations.
|
||||
relation_types: The relation types to check for mutual relations.
|
||||
|
||||
Returns:
|
||||
A dictionary of relation type to:
|
||||
A set of tuples of:
|
||||
The sender
|
||||
The event type
|
||||
"""
|
||||
rel_type_sql, rel_type_args = make_in_list_sql_clause(
|
||||
self.database_engine, "relation_type", relation_types
|
||||
)
|
||||
|
||||
sql = f"""
|
||||
SELECT DISTINCT relation_type, sender, type FROM event_relations
|
||||
INNER JOIN events USING (event_id)
|
||||
WHERE relates_to_id = ? AND {rel_type_sql}
|
||||
"""
|
||||
|
||||
def _get_event_relations(
|
||||
txn: LoggingTransaction,
|
||||
) -> Dict[str, Set[Tuple[str, str]]]:
|
||||
txn.execute(sql, [event_id] + rel_type_args)
|
||||
result: Dict[str, Set[Tuple[str, str]]] = {
|
||||
rel_type: set() for rel_type in relation_types
|
||||
}
|
||||
for rel_type, sender, type in txn.fetchall():
|
||||
result[rel_type].add((sender, type))
|
||||
return result
|
||||
|
||||
return await self.db_pool.runInteraction(
|
||||
"get_event_relations", _get_event_relations
|
||||
)
|
||||
|
||||
@cached()
|
||||
async def get_thread_id(self, event_id: str) -> Optional[str]:
|
||||
"""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue