From fc2c431e29fa15d928b0f425a1cf136f19d0e76c Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Tue, 1 Sep 2020 14:06:52 +0100 Subject: [PATCH] Don't accumulate state IDs to overwrite --- roomserver/api/wrapper.go | 24 ++++++++---------------- roomserver/internal/input_events.go | 6 +++--- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/roomserver/api/wrapper.go b/roomserver/api/wrapper.go index 9529109e9..b1af1910d 100644 --- a/roomserver/api/wrapper.go +++ b/roomserver/api/wrapper.go @@ -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) diff --git a/roomserver/internal/input_events.go b/roomserver/internal/input_events.go index a63082990..3c2905442 100644 --- a/roomserver/internal/input_events.go +++ b/roomserver/internal/input_events.go @@ -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)