mirror of
https://github.com/cubefs/cubefs.git
synced 2026-08-02 02:00:56 +00:00
refactor(lcnode): hybrid cloud lifecycle rule prefix check #22726594
Signed-off-by: zhaochenyang <zhaochenyang@oppo.com>
This commit is contained in:
parent
d15462b427
commit
824098f801
@ -7199,6 +7199,8 @@ func (m *Server) SetBucketLifecycle(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
err = m.cluster.SetBucketLifecycle(&req)
|
||||
b, _ := json.Marshal(req)
|
||||
auditlog.LogMasterOp("SetBucketLifecycle", fmt.Sprintf("LcConfiguration(%v)", string(b)), err)
|
||||
if err != nil {
|
||||
sendErrReply(w, r, &proto.HTTPReply{Code: proto.ErrCodeInternalError, Msg: err.Error()})
|
||||
return
|
||||
@ -7261,6 +7263,7 @@ func (m *Server) DelBucketLifecycle(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
err = m.cluster.DelBucketLifecycle(name)
|
||||
auditlog.LogMasterOp("DelBucketLifecycle", fmt.Sprintf("vol(%v)", name), err)
|
||||
if err != nil {
|
||||
sendErrReply(w, r, &proto.HTTPReply{Code: proto.ErrCodeInternalError, Msg: err.Error()})
|
||||
return
|
||||
|
||||
@ -337,3 +337,72 @@ func TestLifecycleConfigurationTransition3(t *testing.T) {
|
||||
err = proto.ValidRules(l2.Rules)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestValidRulePrefix(t *testing.T) {
|
||||
rules := []*proto.Rule{
|
||||
{
|
||||
ID: "a",
|
||||
},
|
||||
}
|
||||
require.NoError(t, proto.ValidRulePrefix(rules))
|
||||
|
||||
rules = []*proto.Rule{
|
||||
{
|
||||
ID: "a",
|
||||
Filter: &proto.Filter{},
|
||||
},
|
||||
}
|
||||
require.NoError(t, proto.ValidRulePrefix(rules))
|
||||
|
||||
rules = []*proto.Rule{
|
||||
{
|
||||
ID: "a",
|
||||
Filter: &proto.Filter{Prefix: ""},
|
||||
},
|
||||
}
|
||||
require.NoError(t, proto.ValidRulePrefix(rules))
|
||||
|
||||
rules = []*proto.Rule{
|
||||
{
|
||||
ID: "a",
|
||||
Filter: &proto.Filter{Prefix: "/"},
|
||||
},
|
||||
}
|
||||
require.Equal(t, proto.LifeCycleErrRulePrefix, proto.ValidRulePrefix(rules))
|
||||
|
||||
rules = []*proto.Rule{
|
||||
{
|
||||
ID: "a",
|
||||
Filter: &proto.Filter{Prefix: "/"},
|
||||
},
|
||||
{
|
||||
ID: "a",
|
||||
Filter: &proto.Filter{Prefix: "a/"},
|
||||
},
|
||||
}
|
||||
require.Equal(t, proto.LifeCycleErrRulePrefix, proto.ValidRulePrefix(rules))
|
||||
|
||||
rules = []*proto.Rule{
|
||||
{
|
||||
ID: "a",
|
||||
Filter: &proto.Filter{Prefix: ""},
|
||||
},
|
||||
{
|
||||
ID: "a",
|
||||
Filter: &proto.Filter{Prefix: "a/"},
|
||||
},
|
||||
}
|
||||
require.Equal(t, proto.LifeCycleErrConflictRules, proto.ValidRulePrefix(rules))
|
||||
|
||||
rules = []*proto.Rule{
|
||||
{
|
||||
ID: "a",
|
||||
Filter: &proto.Filter{Prefix: "b/"},
|
||||
},
|
||||
{
|
||||
ID: "a",
|
||||
Filter: &proto.Filter{Prefix: "a/"},
|
||||
},
|
||||
}
|
||||
require.NoError(t, proto.ValidRulePrefix(rules))
|
||||
}
|
||||
|
||||
@ -119,6 +119,9 @@ func ValidRules(Rules []*Rule) error {
|
||||
|
||||
func ValidRulePrefix(Rules []*Rule) error {
|
||||
if len(Rules) == 1 {
|
||||
if strings.HasPrefix(Rules[0].GetPrefix(), "/") {
|
||||
return LifeCycleErrRulePrefix
|
||||
}
|
||||
return nil
|
||||
}
|
||||
var prefixes []string
|
||||
@ -127,13 +130,13 @@ func ValidRulePrefix(Rules []*Rule) error {
|
||||
return LifeCycleErrConflictRules
|
||||
}
|
||||
if rule.Filter != nil {
|
||||
if rule.Filter.Prefix == "" {
|
||||
if rule.GetPrefix() == "" {
|
||||
return LifeCycleErrConflictRules
|
||||
} else {
|
||||
if strings.HasPrefix(rule.Filter.Prefix, "/") {
|
||||
if strings.HasPrefix(rule.GetPrefix(), "/") {
|
||||
return LifeCycleErrRulePrefix
|
||||
}
|
||||
prefixes = append(prefixes, rule.Filter.Prefix)
|
||||
prefixes = append(prefixes, rule.GetPrefix())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user