From 190e262ceca0a928ffbaacb92375e6bc511212e8 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Tue, 13 Oct 2020 17:49:54 +0100 Subject: [PATCH] Revert "lookupEvent sends outliers" This reverts commit 3e1655644105a542b806e28d6d2536fbd23ecc83. --- federationapi/routing/send.go | 49 +++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/federationapi/routing/send.go b/federationapi/routing/send.go index 080b1247f..24e29a18d 100644 --- a/federationapi/routing/send.go +++ b/federationapi/routing/send.go @@ -416,13 +416,38 @@ func (t *txnReq) retrieveMissingAuthEvents( if len(servers) > 5 { servers = servers[:5] } - +withNextEvent: for missingAuthEventID := range missingAuthEvents { - if _, err := t.lookupEvent(ctx, stateResp.RoomVersion, missingAuthEventID, true, servers); err != nil { - logger.WithError(err).Warnf("Failed to retrieve auth event %q", missingAuthEventID) - continue + withNextServer: + for _, server := range servers { + logger.Infof("Retrieving missing auth event %q from %q", missingAuthEventID, server) + tx, err := t.federation.GetEvent(ctx, server, missingAuthEventID) + if err != nil { + logger.WithError(err).Warnf("Failed to retrieve auth event %q", missingAuthEventID) + continue withNextServer + } + ev, err := gomatrixserverlib.NewEventFromUntrustedJSON(tx.PDUs[0], stateResp.RoomVersion) + if err != nil { + logger.WithError(err).Warnf("Failed to unmarshal auth event %q", missingAuthEventID) + continue withNextServer + } + if err = api.SendInputRoomEvents( + context.Background(), + t.rsAPI, + []api.InputRoomEvent{ + { + Kind: api.KindOutlier, + Event: ev.Headered(stateResp.RoomVersion), + AuthEventIDs: ev.AuthEventIDs(), + SendAsServer: api.DoNotSendToOtherServers, + }, + }, + ); err != nil { + return fmt.Errorf("api.SendEvents: %w", err) + } + delete(missingAuthEvents, missingAuthEventID) + continue withNextEvent } - delete(missingAuthEvents, missingAuthEventID) } if missing := len(missingAuthEvents); missing > 0 { @@ -1016,20 +1041,6 @@ func (t *txnReq) lookupEvent(ctx context.Context, roomVersion gomatrixserverlib. return nil, verifySigError{event.EventID(), err} } h := event.Headered(roomVersion) - if err := api.SendInputRoomEvents( - context.Background(), - t.rsAPI, - []api.InputRoomEvent{ - { - Kind: api.KindOutlier, - Event: h, - AuthEventIDs: h.AuthEventIDs(), - SendAsServer: api.DoNotSendToOtherServers, - }, - }, - ); err != nil { - return nil, fmt.Errorf("api.SendInputRoomEvents: %w", err) - } t.newEvents[h.EventID()] = true return &h, nil }