mirror of
https://github.com/minio/minio.git
synced 2025-01-13 07:53:21 -05:00
Add errorIf for all API handlers to print call trace upon errors
This commit is contained in:
parent
e510e97f28
commit
2721bef8da
@ -30,6 +30,7 @@ func (api MinioAPI) isValidOp(w http.ResponseWriter, req *http.Request, acceptsC
|
|||||||
|
|
||||||
bucketMetadata, err := api.Donut.GetBucketMetadata(bucket, nil)
|
bucketMetadata, err := api.Donut.GetBucketMetadata(bucket, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errorIf(err.Trace(), "GetBucketMetadata failed.", nil)
|
||||||
switch err.ToGoError().(type) {
|
switch err.ToGoError().(type) {
|
||||||
case donut.BucketNotFound:
|
case donut.BucketNotFound:
|
||||||
writeErrorResponse(w, req, NoSuchBucket, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, NoSuchBucket, acceptsContentType, req.URL.Path)
|
||||||
@ -38,7 +39,6 @@ func (api MinioAPI) isValidOp(w http.ResponseWriter, req *http.Request, acceptsC
|
|||||||
writeErrorResponse(w, req, InvalidBucketName, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InvalidBucketName, acceptsContentType, req.URL.Path)
|
||||||
return false
|
return false
|
||||||
default:
|
default:
|
||||||
// log.Error.Println(err.Trace())
|
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -100,13 +100,25 @@ func (api MinioAPI) ListMultipartUploadsHandler(w http.ResponseWriter, req *http
|
|||||||
var err *probe.Error
|
var err *probe.Error
|
||||||
signature, err = initSignatureV4(req)
|
signature, err = initSignatureV4(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errorIf(err.Trace(), "Initializing signature v4 failed.", nil)
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resources, err := api.Donut.ListMultipartUploads(bucket, resources, signature)
|
resources, err := api.Donut.ListMultipartUploads(bucket, resources, signature)
|
||||||
if err == nil {
|
if err != nil {
|
||||||
|
errorIf(err.Trace(), "ListMultipartUploads failed.", nil)
|
||||||
|
switch err.ToGoError().(type) {
|
||||||
|
case donut.SignatureDoesNotMatch:
|
||||||
|
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
||||||
|
case donut.BucketNotFound:
|
||||||
|
writeErrorResponse(w, req, NoSuchBucket, acceptsContentType, req.URL.Path)
|
||||||
|
default:
|
||||||
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
// generate response
|
// generate response
|
||||||
response := generateListMultipartUploadsResponse(bucket, resources)
|
response := generateListMultipartUploadsResponse(bucket, resources)
|
||||||
encodedSuccessResponse := encodeSuccessResponse(response, acceptsContentType)
|
encodedSuccessResponse := encodeSuccessResponse(response, acceptsContentType)
|
||||||
@ -114,17 +126,6 @@ func (api MinioAPI) ListMultipartUploadsHandler(w http.ResponseWriter, req *http
|
|||||||
setCommonHeaders(w, getContentTypeString(acceptsContentType), len(encodedSuccessResponse))
|
setCommonHeaders(w, getContentTypeString(acceptsContentType), len(encodedSuccessResponse))
|
||||||
// write body
|
// write body
|
||||||
w.Write(encodedSuccessResponse)
|
w.Write(encodedSuccessResponse)
|
||||||
return
|
|
||||||
}
|
|
||||||
switch err.ToGoError().(type) {
|
|
||||||
case donut.SignatureDoesNotMatch:
|
|
||||||
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
|
||||||
case donut.BucketNotFound:
|
|
||||||
writeErrorResponse(w, req, NoSuchBucket, acceptsContentType, req.URL.Path)
|
|
||||||
default:
|
|
||||||
// log.Error.Println(err.Trace())
|
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListObjectsHandler - GET Bucket (List Objects)
|
// ListObjectsHandler - GET Bucket (List Objects)
|
||||||
@ -171,6 +172,7 @@ func (api MinioAPI) ListObjectsHandler(w http.ResponseWriter, req *http.Request)
|
|||||||
var err *probe.Error
|
var err *probe.Error
|
||||||
signature, err = initSignatureV4(req)
|
signature, err = initSignatureV4(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errorIf(err.Trace(), "Initializing signature v4 failed.", nil)
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -199,7 +201,7 @@ func (api MinioAPI) ListObjectsHandler(w http.ResponseWriter, req *http.Request)
|
|||||||
case donut.ObjectNameInvalid:
|
case donut.ObjectNameInvalid:
|
||||||
writeErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path)
|
||||||
default:
|
default:
|
||||||
// log.Error.Println(err.Trace())
|
errorIf(err.Trace(), "ListObjects failed.", nil)
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -232,6 +234,7 @@ func (api MinioAPI) ListBucketsHandler(w http.ResponseWriter, req *http.Request)
|
|||||||
var err *probe.Error
|
var err *probe.Error
|
||||||
signature, err = initSignatureV4(req)
|
signature, err = initSignatureV4(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errorIf(err.Trace(), "Initializing signature v4 failed.", nil)
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -252,7 +255,7 @@ func (api MinioAPI) ListBucketsHandler(w http.ResponseWriter, req *http.Request)
|
|||||||
case donut.SignatureDoesNotMatch:
|
case donut.SignatureDoesNotMatch:
|
||||||
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
||||||
default:
|
default:
|
||||||
// log.Error.Println(err.Trace())
|
errorIf(err.Trace(), "ListBuckets failed.", nil)
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -298,6 +301,7 @@ func (api MinioAPI) PutBucketHandler(w http.ResponseWriter, req *http.Request) {
|
|||||||
var err *probe.Error
|
var err *probe.Error
|
||||||
signature, err = initSignatureV4(req)
|
signature, err = initSignatureV4(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errorIf(err.Trace(), "Initializing signature v4 failed.", nil)
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -314,12 +318,8 @@ func (api MinioAPI) PutBucketHandler(w http.ResponseWriter, req *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
err := api.Donut.MakeBucket(bucket, getACLTypeString(aclType), req.Body, signature)
|
err := api.Donut.MakeBucket(bucket, getACLTypeString(aclType), req.Body, signature)
|
||||||
if err == nil {
|
if err != nil {
|
||||||
// Make sure to add Location information here only for bucket
|
errorIf(err.Trace(), "MakeBucket failed.", nil)
|
||||||
w.Header().Set("Location", "/"+bucket)
|
|
||||||
writeSuccessResponse(w, acceptsContentType)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
switch err.ToGoError().(type) {
|
switch err.ToGoError().(type) {
|
||||||
case donut.SignatureDoesNotMatch:
|
case donut.SignatureDoesNotMatch:
|
||||||
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
||||||
@ -330,9 +330,13 @@ func (api MinioAPI) PutBucketHandler(w http.ResponseWriter, req *http.Request) {
|
|||||||
case donut.BucketExists:
|
case donut.BucketExists:
|
||||||
writeErrorResponse(w, req, BucketAlreadyExists, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, BucketAlreadyExists, acceptsContentType, req.URL.Path)
|
||||||
default:
|
default:
|
||||||
// log.Error.Println(err.Trace())
|
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
}
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// Make sure to add Location information here only for bucket
|
||||||
|
w.Header().Set("Location", "/"+bucket)
|
||||||
|
writeSuccessResponse(w, acceptsContentType)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PutBucketACLHandler - PUT Bucket ACL
|
// PutBucketACLHandler - PUT Bucket ACL
|
||||||
@ -366,16 +370,15 @@ func (api MinioAPI) PutBucketACLHandler(w http.ResponseWriter, req *http.Request
|
|||||||
var err *probe.Error
|
var err *probe.Error
|
||||||
signature, err = initSignatureV4(req)
|
signature, err = initSignatureV4(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errorIf(err.Trace(), "Initializing signature v4 failed.", nil)
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err := api.Donut.SetBucketMetadata(bucket, map[string]string{"acl": getACLTypeString(aclType)}, signature)
|
err := api.Donut.SetBucketMetadata(bucket, map[string]string{"acl": getACLTypeString(aclType)}, signature)
|
||||||
if err == nil {
|
if err != nil {
|
||||||
writeSuccessResponse(w, acceptsContentType)
|
errorIf(err.Trace(), "PutBucketACL failed.", nil)
|
||||||
return
|
|
||||||
}
|
|
||||||
switch err.ToGoError().(type) {
|
switch err.ToGoError().(type) {
|
||||||
case donut.SignatureDoesNotMatch:
|
case donut.SignatureDoesNotMatch:
|
||||||
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
||||||
@ -384,9 +387,11 @@ func (api MinioAPI) PutBucketACLHandler(w http.ResponseWriter, req *http.Request
|
|||||||
case donut.BucketNotFound:
|
case donut.BucketNotFound:
|
||||||
writeErrorResponse(w, req, NoSuchBucket, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, NoSuchBucket, acceptsContentType, req.URL.Path)
|
||||||
default:
|
default:
|
||||||
// log.Error.Println(err.Trace())
|
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
}
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
writeSuccessResponse(w, acceptsContentType)
|
||||||
}
|
}
|
||||||
|
|
||||||
// HeadBucketHandler - HEAD Bucket
|
// HeadBucketHandler - HEAD Bucket
|
||||||
@ -416,16 +421,15 @@ func (api MinioAPI) HeadBucketHandler(w http.ResponseWriter, req *http.Request)
|
|||||||
var err *probe.Error
|
var err *probe.Error
|
||||||
signature, err = initSignatureV4(req)
|
signature, err = initSignatureV4(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errorIf(err.Trace(), "Initializing signature v4 failed.", nil)
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := api.Donut.GetBucketMetadata(bucket, signature)
|
_, err := api.Donut.GetBucketMetadata(bucket, signature)
|
||||||
if err == nil {
|
if err != nil {
|
||||||
writeSuccessResponse(w, acceptsContentType)
|
errorIf(err.Trace(), "GetBucketMetadata failed.", nil)
|
||||||
return
|
|
||||||
}
|
|
||||||
switch err.ToGoError().(type) {
|
switch err.ToGoError().(type) {
|
||||||
case donut.SignatureDoesNotMatch:
|
case donut.SignatureDoesNotMatch:
|
||||||
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
||||||
@ -434,7 +438,9 @@ func (api MinioAPI) HeadBucketHandler(w http.ResponseWriter, req *http.Request)
|
|||||||
case donut.BucketNameInvalid:
|
case donut.BucketNameInvalid:
|
||||||
writeErrorResponse(w, req, InvalidBucketName, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InvalidBucketName, acceptsContentType, req.URL.Path)
|
||||||
default:
|
default:
|
||||||
// log.Error.Println(err.Trace())
|
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
}
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
writeSuccessResponse(w, acceptsContentType)
|
||||||
}
|
}
|
||||||
|
@ -59,27 +59,15 @@ func (api MinioAPI) GetObjectHandler(w http.ResponseWriter, req *http.Request) {
|
|||||||
var err *probe.Error
|
var err *probe.Error
|
||||||
signature, err = initSignatureV4(req)
|
signature, err = initSignatureV4(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errorIf(err.Trace(), "Initializing signature v4 failed.", nil)
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
metadata, err := api.Donut.GetObjectMetadata(bucket, object, signature)
|
metadata, err := api.Donut.GetObjectMetadata(bucket, object, signature)
|
||||||
if err == nil {
|
|
||||||
var hrange *httpRange
|
|
||||||
hrange, err = getRequestedRange(req.Header.Get("Range"), metadata.Size)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
writeErrorResponse(w, req, InvalidRange, acceptsContentType, req.URL.Path)
|
errorIf(err.Trace(), "GetObject failed.", nil)
|
||||||
return
|
|
||||||
}
|
|
||||||
setObjectHeaders(w, metadata, hrange)
|
|
||||||
if _, err = api.Donut.GetObject(w, bucket, object, hrange.start, hrange.length); err != nil {
|
|
||||||
// unable to write headers, we've already printed data. Just close the connection.
|
|
||||||
// log.Error.Println(err.Trace())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
switch err.ToGoError().(type) {
|
switch err.ToGoError().(type) {
|
||||||
case donut.SignatureDoesNotMatch:
|
case donut.SignatureDoesNotMatch:
|
||||||
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
||||||
@ -92,9 +80,21 @@ func (api MinioAPI) GetObjectHandler(w http.ResponseWriter, req *http.Request) {
|
|||||||
case donut.ObjectNameInvalid:
|
case donut.ObjectNameInvalid:
|
||||||
writeErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path)
|
||||||
default:
|
default:
|
||||||
// log.Error.Println(err.Trace())
|
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
}
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var hrange *httpRange
|
||||||
|
hrange, err = getRequestedRange(req.Header.Get("Range"), metadata.Size)
|
||||||
|
if err != nil {
|
||||||
|
writeErrorResponse(w, req, InvalidRange, acceptsContentType, req.URL.Path)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
setObjectHeaders(w, metadata, hrange)
|
||||||
|
if _, err = api.Donut.GetObject(w, bucket, object, hrange.start, hrange.length); err != nil {
|
||||||
|
errorIf(err.Trace(), "GetObject failed.", nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// HeadObjectHandler - HEAD Object
|
// HeadObjectHandler - HEAD Object
|
||||||
@ -126,17 +126,15 @@ func (api MinioAPI) HeadObjectHandler(w http.ResponseWriter, req *http.Request)
|
|||||||
var err *probe.Error
|
var err *probe.Error
|
||||||
signature, err = initSignatureV4(req)
|
signature, err = initSignatureV4(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errorIf(err.Trace(), "Initializing signature v4 failed.", nil)
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
metadata, err := api.Donut.GetObjectMetadata(bucket, object, signature)
|
metadata, err := api.Donut.GetObjectMetadata(bucket, object, signature)
|
||||||
if err == nil {
|
if err != nil {
|
||||||
setObjectHeaders(w, metadata, nil)
|
errorIf(err.Trace(), "GetObjectMetadata failed.", nil)
|
||||||
w.WriteHeader(http.StatusOK)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
switch err.ToGoError().(type) {
|
switch err.ToGoError().(type) {
|
||||||
case donut.SignatureDoesNotMatch:
|
case donut.SignatureDoesNotMatch:
|
||||||
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
||||||
@ -149,9 +147,12 @@ func (api MinioAPI) HeadObjectHandler(w http.ResponseWriter, req *http.Request)
|
|||||||
case donut.ObjectNameInvalid:
|
case donut.ObjectNameInvalid:
|
||||||
writeErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path)
|
||||||
default:
|
default:
|
||||||
// log.Error.Println(err.Trace())
|
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
}
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
setObjectHeaders(w, metadata, nil)
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PutObjectHandler - PUT Object
|
// PutObjectHandler - PUT Object
|
||||||
@ -220,17 +221,15 @@ func (api MinioAPI) PutObjectHandler(w http.ResponseWriter, req *http.Request) {
|
|||||||
var err *probe.Error
|
var err *probe.Error
|
||||||
signature, err = initSignatureV4(req)
|
signature, err = initSignatureV4(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errorIf(err.Trace(), "Initializing signature v4 failed.", nil)
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
metadata, err := api.Donut.CreateObject(bucket, object, md5, sizeInt64, req.Body, nil, signature)
|
metadata, err := api.Donut.CreateObject(bucket, object, md5, sizeInt64, req.Body, nil, signature)
|
||||||
if err == nil {
|
if err != nil {
|
||||||
w.Header().Set("ETag", metadata.MD5Sum)
|
errorIf(err.Trace(), "CreateObject failed.", nil)
|
||||||
writeSuccessResponse(w, acceptsContentType)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
switch err.ToGoError().(type) {
|
switch err.ToGoError().(type) {
|
||||||
case donut.BucketNotFound:
|
case donut.BucketNotFound:
|
||||||
writeErrorResponse(w, req, NoSuchBucket, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, NoSuchBucket, acceptsContentType, req.URL.Path)
|
||||||
@ -251,9 +250,12 @@ func (api MinioAPI) PutObjectHandler(w http.ResponseWriter, req *http.Request) {
|
|||||||
case donut.InvalidDigest:
|
case donut.InvalidDigest:
|
||||||
writeErrorResponse(w, req, InvalidDigest, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InvalidDigest, acceptsContentType, req.URL.Path)
|
||||||
default:
|
default:
|
||||||
// log.Error.Println(err.Trace())
|
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
}
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
w.Header().Set("ETag", metadata.MD5Sum)
|
||||||
|
writeSuccessResponse(w, acceptsContentType)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Multipart API
|
/// Multipart API
|
||||||
@ -290,30 +292,32 @@ func (api MinioAPI) NewMultipartUploadHandler(w http.ResponseWriter, req *http.R
|
|||||||
var err *probe.Error
|
var err *probe.Error
|
||||||
signature, err = initSignatureV4(req)
|
signature, err = initSignatureV4(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errorIf(err.Trace(), "Initializing signature v4 failed.", nil)
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uploadID, err := api.Donut.NewMultipartUpload(bucket, object, req.Header.Get("Content-Type"), signature)
|
uploadID, err := api.Donut.NewMultipartUpload(bucket, object, req.Header.Get("Content-Type"), signature)
|
||||||
if err == nil {
|
if err != nil {
|
||||||
response := generateInitiateMultipartUploadResponse(bucket, object, uploadID)
|
errorIf(err.Trace(), "NewMultipartUpload failed.", nil)
|
||||||
encodedSuccessResponse := encodeSuccessResponse(response, acceptsContentType)
|
|
||||||
// write headers
|
|
||||||
setCommonHeaders(w, getContentTypeString(acceptsContentType), len(encodedSuccessResponse))
|
|
||||||
// write body
|
|
||||||
w.Write(encodedSuccessResponse)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
switch err.ToGoError().(type) {
|
switch err.ToGoError().(type) {
|
||||||
case donut.SignatureDoesNotMatch:
|
case donut.SignatureDoesNotMatch:
|
||||||
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
||||||
case donut.ObjectExists:
|
case donut.ObjectExists:
|
||||||
writeErrorResponse(w, req, MethodNotAllowed, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, MethodNotAllowed, acceptsContentType, req.URL.Path)
|
||||||
default:
|
default:
|
||||||
// log.Error.Println(err.Trace())
|
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
}
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
response := generateInitiateMultipartUploadResponse(bucket, object, uploadID)
|
||||||
|
encodedSuccessResponse := encodeSuccessResponse(response, acceptsContentType)
|
||||||
|
// write headers
|
||||||
|
setCommonHeaders(w, getContentTypeString(acceptsContentType), len(encodedSuccessResponse))
|
||||||
|
// write body
|
||||||
|
w.Write(encodedSuccessResponse)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PutObjectPartHandler - Upload part
|
// PutObjectPartHandler - Upload part
|
||||||
@ -375,6 +379,7 @@ func (api MinioAPI) PutObjectPartHandler(w http.ResponseWriter, req *http.Reques
|
|||||||
partID, err = strconv.Atoi(partIDString)
|
partID, err = strconv.Atoi(partIDString)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
writeErrorResponse(w, req, InvalidPart, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InvalidPart, acceptsContentType, req.URL.Path)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -384,17 +389,15 @@ func (api MinioAPI) PutObjectPartHandler(w http.ResponseWriter, req *http.Reques
|
|||||||
var err *probe.Error
|
var err *probe.Error
|
||||||
signature, err = initSignatureV4(req)
|
signature, err = initSignatureV4(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errorIf(err.Trace(), "Initializing signature v4 failed.", nil)
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
calculatedMD5, err := api.Donut.CreateObjectPart(bucket, object, uploadID, partID, "", md5, sizeInt64, req.Body, signature)
|
calculatedMD5, err := api.Donut.CreateObjectPart(bucket, object, uploadID, partID, "", md5, sizeInt64, req.Body, signature)
|
||||||
if err == nil {
|
if err != nil {
|
||||||
w.Header().Set("ETag", calculatedMD5)
|
errorIf(err.Trace(), "CreateObjectPart failed.", nil)
|
||||||
writeSuccessResponse(w, acceptsContentType)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
switch err.ToGoError().(type) {
|
switch err.ToGoError().(type) {
|
||||||
case donut.InvalidUploadID:
|
case donut.InvalidUploadID:
|
||||||
writeErrorResponse(w, req, NoSuchUpload, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, NoSuchUpload, acceptsContentType, req.URL.Path)
|
||||||
@ -411,9 +414,12 @@ func (api MinioAPI) PutObjectPartHandler(w http.ResponseWriter, req *http.Reques
|
|||||||
case donut.InvalidDigest:
|
case donut.InvalidDigest:
|
||||||
writeErrorResponse(w, req, InvalidDigest, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InvalidDigest, acceptsContentType, req.URL.Path)
|
||||||
default:
|
default:
|
||||||
// log.Error.Println(err.Trace())
|
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
}
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
w.Header().Set("ETag", calculatedMD5)
|
||||||
|
writeSuccessResponse(w, acceptsContentType)
|
||||||
}
|
}
|
||||||
|
|
||||||
// AbortMultipartUploadHandler - Abort multipart upload
|
// AbortMultipartUploadHandler - Abort multipart upload
|
||||||
@ -444,26 +450,27 @@ func (api MinioAPI) AbortMultipartUploadHandler(w http.ResponseWriter, req *http
|
|||||||
var err *probe.Error
|
var err *probe.Error
|
||||||
signature, err = initSignatureV4(req)
|
signature, err = initSignatureV4(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errorIf(err.Trace(), "Initializing signature v4 failed.", nil)
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err := api.Donut.AbortMultipartUpload(bucket, object, objectResourcesMetadata.UploadID, signature)
|
err := api.Donut.AbortMultipartUpload(bucket, object, objectResourcesMetadata.UploadID, signature)
|
||||||
if err == nil {
|
if err != nil {
|
||||||
setCommonHeaders(w, getContentTypeString(acceptsContentType), 0)
|
errorIf(err.Trace(), "AbortMutlipartUpload failed.", nil)
|
||||||
w.WriteHeader(http.StatusNoContent)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
switch err.ToGoError().(type) {
|
switch err.ToGoError().(type) {
|
||||||
case donut.SignatureDoesNotMatch:
|
case donut.SignatureDoesNotMatch:
|
||||||
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
||||||
case donut.InvalidUploadID:
|
case donut.InvalidUploadID:
|
||||||
writeErrorResponse(w, req, NoSuchUpload, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, NoSuchUpload, acceptsContentType, req.URL.Path)
|
||||||
default:
|
default:
|
||||||
// log.Error.Println(err.Trace())
|
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
}
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
setCommonHeaders(w, getContentTypeString(acceptsContentType), 0)
|
||||||
|
w.WriteHeader(http.StatusNoContent)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListObjectPartsHandler - List object parts
|
// ListObjectPartsHandler - List object parts
|
||||||
@ -505,30 +512,31 @@ func (api MinioAPI) ListObjectPartsHandler(w http.ResponseWriter, req *http.Requ
|
|||||||
var err *probe.Error
|
var err *probe.Error
|
||||||
signature, err = initSignatureV4(req)
|
signature, err = initSignatureV4(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errorIf(err.Trace(), "Initializing signature v4 failed.", nil)
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
objectResourcesMetadata, err := api.Donut.ListObjectParts(bucket, object, objectResourcesMetadata, signature)
|
objectResourcesMetadata, err := api.Donut.ListObjectParts(bucket, object, objectResourcesMetadata, signature)
|
||||||
if err == nil {
|
if err != nil {
|
||||||
response := generateListPartsResponse(objectResourcesMetadata)
|
errorIf(err.Trace(), "ListObjectParts failed.", nil)
|
||||||
encodedSuccessResponse := encodeSuccessResponse(response, acceptsContentType)
|
|
||||||
// write headers
|
|
||||||
setCommonHeaders(w, getContentTypeString(acceptsContentType), len(encodedSuccessResponse))
|
|
||||||
// write body
|
|
||||||
w.Write(encodedSuccessResponse)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
switch err.ToGoError().(type) {
|
switch err.ToGoError().(type) {
|
||||||
case donut.SignatureDoesNotMatch:
|
case donut.SignatureDoesNotMatch:
|
||||||
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path)
|
||||||
case donut.InvalidUploadID:
|
case donut.InvalidUploadID:
|
||||||
writeErrorResponse(w, req, NoSuchUpload, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, NoSuchUpload, acceptsContentType, req.URL.Path)
|
||||||
default:
|
default:
|
||||||
// log.Error.Println(err.Trace())
|
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
}
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response := generateListPartsResponse(objectResourcesMetadata)
|
||||||
|
encodedSuccessResponse := encodeSuccessResponse(response, acceptsContentType)
|
||||||
|
// write headers
|
||||||
|
setCommonHeaders(w, getContentTypeString(acceptsContentType), len(encodedSuccessResponse))
|
||||||
|
// write body
|
||||||
|
w.Write(encodedSuccessResponse)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CompleteMultipartUploadHandler - Complete multipart upload
|
// CompleteMultipartUploadHandler - Complete multipart upload
|
||||||
@ -559,20 +567,14 @@ func (api MinioAPI) CompleteMultipartUploadHandler(w http.ResponseWriter, req *h
|
|||||||
var err *probe.Error
|
var err *probe.Error
|
||||||
signature, err = initSignatureV4(req)
|
signature, err = initSignatureV4(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errorIf(err.Trace(), "Initializing signature v4 failed.", nil)
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
metadata, err := api.Donut.CompleteMultipartUpload(bucket, object, objectResourcesMetadata.UploadID, req.Body, signature)
|
metadata, err := api.Donut.CompleteMultipartUpload(bucket, object, objectResourcesMetadata.UploadID, req.Body, signature)
|
||||||
if err == nil {
|
if err != nil {
|
||||||
response := generateCompleteMultpartUploadResponse(bucket, object, "", metadata.MD5Sum)
|
errorIf(err.Trace(), "CompleteMultipartUpload failed.", nil)
|
||||||
encodedSuccessResponse := encodeSuccessResponse(response, acceptsContentType)
|
|
||||||
// write headers
|
|
||||||
setCommonHeaders(w, getContentTypeString(acceptsContentType), len(encodedSuccessResponse))
|
|
||||||
// write body
|
|
||||||
w.Write(encodedSuccessResponse)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
switch err.ToGoError().(type) {
|
switch err.ToGoError().(type) {
|
||||||
case donut.InvalidUploadID:
|
case donut.InvalidUploadID:
|
||||||
writeErrorResponse(w, req, NoSuchUpload, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, NoSuchUpload, acceptsContentType, req.URL.Path)
|
||||||
@ -589,9 +591,16 @@ func (api MinioAPI) CompleteMultipartUploadHandler(w http.ResponseWriter, req *h
|
|||||||
case donut.MalformedXML:
|
case donut.MalformedXML:
|
||||||
writeErrorResponse(w, req, MalformedXML, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, MalformedXML, acceptsContentType, req.URL.Path)
|
||||||
default:
|
default:
|
||||||
// log.Error.Println(err.Trace())
|
|
||||||
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
|
||||||
}
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response := generateCompleteMultpartUploadResponse(bucket, object, "", metadata.MD5Sum)
|
||||||
|
encodedSuccessResponse := encodeSuccessResponse(response, acceptsContentType)
|
||||||
|
// write headers
|
||||||
|
setCommonHeaders(w, getContentTypeString(acceptsContentType), len(encodedSuccessResponse))
|
||||||
|
// write body
|
||||||
|
w.Write(encodedSuccessResponse)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Delete API
|
/// Delete API
|
||||||
|
Loading…
Reference in New Issue
Block a user