mirror of
https://github.com/versity/versitygw.git
synced 2026-09-04 23:26:57 +00:00
Merge pull request #897 from versity/fix/getobject-null-versionid-obj
fix: Resolves the null object version get issue from posix directory
This commit is contained in:
@@ -2722,8 +2722,7 @@ func (p *Posix) GetObject(_ context.Context, input *s3.GetObjectInput) (*s3.GetO
|
||||
return nil, fmt.Errorf("get obj versionId: %w", err)
|
||||
}
|
||||
if errors.Is(err, meta.ErrNoSuchKey) {
|
||||
bucket = filepath.Join(p.versioningDir, bucket)
|
||||
object = filepath.Join(genObjVersionKey(object), versionId)
|
||||
vId = []byte(nullVersionId)
|
||||
}
|
||||
|
||||
if string(vId) != versionId {
|
||||
|
||||
@@ -564,6 +564,7 @@ func TestVersioning(s *S3Conf) {
|
||||
Versioning_GetObject_success(s)
|
||||
Versioning_GetObject_delete_marker_without_versionId(s)
|
||||
Versioning_GetObject_delete_marker(s)
|
||||
Versioning_GetObject_null_versionId_obj(s)
|
||||
// DeleteObject(s) actions
|
||||
Versioning_DeleteObject_delete_object_version(s)
|
||||
Versioning_DeleteObject_non_existing_object(s)
|
||||
@@ -950,6 +951,7 @@ func GetIntTests() IntTests {
|
||||
"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_GetObject_null_versionId_obj": Versioning_GetObject_null_versionId_obj,
|
||||
"Versioning_DeleteObject_delete_object_version": Versioning_DeleteObject_delete_object_version,
|
||||
"Versioning_DeleteObject_non_existing_object": Versioning_DeleteObject_non_existing_object,
|
||||
"Versioning_DeleteObject_delete_a_delete_marker": Versioning_DeleteObject_delete_a_delete_marker,
|
||||
|
||||
@@ -11455,6 +11455,48 @@ func Versioning_GetObject_delete_marker(s *S3Conf) error {
|
||||
}, withVersioning(types.BucketVersioningStatusEnabled))
|
||||
}
|
||||
|
||||
func Versioning_GetObject_null_versionId_obj(s *S3Conf) error {
|
||||
testName := "Versioning_GetObject_null_versionId_obj"
|
||||
return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {
|
||||
obj, lgth := "my-obj", int64(234)
|
||||
out, err := putObjectWithData(lgth, &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)
|
||||
res, err := s3client.GetObject(ctx, &s3.GetObjectInput{
|
||||
Bucket: &bucket,
|
||||
Key: &obj,
|
||||
VersionId: &nullVersionId,
|
||||
})
|
||||
cancel()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if *res.ContentLength != lgth {
|
||||
return fmt.Errorf("expected the Content-Length to be %v, instead got %v", lgth, *res.ContentLength)
|
||||
}
|
||||
if *res.VersionId != nullVersionId {
|
||||
return fmt.Errorf("expected the versionId to be %v, insted got %v", nullVersionId, *res.VersionId)
|
||||
}
|
||||
if *res.ETag != *out.res.ETag {
|
||||
return fmt.Errorf("expecte the ETag to be %v, instead got %v", *out.res.ETag, *res.ETag)
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func Versioning_DeleteObject_delete_object_version(s *S3Conf) error {
|
||||
testName := "Versioning_DeleteObject_delete_object_version"
|
||||
return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {
|
||||
|
||||
Reference in New Issue
Block a user