From 3535197f993dea840dcb96302ba4d883dc619097 Mon Sep 17 00:00:00 2001 From: Poorna Date: Tue, 16 Jul 2024 16:46:41 -0700 Subject: [PATCH] replication: proxy only on missing object or read quorum err (#20101) --- cmd/object-api-errors.go | 6 ------ cmd/object-handlers.go | 6 +++--- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/cmd/object-api-errors.go b/cmd/object-api-errors.go index 2439a1554..62806ff31 100644 --- a/cmd/object-api-errors.go +++ b/cmd/object-api-errors.go @@ -751,12 +751,6 @@ func isErrSignatureDoesNotMatch(err error) bool { return errors.As(err, &signatureDoesNotMatch) } -// isErrObjectNameInvalid - Check if error type is ObjectNameInvalid. -func isErrObjectNameInvalid(err error) bool { - var invalidObject ObjectNameInvalid - return errors.As(err, &invalidObject) -} - // PreConditionFailed - Check if copy precondition failed type PreConditionFailed struct{} diff --git a/cmd/object-handlers.go b/cmd/object-handlers.go index 374ceeca0..16b32bf3e 100644 --- a/cmd/object-handlers.go +++ b/cmd/object-handlers.go @@ -501,8 +501,8 @@ func (api objectAPIHandlers) getObjectHandler(ctx context.Context, objectAPI Obj reader *GetObjectReader perr error ) - // avoid proxying if version is a delete marker - if !isErrObjectNameInvalid(err) && !isErrMethodNotAllowed(err) && !(gr != nil && gr.ObjInfo.DeleteMarker) { + + if (isErrObjectNotFound(err) || isErrVersionNotFound(err) || isErrReadQuorum(err)) && !(gr != nil && gr.ObjInfo.DeleteMarker) { proxytgts := getProxyTargets(ctx, bucket, object, opts) if !proxytgts.Empty() { globalReplicationStats.incProxy(bucket, getObjectAPI, false) @@ -1028,7 +1028,7 @@ func (api objectAPIHandlers) headObjectHandler(ctx context.Context, objectAPI Ob objInfo, err := getObjectInfo(ctx, bucket, object, opts) var proxy proxyResult - if err != nil && !objInfo.DeleteMarker && !isErrMethodNotAllowed(err) && !isErrObjectNameInvalid(err) { + if err != nil && !objInfo.DeleteMarker && (isErrObjectNotFound(err) || isErrVersionNotFound(err) || isErrReadQuorum(err)) { // proxy HEAD to replication target if active-active replication configured on bucket proxytgts := getProxyTargets(ctx, bucket, object, opts) if !proxytgts.Empty() {