aboutsummaryrefslogtreecommitdiff
path: root/roomserver
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2022-07-01 11:49:26 +0200
committerGitHub <noreply@github.com>2022-07-01 11:49:26 +0200
commit89cd0e8fc13b040470aebe2eb4d36a9235b1473d (patch)
tree3682144f9697e7b139b3dab1f2a1c1c7bd5114b6 /roomserver
parent086f182e24e0651d1320199e90215f280350ef44 (diff)
Try to fix backfilling (#2548)
* Try to fix backfilling * Return start/end to not confuse clients * Update GMSL * Update GMSL
Diffstat (limited to 'roomserver')
-rw-r--r--roomserver/internal/perform/perform_backfill.go45
1 files changed, 31 insertions, 14 deletions
diff --git a/roomserver/internal/perform/perform_backfill.go b/roomserver/internal/perform/perform_backfill.go
index 1bc4c75c..9eddca73 100644
--- a/roomserver/internal/perform/perform_backfill.go
+++ b/roomserver/internal/perform/perform_backfill.go
@@ -18,6 +18,7 @@ import (
"context"
"fmt"
+ "github.com/getsentry/sentry-go"
federationAPI "github.com/matrix-org/dendrite/federationapi/api"
"github.com/matrix-org/dendrite/internal/eventutil"
"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)
for _, res := range result {
- if res.Error != nil {
- logger.WithError(res.Error).Warn("event failed PDU checks")
+ switch err := res.Error.(type) {
+ 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
}
missingMap[id] = res.Event
@@ -306,6 +316,7 @@ FederationHit:
b.eventIDToBeforeStateIDs[targetEvent.EventID()] = res
return res, nil
}
+ sentry.CaptureException(lastErr) // temporary to see if we might need to raise the server limit
return nil, lastErr
}
@@ -366,19 +377,25 @@ func (b *backfillRequester) StateBeforeEvent(ctx context.Context, roomVer gomatr
}
}
- c := gomatrixserverlib.FederatedStateProvider{
- FedClient: b.fsAPI,
- RememberAuthEvents: false,
- Server: b.servers[0],
- }
- result, err := c.StateBeforeEvent(ctx, roomVer, event, eventIDs)
- if err != nil {
- return nil, err
- }
- for eventID, ev := range result {
- b.eventIDMap[eventID] = ev
+ var lastErr error
+ for _, srv := range b.servers {
+ c := gomatrixserverlib.FederatedStateProvider{
+ 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
}
- return result, nil
+ sentry.CaptureException(lastErr) // temporary to see if we might need to raise the server limit
+ return nil, lastErr
}
// ServersAtEvent is called when trying to determine which server to request from.