feature/4-add_executor #13

Merged
dkirillov merged 1 commit from dkirillov/frostfs-s3-lifecycler:feature/4-add_executor into master 2024-09-04 19:51:24 +00:00
2 changed files with 46 additions and 1 deletions

View file

@ -192,7 +192,10 @@ func (e *Executor) matchMultipartByRulesFn(ni *netmap.NetworkInfo, rules []data.
matchers := make([]func(*data.MultipartInfo) bool, 0, len(rules))
for _, rule := range rules {
matchFn, err := e.matchMultipartByRuleFn(ni, rule)
if err != nil && !errors.Is(err, errNotApplicableRule) {
if err != nil {
if errors.Is(err, errNotApplicableRule) {
continue
}
return nil, err
}
Review

Seems that in case of errNotApplicableRule we can't use matchFn because it's nil

Seems that in case of `errNotApplicableRule` we can't use `matchFn` because it's nil

View file

@ -325,6 +325,48 @@ func TestExecutorMultipleRules(t *testing.T) {
}
}
func TestExecutorMultipleRulesMultiparts(t *testing.T) {
ec := newExecutorContext(t)
defer ec.cancel()
bktInfo, err := ec.createBktInfo(data.VersioningUnversioned)
require.NoError(t, err)
err = ec.tree.CreateMultipartUpload(ec.ctx, bktInfo, &data.MultipartInfo{Key: "obj1", UploadID: "upload1", Meta: map[string]string{}})
require.NoError(t, err)
err = ec.tree.CreateMultipartUpload(ec.ctx, bktInfo, &data.MultipartInfo{Key: "obj2", UploadID: "upload2", Meta: map[string]string{}})
require.NoError(t, err)
lifecycleCfg := &data.LifecycleConfiguration{Rules: []data.LifecycleRule{
{
Status: "Disabled",
AbortIncompleteMultipartUpload: &data.AbortIncompleteMultipartUpload{DaysAfterInitiation: ptrInt(1)},
Filter: &data.LifecycleRuleFilter{Prefix: "obj1"},
ID: "for obj1",
},
{
Status: "Enabled",
AbortIncompleteMultipartUpload: &data.AbortIncompleteMultipartUpload{DaysAfterInitiation: ptrInt(1)},
Filter: &data.LifecycleRuleFilter{Prefix: "obj2"},
ID: "for obj2",
},
}}
ec.jobs <- Job{
ContainerID: bktInfo.CID,
PrivateKey: ec.key,
LifecycleConfiguration: lifecycleCfg,
Epoch: 1,
}
ec.close()
multiparts, err := ec.tree.GetMultipartUploadsByPrefix(ec.ctx, bktInfo, "")
require.NoError(t, err)
require.Len(t, multiparts, 1)
require.Equal(t, multiparts[0].Key, "obj1")
}
func ptrUint64(val uint64) *uint64 {
return &val
}