From ed9e3fc385e33fa6c1c5be71221fc2f9e4ccf52c Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sun, 27 Sep 2020 00:42:06 +0100 Subject: [PATCH] use reverse topo ordering to find latest extrem --- roomserver/internal/perform/perform_inbound_peek.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/roomserver/internal/perform/perform_inbound_peek.go b/roomserver/internal/perform/perform_inbound_peek.go index 8599ad204..e919d2040 100644 --- a/roomserver/internal/perform/perform_inbound_peek.go +++ b/roomserver/internal/perform/perform_inbound_peek.go @@ -64,12 +64,19 @@ func (r *InboundPeeker) PerformInboundPeek( if err != nil { return err } - // XXX: is this actually the latest of the latest events? latestEvents, err := r.DB.EventsFromIDs(ctx, []string{latestEventRefs[0].EventID}) if err != nil { return err } - response.LatestEvent = latestEvents[0].Headered(info.RoomVersion) + var sortedLatestEvents []gomatrixserverlib.Event + for _, ev := range latestEvents { + sortedLatestEvents = append(sortedLatestEvents, ev.Event) + } + sortedLatestEvents = gomatrixserverlib.ReverseTopologicalOrdering( + sortedLatestEvents, + gomatrixserverlib.TopologicalOrderByPrevEvents, + ) + response.LatestEvent = sortedLatestEvents[0].Headered(info.RoomVersion) // XXX: do we actually need to do a state resolution here? roomState := state.NewStateResolution(r.DB, *info)