diff options
author | Neil Alexander <neilalexander@users.noreply.github.com> | 2022-07-19 12:15:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-19 12:15:48 +0100 |
commit | 5c01306bb5add6f53907950982fc468c00ae266d (patch) | |
tree | 61988b2fdfc31823c40510c27ea21045c844b11e /roomserver | |
parent | 583b8ea273be82ebdf2a9f81fd51a150d910b349 (diff) |
Add event state key cache (#2576)
Diffstat (limited to 'roomserver')
-rw-r--r-- | roomserver/storage/shared/storage.go | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/roomserver/storage/shared/storage.go b/roomserver/storage/shared/storage.go index d8d5f67c..2f9932ff 100644 --- a/roomserver/storage/shared/storage.go +++ b/roomserver/storage/shared/storage.go @@ -72,7 +72,24 @@ func (d *Database) eventTypeNIDs( func (d *Database) EventStateKeys( ctx context.Context, eventStateKeyNIDs []types.EventStateKeyNID, ) (map[types.EventStateKeyNID]string, error) { - return d.EventStateKeysTable.BulkSelectEventStateKey(ctx, nil, eventStateKeyNIDs) + result := make(map[types.EventStateKeyNID]string, len(eventStateKeyNIDs)) + fetch := make([]types.EventStateKeyNID, 0, len(eventStateKeyNIDs)) + for _, nid := range eventStateKeyNIDs { + if key, ok := d.Cache.GetEventStateKey(nid); ok { + result[nid] = key + } else { + 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) + } + return result, nil } func (d *Database) EventStateKeyNIDs( |