Fix breaking event sending due to bad push rule (#13547)

Broke by #13522

It looks like we have some rules in the DB with a priority class less
than 0 that don't override the base rules. Before these were just
dropped, but #13522 made that a hard error.
This commit is contained in:
Erik Johnston 2022-08-17 12:02:38 +01:00 committed by GitHub
parent ba8938b090
commit 436e0eb39a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 1 deletions

1
changelog.d/13547.misc Normal file
View file

@ -0,0 +1 @@
Improve performance of sending messages in rooms with thousands of local users.

View file

@ -49,6 +49,7 @@ kind, etc, etc.
""" """
import itertools import itertools
import logging
from typing import Dict, Iterator, List, Mapping, Sequence, Tuple, Union from typing import Dict, Iterator, List, Mapping, Sequence, Tuple, Union
import attr import attr
@ -56,6 +57,8 @@ import attr
from synapse.config.experimental import ExperimentalConfig from synapse.config.experimental import ExperimentalConfig
from synapse.push.rulekinds import PRIORITY_CLASS_MAP from synapse.push.rulekinds import PRIORITY_CLASS_MAP
logger = logging.getLogger(__name__)
@attr.s(auto_attribs=True, slots=True, frozen=True) @attr.s(auto_attribs=True, slots=True, frozen=True)
class PushRule: class PushRule:
@ -199,8 +202,16 @@ def compile_push_rules(rawrules: List[PushRule]) -> PushRules:
collection = rules.sender collection = rules.sender
elif rule.priority_class == 1: elif rule.priority_class == 1:
collection = rules.underride collection = rules.underride
elif rule.priority_class <= 0:
logger.info(
"Got rule with priority class less than zero, but doesn't override a base rule: %s",
rule,
)
continue
else: else:
raise Exception(f"Unknown priority class: {rule.priority_class}") # We log and continue here so as not to break event sending
logger.error("Unknown priority class: %", rule.priority_class)
continue
collection.append(rule) collection.append(rule)