Merge branch 'neilalexander/loadmembershipatevent' into neilalexander/jassuko

This commit is contained in:
Neil Alexander 2022-09-13 11:16:00 +01:00
commit 1728a95239
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
3 changed files with 13 additions and 6 deletions

View file

@ -237,7 +237,11 @@ func (r *Queryer) QueryMembershipAtEvent(
} }
for _, eventID := range request.EventIDs { for _, eventID := range request.EventIDs {
stateEntry := stateEntries[eventID] stateEntry, ok := stateEntries[eventID]
if !ok {
response.Memberships[eventID] = []*gomatrixserverlib.HeaderedEvent{}
continue
}
memberships, err := helpers.GetMembershipsAtState(ctx, r.DB, stateEntry, false) memberships, err := helpers.GetMembershipsAtState(ctx, r.DB, stateEntry, false)
if err != nil { if err != nil {
return fmt.Errorf("unable to get memberships at state: %w", err) return fmt.Errorf("unable to get memberships at state: %w", err)

View file

@ -18,6 +18,7 @@ package state
import ( import (
"context" "context"
"database/sql"
"fmt" "fmt"
"sort" "sort"
"sync" "sync"
@ -134,11 +135,14 @@ func (v *StateResolution) LoadMembershipAtEvent(
for i := range eventIDs { for i := range eventIDs {
eventID := eventIDs[i] eventID := eventIDs[i]
snapshotNID, err := v.db.SnapshotNIDFromEventID(ctx, eventID) snapshotNID, err := v.db.SnapshotNIDFromEventID(ctx, eventID)
if err != nil { if err != nil && err != sql.ErrNoRows {
return nil, fmt.Errorf("LoadStateAtEvent.SnapshotNIDFromEventID failed for event %s : %w", eventID, err) return nil, fmt.Errorf("LoadStateAtEvent.SnapshotNIDFromEventID failed for event %s : %w", eventID, err)
} }
if snapshotNID == 0 { if snapshotNID == 0 {
return nil, fmt.Errorf("LoadStateAtEvent.SnapshotNIDFromEventID(%s) returned 0 NID, was this event stored?", eventID) // If we don't know a state snapshot for this event then we can't calculate
// memberships at the time of the event, so skip over it. This means that
// it isn't guaranteed that the response map will contain every single event.
continue
} }
snapshotNIDMap[snapshotNID] = append(snapshotNIDMap[snapshotNID], eventID) snapshotNIDMap[snapshotNID] = append(snapshotNIDMap[snapshotNID], eventID)
} }

View file

@ -388,7 +388,7 @@ func applyHistoryVisibilityFilter(
if err != nil { if err != nil {
// Not a fatal error, we can continue without the stateEvents, // Not a fatal error, we can continue without the stateEvents,
// they are only needed if there are state events in the timeline. // they are only needed if there are state events in the timeline.
logrus.WithError(err).Warnf("failed to get current room state") logrus.WithError(err).Warnf("Failed to get current room state for history visibility")
} }
alwaysIncludeIDs := make(map[string]struct{}, len(stateEvents)) alwaysIncludeIDs := make(map[string]struct{}, len(stateEvents))
for _, ev := range stateEvents { for _, ev := range stateEvents {
@ -397,7 +397,6 @@ func applyHistoryVisibilityFilter(
startTime := time.Now() startTime := time.Now()
events, err := internal.ApplyHistoryVisibilityFilter(ctx, db, rsAPI, recentEvents, alwaysIncludeIDs, userID, "sync") events, err := internal.ApplyHistoryVisibilityFilter(ctx, db, rsAPI, recentEvents, alwaysIncludeIDs, userID, "sync")
if err != nil { if err != nil {
return nil, err return nil, err
} }
logrus.WithFields(logrus.Fields{ logrus.WithFields(logrus.Fields{
@ -405,7 +404,7 @@ func applyHistoryVisibilityFilter(
"room_id": roomID, "room_id": roomID,
"before": len(recentEvents), "before": len(recentEvents),
"after": len(events), "after": len(events),
}).Debug("applied history visibility (sync)") }).Trace("Applied history visibility (sync)")
return events, nil return events, nil
} }