Don't accumulate state IDs to overwrite

This commit is contained in:
Neil Alexander 2020-09-01 14:06:52 +01:00
parent 23643258af
commit fc2c431e29
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
2 changed files with 11 additions and 19 deletions

View file

@ -48,37 +48,29 @@ func SendEventWithState(
ctx context.Context, rsAPI RoomserverInternalAPI, state *gomatrixserverlib.RespState, ctx context.Context, rsAPI RoomserverInternalAPI, state *gomatrixserverlib.RespState,
event gomatrixserverlib.HeaderedEvent, haveEventIDs map[string]bool, stateKind Kind, event gomatrixserverlib.HeaderedEvent, haveEventIDs map[string]bool, stateKind Kind,
) error { ) error {
outliers, err := state.Events() events, err := state.Events()
if err != nil { if err != nil {
return err return err
} }
var ires []InputRoomEvent var ires []InputRoomEvent
var stateEventIDs []string
for _, outlier := range outliers { for _, ev := range events {
if haveEventIDs[outlier.EventID()] { if haveEventIDs[ev.EventID()] {
continue continue
} }
in := InputRoomEvent{ in := InputRoomEvent{
Kind: stateKind, Kind: stateKind,
Event: outlier.Headered(event.RoomVersion), Event: ev.Headered(event.RoomVersion),
AuthEventIDs: outlier.AuthEventIDs(), AuthEventIDs: ev.AuthEventIDs(),
}
if stateKind == KindNew {
in.HasState = true
in.StateEventIDs = stateEventIDs
} }
ires = append(ires, in) ires = append(ires, in)
stateEventIDs = append(stateEventIDs, outlier.EventID())
} }
ires = append(ires, InputRoomEvent{ ires = append(ires, InputRoomEvent{
Kind: KindNew, Kind: KindNew,
Event: event, Event: event,
AuthEventIDs: event.AuthEventIDs(), AuthEventIDs: event.AuthEventIDs(),
HasState: true,
StateEventIDs: stateEventIDs,
}) })
_, err = SendInputRoomEvents(ctx, rsAPI, ires) _, err = SendInputRoomEvents(ctx, rsAPI, ires)

View file

@ -158,18 +158,18 @@ func (r *RoomserverInternalAPI) calculateAndSetState(
// Check that those state events are in the database and store the state. // Check that those state events are in the database and store the state.
var entries []types.StateEntry var entries []types.StateEntry
if entries, err = r.DB.StateEntriesForEventIDs(ctx, input.StateEventIDs); err != nil { if entries, err = r.DB.StateEntriesForEventIDs(ctx, input.StateEventIDs); err != nil {
return err return fmt.Errorf("r.DB.StateEntriesForEventIDs: %w", err)
} }
if stateAtEvent.BeforeStateSnapshotNID, err = r.DB.AddState(ctx, roomNID, nil, entries); err != nil { if stateAtEvent.BeforeStateSnapshotNID, err = r.DB.AddState(ctx, roomNID, nil, entries); err != nil {
return err return fmt.Errorf("r.DB.AddState: %w", err)
} }
} else { } else {
stateAtEvent.Overwrite = false stateAtEvent.Overwrite = false
// We haven't been told what the state at the event is so we need to calculate it from the prev_events // We haven't been told what the state at the event is so we need to calculate it from the prev_events
if stateAtEvent.BeforeStateSnapshotNID, err = roomState.CalculateAndStoreStateBeforeEvent(ctx, event, roomNID); err != nil { if stateAtEvent.BeforeStateSnapshotNID, err = roomState.CalculateAndStoreStateBeforeEvent(ctx, event, roomNID); err != nil {
return err return fmt.Errorf("roomState.CalculateAndStoreStateBeforeEvent: %w", err)
} }
} }
return r.DB.SetState(ctx, stateAtEvent.EventNID, stateAtEvent.BeforeStateSnapshotNID) return r.DB.SetState(ctx, stateAtEvent.EventNID, stateAtEvent.BeforeStateSnapshotNID)