From 1bb07fd78ef4afd9d1fbe446ff96b23b2524ca98 Mon Sep 17 00:00:00 2001 From: niksis02 Date: Mon, 24 Feb 2025 20:44:26 +0400 Subject: [PATCH] fix: Changes HeadObject returned error type from MethodNotAllowed to NotFound if the latest object version is a delete marker. --- backend/posix/posix.go | 12 ++++++++---- tests/integration/tests.go | 10 ++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/backend/posix/posix.go b/backend/posix/posix.go index f00a8c0..d42f136 100644 --- a/backend/posix/posix.go +++ b/backend/posix/posix.go @@ -3632,10 +3632,14 @@ func (p *Posix) HeadObject(ctx context.Context, input *s3.HeadObjectInput) (*s3. // if the specified object version is a delete marker, return MethodNotAllowed if isDelMarker { - return &s3.HeadObjectOutput{ - DeleteMarker: getBoolPtr(true), - LastModified: backend.GetTimePtr(fi.ModTime()), - }, s3err.GetAPIError(s3err.ErrMethodNotAllowed) + if versionId != "" { + return &s3.HeadObjectOutput{ + DeleteMarker: getBoolPtr(true), + LastModified: backend.GetTimePtr(fi.ModTime()), + }, s3err.GetAPIError(s3err.ErrMethodNotAllowed) + } else { + return nil, s3err.GetAPIError(s3err.ErrNoSuchKey) + } } } diff --git a/tests/integration/tests.go b/tests/integration/tests.go index b72e714..8fe5230 100644 --- a/tests/integration/tests.go +++ b/tests/integration/tests.go @@ -14461,6 +14461,16 @@ func Versioning_HeadObject_delete_marker(s *S3Conf) error { return err } + ctx, cancel = context.WithTimeout(context.Background(), shortTimeout) + _, err = s3client.HeadObject(ctx, &s3.HeadObjectInput{ + Bucket: &bucket, + Key: &obj, + }) + cancel() + if err := checkSdkApiErr(err, "NotFound"); err != nil { + return err + } + return nil }, withVersioning(types.BucketVersioningStatusEnabled)) }