aboutsummaryrefslogtreecommitdiff
path: root/internal/caching
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2023-02-24 09:40:20 +0100
committerGitHub <noreply@github.com>2023-02-24 09:40:20 +0100
commitad07b169b8a58b5a843b7b19ff0a989399d0aea0 (patch)
tree8904e5e52ecec90aa94f748c10a08b08cdf01de1 /internal/caching
parente6aa0955ff4113114ff8f30073582cc4ecc454fa (diff)
Refactor `StoreEvent` and create a new `RoomDatabase` interface (#2985)
This PR changes a few things: - It pulls out the creation of several NIDs from the `StoreEvent` function to make the functions more reusable - Uses more caching when using those NIDs to avoid DB round trips
Diffstat (limited to 'internal/caching')
-rw-r--r--internal/caching/cache_eventstatekeys.go20
-rw-r--r--internal/caching/cache_roomservernids.go9
-rw-r--r--internal/caching/caches.go23
-rw-r--r--internal/caching/impl_ristretto.go18
4 files changed, 60 insertions, 10 deletions
diff --git a/internal/caching/cache_eventstatekeys.go b/internal/caching/cache_eventstatekeys.go
index 05580ab0..51e2499d 100644
--- a/internal/caching/cache_eventstatekeys.go
+++ b/internal/caching/cache_eventstatekeys.go
@@ -7,6 +7,7 @@ import "github.com/matrix-org/dendrite/roomserver/types"
type EventStateKeyCache interface {
GetEventStateKey(eventStateKeyNID types.EventStateKeyNID) (string, bool)
StoreEventStateKey(eventStateKeyNID types.EventStateKeyNID, eventStateKey string)
+ GetEventStateKeyNID(eventStateKey string) (types.EventStateKeyNID, bool)
}
func (c Caches) GetEventStateKey(eventStateKeyNID types.EventStateKeyNID) (string, bool) {
@@ -15,4 +16,23 @@ func (c Caches) GetEventStateKey(eventStateKeyNID types.EventStateKeyNID) (strin
func (c Caches) StoreEventStateKey(eventStateKeyNID types.EventStateKeyNID, eventStateKey string) {
c.RoomServerStateKeys.Set(eventStateKeyNID, eventStateKey)
+ c.RoomServerStateKeyNIDs.Set(eventStateKey, eventStateKeyNID)
+}
+
+func (c Caches) GetEventStateKeyNID(eventStateKey string) (types.EventStateKeyNID, bool) {
+ return c.RoomServerStateKeyNIDs.Get(eventStateKey)
+}
+
+type EventTypeCache interface {
+ GetEventTypeKey(eventType string) (types.EventTypeNID, bool)
+ StoreEventTypeKey(eventTypeNID types.EventTypeNID, eventType string)
+}
+
+func (c Caches) StoreEventTypeKey(eventTypeNID types.EventTypeNID, eventType string) {
+ c.RoomServerEventTypeNIDs.Set(eventType, eventTypeNID)
+ c.RoomServerEventTypes.Set(eventTypeNID, eventType)
+}
+
+func (c Caches) GetEventTypeKey(eventType string) (types.EventTypeNID, bool) {
+ return c.RoomServerEventTypeNIDs.Get(eventType)
}
diff --git a/internal/caching/cache_roomservernids.go b/internal/caching/cache_roomservernids.go
index 88a5b28b..734a3a04 100644
--- a/internal/caching/cache_roomservernids.go
+++ b/internal/caching/cache_roomservernids.go
@@ -9,19 +9,28 @@ type RoomServerCaches interface {
RoomVersionCache
RoomServerEventsCache
EventStateKeyCache
+ EventTypeCache
}
// RoomServerNIDsCache contains the subset of functions needed for
// a roomserver NID cache.
type RoomServerNIDsCache interface {
GetRoomServerRoomID(roomNID types.RoomNID) (string, bool)
+ // StoreRoomServerRoomID stores roomNID -> roomID and roomID -> roomNID
StoreRoomServerRoomID(roomNID types.RoomNID, roomID string)
+ GetRoomServerRoomNID(roomID string) (types.RoomNID, bool)
}
func (c Caches) GetRoomServerRoomID(roomNID types.RoomNID) (string, bool) {
return c.RoomServerRoomIDs.Get(roomNID)
}
+// StoreRoomServerRoomID stores roomNID -> roomID and roomID -> roomNID
func (c Caches) StoreRoomServerRoomID(roomNID types.RoomNID, roomID string) {
+ c.RoomServerRoomNIDs.Set(roomID, roomNID)
c.RoomServerRoomIDs.Set(roomNID, roomID)
}
+
+func (c Caches) GetRoomServerRoomNID(roomID string) (types.RoomNID, bool) {
+ return c.RoomServerRoomNIDs.Get(roomID)
+}
diff --git a/internal/caching/caches.go b/internal/caching/caches.go
index 78c9ab7e..47992046 100644
--- a/internal/caching/caches.go
+++ b/internal/caching/caches.go
@@ -23,16 +23,19 @@ import (
// different implementations as long as they satisfy the Cache
// interface.
type Caches struct {
- RoomVersions Cache[string, gomatrixserverlib.RoomVersion] // room ID -> room version
- ServerKeys Cache[string, gomatrixserverlib.PublicKeyLookupResult] // server name -> server keys
- RoomServerRoomNIDs Cache[string, types.RoomNID] // room ID -> room NID
- RoomServerRoomIDs Cache[types.RoomNID, string] // room NID -> room ID
- RoomServerEvents Cache[int64, *gomatrixserverlib.Event] // event NID -> event
- RoomServerStateKeys Cache[types.EventStateKeyNID, string] // event NID -> event state key
- FederationPDUs Cache[int64, *gomatrixserverlib.HeaderedEvent] // queue NID -> PDU
- FederationEDUs Cache[int64, *gomatrixserverlib.EDU] // queue NID -> EDU
- SpaceSummaryRooms Cache[string, gomatrixserverlib.MSC2946SpacesResponse] // room ID -> space response
- LazyLoading Cache[lazyLoadingCacheKey, string] // composite key -> event ID
+ RoomVersions Cache[string, gomatrixserverlib.RoomVersion] // room ID -> room version
+ ServerKeys Cache[string, gomatrixserverlib.PublicKeyLookupResult] // server name -> server keys
+ RoomServerRoomNIDs Cache[string, types.RoomNID] // room ID -> room NID
+ RoomServerRoomIDs Cache[types.RoomNID, string] // room NID -> room ID
+ RoomServerEvents Cache[int64, *gomatrixserverlib.Event] // event NID -> event
+ RoomServerStateKeys Cache[types.EventStateKeyNID, string] // eventStateKey NID -> event state key
+ RoomServerStateKeyNIDs Cache[string, types.EventStateKeyNID] // event state key -> eventStateKey NID
+ RoomServerEventTypeNIDs Cache[string, types.EventTypeNID] // eventType -> eventType NID
+ RoomServerEventTypes Cache[types.EventTypeNID, string] // eventType NID -> eventType
+ FederationPDUs Cache[int64, *gomatrixserverlib.HeaderedEvent] // queue NID -> PDU
+ FederationEDUs Cache[int64, *gomatrixserverlib.EDU] // queue NID -> EDU
+ SpaceSummaryRooms Cache[string, gomatrixserverlib.MSC2946SpacesResponse] // room ID -> space response
+ LazyLoading Cache[lazyLoadingCacheKey, string] // composite key -> event ID
}
// Cache is the interface that an implementation must satisfy.
diff --git a/internal/caching/impl_ristretto.go b/internal/caching/impl_ristretto.go
index 49292d0d..fca93afd 100644
--- a/internal/caching/impl_ristretto.go
+++ b/internal/caching/impl_ristretto.go
@@ -40,6 +40,9 @@ const (
spaceSummaryRoomsCache
lazyLoadingCache
eventStateKeyCache
+ eventTypeCache
+ eventTypeNIDCache
+ eventStateKeyNIDCache
)
func NewRistrettoCache(maxCost config.DataUnit, maxAge time.Duration, enablePrometheus bool) *Caches {
@@ -105,6 +108,21 @@ func NewRistrettoCache(maxCost config.DataUnit, maxAge time.Duration, enableProm
Prefix: eventStateKeyCache,
MaxAge: maxAge,
},
+ RoomServerStateKeyNIDs: &RistrettoCachePartition[string, types.EventStateKeyNID]{ // eventStateKey -> eventStateKey NID
+ cache: cache,
+ Prefix: eventStateKeyNIDCache,
+ MaxAge: maxAge,
+ },
+ RoomServerEventTypeNIDs: &RistrettoCachePartition[string, types.EventTypeNID]{ // eventType -> eventType NID
+ cache: cache,
+ Prefix: eventTypeCache,
+ MaxAge: maxAge,
+ },
+ RoomServerEventTypes: &RistrettoCachePartition[types.EventTypeNID, string]{ // eventType NID -> eventType
+ cache: cache,
+ Prefix: eventTypeNIDCache,
+ MaxAge: maxAge,
+ },
FederationPDUs: &RistrettoCostedCachePartition[int64, *gomatrixserverlib.HeaderedEvent]{ // queue NID -> PDU
&RistrettoCachePartition[int64, *gomatrixserverlib.HeaderedEvent]{
cache: cache,