Browse Source
replication: proxy only on missing object or read quorum err (#20101)
pull/20104/head
RELEASE.2024-07-16T23-46-41Z
Poorna
1 year ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with
3 additions and
9 deletions
-
cmd/object-api-errors.go
-
cmd/object-handlers.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{} |
|
|
|
|
|
|
|
|
|
@ -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() { |
|
|
|