From c2a749745d326773075ecbb3c1e3308c3b51f113 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Wed, 3 Aug 2022 17:23:41 +0100 Subject: [PATCH] Enforce a limit of 20s per server, 5 mins total --- roomserver/internal/input/input_missing.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/roomserver/internal/input/input_missing.go b/roomserver/internal/input/input_missing.go index 97d7faa7a..0dd2b64c0 100644 --- a/roomserver/internal/input/input_missing.go +++ b/roomserver/internal/input/input_missing.go @@ -668,15 +668,17 @@ func (t *missingStateReq) lookupMissingStateViaStateIDs(ctx context.Context, roo var stateIDs gomatrixserverlib.RespStateIDs var err error count := 0 + totalctx, totalcancel := context.WithTimeout(ctx, time.Minute*5) for _, serverName := range t.servers { - reqctx, cancel := context.WithTimeout(ctx, time.Second*30) + reqctx, reqcancel := context.WithTimeout(totalctx, time.Second*20) stateIDs, err = t.federation.LookupStateIDs(reqctx, serverName, roomID, eventID) - cancel() + reqcancel() if err == nil { break } count++ } + totalcancel() if err != nil { return nil, fmt.Errorf("t.federation.LookupStateIDs tried %d server(s), last error: %w", count, err) }