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,
event gomatrixserverlib.HeaderedEvent, haveEventIDs map[string]bool, stateKind Kind,
) error {
outliers, err := state.Events()
events, err := state.Events()
if err != nil {
return err
}
var ires []InputRoomEvent
var stateEventIDs []string
for _, outlier := range outliers {
if haveEventIDs[outlier.EventID()] {
for _, ev := range events {
if haveEventIDs[ev.EventID()] {
continue
}
in := InputRoomEvent{
Kind: stateKind,
Event: outlier.Headered(event.RoomVersion),
AuthEventIDs: outlier.AuthEventIDs(),
}
if stateKind == KindNew {
in.HasState = true
in.StateEventIDs = stateEventIDs
Event: ev.Headered(event.RoomVersion),
AuthEventIDs: ev.AuthEventIDs(),
}
ires = append(ires, in)
stateEventIDs = append(stateEventIDs, outlier.EventID())
}
ires = append(ires, InputRoomEvent{
Kind: KindNew,
Event: event,
AuthEventIDs: event.AuthEventIDs(),
HasState: true,
StateEventIDs: stateEventIDs,
Kind: KindNew,
Event: event,
AuthEventIDs: event.AuthEventIDs(),
})
_, 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.
var entries []types.StateEntry
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 {
return err
return fmt.Errorf("r.DB.AddState: %w", err)
}
} else {
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
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)