One more time

This commit is contained in:
Neil Alexander 2022-06-15 10:45:44 +01:00
parent caccf7c663
commit 17091ee8e6
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944

View file

@ -435,32 +435,25 @@ func (d *Database) Events(
func (d *Database) events( func (d *Database) events(
ctx context.Context, txn *sql.Tx, inputEventNIDs []types.EventNID, ctx context.Context, txn *sql.Tx, inputEventNIDs []types.EventNID,
) ([]types.Event, error) { ) ([]types.Event, error) {
results := make([]types.Event, len(inputEventNIDs)) events := make(map[types.EventNID]*gomatrixserverlib.Event, len(inputEventNIDs))
positions := make(map[types.EventNID]int, len(inputEventNIDs)) eventNIDs := make([]types.EventNID, 0, len(inputEventNIDs))
inCache := make([]bool, len(inputEventNIDs)) for _, nid := range inputEventNIDs {
inDatabase := make([]types.EventNID, 0, len(results))
for i, nid := range inputEventNIDs {
if event, ok := d.Cache.GetRoomServerEvent(nid); ok && event != nil { if event, ok := d.Cache.GetRoomServerEvent(nid); ok && event != nil {
results[i] = types.Event{ events[nid] = event
EventNID: nid,
Event: event,
}
inCache[i] = true
} else { } else {
inDatabase = append(inDatabase, nid) eventNIDs = append(eventNIDs, nid)
positions[nid] = i
} }
} }
eventJSONs, err := d.EventJSONTable.BulkSelectEventJSON(ctx, txn, inDatabase) eventJSONs, err := d.EventJSONTable.BulkSelectEventJSON(ctx, txn, eventNIDs)
if err != nil { if err != nil {
return nil, err return nil, err
} }
eventIDs, _ := d.EventsTable.BulkSelectEventID(ctx, txn, inDatabase) eventIDs, _ := d.EventsTable.BulkSelectEventID(ctx, txn, eventNIDs)
if err != nil { if err != nil {
eventIDs = map[types.EventNID]string{} eventIDs = map[types.EventNID]string{}
} }
var roomNIDs map[types.EventNID]types.RoomNID var roomNIDs map[types.EventNID]types.RoomNID
roomNIDs, err = d.EventsTable.SelectRoomNIDsForEventNIDs(ctx, txn, inDatabase) roomNIDs, err = d.EventsTable.SelectRoomNIDsForEventNIDs(ctx, txn, eventNIDs)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -487,20 +480,29 @@ func (d *Database) events(
roomVersions[n] = v roomVersions[n] = v
} }
for _, eventJSON := range eventJSONs { for _, eventJSON := range eventJSONs {
eventNID := eventJSON.EventNID roomNID := roomNIDs[eventJSON.EventNID]
result := &results[positions[eventNID]] roomVersion := roomVersions[roomNID]
result.EventNID = eventNID events[eventJSON.EventNID], err = gomatrixserverlib.NewEventFromTrustedJSONWithEventID(
roomNID := roomNIDs[eventNID] eventIDs[eventJSON.EventNID], eventJSON.EventJSON, false, roomVersion,
result.Event, err = gomatrixserverlib.NewEventFromTrustedJSONWithEventID(
eventIDs[eventNID], eventJSON.EventJSON, false, roomVersions[roomNID],
) )
if err != nil { if err != nil {
return nil, err return nil, err
} }
if result.Event != nil { if event := events[eventJSON.EventNID]; event != nil {
d.Cache.StoreRoomServerEvent(eventNID, result.Event) d.Cache.StoreRoomServerEvent(eventJSON.EventNID, event)
} }
} }
results := make([]types.Event, 0, len(inputEventNIDs))
for _, nid := range inputEventNIDs {
event, ok := events[nid]
if !ok {
panic("missing event")
}
results = append(results, types.Event{
EventNID: nid,
Event: event,
})
}
if !redactionsArePermanent { if !redactionsArePermanent {
d.applyRedactions(results) d.applyRedactions(results)
} }