diff --git a/objectnode/acl_handler.go b/objectnode/acl_handler.go index bc5719457..9235938fe 100644 --- a/objectnode/acl_handler.go +++ b/objectnode/acl_handler.go @@ -40,10 +40,9 @@ func (o *ObjectNode) getBucketACLHandler(w http.ResponseWriter, r *http.Request) return } var vol *Volume - if vol, err = o.vm.Volume(param.bucket); err != nil { + if vol, err = o.getVol(param.bucket); err != nil { log.LogErrorf("getBucketACLHandler: load volume fail: requestID(%v) volume(%v) err(%v)", GetRequestID(r), param.bucket, err) - ec = NoSuchBucket return } var acl *AccessControlPolicy @@ -91,10 +90,9 @@ func (o *ObjectNode) putBucketACLHandler(w http.ResponseWriter, r *http.Request) } var vol *Volume - if vol, err = o.vm.Volume(param.bucket); err != nil { + if vol, err = o.getVol(param.bucket); err != nil { log.LogErrorf("putBucketACLHandler: load volume fail: requestID(%v) volume(%v) err(%v)", GetRequestID(r), param.bucket, err) - ec = NoSuchBucket return } var acl *AccessControlPolicy @@ -135,10 +133,9 @@ func (o *ObjectNode) getObjectACLHandler(w http.ResponseWriter, r *http.Request) } var vol *Volume - if vol, err = o.vm.Volume(param.bucket); err != nil { + if vol, err = o.getVol(param.bucket); err != nil { log.LogErrorf("getObjectACLHandler: load volume fail: requestID(%v) volume(%v) err(%v)", GetRequestID(r), param.bucket, err) - ec = NoSuchBucket return } var acl *AccessControlPolicy @@ -189,10 +186,9 @@ func (o *ObjectNode) putObjectACLHandler(w http.ResponseWriter, r *http.Request) } var vol *Volume - if vol, err = o.vm.Volume(param.bucket); err != nil { + if vol, err = o.getVol(param.bucket); err != nil { log.LogErrorf("putObjectACLHandler: load volume fail: requestID(%v) volume(%v) err(%v)", GetRequestID(r), param.bucket, err) - ec = NoSuchBucket return } var acl, oldAcl *AccessControlPolicy diff --git a/objectnode/api_handler_bucket.go b/objectnode/api_handler_bucket.go index e03211f8b..64a42fb22 100644 --- a/objectnode/api_handler_bucket.go +++ b/objectnode/api_handler_bucket.go @@ -150,8 +150,9 @@ func (o *ObjectNode) deleteBucketHandler(w http.ResponseWriter, r *http.Request) } var vol *Volume - if vol, err = o.vm.Volume(bucket); err != nil { - errorCode = NoSuchBucket + if vol, err = o.getVol(bucket); err != nil { + log.LogErrorf("deleteBucketHandler: load volume fail: requestID(%v) volume(%v) err(%v)", + GetRequestID(r), bucket, err) return } if !vol.IsEmpty() { @@ -212,8 +213,7 @@ func (o *ObjectNode) listBucketsHandler(w http.ResponseWriter, r *http.Request) Buckets []bucket `xml:"Buckets>Bucket"` } - var output = listBucketsOutput{} - + output := listBucketsOutput{} ownVols := userInfo.Policy.OwnVols for _, ownVol := range ownVols { var vol *Volume @@ -252,22 +252,30 @@ func (o *ObjectNode) getBucketLocation(w http.ResponseWriter, r *http.Request) { // Get bucket tagging // API reference: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketTagging.html func (o *ObjectNode) getBucketTaggingHandler(w http.ResponseWriter, r *http.Request) { - var err error + var ( + err error + errorCode *ErrorCode + ) + defer func() { + o.errorResponse(w, r, err, errorCode) + }() + var param = ParseRequestParam(r) if len(param.Bucket()) == 0 { - _ = InvalidBucketName.ServeResponse(w, r) + errorCode = InvalidBucketName return } var vol *Volume - if vol, err = o.vm.Volume(param.Bucket()); err != nil { - _ = NoSuchBucket.ServeResponse(w, r) + if vol, err = o.getVol(param.Bucket()); err != nil { + log.LogErrorf("getBucketTaggingHandler: load volume fail: requestID(%v) volume(%v) err(%v)", + GetRequestID(r), param.Bucket(), err) return } var xattrInfo *proto.XAttrInfo if xattrInfo, err = vol.GetXAttr("/", XAttrKeyOSSTagging); err != nil { log.LogErrorf("getBucketTaggingHandler: Volume get XAttr fail: requestID(%v) err(%v)", GetRequestID(r), err) - _ = InternalErrorCode(err).ServeResponse(w, r) + errorCode = InternalErrorCode(err) return } ossTaggingData := xattrInfo.Get(XAttrKeyOSSTagging) @@ -275,12 +283,12 @@ func (o *ObjectNode) getBucketTaggingHandler(w http.ResponseWriter, r *http.Requ var encoded []byte if nil == output || len(output.TagSet) == 0 { - _ = NoSuchTagSetError.ServeResponse(w, r) + errorCode = NoSuchTagSetError return } else { if encoded, err = MarshalXMLEntity(output); err != nil { log.LogErrorf("getBucketTaggingHandler: encode output fail: requestID(%v) err(%v)", GetRequestID(r), err) - _ = InternalErrorCode(err).ServeResponse(w, r) + errorCode = InternalErrorCode(err) return } } @@ -294,13 +302,12 @@ func (o *ObjectNode) getBucketTaggingHandler(w http.ResponseWriter, r *http.Requ // Put bucket tagging // API reference: https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketTagging.html func (o *ObjectNode) putBucketTaggingHandler(w http.ResponseWriter, r *http.Request) { - var err error - var errorCode *ErrorCode - + var ( + err error + errorCode *ErrorCode + ) defer func() { - if errorCode != nil { - _ = errorCode.ServeResponse(w, r) - } + o.errorResponse(w, r, err, errorCode) }() var param = ParseRequestParam(r) @@ -309,22 +316,23 @@ func (o *ObjectNode) putBucketTaggingHandler(w http.ResponseWriter, r *http.Requ return } var vol *Volume - if vol, err = o.vm.Volume(param.Bucket()); err != nil { - errorCode = NoSuchBucket + if vol, err = o.getVol(param.Bucket()); err != nil { + log.LogErrorf("putBucketTaggingHandler: load volume fail: requestID(%v) volume(%v) err(%v)", + GetRequestID(r), param.Bucket(), err) return } var requestBody []byte if requestBody, err = ioutil.ReadAll(r.Body); err != nil { log.LogErrorf("putBucketTaggingHandler: read request body data fail: requestID(%v) err(%v)", GetRequestID(r), err) - _ = InvalidArgument.ServeResponse(w, r) + errorCode = InvalidArgument return } var tagging = NewTagging() if err = UnmarshalXMLEntity(requestBody, tagging); err != nil { log.LogWarnf("putBucketTaggingHandler: decode request body fail: requestID(%v) err(%v)", GetRequestID(r), err) - _ = InvalidArgument.ServeResponse(w, r) + errorCode = InvalidArgument return } validateRes, errorCode := tagging.Validate() @@ -334,8 +342,7 @@ func (o *ObjectNode) putBucketTaggingHandler(w http.ResponseWriter, r *http.Requ } if err = vol.SetXAttr("/", XAttrKeyOSSTagging, []byte(tagging.Encode()), false); err != nil { - _ = InternalErrorCode(err).ServeResponse(w, r) - return + errorCode = InternalErrorCode(err) } return @@ -348,29 +355,25 @@ func (o *ObjectNode) deleteBucketTaggingHandler(w http.ResponseWriter, r *http.R err error 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 { errorCode = InvalidBucketName return } var vol *Volume - if vol, err = o.vm.Volume(param.Bucket()); err != nil { - log.LogErrorf("deleteBucketTaggingHandler: load Volume fail: requestID(%v) Volume(%v) err(%v)", GetRequestID(r), param.bucket, err) - errorCode = NoSuchBucket + if vol, err = o.getVol(param.Bucket()); err != nil { + log.LogErrorf("deleteBucketTaggingHandler: load volume fail: requestID(%v) volume(%v) err(%v)", + GetRequestID(r), param.Bucket(), err) return } if err = vol.DeleteXAttr("/", XAttrKeyOSSTagging); err != nil { - log.LogErrorf("deleteBucketTaggingHandler: Volume delete tagging xattr fail: requestID(%v) err(%v)", GetRequestID(r), err) - _ = InternalErrorCode(err).ServeResponse(w, r) + log.LogErrorf("deleteBucketTaggingHandler: delete tagging xattr fail: requestID(%v) volume(%v) err(%v)", + GetRequestID(r), param.Bucket(), err) + errorCode = InternalErrorCode(err) return } w.WriteHeader(http.StatusNoContent) diff --git a/objectnode/api_handler_multipart.go b/objectnode/api_handler_multipart.go index 3229cfdda..3186894d9 100644 --- a/objectnode/api_handler_multipart.go +++ b/objectnode/api_handler_multipart.go @@ -38,8 +38,10 @@ var ( // Create multipart upload // API reference: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html func (o *ObjectNode) createMultipleUploadHandler(w http.ResponseWriter, r *http.Request) { - var err error - var errorCode *ErrorCode + var ( + err error + errorCode *ErrorCode + ) defer func() { o.errorResponse(w, r, err, errorCode) }() @@ -58,10 +60,9 @@ func (o *ObjectNode) createMultipleUploadHandler(w http.ResponseWriter, r *http. return } var vol *Volume - if vol, err = o.vm.Volume(param.Bucket()); err != nil { + if vol, err = o.getVol(param.Bucket()); err != nil { log.LogErrorf("createMultipleUploadHandler: load volume fail: requestID(%v) err(%v)", GetRequestID(r), err) - errorCode = NoSuchBucket return } @@ -155,17 +156,12 @@ func (o *ObjectNode) createMultipleUploadHandler(w http.ResponseWriter, r *http. // Uploads a part in a multipart upload. // API reference: https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html . func (o *ObjectNode) uploadPartHandler(w http.ResponseWriter, r *http.Request) { - var ( err error errorCode *ErrorCode ) - defer func() { - if errorCode != nil { - _ = errorCode.ServeResponse(w, r) - return - } + o.errorResponse(w, r, err, errorCode) }() // check args @@ -198,10 +194,9 @@ func (o *ObjectNode) uploadPartHandler(w http.ResponseWriter, r *http.Request) { } var vol *Volume - if vol, err = o.vm.Volume(param.Bucket()); err != nil { + if vol, err = o.getVol(param.Bucket()); err != nil { log.LogErrorf("uploadPartHandler: load volume fail: requestID(%v) err(%v)", GetRequestID(r), err) - errorCode = NoSuchBucket return } @@ -237,7 +232,6 @@ func (o *ObjectNode) uploadPartHandler(w http.ResponseWriter, r *http.Request) { // Uploads a part in a multipart upload by copying a existed object. // API reference: https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html . func (o *ObjectNode) uploadPartCopyHandler(w http.ResponseWriter, r *http.Request) { - var ( err error errorCode *ErrorCode @@ -350,22 +344,15 @@ func (o *ObjectNode) uploadPartCopyHandler(w http.ResponseWriter, r *http.Reques // List parts // API reference: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html func (o *ObjectNode) listPartsHandler(w http.ResponseWriter, r *http.Request) { - log.LogInfof("listPartsHandler: list parts, requestID(%v) remote(%v)", GetRequestID(r), r.RemoteAddr) - var ( err error errorCode *ErrorCode ) - defer func() { - if errorCode != nil { - _ = errorCode.ServeResponse(w, r) - return - } + o.errorResponse(w, r, err, errorCode) }() var param = ParseRequestParam(r) - // get upload id and part number uploadId := param.GetVar(ParamUploadId) maxParts := param.GetVar(ParamMaxParts) @@ -376,7 +363,7 @@ func (o *ObjectNode) listPartsHandler(w http.ResponseWriter, r *http.Request) { if uploadId == "" { log.LogErrorf("listPartsHandler: illegal update ID, requestID(%v) err(%v)", GetRequestID(r), err) - _ = InvalidArgument.ServeResponse(w, r) + errorCode = InvalidArgument return } @@ -386,7 +373,7 @@ func (o *ObjectNode) listPartsHandler(w http.ResponseWriter, r *http.Request) { maxPartsInt, err = strconv.ParseUint(maxParts, 10, 64) if err != nil { log.LogErrorf("listPartsHandler: parse max parts fail, requestID(%v) raw(%v) err(%v)", GetRequestID(r), maxParts, err) - _ = InvalidArgument.ServeResponse(w, r) + errorCode = InvalidArgument return } if maxPartsInt > MaxParts { @@ -397,7 +384,7 @@ func (o *ObjectNode) listPartsHandler(w http.ResponseWriter, r *http.Request) { res, err := strconv.ParseUint(partNoMarker, 10, 64) if err != nil { log.LogErrorf("listPatsHandler: parse part number marker fail, requestID(%v) raw(%v) err(%v)", GetRequestID(r), partNoMarker, err) - _ = InvalidArgument.ServeResponse(w, r) + errorCode = InvalidArgument return } partNoMarkerInt = res @@ -413,10 +400,9 @@ func (o *ObjectNode) listPartsHandler(w http.ResponseWriter, r *http.Request) { } var vol *Volume - if vol, err = o.vm.Volume(param.Bucket()); err != nil { + if vol, err = o.getVol(param.Bucket()); err != nil { log.LogErrorf("listPartsHandler: load volume fail: requestID(%v) err(%v)", GetRequestID(r), err) - errorCode = NoSuchBucket return } @@ -540,22 +526,15 @@ func (o *ObjectNode) checkReqParts(reqParts *CompleteMultipartUploadRequest, mul // Complete multipart // API reference: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html func (o *ObjectNode) completeMultipartUploadHandler(w http.ResponseWriter, r *http.Request) { - log.LogInfof("completeMultipartUploadHandler: complete multiple upload, requestID(%v) remote(%v)", GetRequestID(r), r.RemoteAddr) - var ( err error errorCode *ErrorCode ) - defer func() { - if errorCode != nil { - _ = errorCode.ServeResponse(w, r) - return - } + o.errorResponse(w, r, err, errorCode) }() var param = ParseRequestParam(r) - // get upload id and part number uploadId := param.GetVar(ParamUploadId) if uploadId == "" { @@ -578,10 +557,9 @@ func (o *ObjectNode) completeMultipartUploadHandler(w http.ResponseWriter, r *ht } var vol *Volume - if vol, err = o.vm.Volume(param.Bucket()); err != nil { + if vol, err = o.getVol(param.Bucket()); err != nil { log.LogErrorf("completeMultipartUploadHandler: load volume fail: requestID(%v) err(%v)", GetRequestID(r), err) - errorCode = NoSuchBucket return } @@ -692,23 +670,16 @@ func (o *ObjectNode) completeMultipartUploadHandler(w http.ResponseWriter, r *ht // Abort multipart // API reference: https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html . func (o *ObjectNode) abortMultipartUploadHandler(w http.ResponseWriter, r *http.Request) { - log.LogInfof("abortMultipartUploadHandler: abort multiple upload, requestID(%v) remote(%v)", GetRequestID(r), r.RemoteAddr) - var ( err error errorCode *ErrorCode ) - defer func() { - if errorCode != nil { - _ = errorCode.ServeResponse(w, r) - return - } + o.errorResponse(w, r, err, errorCode) }() // check args var param = ParseRequestParam(r) - uploadId := param.GetVar(ParamUploadId) if uploadId == "" { errorCode = InvalidArgument @@ -724,10 +695,9 @@ func (o *ObjectNode) abortMultipartUploadHandler(w http.ResponseWriter, r *http. } var vol *Volume - if vol, err = o.vm.Volume(param.Bucket()); err != nil { + if vol, err = o.getVol(param.Bucket()); err != nil { log.LogErrorf("abortMultipartUploadHandler: load volume fail: requestID(%v) err(%v)", GetRequestID(r), err) - errorCode = NoSuchBucket return } @@ -744,7 +714,6 @@ func (o *ObjectNode) abortMultipartUploadHandler(w http.ResponseWriter, r *http. return } log.LogDebugf("abortMultipartUploadHandler: Volume abort multipart, requestID(%v) uploadID(%v) path(%v)", GetRequestID(r), uploadId, param.Object()) - //errorCode = NoContent w.WriteHeader(http.StatusNoContent) return } @@ -752,22 +721,15 @@ func (o *ObjectNode) abortMultipartUploadHandler(w http.ResponseWriter, r *http. // List multipart uploads // API reference: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html func (o *ObjectNode) listMultipartUploadsHandler(w http.ResponseWriter, r *http.Request) { - log.LogInfof("listMultipartUploadsHandler: list multipart uploads, requestID(%v) remote(%v)", GetRequestID(r), r.RemoteAddr) - var ( err error errorCode *ErrorCode ) - defer func() { - if errorCode != nil { - _ = errorCode.ServeResponse(w, r) - return - } + o.errorResponse(w, r, err, errorCode) }() var param = ParseRequestParam(r) - // get list uploads parameter prefix := param.GetVar(ParamPrefix) keyMarker := param.GetVar(ParamKeyMarker) @@ -782,7 +744,7 @@ func (o *ObjectNode) listMultipartUploadsHandler(w http.ResponseWriter, r *http. maxUploadsInt, err = strconv.ParseUint(maxUploads, 10, 64) if err != nil { log.LogErrorf("listMultipartUploadsHandler: parse max uploads option fail: requestID(%v), err(%v)", GetRequestID(r), err) - _ = InvalidArgument.ServeResponse(w, r) + errorCode = InvalidArgument return } if maxUploadsInt > MaxUploads { @@ -796,10 +758,9 @@ func (o *ObjectNode) listMultipartUploadsHandler(w http.ResponseWriter, r *http. } var vol *Volume - if vol, err = o.vm.Volume(param.Bucket()); err != nil { + if vol, err = o.getVol(param.Bucket()); err != nil { log.LogErrorf("listMultipartUploadsHandler: load volume fail: requestID(%v) err(%v)", GetRequestID(r), err) - errorCode = NoSuchBucket return } diff --git a/objectnode/api_handler_object.go b/objectnode/api_handler_object.go index 944c8af71..404c019a0 100644 --- a/objectnode/api_handler_object.go +++ b/objectnode/api_handler_object.go @@ -46,17 +46,12 @@ func (o *ObjectNode) getObjectHandler(w http.ResponseWriter, r *http.Request) { err error errorCode *ErrorCode ) - var startGet = time.Now() defer func() { - if errorCode != nil { - _ = errorCode.ServeResponse(w, r) - return - } + o.errorResponse(w, r, err, errorCode) }() var param = ParseRequestParam(r) - if param.Bucket() == "" { errorCode = InvalidBucketName return @@ -66,10 +61,9 @@ func (o *ObjectNode) getObjectHandler(w http.ResponseWriter, r *http.Request) { return } var vol *Volume - if vol, err = o.vm.Volume(param.Bucket()); err != nil { + if vol, err = o.getVol(param.Bucket()); err != nil { log.LogErrorf("getObjectHandler: load volume fail: requestID(%v) volume(%v) path(%v) err(%v)", GetRequestID(r), param.Bucket(), param.Object(), err) - errorCode = NoSuchBucket return } // parse http range option @@ -358,10 +352,7 @@ func (o *ObjectNode) headObjectHandler(w http.ResponseWriter, r *http.Request) { errorCode *ErrorCode ) defer func() { - if errorCode != nil { - _ = errorCode.ServeResponse(w, r) - return - } + o.errorResponse(w, r, err, errorCode) }() // check args @@ -376,10 +367,9 @@ func (o *ObjectNode) headObjectHandler(w http.ResponseWriter, r *http.Request) { } var vol *Volume - if vol, err = o.vm.Volume(param.Bucket()); err != nil { + if vol, err = o.getVol(param.Bucket()); err != nil { log.LogErrorf("headObjectHandler: load volume fail: requestID(%v) err(%v)", GetRequestID(r), err) - errorCode = NoSuchBucket return } @@ -533,10 +523,9 @@ func (o *ObjectNode) deleteObjectsHandler(w http.ResponseWriter, r *http.Request } var vol *Volume - if vol, err = o.vm.Volume(param.Bucket()); err != nil { + if vol, err = o.getVol(param.Bucket()); err != nil { log.LogErrorf("deleteObjectsHandler: load volume fail: requestID(%v) volume(%v) err(%v)", GetRequestID(r), param.Bucket(), err) - errorCode = NoSuchBucket return } @@ -1337,21 +1326,15 @@ func (o *ObjectNode) putObjectHandler(w http.ResponseWriter, r *http.Request) { // Delete object // API reference: https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html . func (o *ObjectNode) deleteObjectHandler(w http.ResponseWriter, r *http.Request) { - var ( err error errorCode *ErrorCode ) - defer func() { - if errorCode != nil { - _ = errorCode.ServeResponse(w, r) - return - } + o.errorResponse(w, r, err, errorCode) }() var param = ParseRequestParam(r) - if param.Bucket() == "" { errorCode = InvalidBucketName return @@ -1362,10 +1345,9 @@ func (o *ObjectNode) deleteObjectHandler(w http.ResponseWriter, r *http.Request) } var vol *Volume - if vol, err = o.vm.Volume(param.Bucket()); err != nil { + if vol, err = o.getVol(param.Bucket()); err != nil { log.LogErrorf("deleteObjectHandler: load volume fail: requestID(%v) volume(%v) err(%v)", GetRequestID(r), param.Bucket(), err) - errorCode = NoSuchBucket return } @@ -1442,16 +1424,11 @@ func (o *ObjectNode) getObjectTaggingHandler(w http.ResponseWriter, r *http.Requ func (o *ObjectNode) putObjectTaggingHandler(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) - if param.Bucket() == "" { errorCode = InvalidBucketName return @@ -1462,10 +1439,9 @@ func (o *ObjectNode) putObjectTaggingHandler(w http.ResponseWriter, r *http.Requ } var vol *Volume - if vol, err = o.vm.Volume(param.Bucket()); err != nil { + if vol, err = o.getVol(param.Bucket()); err != nil { log.LogErrorf("putObjectTaggingHandler: load volume fail: requestID(%v) err(%v)", GetRequestID(r), err) - errorCode = NoSuchBucket return } @@ -1508,7 +1484,6 @@ func (o *ObjectNode) putObjectTaggingHandler(w http.ResponseWriter, r *http.Requ func (o *ObjectNode) deleteObjectTaggingHandler(w http.ResponseWriter, r *http.Request) { var err error var errorCode *ErrorCode - defer func() { o.errorResponse(w, r, err, errorCode) }() @@ -1543,7 +1518,6 @@ func (o *ObjectNode) deleteObjectTaggingHandler(w http.ResponseWriter, r *http.R func (o *ObjectNode) putObjectXAttrHandler(w http.ResponseWriter, r *http.Request) { var err error var errorCode *ErrorCode - defer func() { o.errorResponse(w, r, err, errorCode) }() @@ -1565,20 +1539,20 @@ func (o *ObjectNode) putObjectXAttrHandler(w http.ResponseWriter, r *http.Reques } var requestBody []byte if requestBody, err = ioutil.ReadAll(r.Body); err != nil { - _ = ErrorCode{ + errorCode = &ErrorCode{ ErrorCode: "BadRequest", ErrorMessage: err.Error(), StatusCode: http.StatusBadRequest, - }.ServeResponse(w, r) + } return } var putXAttrRequest = PutXAttrRequest{} if err = xml.Unmarshal(requestBody, &putXAttrRequest); err != nil { - _ = ErrorCode{ + errorCode = &ErrorCode{ ErrorCode: "BadRequest", ErrorMessage: err.Error(), StatusCode: http.StatusBadRequest, - }.ServeResponse(w, r) + } return } var key, value = putXAttrRequest.XAttr.Key, putXAttrRequest.XAttr.Value @@ -1603,7 +1577,6 @@ func (o *ObjectNode) putObjectXAttrHandler(w http.ResponseWriter, r *http.Reques func (o *ObjectNode) getObjectXAttrHandler(w http.ResponseWriter, r *http.Request) { var err error var errorCode *ErrorCode - defer func() { o.errorResponse(w, r, err, errorCode) }() @@ -1661,10 +1634,10 @@ func (o *ObjectNode) getObjectXAttrHandler(w http.ResponseWriter, r *http.Reques func (o *ObjectNode) deleteObjectXAttrHandler(w http.ResponseWriter, r *http.Request) { var err error var errorCode *ErrorCode - defer func() { o.errorResponse(w, r, err, errorCode) }() + var param = ParseRequestParam(r) if len(param.Bucket()) == 0 { errorCode = InvalidBucketName @@ -1703,10 +1676,10 @@ func (o *ObjectNode) deleteObjectXAttrHandler(w http.ResponseWriter, r *http.Req func (o *ObjectNode) listObjectXAttrs(w http.ResponseWriter, r *http.Request) { var err error var errorCode *ErrorCode - defer func() { o.errorResponse(w, r, err, errorCode) }() + var param = ParseRequestParam(r) if len(param.Bucket()) == 0 { errorCode = InvalidBucketName @@ -1719,7 +1692,7 @@ func (o *ObjectNode) listObjectXAttrs(w http.ResponseWriter, r *http.Request) { return } if len(param.Object()) == 0 { - _ = &InvalidKey + errorCode = InvalidKey return } diff --git a/objectnode/cors_handler.go b/objectnode/cors_handler.go index 230674904..6d878ac7c 100644 --- a/objectnode/cors_handler.go +++ b/objectnode/cors_handler.go @@ -32,8 +32,9 @@ func (o *ObjectNode) getBucketCorsHandler(w http.ResponseWriter, r *http.Request } var vol *Volume - if vol, err = o.vm.Volume(param.Bucket()); err != nil { - errorCode = NoSuchBucket + if vol, err = o.getVol(param.Bucket()); err != nil { + log.LogErrorf("getBucketCorsHandler: load volume fail: requestID(%v) volume(%v) err(%v)", + GetRequestID(r), param.Bucket(), err) return } @@ -77,8 +78,9 @@ func (o *ObjectNode) putBucketCorsHandler(w http.ResponseWriter, r *http.Request return } var vol *Volume - if vol, err = o.vm.Volume(param.Bucket()); err != nil { - errorCode = NoSuchBucket + if vol, err = o.getVol(param.Bucket()); err != nil { + log.LogErrorf("putBucketCorsHandler: load volume fail: requestID(%v) volume(%v) err(%v)", + GetRequestID(r), param.Bucket(), err) return } md5 := r.Header.Get(HeaderNameContentMD5) @@ -132,8 +134,9 @@ func (o *ObjectNode) deleteBucketCorsHandler(w http.ResponseWriter, r *http.Requ return } var vol *Volume - if vol, err = o.vm.Volume(param.Bucket()); err != nil { - errorCode = NoSuchBucket + if vol, err = o.getVol(param.Bucket()); err != nil { + log.LogErrorf("deleteBucketCorsHandler: load volume fail: requestID(%v) volume(%v) err(%v)", + GetRequestID(r), param.Bucket(), err) return } if err = deleteBucketCors(vol); err != nil { diff --git a/objectnode/policy_handler.go b/objectnode/policy_handler.go index 0174a5b06..fa36f6724 100644 --- a/objectnode/policy_handler.go +++ b/objectnode/policy_handler.go @@ -16,11 +16,12 @@ package objectnode import ( "encoding/json" - "github.com/cubefs/cubefs/proto" "io" "io/ioutil" "net/http" + "github.com/cubefs/cubefs/proto" + "github.com/cubefs/cubefs/util/log" ) @@ -126,22 +127,30 @@ func (o *ObjectNode) putBucketPolicyHandler(w http.ResponseWriter, r *http.Reque // https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketPolicy.html func (o *ObjectNode) deleteBucketPolicyHandler(w http.ResponseWriter, r *http.Request) { - log.LogInfof("Delete bucket policy...") + var ( + err error + errorCode *ErrorCode + ) + defer func() { + o.errorResponse(w, r, err, errorCode) + }() - var err error var param = ParseRequestParam(r) if param.Bucket() == "" { - _ = NoSuchBucket.ServeResponse(w, r) + errorCode = NoSuchBucket return } var vol *Volume - if vol, err = o.vm.Volume(param.Bucket()); err != nil { - _ = NoSuchBucket.ServeResponse(w, r) + if vol, err = o.getVol(param.Bucket()); err != nil { + log.LogErrorf("deleteBucketPolicyHandler: load volume fail: requestID(%v) volume(%v) err(%v)", + GetRequestID(r), param.Bucket(), err) return } if err = deleteBucketPolicy(vol); err != nil { - _ = InternalErrorCode(err).ServeResponse(w, r) + log.LogErrorf("deleteBucketPolicyHandler: delete policy fail: requestID(%v) volume(%v) err(%v)", + GetRequestID(r), param.Bucket(), err) + errorCode = InternalErrorCode(err) return } vol.metaLoader.storePolicy(nil)