From c9d893fec18fbb638eda1ee03776ae34c562f39b Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Wed, 23 Nov 2022 22:40:07 +0100 Subject: [feature/performance] Fail fast when doing remote transport calls inside incoming request contexts (#1119) * [feature/performance] Fail fast when doing remote transport calls inside incoming request contexts * [chore] Reduce outgoing request timeout to 15s * log error messages when fastfailing * use context.Value() instead of wrapped context, wrap error with fastfail instead of extra log entry * add fast-fail context key test Signed-off-by: kim Co-authored-by: kim --- internal/processing/search.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'internal/processing/search.go') diff --git a/internal/processing/search.go b/internal/processing/search.go index 8bb2224a5..bc2bc93d4 100644 --- a/internal/processing/search.go +++ b/internal/processing/search.go @@ -34,6 +34,7 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" "github.com/superseriousbusiness/gotosocial/internal/log" "github.com/superseriousbusiness/gotosocial/internal/oauth" + "github.com/superseriousbusiness/gotosocial/internal/transport" "github.com/superseriousbusiness/gotosocial/internal/util" ) @@ -161,13 +162,13 @@ func (p *processor) searchStatusByURI(ctx context.Context, authed *oauth.Auth, u if resolve { // This is a non-local status and we're allowed to resolve, so dereference it - status, statusable, err := p.federator.GetRemoteStatus(ctx, authed.Account.Username, uri, true, true) + status, statusable, err := p.federator.GetRemoteStatus(transport.WithFastfail(ctx), authed.Account.Username, uri, true, true) if err != nil { return nil, fmt.Errorf("searchStatusByURI: error fetching remote status %q: %v", uriStr, err) } // Attempt to dereference the status thread while we are here - p.federator.DereferenceRemoteThread(ctx, authed.Account.Username, uri, status, statusable) + p.federator.DereferenceRemoteThread(transport.WithFastfail(ctx), authed.Account.Username, uri, status, statusable) } return nil, nil @@ -190,7 +191,7 @@ func (p *processor) searchAccountByURI(ctx context.Context, authed *oauth.Auth, } // we don't have it yet, try to find it remotely - return p.federator.GetRemoteAccount(ctx, dereferencing.GetRemoteAccountParams{ + return p.federator.GetRemoteAccount(transport.WithFastfail(ctx), dereferencing.GetRemoteAccountParams{ RequestingUsername: authed.Account.Username, RemoteAccountID: uri, Blocking: true, @@ -209,7 +210,7 @@ func (p *processor) searchAccountByMention(ctx context.Context, authed *oauth.Au } // we don't have it yet, try to find it remotely - return p.federator.GetRemoteAccount(ctx, dereferencing.GetRemoteAccountParams{ + return p.federator.GetRemoteAccount(transport.WithFastfail(ctx), dereferencing.GetRemoteAccountParams{ RequestingUsername: authed.Account.Username, RemoteAccountUsername: username, RemoteAccountHost: domain, -- cgit v1.2.3