fix(objectnode):

1. MultipartUpload with nonexistent uploadId return NoSuchUploadID
2. NoSuchBucket err handle

Signed-off-by: tangdeyi <tangdeyi@oppo.com>
This commit is contained in:
tangdeyi 2023-04-13 14:31:12 +08:00 committed by leonrayang
parent ee5577115b
commit 862fde677a
6 changed files with 29 additions and 69 deletions

View File

@ -97,9 +97,13 @@ func (o *ObjectNode) getVol(bucket string) (vol *Volume, err error) {
vol, err = o.vm.Volume(bucket)
if err != nil {
log.LogErrorf("getVol: load Volume fail, bucket(%v) err(%v)", bucket, err)
return nil, err
if err == proto.ErrVolNotExists {
err = NoSuchBucket
return
}
err = InternalErrorCode(err)
return
}
return vol, nil
}

View File

@ -221,9 +221,7 @@ func (o *ObjectNode) uploadPartHandler(w http.ResponseWriter, r *http.Request) {
if err != nil {
log.LogErrorf("uploadPartHandler: write part fail: requestID(%v) volume(%v) path(%v) uploadId(%v) part(%v) remote(%v) err(%v)",
GetRequestID(r), vol.Name(), param.Object(), uploadId, partNumberInt, getRequestIP(r), err)
if !r.Close {
errorCode = InternalErrorCode(err)
}
errorCode = InternalErrorCode(err)
return
}
log.LogDebugf("uploadPartHandler: write part success: requestID(%v) volume(%v) path(%v) uploadId(%v) part(%v) fsFileInfo(%v)",
@ -275,11 +273,6 @@ func (o *ObjectNode) uploadPartCopyHandler(w http.ResponseWriter, r *http.Reques
var vol *Volume
if vol, err = o.getVol(param.Bucket()); err != nil {
log.LogErrorf("partCopyHandler: load volume fail: requestID(%v) err(%v)", GetRequestID(r), err)
if err == proto.ErrVolNotExists {
errorCode = NoSuchBucket
return
}
errorCode = InternalErrorCode(err)
return
}
@ -294,11 +287,6 @@ func (o *ObjectNode) uploadPartCopyHandler(w http.ResponseWriter, r *http.Reques
var srcVol *Volume
if srcVol, err = o.getVol(srcBucket); err != nil {
log.LogErrorf("partCopyHandler: load src volume fail: requestID(%v) err(%v)", GetRequestID(r), err)
if err == proto.ErrVolNotExists {
errorCode = NoSuchBucket
return
}
errorCode = InternalErrorCode(err)
return
}
srcFileInfo, _, err := srcVol.ObjectMeta(srcObject)
@ -347,9 +335,7 @@ func (o *ObjectNode) uploadPartCopyHandler(w http.ResponseWriter, r *http.Reques
if err != nil {
log.LogErrorf("partCopyHandler: write part fail: requestID(%v) volume(%v) path(%v) uploadId(%v) part(%v) err(%v)",
GetRequestID(r), vol.Name(), param.Object(), uploadId, partNumberInt, err)
if !r.Close {
errorCode = InternalErrorCode(err)
}
errorCode = InternalErrorCode(err)
return
}
log.LogDebugf("partCopyHandler: write part success: requestID(%v) volume(%v) path(%v) uploadId(%v) part(%v) fsFileInfo(%+v)",

View File

@ -717,8 +717,7 @@ func (o *ObjectNode) copyObjectHandler(w http.ResponseWriter, r *http.Request) {
var vol *Volume
if vol, err = o.getVol(param.Bucket()); err != nil {
log.LogErrorf("copyObjectHandler: load volume fail: requestID(%v) volume(%v) err(%v)",
getRequestIP(r), param.Bucket(), err)
errorCode = NoSuchBucket
GetRequestID(r), param.Bucket(), err)
return
}
@ -775,7 +774,6 @@ func (o *ObjectNode) copyObjectHandler(w http.ResponseWriter, r *http.Request) {
if sourceVol, err = o.getVol(sourceBucket); err != nil {
log.LogErrorf("copyObjectHandler: load source volume fail: requestID(%v) srcVolume(%v) err(%v)",
GetRequestID(r), sourceBucket, err)
errorCode = NoSuchBucket
return
}
var fileInfo *FSFileInfo
@ -897,10 +895,7 @@ func (o *ObjectNode) getBucketV1Handler(w http.ResponseWriter, r *http.Request)
var err error
var errorCode *ErrorCode
defer func() {
if errorCode != nil {
_ = errorCode.ServeResponse(w, r)
return
}
o.errorResponse(w, r, err, errorCode)
}()
var param = ParseRequestParam(r)
@ -912,7 +907,6 @@ func (o *ObjectNode) getBucketV1Handler(w http.ResponseWriter, r *http.Request)
if vol, err = o.getVol(param.Bucket()); err != nil {
log.LogErrorf("getBucketV1Handler: load volume fail: requestID(%v) volume(%v) err(%v)",
GetRequestID(r), param.Bucket(), err)
errorCode = NoSuchBucket
return
}
// get options
@ -1039,10 +1033,7 @@ func (o *ObjectNode) getBucketV2Handler(w http.ResponseWriter, r *http.Request)
var err error
var errorCode *ErrorCode
defer func() {
if errorCode != nil {
_ = errorCode.ServeResponse(w, r)
return
}
o.errorResponse(w, r, err, errorCode)
}()
var param = ParseRequestParam(r)
@ -1054,7 +1045,6 @@ func (o *ObjectNode) getBucketV2Handler(w http.ResponseWriter, r *http.Request)
if vol, err = o.getVol(param.Bucket()); err != nil {
log.LogErrorf("getBucketV2Handler: load volume fail: requestID(%v) volume(%v) err(%v)",
GetRequestID(r), param.Bucket(), err)
errorCode = NoSuchBucket
return
}
@ -1229,7 +1219,6 @@ func (o *ObjectNode) putObjectHandler(w http.ResponseWriter, r *http.Request) {
if vol, err = o.getVol(param.Bucket()); err != nil {
log.LogErrorf("putObjectHandler: load volume fail: requestID(%v) volume(%v) err(%v)",
GetRequestID(r), param.Bucket(), err)
errorCode = NoSuchBucket
return
}
@ -1402,10 +1391,7 @@ func (o *ObjectNode) getObjectTaggingHandler(w http.ResponseWriter, r *http.Requ
var err error
var errorCode *ErrorCode
defer func() {
if errorCode != nil {
_ = errorCode.ServeResponse(w, r)
return
}
o.errorResponse(w, r, err, errorCode)
}()
var param = ParseRequestParam(r)
@ -1421,7 +1407,6 @@ func (o *ObjectNode) getObjectTaggingHandler(w http.ResponseWriter, r *http.Requ
if vol, err = o.getVol(param.Bucket()); err != nil {
log.LogErrorf("getObjectTaggingHandler: load volume fail: requestID(%v) volume(%v) err(%v)",
GetRequestID(r), param.Bucket(), err)
errorCode = NoSuchBucket
return
}
var xattrInfo *proto.XAttrInfo
@ -1525,10 +1510,7 @@ func (o *ObjectNode) deleteObjectTaggingHandler(w http.ResponseWriter, r *http.R
var errorCode *ErrorCode
defer func() {
if errorCode != nil {
_ = errorCode.ServeResponse(w, r)
return
}
o.errorResponse(w, r, err, errorCode)
}()
var param = ParseRequestParam(r)
@ -1544,7 +1526,6 @@ func (o *ObjectNode) deleteObjectTaggingHandler(w http.ResponseWriter, r *http.R
if vol, err = o.getVol(param.Bucket()); err != nil {
log.LogErrorf("deleteObjectTaggingHandler: load volume fail: requestID(%v) err(%v)",
GetRequestID(r), err)
errorCode = NoSuchBucket
return
}
if err = vol.DeleteXAttr(param.object, XAttrKeyOSSTagging); err != nil {
@ -1564,10 +1545,7 @@ func (o *ObjectNode) putObjectXAttrHandler(w http.ResponseWriter, r *http.Reques
var errorCode *ErrorCode
defer func() {
if errorCode != nil {
_ = errorCode.ServeResponse(w, r)
return
}
o.errorResponse(w, r, err, errorCode)
}()
var param = ParseRequestParam(r)
@ -1579,7 +1557,6 @@ func (o *ObjectNode) putObjectXAttrHandler(w http.ResponseWriter, r *http.Reques
if vol, err = o.getVol(param.bucket); err != nil {
log.LogErrorf("pubObjectXAttrHandler: load volume fail: requestID(%v) err(%v)",
GetRequestID(r), err)
errorCode = NoSuchBucket
return
}
if len(param.Object()) == 0 {
@ -1628,10 +1605,7 @@ func (o *ObjectNode) getObjectXAttrHandler(w http.ResponseWriter, r *http.Reques
var errorCode *ErrorCode
defer func() {
if errorCode != nil {
_ = errorCode.ServeResponse(w, r)
return
}
o.errorResponse(w, r, err, errorCode)
}()
var param = ParseRequestParam(r)
@ -1643,7 +1617,6 @@ func (o *ObjectNode) getObjectXAttrHandler(w http.ResponseWriter, r *http.Reques
if vol, err = o.getVol(param.Bucket()); err != nil {
log.LogErrorf("getObjectXAttrHandler: load volume fail: requestID(%v) err(%v)",
GetRequestID(r), err)
errorCode = NoSuchBucket
return
}
if len(param.Object()) == 0 {
@ -1690,10 +1663,7 @@ func (o *ObjectNode) deleteObjectXAttrHandler(w http.ResponseWriter, r *http.Req
var errorCode *ErrorCode
defer func() {
if errorCode != nil {
_ = errorCode.ServeResponse(w, r)
return
}
o.errorResponse(w, r, err, errorCode)
}()
var param = ParseRequestParam(r)
if len(param.Bucket()) == 0 {
@ -1704,7 +1674,6 @@ func (o *ObjectNode) deleteObjectXAttrHandler(w http.ResponseWriter, r *http.Req
if vol, err = o.getVol(param.Bucket()); err != nil {
log.LogErrorf("deleteObjectXAttrHandler: load volume fail: requestID(%v) err(%v)",
GetRequestID(r), err)
errorCode = NoSuchBucket
return
}
if len(param.Object()) == 0 {
@ -1736,10 +1705,7 @@ func (o *ObjectNode) listObjectXAttrs(w http.ResponseWriter, r *http.Request) {
var errorCode *ErrorCode
defer func() {
if errorCode != nil {
_ = errorCode.ServeResponse(w, r)
return
}
o.errorResponse(w, r, err, errorCode)
}()
var param = ParseRequestParam(r)
if len(param.Bucket()) == 0 {
@ -1750,7 +1716,6 @@ func (o *ObjectNode) listObjectXAttrs(w http.ResponseWriter, r *http.Request) {
if vol, err = o.getVol(param.bucket); err != nil {
log.LogErrorf("listObjectXAttrs: load volume fail: requestID(%v) err(%v)",
GetRequestID(r), err)
errorCode = NoSuchBucket
return
}
if len(param.Object()) == 0 {

View File

@ -195,11 +195,6 @@ func (o *ObjectNode) policyCheck(f http.HandlerFunc) http.HandlerFunc {
if bucket := mux.Vars(r)["bucket"]; len(bucket) > 0 {
if volume, err = o.getVol(bucket); err != nil {
allowed = false
if err == proto.ErrVolNotExists {
ec = NoSuchBucket
return
}
ec = InternalErrorCode(err)
return
}
}

View File

@ -43,7 +43,6 @@ func (o *ObjectNode) getBucketPolicyHandler(w http.ResponseWriter, r *http.Reque
if vol, err = o.getVol(param.Bucket()); err != nil {
log.LogErrorf("getBucketPolicyHandler: load volume fail: requestID(%v) err(%v)",
GetRequestID(r), err)
ec = NoSuchBucket
return
}
var policy *Policy
@ -91,7 +90,6 @@ func (o *ObjectNode) putBucketPolicyHandler(w http.ResponseWriter, r *http.Reque
if vol, err = o.getVol(param.Bucket()); err != nil {
log.LogErrorf("putBucketPolicyHandler: load volume fail: requestID(%v) err(%v)",
GetRequestID(r), err)
ec = NoSuchBucket
return
}

View File

@ -1454,6 +1454,10 @@ func (mw *MetaWrapper) GetMultipart_ll(path, multipartId string) (info *proto.Mu
return
}
var mp = mw.getPartitionByID(mpId)
if mp == nil {
err = syscall.ENOENT
return
}
status, multipartInfo, err := mw.getMultipart(mp, path, multipartId)
if err != nil || status != statusOK {
log.LogErrorf("GetMultipartRequest: err(%v) status(%v)", err, status)
@ -1476,6 +1480,10 @@ func (mw *MetaWrapper) AddMultipartPart_ll(path, multipartId string, partId uint
}
}
var mp = mw.getPartitionByID(mpId)
if mp == nil {
err = syscall.ENOENT
return
}
status, oldInode, updated, err := mw.addMultipartPart(mp, path, multipartId, partId, size, md5, inodeInfo)
if err != nil || status != statusOK {
log.LogErrorf("AddMultipartPart_ll: err(%v) status(%v)", err, status)
@ -1498,6 +1506,10 @@ func (mw *MetaWrapper) RemoveMultipart_ll(path, multipartID string) (err error)
}
}
var mp = mw.getPartitionByID(mpId)
if mp == nil {
err = syscall.ENOENT
return
}
status, err := mw.removeMultipart(mp, path, multipartID)
if err != nil || status != statusOK {
log.LogErrorf(" RemoveMultipart_ll: partition remove multipart fail: "+