aboutsummaryrefslogtreecommitdiff
path: root/roomserver
diff options
context:
space:
mode:
authorTill Faelligen <2353100+S7evinK@users.noreply.github.com>2023-02-24 11:45:01 +0100
committerTill Faelligen <2353100+S7evinK@users.noreply.github.com>2023-02-24 11:45:01 +0100
commit3d31b131fc6b66e25b09c41204ea71ed4a47dcc6 (patch)
treebdb03a03036817cec08e3d034e70e898e4e65ab0 /roomserver
parentad07b169b8a58b5a843b7b19ff0a989399d0aea0 (diff)
Cache all the things
Diffstat (limited to 'roomserver')
-rw-r--r--roomserver/storage/shared/storage.go40
1 files changed, 28 insertions, 12 deletions
diff --git a/roomserver/storage/shared/storage.go b/roomserver/storage/shared/storage.go
index 7eb4567f..aac5bc36 100644
--- a/roomserver/storage/shared/storage.go
+++ b/roomserver/storage/shared/storage.go
@@ -68,12 +68,25 @@ func (d *Database) eventTypeNIDs(
ctx context.Context, txn *sql.Tx, eventTypes []string,
) (map[string]types.EventTypeNID, error) {
result := make(map[string]types.EventTypeNID)
- nids, err := d.EventTypesTable.BulkSelectEventTypeNID(ctx, txn, eventTypes)
- if err != nil {
- return nil, err
+ // first try the cache
+ fetchEventTypes := make([]string, 0, len(eventTypes))
+ for _, eventType := range eventTypes {
+ eventTypeNID, ok := d.Cache.GetEventTypeKey(eventType)
+ if ok {
+ result[eventType] = eventTypeNID
+ continue
+ }
+ fetchEventTypes = append(fetchEventTypes, eventType)
}
- for eventType, nid := range nids {
- result[eventType] = nid
+ if len(fetchEventTypes) > 0 {
+ nids, err := d.EventTypesTable.BulkSelectEventTypeNID(ctx, txn, fetchEventTypes)
+ if err != nil {
+ return nil, err
+ }
+ for eventType, nid := range nids {
+ result[eventType] = nid
+ d.Cache.StoreEventTypeKey(nid, eventType)
+ }
}
return result, nil
}
@@ -90,13 +103,15 @@ func (d *Database) EventStateKeys(
fetch = append(fetch, nid)
}
}
- fromDB, err := d.EventStateKeysTable.BulkSelectEventStateKey(ctx, nil, fetch)
- if err != nil {
- return nil, err
- }
- for nid, key := range fromDB {
- result[nid] = key
- d.Cache.StoreEventStateKey(nid, key)
+ if len(fetch) > 0 {
+ fromDB, err := d.EventStateKeysTable.BulkSelectEventStateKey(ctx, nil, fetch)
+ if err != nil {
+ return nil, err
+ }
+ for nid, key := range fromDB {
+ result[nid] = key
+ d.Cache.StoreEventStateKey(nid, key)
+ }
}
return result, nil
}
@@ -130,6 +145,7 @@ func (d *Database) eventStateKeyNIDs(
}
for eventStateKey, nid := range nids {
result[eventStateKey] = nid
+ d.Cache.StoreEventStateKey(nid, eventStateKey)
}
}