mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-21 22:03:10 -06:00
Adjust StoreEvent order to select->check->insert, rather than insert->check->select
This commit is contained in:
parent
6274bc5c63
commit
2d08280152
|
|
@ -398,34 +398,38 @@ func (d *Database) StoreEvent(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if eventNID, stateNID, err = d.EventsTable.InsertEvent(
|
if eventNID, stateNID, err = d.EventsTable.SelectEvent(ctx, txn, event.EventID()); err != nil {
|
||||||
ctx,
|
|
||||||
txn,
|
|
||||||
roomNID,
|
|
||||||
eventTypeNID,
|
|
||||||
eventStateKeyNID,
|
|
||||||
event.EventID(),
|
|
||||||
event.EventReference().EventSHA256,
|
|
||||||
authEventNIDs,
|
|
||||||
event.Depth(),
|
|
||||||
); err != nil {
|
|
||||||
if err == sql.ErrNoRows {
|
if err == sql.ErrNoRows {
|
||||||
// We've already inserted the event so select the numeric event ID
|
// The event doesn't already exist in the database so try to
|
||||||
eventNID, stateNID, err = d.EventsTable.SelectEvent(ctx, txn, event.EventID())
|
// insert an event entry for it.
|
||||||
}
|
if eventNID, stateNID, err = d.EventsTable.InsertEvent(
|
||||||
if err != nil {
|
ctx,
|
||||||
return err
|
txn,
|
||||||
|
roomNID,
|
||||||
|
eventTypeNID,
|
||||||
|
eventStateKeyNID,
|
||||||
|
event.EventID(),
|
||||||
|
event.EventReference().EventSHA256,
|
||||||
|
authEventNIDs,
|
||||||
|
event.Depth(),
|
||||||
|
); err != nil {
|
||||||
|
return fmt.Errorf("d.EventsTable.InsertEvent: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Then insert the event JSON itself.
|
||||||
|
if err = d.EventJSONTable.InsertEventJSON(ctx, txn, eventNID, event.JSON()); err != nil {
|
||||||
|
return fmt.Errorf("d.EventJSONTable.InsertEventJSON: %w", err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return fmt.Errorf("d.EventsTable.SelectEvent: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = d.EventJSONTable.InsertEventJSON(ctx, txn, eventNID, event.JSON()); err != nil {
|
|
||||||
return fmt.Errorf("d.EventJSONTable.InsertEventJSON: %w", err)
|
|
||||||
}
|
|
||||||
redactionEvent, redactedEventID, err = d.handleRedactions(ctx, txn, eventNID, event)
|
redactionEvent, redactedEventID, err = d.handleRedactions(ctx, txn, eventNID, event)
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, types.StateAtEvent{}, nil, "", err
|
return 0, types.StateAtEvent{}, nil, "", fmt.Errorf("sqlutil.WithTransaction: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return roomNID, types.StateAtEvent{
|
return roomNID, types.StateAtEvent{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue