diff --git a/synapse/storage/_base.py b/synapse/storage/_base.py
index 2210b3ddfb..c8c76e58fe 100644
--- a/synapse/storage/_base.py
+++ b/synapse/storage/_base.py
@@ -180,6 +180,7 @@ def cached(max_entries=1000, num_args=1, lru=False):
defer.returnValue(ret)
wrapped.invalidate = cache.invalidate
+ wrapped.invalidate_all = cache.invalidate_all
wrapped.prefill = cache.prefill
return wrapped
diff --git a/synapse/storage/events.py b/synapse/storage/events.py
index 52074b4cc8..1304219e86 100644
--- a/synapse/storage/events.py
+++ b/synapse/storage/events.py
@@ -108,6 +108,10 @@ class EventsStore(SQLBaseStore):
# key, we *want* to update the `current_state_events` table
if current_state:
txn.call_after(self.get_current_state_for_key.invalidate_all)
+ txn.call_after(self.get_rooms_for_user.invalidate_all)
+ txn.call_after(self.get_users_in_room.invalidate, event.room_id)
+ txn.call_after(self.get_joined_hosts_for_room.invalidate, event.room_id)
+ txn.call_after(self.get_room_name_and_aliases, event.room_id)
self._simple_delete_txn(
txn,
@@ -116,13 +120,6 @@ class EventsStore(SQLBaseStore):
)
for s in current_state:
- if s.type == EventTypes.Member:
- txn.call_after(
- self.get_rooms_for_user.invalidate, s.state_key
- )
- txn.call_after(
- self.get_joined_hosts_for_room.invalidate, s.room_id
- )
self._simple_insert_txn(
txn,
"current_state_events",
@@ -341,6 +338,14 @@ class EventsStore(SQLBaseStore):
self.get_current_state_for_key.invalidate,
event.room_id, event.type, event.state_key
)
+
+ if (event.type == EventTypes.Name
+ or event.type == EventTypes.Aliases):
+ txn.call_after(
+ self.get_room_name_and_aliases.invalidate,
+ event.room_id
+ )
+
self._simple_upsert_txn(
txn,
"current_state_events",
diff --git a/synapse/storage/push_rule.py b/synapse/storage/push_rule.py
index 34805e276e..fba5c7e403 100644
--- a/synapse/storage/push_rule.py
+++ b/synapse/storage/push_rule.py
@@ -13,9 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import collections
-
-from ._base import SQLBaseStore, Table
+from ._base import SQLBaseStore, cached
from twisted.internet import defer
import logging
@@ -41,6 +39,7 @@ class PushRuleStore(SQLBaseStore):
defer.returnValue(rows)
+ @cached()
@defer.inlineCallbacks
def get_push_rules_enabled_for_user(self, user_name):
results = yield self._simple_select_list(
@@ -151,6 +150,10 @@ class PushRuleStore(SQLBaseStore):
txn.execute(sql, (user_name, priority_class, new_rule_priority))
+ txn.call_after(
+ self.get_push_rules_enabled_for_user.invalidate, user_name
+ )
+
self._simple_insert_txn(
txn,
table=PushRuleTable.table_name,
@@ -179,6 +182,10 @@ class PushRuleStore(SQLBaseStore):
new_rule['priority_class'] = priority_class
new_rule['priority'] = new_prio
+ txn.call_after(
+ self.get_push_rules_enabled_for_user.invalidate, user_name
+ )
+
self._simple_insert_txn(
txn,
table=PushRuleTable.table_name,
@@ -201,6 +208,7 @@ class PushRuleStore(SQLBaseStore):
{'user_name': user_name, 'rule_id': rule_id},
desc="delete_push_rule",
)
+ self.get_push_rules_enabled_for_user.invalidate(user_name)
@defer.inlineCallbacks
def set_push_rule_enabled(self, user_name, rule_id, enabled):
@@ -210,6 +218,9 @@ class PushRuleStore(SQLBaseStore):
{'enabled': 1 if enabled else 0},
desc="set_push_rule_enabled",
)
+ txn.call_after(
+ self.get_push_rules_enabled_for_user.invalidate, user_name
+ )
class RuleNotFoundException(Exception):
@@ -220,7 +231,7 @@ class InconsistentRuleException(Exception):
pass
-class PushRuleTable(Table):
+class PushRuleTable(object):
table_name = "push_rules"
fields = [
@@ -233,10 +244,8 @@ class PushRuleTable(Table):
"actions",
]
- EntryType = collections.namedtuple("PushRuleEntry", fields)
-
-class PushRuleEnableTable(Table):
+class PushRuleEnableTable(object):
table_name = "push_rules_enable"
fields = [
diff --git a/synapse/storage/room.py b/synapse/storage/room.py
index f956377632..4612a8aa83 100644
--- a/synapse/storage/room.py
+++ b/synapse/storage/room.py
@@ -17,7 +17,7 @@ from twisted.internet import defer
from synapse.api.errors import StoreError
-from ._base import SQLBaseStore
+from ._base import SQLBaseStore, cached
import collections
import logging
@@ -186,6 +186,7 @@ class RoomStore(SQLBaseStore):
}
)
+ @cached()
@defer.inlineCallbacks
def get_room_name_and_aliases(self, room_id):
def f(txn):
diff --git a/synapse/storage/roommember.py b/synapse/storage/roommember.py
index 839c74f63a..3691eade05 100644
--- a/synapse/storage/roommember.py
+++ b/synapse/storage/roommember.py
@@ -66,6 +66,7 @@ class RoomMemberStore(SQLBaseStore):
txn.call_after(self.get_rooms_for_user.invalidate, target_user_id)
txn.call_after(self.get_joined_hosts_for_room.invalidate, event.room_id)
+ txn.call_after(self.get_users_in_room.invalidate, event.room_id)
def get_room_member(self, user_id, room_id):
"""Retrieve the current state of a room member.
@@ -87,6 +88,7 @@ class RoomMemberStore(SQLBaseStore):
return self.runInteraction("get_room_member", f)
+ @cached()
def get_users_in_room(self, room_id):
def f(txn):
|