mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-23 14:53:10 -06:00
Don't accumulate state IDs to overwrite
This commit is contained in:
parent
23643258af
commit
fc2c431e29
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue