From 384ad0e2a0d6eebe09cc346f97c6a392c388bd51 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Wed, 16 Dec 2020 12:14:51 +0000 Subject: [PATCH] Adding comments about RoomInfoCache safety --- internal/caching/cache_roominfo.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/internal/caching/cache_roominfo.go b/internal/caching/cache_roominfo.go index fa90582c2..f32d6ba9b 100644 --- a/internal/caching/cache_roominfo.go +++ b/internal/caching/cache_roominfo.go @@ -4,6 +4,14 @@ 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 @@ -11,12 +19,15 @@ const ( ) // RoomInfosCache contains the subset of functions needed for -// a room Info cache. +// 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 { @@ -27,6 +38,8 @@ func (c Caches) GetRoomInfo(roomID string) (types.RoomInfo, bool) { 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) }