aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2023-06-20 16:52:29 +0200
committerGitHub <noreply@github.com>2023-06-20 16:52:29 +0200
commita734b112c6577a23b87c6b54c50fb2e9a629cf2b (patch)
treea9d71e1aea11d2c728bb454321edb24f4d2313a7
parentd13466c1eed040a97048c8b30b64df9f4bc84727 (diff)
Fix backfilling (#3117)
This should fix two issues with backfilling: 1. right after creating and joining a room over federation, we are doing a `/backfill` request, which would return redacted events, because the `authEvents` are empty. Even though the spec states that, in the absence of a history visibility event, it should be handled as `shared`. 2. `gomatrixserverlib: unsupported room version ''` - because, well, we were never setting the `roomInfo` field..
-rw-r--r--roomserver/auth/auth.go4
-rw-r--r--roomserver/internal/perform/perform_backfill.go12
2 files changed, 5 insertions, 11 deletions
diff --git a/roomserver/auth/auth.go b/roomserver/auth/auth.go
index d6c10cf9..df95851e 100644
--- a/roomserver/auth/auth.go
+++ b/roomserver/auth/auth.go
@@ -30,10 +30,6 @@ func IsServerAllowed(
serverCurrentlyInRoom bool,
authEvents []gomatrixserverlib.PDU,
) bool {
- // In practice should not happen, but avoids unneeded CPU cycles
- if serverName == "" || len(authEvents) == 0 {
- return false
- }
historyVisibility := HistoryVisibilityForRoom(authEvents)
// 1. If the history_visibility was set to world_readable, allow.
diff --git a/roomserver/internal/perform/perform_backfill.go b/roomserver/internal/perform/perform_backfill.go
index 533ad25b..3fdc8e4d 100644
--- a/roomserver/internal/perform/perform_backfill.go
+++ b/roomserver/internal/perform/perform_backfill.go
@@ -114,7 +114,7 @@ func (r *Backfiller) backfillViaFederation(ctx context.Context, req *api.Perform
if info == nil || info.IsStub() {
return fmt.Errorf("backfillViaFederation: missing room info for room %s", req.RoomID)
}
- requester := newBackfillRequester(r.DB, r.FSAPI, r.Querier, req.VirtualHost, r.IsLocalServerName, req.BackwardsExtremities, r.PreferServers)
+ requester := newBackfillRequester(r.DB, r.FSAPI, r.Querier, req.VirtualHost, r.IsLocalServerName, req.BackwardsExtremities, r.PreferServers, info.RoomVersion)
// Request 100 items regardless of what the query asks for.
// We don't want to go much higher than this.
// We can't honour exactly the limit as some sytests rely on requesting more for tests to pass
@@ -265,7 +265,7 @@ type backfillRequester struct {
eventIDToBeforeStateIDs map[string][]string
eventIDMap map[string]gomatrixserverlib.PDU
historyVisiblity gomatrixserverlib.HistoryVisibility
- roomInfo types.RoomInfo
+ roomVersion gomatrixserverlib.RoomVersion
}
func newBackfillRequester(
@@ -274,6 +274,7 @@ func newBackfillRequester(
virtualHost spec.ServerName,
isLocalServerName func(spec.ServerName) bool,
bwExtrems map[string][]string, preferServers []spec.ServerName,
+ roomVersion gomatrixserverlib.RoomVersion,
) *backfillRequester {
preferServer := make(map[spec.ServerName]bool)
for _, p := range preferServers {
@@ -290,6 +291,7 @@ func newBackfillRequester(
bwExtrems: bwExtrems,
preferServer: preferServer,
historyVisiblity: gomatrixserverlib.HistoryVisibilityShared,
+ roomVersion: roomVersion,
}
}
@@ -537,15 +539,11 @@ func (b *backfillRequester) ProvideEvents(roomVer gomatrixserverlib.RoomVersion,
}
eventNIDs := make([]types.EventNID, len(nidMap))
i := 0
- roomNID := b.roomInfo.RoomNID
for _, nid := range nidMap {
eventNIDs[i] = nid.EventNID
i++
- if roomNID == 0 {
- roomNID = nid.RoomNID
- }
}
- eventsWithNids, err := b.db.Events(ctx, b.roomInfo.RoomVersion, eventNIDs)
+ eventsWithNids, err := b.db.Events(ctx, b.roomVersion, eventNIDs)
if err != nil {
logrus.WithError(err).WithField("event_nids", eventNIDs).Error("Failed to load events")
return nil, err