aboutsummaryrefslogtreecommitdiff
path: root/internal/caching/cache_roominfo.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/caching/cache_roominfo.go')
-rw-r--r--internal/caching/cache_roominfo.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/internal/caching/cache_roominfo.go b/internal/caching/cache_roominfo.go
new file mode 100644
index 00000000..f32d6ba9
--- /dev/null
+++ b/internal/caching/cache_roominfo.go
@@ -0,0 +1,45 @@
+package caching
+
+import (
+ "github.com/matrix-org/dendrite/roomserver/types"
+)
+
+// WARNING: This cache is mutable because it's entirely possible that
+// the IsStub or StateSnaphotNID fields can change, even though the
+// room version and room NID fields will not. This is only safe because
+// the RoomInfoCache is used ONLY within the roomserver and because it
+// will be kept up-to-date by the latest events updater. It MUST NOT be
+// used from other components as we currently have no way to invalidate
+// the cache in downstream components.
+
+const (
+ RoomInfoCacheName = "roominfo"
+ RoomInfoCacheMaxEntries = 1024
+ RoomInfoCacheMutable = true
+)
+
+// RoomInfosCache contains the subset of functions needed for
+// a room Info cache. It must only be used from the roomserver only
+// It is not safe for use from other components.
+type RoomInfoCache interface {
+ GetRoomInfo(roomID string) (roomInfo types.RoomInfo, ok bool)
+ StoreRoomInfo(roomID string, roomInfo types.RoomInfo)
+}
+
+// GetRoomInfo must only be called from the roomserver only. It is not
+// safe for use from other components.
+func (c Caches) GetRoomInfo(roomID string) (types.RoomInfo, bool) {
+ val, found := c.RoomInfos.Get(roomID)
+ if found && val != nil {
+ if roomInfo, ok := val.(types.RoomInfo); ok {
+ return roomInfo, true
+ }
+ }
+ return types.RoomInfo{}, false
+}
+
+// StoreRoomInfo must only be called from the roomserver only. It is not
+// safe for use from other components.
+func (c Caches) StoreRoomInfo(roomID string, roomInfo types.RoomInfo) {
+ c.RoomInfos.Set(roomID, roomInfo)
+}