Try to fix backfilling

This commit is contained in:
Till Faelligen 2022-07-01 09:22:21 +02:00
parent 561c159ad7
commit 6052ebbe66

View file

@ -18,6 +18,7 @@ import (
"context" "context"
"fmt" "fmt"
"github.com/getsentry/sentry-go"
federationAPI "github.com/matrix-org/dendrite/federationapi/api" federationAPI "github.com/matrix-org/dendrite/federationapi/api"
"github.com/matrix-org/dendrite/internal/eventutil" "github.com/matrix-org/dendrite/internal/eventutil"
"github.com/matrix-org/dendrite/roomserver/api" "github.com/matrix-org/dendrite/roomserver/api"
@ -206,8 +207,17 @@ func (r *Backfiller) fetchAndStoreMissingEvents(ctx context.Context, roomVer gom
} }
logger.Infof("returned %d PDUs which made events %+v", len(res.PDUs), result) logger.Infof("returned %d PDUs which made events %+v", len(res.PDUs), result)
for _, res := range result { for _, res := range result {
if res.Error != nil { switch err := res.Error.(type) {
logger.WithError(res.Error).Warn("event failed PDU checks") case nil:
case gomatrixserverlib.SignatureErr:
// The signature of the event might not be valid anymore, for example if
// the key ID was reused with a different signature.
logger.WithError(err).Errorf("event failed PDU checks, storing anyway")
case gomatrixserverlib.AuthChainErr, gomatrixserverlib.AuthRulesErr:
logger.WithError(err).Warn("event failed PDU checks")
continue
default:
logger.WithError(err).Warn("event failed PDU checks")
continue continue
} }
missingMap[id] = res.Event missingMap[id] = res.Event
@ -306,6 +316,7 @@ FederationHit:
b.eventIDToBeforeStateIDs[targetEvent.EventID()] = res b.eventIDToBeforeStateIDs[targetEvent.EventID()] = res
return res, nil return res, nil
} }
sentry.CaptureException(lastErr) // temporary to see if we might need to raise the server limit
return nil, lastErr return nil, lastErr
} }
@ -366,19 +377,25 @@ func (b *backfillRequester) StateBeforeEvent(ctx context.Context, roomVer gomatr
} }
} }
c := gomatrixserverlib.FederatedStateProvider{ var lastErr error
FedClient: b.fsAPI, for _, srv := range b.servers {
RememberAuthEvents: false, c := gomatrixserverlib.FederatedStateProvider{
Server: b.servers[0], FedClient: b.fsAPI,
RememberAuthEvents: false,
Server: srv,
}
result, err := c.StateBeforeEvent(ctx, roomVer, event, eventIDs)
if err != nil {
lastErr = err
continue
}
for eventID, ev := range result {
b.eventIDMap[eventID] = ev
}
return result, nil
} }
result, err := c.StateBeforeEvent(ctx, roomVer, event, eventIDs) sentry.CaptureException(lastErr) // temporary to see if we might need to raise the server limit
if err != nil { return nil, lastErr
return nil, err
}
for eventID, ev := range result {
b.eventIDMap[eventID] = ev
}
return result, nil
} }
// ServersAtEvent is called when trying to determine which server to request from. // ServersAtEvent is called when trying to determine which server to request from.