diff options
author | Till <2353100+S7evinK@users.noreply.github.com> | 2022-11-14 13:06:27 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-14 12:06:27 +0000 |
commit | 1e79b0557e177986262f365f6601fcdf56480a07 (patch) | |
tree | 60e80f75da1e2365146b82992952732dfdd00024 /roomserver | |
parent | 529df30b5649e67a2f98114e6640d259cba53566 (diff) |
Use a writer to assign state key NIDs (#2877)
Diffstat (limited to 'roomserver')
-rw-r--r-- | roomserver/storage/shared/storage.go | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/roomserver/storage/shared/storage.go b/roomserver/storage/shared/storage.go index 08e912a0..9bf438a2 100644 --- a/roomserver/storage/shared/storage.go +++ b/roomserver/storage/shared/storage.go @@ -103,6 +103,7 @@ func (d *Database) eventStateKeyNIDs( ctx context.Context, txn *sql.Tx, eventStateKeys []string, ) (map[string]types.EventStateKeyNID, error) { result := make(map[string]types.EventStateKeyNID) + eventStateKeys = util.UniqueStrings(eventStateKeys) nids, err := d.EventStateKeysTable.BulkSelectEventStateKeyNID(ctx, txn, eventStateKeys) if err != nil { return nil, err @@ -112,15 +113,23 @@ func (d *Database) eventStateKeyNIDs( } // We received some nids, but are still missing some, work out which and create them if len(eventStateKeys) > len(result) { - for _, eventStateKey := range eventStateKeys { - if _, ok := result[eventStateKey]; ok { - continue - } - nid, err := d.assignStateKeyNID(ctx, txn, eventStateKey) - if err != nil { - return result, err + var nid types.EventStateKeyNID + err = d.Writer.Do(d.DB, txn, func(txn *sql.Tx) error { + for _, eventStateKey := range eventStateKeys { + if _, ok := result[eventStateKey]; ok { + continue + } + + nid, err = d.assignStateKeyNID(ctx, txn, eventStateKey) + if err != nil { + return err + } + result[eventStateKey] = nid } - result[eventStateKey] = nid + return nil + }) + if err != nil { + return nil, err } } return result, nil |