aboutsummaryrefslogtreecommitdiff
path: root/roomserver
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2022-11-14 13:06:27 +0100
committerGitHub <noreply@github.com>2022-11-14 12:06:27 +0000
commit1e79b0557e177986262f365f6601fcdf56480a07 (patch)
tree60e80f75da1e2365146b82992952732dfdd00024 /roomserver
parent529df30b5649e67a2f98114e6640d259cba53566 (diff)
Use a writer to assign state key NIDs (#2877)
Diffstat (limited to 'roomserver')
-rw-r--r--roomserver/storage/shared/storage.go25
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