From edcee14d07bae129e2d1a06d99c30fc6f659ff5e Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Fri, 11 Nov 2022 12:18:38 +0100 Subject: [feature] Read + Write tombstones for deleted Actors (#1005) * [feature] Read + Write tombstones for deleted Actors * copyTombstone * update to use resultcache instead of old ttl cache Signed-off-by: kim * update go-cache library to fix result cache capacity / ordering bugs Signed-off-by: kim * bump go-cache/v3 to v3.1.6 to fix bugs Signed-off-by: kim * switch on status code * better explain ErrGone reasoning Signed-off-by: kim Co-authored-by: kim --- internal/transport/dereference.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'internal/transport') diff --git a/internal/transport/dereference.go b/internal/transport/dereference.go index d14af7a47..0c6918550 100644 --- a/internal/transport/dereference.go +++ b/internal/transport/dereference.go @@ -20,6 +20,7 @@ package transport import ( "context" + "errors" "fmt" "io" "net/http" @@ -30,6 +31,12 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/uris" ) +// ErrGone is returned from Dereference when the remote resource returns 410 GONE. +// This is useful in cases where we're processing a delete of a resource that's already +// been removed from the remote server, so we know we don't need to keep trying to +// dereference it. +var ErrGone = errors.New("remote resource returned HTTP code 410 GONE") + func (t *transport) Dereference(ctx context.Context, iri *url.URL) ([]byte, error) { // if the request is to us, we can shortcut for certain URIs rather than going through // the normal request flow, thereby saving time and energy @@ -66,10 +73,12 @@ func (t *transport) Dereference(ctx context.Context, iri *url.URL) ([]byte, erro } defer rsp.Body.Close() - // Check for an expected status code - if rsp.StatusCode != http.StatusOK { + switch rsp.StatusCode { + case http.StatusOK: + return io.ReadAll(rsp.Body) + case http.StatusGone: + return nil, ErrGone + default: return nil, fmt.Errorf("GET request to %s failed (%d): %s", iriStr, rsp.StatusCode, rsp.Status) } - - return io.ReadAll(rsp.Body) } -- cgit v1.3