diff --git a/api/handler/cors_test.go b/api/handler/cors_test.go
index ac0f7ff3..01c54795 100644
--- a/api/handler/cors_test.go
+++ b/api/handler/cors_test.go
@@ -228,33 +228,6 @@ func TestPreflightWildcardOrigin(t *testing.T) {
}
}
-func TestDeleteAllCORSVersions(t *testing.T) {
- body := `
-
-
- GET
- PUT
- *
- *
-
-
-`
- hc := prepareHandlerContext(t)
-
- bktName := "bucket-delete-all-cors-version"
- createBucket(hc, bktName)
- require.Len(t, hc.tp.Objects(), 0)
-
- for range 5 {
- putBucketCORS(hc, bktName, body)
- }
-
- require.Len(t, hc.tp.Objects(), 5)
-
- deleteBucketCORS(hc, bktName)
- require.Len(t, hc.tp.Objects(), 0)
-}
-
func TestGetLatestCORSVersion(t *testing.T) {
bodyTree := `
@@ -295,7 +268,7 @@ func TestGetLatestCORSVersion(t *testing.T) {
requireEqualCORS(hc.t, bodyTree, w.Body.String())
}
-func TestDeleteTreeCORSVersions(t *testing.T) {
+func TestDeleteCORSVersions(t *testing.T) {
body := `
@@ -305,6 +278,15 @@ func TestDeleteTreeCORSVersions(t *testing.T) {
*
+`
+ newBody := `
+
+
+ HEAD
+ *
+ *
+
+
`
hc := prepareHandlerContext(t)
@@ -317,10 +299,19 @@ func TestDeleteTreeCORSVersions(t *testing.T) {
putBucketCORS(hc, bktName, body)
require.Len(t, hc.tp.Objects(), 1)
+ require.Equal(t, body, string(hc.tp.Objects()[0].Payload()))
+
+ hc.tp.AddCORSObject(info.BktInfo, hc.corsCnrID, body)
+ require.Len(t, hc.tp.Objects(), 2)
+
+ putBucketCORS(hc, bktName, newBody)
+ require.Len(t, hc.tp.Objects(), 1)
+ require.Equal(t, newBody, string(hc.tp.Objects()[0].Payload()))
addCORSToTree(hc, body, info.BktInfo, info.BktInfo.CID)
addCORSToTree(hc, body, info.BktInfo, hc.corsCnrID)
- require.Len(t, hc.tp.Objects(), 3)
+ hc.tp.AddCORSObject(info.BktInfo, hc.corsCnrID, body)
+ require.Len(t, hc.tp.Objects(), 4)
deleteBucketCORS(hc, bktName)
require.Len(t, hc.tp.Objects(), 0)
diff --git a/api/layer/cors.go b/api/layer/cors.go
index c6b1b7d8..b2a95c4e 100644
--- a/api/layer/cors.go
+++ b/api/layer/cors.go
@@ -45,6 +45,11 @@ func (n *Layer) PutBucketCORS(ctx context.Context, p *PutCORSParams) error {
return err
}
+ corsVersions, err := n.getCORSVersions(ctx, p.BktInfo)
+ if err != nil {
+ n.reqLogger(ctx).Error(logs.CouldntGetCORSObjectVersions, zap.Error(err), logs.TagField(logs.TagExternalStorage))
+ }
+
prm := frostfs.PrmObjectCreate{
Container: n.corsCnrInfo.CID,
Payload: &buf,
@@ -56,7 +61,7 @@ func (n *Layer) PutBucketCORS(ctx context.Context, p *PutCORSParams) error {
},
}
- _, err := n.objectPutAndHash(ctx, prm, n.corsCnrInfo)
+ _, err = n.objectPutAndHash(ctx, prm, n.corsCnrInfo)
if err != nil {
return fmt.Errorf("put cors object: %w", err)
}
@@ -76,6 +81,15 @@ func (n *Layer) PutBucketCORS(ctx context.Context, p *PutCORSParams) error {
}
}
+ if corsVersions != nil {
+ var addr oid.Address
+ addr.SetContainer(n.corsCnrInfo.CID)
+ for _, obj := range corsVersions.GetObjects() {
+ addr.SetObject(obj.ObjID)
+ n.deleteCORSObject(ctx, p.BktInfo, addr)
+ }
+ }
+
return nil
}
diff --git a/internal/frostfs/crdt/gset.go b/internal/frostfs/crdt/gset.go
index adc786da..04eaff3b 100644
--- a/internal/frostfs/crdt/gset.go
+++ b/internal/frostfs/crdt/gset.go
@@ -92,6 +92,10 @@ func (v *ObjectVersions) GetSorted() []*ObjectVersion {
return v.objects
}
+func (v *ObjectVersions) GetObjects() []*ObjectVersion {
+ return v.objects
+}
+
func (v *ObjectVersions) SetLessFunc(less func(*ObjectVersion, *ObjectVersion) bool) {
v.less = less
}