MCPcopy
hub / github.com/cubefs/cubefs / putBucketLifecycleConfigurationHandler

Method putBucketLifecycleConfigurationHandler

objectnode/lifecycle.go:81–140  ·  view source on GitHub ↗

API reference: https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html

(w http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

79
80// API reference: https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html
81func (o *ObjectNode) putBucketLifecycleConfigurationHandler(w http.ResponseWriter, r *http.Request) {
82 var err error
83 var errorCode *ErrorCode
84
85 defer func() {
86 o.errorResponse(w, r, err, errorCode)
87 }()
88
89 param := ParseRequestParam(r)
90 if param.Bucket() == "" {
91 errorCode = InvalidBucketName
92 return
93 }
94 if _, err = o.vm.Volume(param.Bucket()); err != nil {
95 errorCode = NoSuchBucket
96 return
97 }
98
99 _, errorCode = VerifyContentLength(r, BodyLimit)
100 if errorCode != nil {
101 return
102 }
103 var requestBody []byte
104 if requestBody, err = ioutil.ReadAll(r.Body); err != nil && err != io.EOF {
105 log.LogErrorf("putBucketLifecycle failed: read request body data err: requestID(%v) err(%v)", GetRequestID(r), err)
106 return
107 }
108
109 lifeCycle := NewLifecycleConfiguration()
110 if err = UnmarshalXMLEntity(requestBody, lifeCycle); err != nil {
111 log.LogWarnf("putBucketLifecycle failed: decode request body err: requestID(%v) err(%v)", GetRequestID(r), err)
112 errorCode = LifeCycleErrMalformedXML
113 return
114 }
115
116 if err = proto.ValidRules(lifeCycle.Rules); err != nil {
117 errorCode = &ErrorCode{
118 ErrorCode: "InvalidArgument",
119 ErrorMessage: err.Error(),
120 StatusCode: http.StatusBadRequest,
121 }
122 log.LogErrorf("putBucketLifecycle failed: validate err: requestID(%v) lifeCycle(%v) err(%v)", GetRequestID(r), lifeCycle, errorCode)
123 return
124 }
125
126 req := proto.LcConfiguration{
127 VolName: param.Bucket(),
128 Rules: lifeCycle.Rules,
129 }
130 if err = o.mc.AdminAPI().SetBucketLifecycle(&req); err != nil {
131 log.LogErrorf("putBucketLifecycle failed: SetBucketLifecycle err: requestID(%v) bucket[%v] err(%v)", GetRequestID(r), param.Bucket(), err)
132 if err.Error() == proto.ErrNoSupportStorageClass.Error() {
133 errorCode = LifeCycleErrMalformedXML
134 }
135 return
136 }
137
138 log.LogInfof("putBucketLifecycle success: requestID(%v) volume(%v) lifeCycle(%v)",

Callers

nothing calls this directly

Calls 15

errorResponseMethod · 0.95
LogErrorfFunction · 0.92
LogWarnfFunction · 0.92
ValidRulesFunction · 0.92
LogInfofFunction · 0.92
ParseRequestParamFunction · 0.85
VerifyContentLengthFunction · 0.85
GetRequestIDFunction · 0.85
UnmarshalXMLEntityFunction · 0.85
AdminAPIMethod · 0.80
ReadAllMethod · 0.65

Tested by

no test coverage detected