Don't ask roomserver for events we already have in federation API

This commit is contained in:
Neil Alexander 2022-05-09 15:42:31 +01:00
parent 1a7f4c8aa9
commit 7c609a6568
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944

View file

@ -146,28 +146,30 @@ func (s *OutputRoomEventConsumer) processInboundPeek(orp api.OutputNewInboundPee
// processMessage updates the list of currently joined hosts in the room // processMessage updates the list of currently joined hosts in the room
// and then sends the event to the hosts that were joined before the event. // and then sends the event to the hosts that were joined before the event.
func (s *OutputRoomEventConsumer) processMessage(ore api.OutputNewRoomEvent) error { func (s *OutputRoomEventConsumer) processMessage(ore api.OutputNewRoomEvent) error {
eventsRes := &api.QueryEventsByIDResponse{} addsStateEvents := []*gomatrixserverlib.HeaderedEvent{}
if len(ore.AddsStateEventIDs) > 0 { missingEventIDs := make([]string, 0, len(ore.AddsStateEventIDs))
eventsReq := &api.QueryEventsByIDRequest{ for _, eventID := range ore.AddsStateEventIDs {
EventIDs: ore.AddsStateEventIDs, if eventID == ore.Event.EventID() {
} addsStateEvents = append(addsStateEvents, ore.Event)
if err := s.rsAPI.QueryEventsByID(s.ctx, eventsReq, eventsRes); err != nil { } else {
return fmt.Errorf("s.rsAPI.QueryEventsByID: %w", err) missingEventIDs = append(missingEventIDs, eventID)
}
found := false
for _, event := range eventsRes.Events {
if event.EventID() == ore.Event.EventID() {
found = true
break
}
}
if !found {
eventsRes.Events = append(eventsRes.Events, ore.Event)
} }
} }
addsJoinedHosts, err := joinedHostsFromEvents(gomatrixserverlib.UnwrapEventHeaders(eventsRes.Events)) // Ask the roomserver and add in the rest of the results into the set.
// Finally, work out if there are any more events missing.
if len(missingEventIDs) > 0 {
eventsReq := &api.QueryEventsByIDRequest{
EventIDs: missingEventIDs,
}
eventsRes := &api.QueryEventsByIDResponse{}
if err := s.rsAPI.QueryEventsByID(s.ctx, eventsReq, eventsRes); err != nil {
return fmt.Errorf("s.rsAPI.QueryEventsByID: %w", err)
}
addsStateEvents = append(addsStateEvents, eventsRes.Events...)
}
addsJoinedHosts, err := joinedHostsFromEvents(gomatrixserverlib.UnwrapEventHeaders(addsStateEvents))
if err != nil { if err != nil {
return err return err
} }