[#667] Use separate copies numbers for system containers

Signed-off-by: Denis Kirillov <d.kirillov@yadro.com>
This commit is contained in:
Denis Kirillov 2025-03-26 16:32:06 +03:00
parent 42d6fc3fc6
commit 949fc0b484
15 changed files with 311 additions and 125 deletions

View file

@ -521,6 +521,58 @@ func TestPutBucketLifecycleInvalidXML(t *testing.T) {
assertS3Error(hc.t, w, apierr.GetAPIError(apierr.ErrMalformedXML))
}
func TestPutBucketLifecycleCopiesNumbers(t *testing.T) {
t.Run("with lifecycle container", func(t *testing.T) {
hc := prepareHandlerContext(t)
bktName := "bucket-lifecycle"
createBucket(hc, bktName)
cfg := &data.LifecycleConfiguration{
Rules: []data.LifecycleRule{{
Status: data.LifecycleStatusEnabled,
Expiration: &data.LifecycleExpiration{Days: ptr(21)},
}},
}
hc.config.lifecycleCopiesNumbers = []uint32{1}
hc.config.copiesNumbers = map[string][]uint32{"default": {2}}
putBucketLifecycleConfiguration(hc, bktName, cfg, map[string]string{"X-Amz-Meta-Frostfs-Copies-Number": "3"}, true)
objs := hc.tp.Objects()
require.Len(t, objs, 1)
require.EqualValues(t, hc.config.lifecycleCopiesNumbers, hc.tp.CopiesNumbers(addrFromObject(objs[0]).EncodeToString()))
})
t.Run("without lifecycle container", func(t *testing.T) {
hc := prepareWithoutContainersHandlerContext(t, false, true)
bktName := "bucket-lifecycle"
createBucket(hc, bktName)
cfg := &data.LifecycleConfiguration{
Rules: []data.LifecycleRule{{
Status: data.LifecycleStatusEnabled,
Expiration: &data.LifecycleExpiration{Days: ptr(21)},
}},
}
hc.config.lifecycleCopiesNumbers = []uint32{1}
hc.config.copiesNumbers = map[string][]uint32{"default": {2}}
putBucketLifecycleConfiguration(hc, bktName, cfg, nil, true)
objs := hc.tp.Objects()
require.Len(t, objs, 1)
require.EqualValues(t, []uint32{2}, hc.tp.CopiesNumbers(addrFromObject(objs[0]).EncodeToString()))
putBucketLifecycleConfiguration(hc, bktName, cfg, map[string]string{"X-Amz-Meta-Frostfs-Copies-Number": "3"}, true)
objs = hc.tp.Objects()
require.Len(t, objs, 1)
require.EqualValues(t, []uint32{3}, hc.tp.CopiesNumbers(addrFromObject(objs[0]).EncodeToString()))
})
}
func putBucketLifecycleConfiguration(hc *handlerContext, bktName string, cfg *data.LifecycleConfiguration, headers map[string]string, addMD5 bool) {
w := putBucketLifecycleConfigurationBase(hc, bktName, cfg, headers, addMD5)
assertStatus(hc.t, w, http.StatusOK)