From e4852eea090301e98f37e00aec75167d5ce7f37f Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Thu, 27 Jan 2022 15:24:32 +0000 Subject: [PATCH] Cleaner retry for backfill --- .../internal/perform/perform_backfill.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/roomserver/internal/perform/perform_backfill.go b/roomserver/internal/perform/perform_backfill.go index 21dd2fd9..a84a245a 100644 --- a/roomserver/internal/perform/perform_backfill.go +++ b/roomserver/internal/perform/perform_backfill.go @@ -79,24 +79,30 @@ func (r *Backfiller) PerformBackfill( // Scan the event tree for events to send back. resultNIDs, err := helpers.ScanEventTree(ctx, r.DB, info, front, visited, request.Limit, request.ServerName) if err != nil { - return r.backfillViaFederation(ctx, request, response) + return err } // Retrieve events from the list that was filled previously. var loadedEvents []*gomatrixserverlib.Event + var retried bool +retryLoadEvents: loadedEvents, err = helpers.LoadEvents(ctx, r.DB, resultNIDs) 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 { response.Events = append(response.Events, event.Headered(info.RoomVersion)) } - if err != nil { - return r.backfillViaFederation(ctx, request, response) - } - return nil + return err } func (r *Backfiller) backfillViaFederation(ctx context.Context, req *api.PerformBackfillRequest, res *api.PerformBackfillResponse) error {