Cleaner retry for backfill

This commit is contained in:
Neil Alexander 2022-01-27 15:24:32 +00:00
parent ae7919c2cf
commit e4852eea09
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944

View file

@ -79,24 +79,30 @@ func (r *Backfiller) PerformBackfill(
// Scan the event tree for events to send back. // Scan the event tree for events to send back.
resultNIDs, err := helpers.ScanEventTree(ctx, r.DB, info, front, visited, request.Limit, request.ServerName) resultNIDs, err := helpers.ScanEventTree(ctx, r.DB, info, front, visited, request.Limit, request.ServerName)
if err != nil { if err != nil {
return r.backfillViaFederation(ctx, request, response) return err
} }
// Retrieve events from the list that was filled previously. // Retrieve events from the list that was filled previously.
var loadedEvents []*gomatrixserverlib.Event var loadedEvents []*gomatrixserverlib.Event
var retried bool
retryLoadEvents:
loadedEvents, err = helpers.LoadEvents(ctx, r.DB, resultNIDs) loadedEvents, err = helpers.LoadEvents(ctx, r.DB, resultNIDs)
if err != nil { if err != nil {
return r.backfillViaFederation(ctx, request, response) if _, ok := err.(types.MissingEventError); !retried && ok {
err = r.backfillViaFederation(ctx, request, response)
if err == nil {
retried = true
goto retryLoadEvents
}
}
return err
} }
for _, event := range loadedEvents { for _, event := range loadedEvents {
response.Events = append(response.Events, event.Headered(info.RoomVersion)) response.Events = append(response.Events, event.Headered(info.RoomVersion))
} }
if err != nil { return err
return r.backfillViaFederation(ctx, request, response)
}
return nil
} }
func (r *Backfiller) backfillViaFederation(ctx context.Context, req *api.PerformBackfillRequest, res *api.PerformBackfillResponse) error { func (r *Backfiller) backfillViaFederation(ctx context.Context, req *api.PerformBackfillRequest, res *api.PerformBackfillResponse) error {