mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-01 03:03:10 -06:00
Use room updater to get latest events in a race-free way
This commit is contained in:
parent
ab20cb0134
commit
ef01fca01d
|
|
@ -405,20 +405,11 @@ retryAllowedState:
|
||||||
// without `e`. If `isGapFilled=false` then `newEvents` contains the response to /get_missing_events
|
// without `e`. If `isGapFilled=false` then `newEvents` contains the response to /get_missing_events
|
||||||
func (t *missingStateReq) getMissingEvents(ctx context.Context, e *gomatrixserverlib.Event, roomVersion gomatrixserverlib.RoomVersion) (newEvents []*gomatrixserverlib.Event, isGapFilled bool, err error) {
|
func (t *missingStateReq) getMissingEvents(ctx context.Context, e *gomatrixserverlib.Event, roomVersion gomatrixserverlib.RoomVersion) (newEvents []*gomatrixserverlib.Event, isGapFilled bool, err error) {
|
||||||
logger := util.GetLogger(ctx).WithField("event_id", e.EventID()).WithField("room_id", e.RoomID())
|
logger := util.GetLogger(ctx).WithField("event_id", e.EventID()).WithField("room_id", e.RoomID())
|
||||||
needed := gomatrixserverlib.StateNeededForAuth([]*gomatrixserverlib.Event{e})
|
|
||||||
// query latest events (our trusted forward extremities)
|
latest := t.db.LatestEvents()
|
||||||
req := api.QueryLatestEventsAndStateRequest{
|
latestEvents := make([]string, len(latest))
|
||||||
RoomID: e.RoomID(),
|
for i, ev := range latest {
|
||||||
StateToFetch: needed.Tuples(),
|
latestEvents[i] = ev.EventID
|
||||||
}
|
|
||||||
var res api.QueryLatestEventsAndStateResponse
|
|
||||||
if err = t.queryer.QueryLatestEventsAndState(ctx, &req, &res); err != nil {
|
|
||||||
logger.WithError(err).Warn("Failed to query latest events")
|
|
||||||
return nil, false, err
|
|
||||||
}
|
|
||||||
latestEvents := make([]string, len(res.LatestEvents))
|
|
||||||
for i, ev := range res.LatestEvents {
|
|
||||||
latestEvents[i] = res.LatestEvents[i].EventID
|
|
||||||
t.hadEvent(ev.EventID)
|
t.hadEvent(ev.EventID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue