Add getServers

This commit is contained in:
Neil Alexander 2020-10-12 16:46:59 +01:00
parent 2d15a8a566
commit 2051c98195
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944

View file

@ -370,19 +370,22 @@ func (t *txnReq) processEvent(ctx context.Context, e gomatrixserverlib.Event) er
} }
// We will need to know this when fetching missing auth or prev events. // We will need to know this when fetching missing auth or prev events.
t.servers = []gomatrixserverlib.ServerName{t.Origin} getServers := func() {
serverReq := &api.QueryServerJoinedToRoomRequest{ t.servers = []gomatrixserverlib.ServerName{}
RoomID: e.RoomID(), serverReq := &api.QueryServerJoinedToRoomRequest{
} RoomID: e.RoomID(),
serverRes := &api.QueryServerJoinedToRoomResponse{} }
if err := t.rsAPI.QueryServerJoinedToRoom(ctx, serverReq, serverRes); err == nil { serverRes := &api.QueryServerJoinedToRoomResponse{}
t.servers = append(t.servers, serverRes.ServerNames...) if err := t.rsAPI.QueryServerJoinedToRoom(ctx, serverReq, serverRes); err == nil {
logger.Infof("Found %d server(s) to query for missing events", len(t.servers)) t.servers = append(t.servers, serverRes.ServerNames...)
logger.Infof("Found %d server(s) to query for missing events", len(t.servers))
}
} }
if len(stateResp.MissingAuthEventIDs) > 0 { if len(stateResp.MissingAuthEventIDs) > 0 {
logger.Infof("Event refers to %d unknown auth_events", len(stateResp.MissingAuthEventIDs)) logger.Infof("Event refers to %d unknown auth_events", len(stateResp.MissingAuthEventIDs))
getServers()
if err := t.retrieveMissingAuthEvents(ctx, e, &stateResp); err != nil { if err := t.retrieveMissingAuthEvents(ctx, e, &stateResp); err != nil {
return fmt.Errorf("t.retrieveMissingAuthEvents: %w", err) return fmt.Errorf("t.retrieveMissingAuthEvents: %w", err)
} }
@ -390,6 +393,7 @@ func (t *txnReq) processEvent(ctx context.Context, e gomatrixserverlib.Event) er
if len(stateResp.MissingPrevEventIDs) > 0 { if len(stateResp.MissingPrevEventIDs) > 0 {
logger.Infof("Event refers to %d unknown prev_events", len(stateResp.MissingPrevEventIDs)) logger.Infof("Event refers to %d unknown prev_events", len(stateResp.MissingPrevEventIDs))
getServers()
return t.processEventWithMissingState(ctx, e, stateResp.RoomVersion) return t.processEventWithMissingState(ctx, e, stateResp.RoomVersion)
} }
@ -420,7 +424,7 @@ func (t *txnReq) retrieveMissingAuthEvents(
withNextEvent: withNextEvent:
for missingAuthEventID := range missingAuthEvents { for missingAuthEventID := range missingAuthEvents {
withNextServer: withNextServer:
for _, server := range t.servers { for _, server := range append([]gomatrixserverlib.ServerName{t.Origin}, t.servers...) {
logger.Infof("Retrieving missing auth event %q from %q", missingAuthEventID, server) logger.Infof("Retrieving missing auth event %q from %q", missingAuthEventID, server)
tx, err := t.federation.GetEvent(ctx, server, missingAuthEventID) tx, err := t.federation.GetEvent(ctx, server, missingAuthEventID)
if err != nil { if err != nil {
@ -994,7 +998,7 @@ func (t *txnReq) lookupEvent(ctx context.Context, roomVersion gomatrixserverlib.
} }
var event gomatrixserverlib.Event var event gomatrixserverlib.Event
found := false found := false
for _, serverName := range t.servers { for _, serverName := range append([]gomatrixserverlib.ServerName{t.Origin}, t.servers...) {
txn, err := t.federation.GetEvent(ctx, serverName, missingEventID) txn, err := t.federation.GetEvent(ctx, serverName, missingEventID)
if err != nil || len(txn.PDUs) == 0 { if err != nil || len(txn.PDUs) == 0 {
util.GetLogger(ctx).WithError(err).WithField("event_id", missingEventID).Warn("Failed to get missing /event for event ID") util.GetLogger(ctx).WithError(err).WithField("event_id", missingEventID).Warn("Failed to get missing /event for event ID")