mirror of
https://github.com/versity/versitygw.git
synced 2026-04-25 07:00:31 +00:00
Merge pull request #892 from versity/fix/getobject-delete-marker
fix: Returns NoSuchKey error for GetObject, if verionId is not specif…
This commit is contained in:
@@ -2750,7 +2750,7 @@ func (p *Posix) GetObject(_ context.Context, input *s3.GetObjectInput) (*s3.GetO
|
||||
return nil, s3err.GetAPIError(s3err.ErrNoSuchKey)
|
||||
}
|
||||
|
||||
if versionId != "" {
|
||||
if p.versioningEnabled() {
|
||||
isDelMarker, err := p.isObjDeleteMarker(bucket, object)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -2758,10 +2758,15 @@ func (p *Posix) GetObject(_ context.Context, input *s3.GetObjectInput) (*s3.GetO
|
||||
|
||||
// if the specified object version is a delete marker, return MethodNotAllowed
|
||||
if isDelMarker {
|
||||
if versionId != "" {
|
||||
err = s3err.GetAPIError(s3err.ErrMethodNotAllowed)
|
||||
} else {
|
||||
err = s3err.GetAPIError(s3err.ErrNoSuchKey)
|
||||
}
|
||||
return &s3.GetObjectOutput{
|
||||
DeleteMarker: getBoolPtr(true),
|
||||
LastModified: backend.GetTimePtr(fi.ModTime()),
|
||||
}, s3err.GetAPIError(s3err.ErrMethodNotAllowed)
|
||||
}, err
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -562,6 +562,7 @@ func TestVersioning(s *S3Conf) {
|
||||
// GetObject action
|
||||
Versioning_GetObject_invalid_versionId(s)
|
||||
Versioning_GetObject_success(s)
|
||||
Versioning_GetObject_delete_marker_without_versionId(s)
|
||||
Versioning_GetObject_delete_marker(s)
|
||||
// DeleteObject(s) actions
|
||||
Versioning_DeleteObject_delete_object_version(s)
|
||||
@@ -946,6 +947,7 @@ func GetIntTests() IntTests {
|
||||
"Versioning_HeadObject_delete_marker": Versioning_HeadObject_delete_marker,
|
||||
"Versioning_GetObject_invalid_versionId": Versioning_GetObject_invalid_versionId,
|
||||
"Versioning_GetObject_success": Versioning_GetObject_success,
|
||||
"Versioning_GetObject_delete_marker_without_versionId": Versioning_GetObject_delete_marker_without_versionId,
|
||||
"Versioning_GetObject_delete_marker": Versioning_GetObject_delete_marker,
|
||||
"Versioning_DeleteObject_delete_object_version": Versioning_DeleteObject_delete_object_version,
|
||||
"Versioning_DeleteObject_non_existing_object": Versioning_DeleteObject_non_existing_object,
|
||||
|
||||
@@ -11372,6 +11372,47 @@ func Versioning_GetObject_success(s *S3Conf) error {
|
||||
}, withVersioning(types.BucketVersioningStatusEnabled))
|
||||
}
|
||||
|
||||
func Versioning_GetObject_delete_marker_without_versionId(s *S3Conf) error {
|
||||
testName := "Versioning_GetObject_delete_marker_without_versionId"
|
||||
return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {
|
||||
obj := "my-obj"
|
||||
_, err := putObjectWithData(1234, &s3.PutObjectInput{
|
||||
Bucket: &bucket,
|
||||
Key: &obj,
|
||||
}, s3client)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = putBucketVersioningStatus(s3client, bucket, types.BucketVersioningStatusEnabled)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), shortTimeout)
|
||||
_, err = s3client.DeleteObject(ctx, &s3.DeleteObjectInput{
|
||||
Bucket: &bucket,
|
||||
Key: &obj,
|
||||
})
|
||||
cancel()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ctx, cancel = context.WithTimeout(context.Background(), shortTimeout)
|
||||
_, err = s3client.GetObject(ctx, &s3.GetObjectInput{
|
||||
Bucket: &bucket,
|
||||
Key: &obj,
|
||||
})
|
||||
cancel()
|
||||
if err := checkSdkApiErr(err, "NoSuchKey"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func Versioning_GetObject_delete_marker(s *S3Conf) error {
|
||||
testName := "Versioning_GetObject_delete_marker"
|
||||
return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {
|
||||
|
||||
Reference in New Issue
Block a user