Use updater txn

This commit is contained in:
Neil Alexander 2020-10-07 11:28:22 +01:00
parent cc4f5fb531
commit fafee7060f
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
4 changed files with 14 additions and 17 deletions

View file

@ -279,7 +279,7 @@ func (u *latestEventsUpdater) calculateLatest(
// now have entries in the previous events table. If they do then they
// are no longer forward extremities.
for _, l := range oldLatest {
referenced, err := u.api.DB.EventIsReferenced(u.ctx, l.EventReference)
referenced, err := u.updater.IsReferenced(l.EventReference)
if err != nil {
logrus.WithError(err).Errorf("Failed to retrieve event reference for %q", l.EventID)
}
@ -300,7 +300,7 @@ func (u *latestEventsUpdater) calculateLatest(
// If the new event isn't already in the set then we'll check if it
// really should be.
referenced, err := u.api.DB.EventIsReferenced(u.ctx, newEvent.EventReference)
referenced, err := u.updater.IsReferenced(newEvent.EventReference)
if err != nil {
logrus.WithError(err).Errorf("Failed to retrieve event reference for %q", newEvent.EventReference.EventID)
}

View file

@ -87,11 +87,6 @@ type Database interface {
// Lookup the event IDs for a batch of event numeric IDs.
// Returns an error if the retrieval went wrong.
EventIDs(ctx context.Context, eventNIDs []types.EventNID) (map[types.EventNID]string, error)
// EventIsReferenced returns true if the event is referenced by another event and false otherwise.
// This is used when working out if an event is a new forward extremity or not.
EventIsReferenced(
ctx context.Context, eventRef gomatrixserverlib.EventReference,
) (bool, error)
// Look up the latest events in a room in preparation for an update.
// The RoomRecentEventsUpdater must have Commit or Rollback called on it if this doesn't return an error.
// Returns the latest events in the room and the last eventID sent to the log along with an updater.

View file

@ -75,6 +75,18 @@ func (u *LatestEventsUpdater) StorePreviousEvents(eventNID types.EventNID, previ
})
}
// IsReferenced implements types.RoomRecentEventsUpdater
func (u *LatestEventsUpdater) IsReferenced(eventReference gomatrixserverlib.EventReference) (bool, error) {
err := u.d.PrevEventsTable.SelectPreviousEventExists(u.ctx, u.txn, eventReference.EventID, eventReference.EventSHA256)
if err == nil {
return true, nil
}
if err == sql.ErrNoRows {
return false, nil
}
return false, fmt.Errorf("u.d.PrevEventsTable.SelectPreviousEventExists: %w", err)
}
// SetLatestEvents implements types.RoomRecentEventsUpdater
func (u *LatestEventsUpdater) SetLatestEvents(
roomNID types.RoomNID, latest []types.StateAtEventAndReference, lastEventNIDSent types.EventNID,

View file

@ -186,16 +186,6 @@ func (d *Database) EventIDs(
return d.EventsTable.BulkSelectEventID(ctx, eventNIDs)
}
func (d *Database) EventIsReferenced(
ctx context.Context, eventRef gomatrixserverlib.EventReference,
) (bool, error) {
err := d.PrevEventsTable.SelectPreviousEventExists(ctx, nil, eventRef.EventID, eventRef.EventSHA256)
if err != nil && err != sql.ErrNoRows {
return false, err
}
return err != sql.ErrNoRows, nil
}
func (d *Database) EventsFromIDs(ctx context.Context, eventIDs []string) ([]types.Event, error) {
nidMap, err := d.EventNIDs(ctx, eventIDs)
if err != nil {