From 548ba1fd1f8c756dc194859b180d25c9c31d262c Mon Sep 17 00:00:00 2001 From: Mark Haines Date: Tue, 14 Feb 2017 16:21:22 +0000 Subject: [PATCH] Handle input.StateEventIDs inside processRoomEvent Rather than inside calculateAndStoreState --- .../dendrite/roomserver/input/events.go | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/github.com/matrix-org/dendrite/roomserver/input/events.go b/src/github.com/matrix-org/dendrite/roomserver/input/events.go index b973a28af..117d782a2 100644 --- a/src/github.com/matrix-org/dendrite/roomserver/input/events.go +++ b/src/github.com/matrix-org/dendrite/roomserver/input/events.go @@ -65,8 +65,24 @@ func processRoomEvent(db RoomEventDatabase, input api.InputRoomEvent) error { if stateAtEvent.BeforeStateSnapshotNID == 0 { // We haven't calculated a state for this event yet. // Lets calculate one. - if stateAtEvent.BeforeStateSnapshotNID, err = calculateAndStoreState(db, event, roomNID, input.StateEventIDs); err != nil { - return err + if input.StateEventIDs != nil { + // We've been told what the state at the event is so we don't need to calculate it. + // Check that those state events are in the database and store the state. + entries, err := db.StateEntriesForEventIDs(input.StateEventIDs) + if err != nil { + return err + } + + if stateAtEvent.BeforeStateSnapshotNID, err = db.AddState(roomNID, nil, entries); err != nil { + return nil + } + } else { + // 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 = calculateAndStoreState( + db, event, roomNID, input.StateEventIDs, + ); err != nil { + return err + } } db.SetState(stateAtEvent.EventNID, stateAtEvent.BeforeStateSnapshotNID) }