diff --git a/synapse/storage/push_rule.py b/synapse/storage/push_rule.py
index 88ee21b089..4cac118d17 100644
--- a/synapse/storage/push_rule.py
+++ b/synapse/storage/push_rule.py
@@ -23,6 +23,7 @@ logger = logging.getLogger(__name__)
class PushRuleStore(SQLBaseStore):
+ @cached()
@defer.inlineCallbacks
def get_push_rules_for_user(self, user_name):
rows = yield self._simple_select_list(
@@ -31,6 +32,7 @@ class PushRuleStore(SQLBaseStore):
"user_name": user_name,
},
retcols=PushRuleTable.fields,
+ desc="get_push_rules_enabled_for_user",
)
rows.sort(
@@ -151,6 +153,10 @@ class PushRuleStore(SQLBaseStore):
txn.execute(sql, (user_name, priority_class, new_rule_priority))
txn.call_after(
+ self.get_push_rules_for_user.invalidate, user_name
+ )
+
+ txn.call_after(
self.get_push_rules_enabled_for_user.invalidate, user_name
)
@@ -183,6 +189,9 @@ class PushRuleStore(SQLBaseStore):
new_rule['priority'] = new_prio
txn.call_after(
+ self.get_push_rules_for_user.invalidate, user_name
+ )
+ txn.call_after(
self.get_push_rules_enabled_for_user.invalidate, user_name
)
@@ -208,17 +217,34 @@ class PushRuleStore(SQLBaseStore):
{'user_name': user_name, 'rule_id': rule_id},
desc="delete_push_rule",
)
+
+ self.get_push_rules_for_user.invalidate(user_name)
self.get_push_rules_enabled_for_user.invalidate(user_name)
@defer.inlineCallbacks
def set_push_rule_enabled(self, user_name, rule_id, enabled):
- yield self._simple_upsert(
+ ret = yield self.runInteraction(
+ "_set_push_rule_enabled_txn",
+ self._set_push_rule_enabled_txn,
+ user_name, rule_id, enabled
+ )
+ defer.returnValue(ret)
+
+ def _set_push_rule_enabled_txn(self, txn, user_name, rule_id, enabled):
+ new_id = self._push_rules_enable_id_gen.get_next_txn(txn)
+ self._simple_upsert_txn(
+ txn,
PushRuleEnableTable.table_name,
{'user_name': user_name, 'rule_id': rule_id},
{'enabled': 1 if enabled else 0},
- desc="set_push_rule_enabled",
+ {'id': new_id},
+ )
+ txn.call_after(
+ self.get_push_rules_for_user.invalidate, user_name
+ )
+ txn.call_after(
+ self.get_push_rules_enabled_for_user.invalidate, user_name
)
- self.get_push_rules_enabled_for_user.invalidate(user_name)
class RuleNotFoundException(Exception):
|