mirror of
https://github.com/1f349/dendrite.git
synced 2024-11-22 11:41:38 +00:00
Use a writer to assign state key NIDs (#2877)
This commit is contained in:
parent
529df30b56
commit
1e79b0557e
@ -103,6 +103,7 @@ func (d *Database) eventStateKeyNIDs(
|
|||||||
ctx context.Context, txn *sql.Tx, eventStateKeys []string,
|
ctx context.Context, txn *sql.Tx, eventStateKeys []string,
|
||||||
) (map[string]types.EventStateKeyNID, error) {
|
) (map[string]types.EventStateKeyNID, error) {
|
||||||
result := make(map[string]types.EventStateKeyNID)
|
result := make(map[string]types.EventStateKeyNID)
|
||||||
|
eventStateKeys = util.UniqueStrings(eventStateKeys)
|
||||||
nids, err := d.EventStateKeysTable.BulkSelectEventStateKeyNID(ctx, txn, eventStateKeys)
|
nids, err := d.EventStateKeysTable.BulkSelectEventStateKeyNID(ctx, txn, eventStateKeys)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -112,16 +113,24 @@ func (d *Database) eventStateKeyNIDs(
|
|||||||
}
|
}
|
||||||
// We received some nids, but are still missing some, work out which and create them
|
// We received some nids, but are still missing some, work out which and create them
|
||||||
if len(eventStateKeys) > len(result) {
|
if len(eventStateKeys) > len(result) {
|
||||||
|
var nid types.EventStateKeyNID
|
||||||
|
err = d.Writer.Do(d.DB, txn, func(txn *sql.Tx) error {
|
||||||
for _, eventStateKey := range eventStateKeys {
|
for _, eventStateKey := range eventStateKeys {
|
||||||
if _, ok := result[eventStateKey]; ok {
|
if _, ok := result[eventStateKey]; ok {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
nid, err := d.assignStateKeyNID(ctx, txn, eventStateKey)
|
|
||||||
|
nid, err = d.assignStateKeyNID(ctx, txn, eventStateKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return result, err
|
return err
|
||||||
}
|
}
|
||||||
result[eventStateKey] = nid
|
result[eventStateKey] = nid
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user