From c3cda5d9a8c717ddc34f86dad8b81a5b65cf7365 Mon Sep 17 00:00:00 2001 From: "Frederick F. Kautz IV" Date: Sun, 29 Mar 2015 21:48:40 -0700 Subject: [PATCH 1/2] Adding comments to errors --- pkg/api/api_object_handlers.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pkg/api/api_object_handlers.go b/pkg/api/api_object_handlers.go index decac4370..91c2ccd45 100644 --- a/pkg/api/api_object_handlers.go +++ b/pkg/api/api_object_handlers.go @@ -42,10 +42,13 @@ func (server *minioAPI) getObjectHandler(w http.ResponseWriter, req *http.Reques httpRange, err := getRequestedRange(req, metadata.Size) if err != nil { log.Error.Println(err) + // get error error := getErrorCode(InvalidRange) errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) + // set headers setCommonHeaders(w, getContentTypeString(acceptsContentType)) w.WriteHeader(error.HTTPStatusCode) + // write body encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) w.Write(encodedErrorResponse) return @@ -73,46 +76,61 @@ func (server *minioAPI) getObjectHandler(w http.ResponseWriter, req *http.Reques } case drivers.ObjectNotFound: { + // get error error := getErrorCode(NoSuchKey) errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) + // set headers setCommonHeaders(w, getContentTypeString(acceptsContentType)) w.WriteHeader(error.HTTPStatusCode) + // write body encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) w.Write(encodedErrorResponse) } case drivers.BucketNotFound: { + // get error error := getErrorCode(NoSuchBucket) errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) + // set headers setCommonHeaders(w, getContentTypeString(acceptsContentType)) w.WriteHeader(error.HTTPStatusCode) + // write body encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) w.Write(encodedErrorResponse) } case drivers.ObjectNameInvalid: { + // get error error := getErrorCode(NoSuchKey) errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) + // set headers setCommonHeaders(w, getContentTypeString(acceptsContentType)) w.WriteHeader(error.HTTPStatusCode) + // write body encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) w.Write(encodedErrorResponse) } case drivers.BucketNameInvalid: { + // get error error := getErrorCode(InvalidBucketName) errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) + // set headers setCommonHeaders(w, getContentTypeString(acceptsContentType)) w.WriteHeader(error.HTTPStatusCode) + // wrkite body encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) w.Write(encodedErrorResponse) } default: { + // get error // Embed errors log on serve side log.Error.Println(err) + // set headers error := getErrorCode(InternalError) errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) + // write body setCommonHeaders(w, getContentTypeString(acceptsContentType)) w.WriteHeader(error.HTTPStatusCode) encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) From 7d657eb55c64d150c1a4dd2571bd50c230d8e012 Mon Sep 17 00:00:00 2001 From: "Frederick F. Kautz IV" Date: Sun, 29 Mar 2015 22:03:10 -0700 Subject: [PATCH 2/2] Simplifying error response writing for object handlers --- pkg/api/api_generic_handlers.go | 11 +++ pkg/api/api_object_handlers.go | 156 ++++---------------------------- 2 files changed, 28 insertions(+), 139 deletions(-) diff --git a/pkg/api/api_generic_handlers.go b/pkg/api/api_generic_handlers.go index d60decf4e..a9308c1d3 100644 --- a/pkg/api/api_generic_handlers.go +++ b/pkg/api/api_generic_handlers.go @@ -142,3 +142,14 @@ func ignoreUnImplementedObjectResources(req *http.Request) bool { } return false } + +func writeErrorResponse(w http.ResponseWriter, req *http.Request, errorType int, acceptsContentType contentType, resource string) { + error := getErrorCode(errorType) + errorResponse := getErrorResponse(error, resource) + // set headers + setCommonHeaders(w, getContentTypeString(acceptsContentType)) + w.WriteHeader(error.HTTPStatusCode) + // write body + encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) + w.Write(encodedErrorResponse) +} diff --git a/pkg/api/api_object_handlers.go b/pkg/api/api_object_handlers.go index 91c2ccd45..164e1e463 100644 --- a/pkg/api/api_object_handlers.go +++ b/pkg/api/api_object_handlers.go @@ -41,16 +41,7 @@ func (server *minioAPI) getObjectHandler(w http.ResponseWriter, req *http.Reques { httpRange, err := getRequestedRange(req, metadata.Size) if err != nil { - log.Error.Println(err) - // get error - error := getErrorCode(InvalidRange) - errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) - // set headers - setCommonHeaders(w, getContentTypeString(acceptsContentType)) - w.WriteHeader(error.HTTPStatusCode) - // write body - encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) - w.Write(encodedErrorResponse) + writeErrorResponse(w, req, InvalidRange, acceptsContentType, req.URL.Path) return } switch httpRange.start == 0 && httpRange.length == 0 { @@ -76,65 +67,24 @@ func (server *minioAPI) getObjectHandler(w http.ResponseWriter, req *http.Reques } case drivers.ObjectNotFound: { - // get error - error := getErrorCode(NoSuchKey) - errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) - // set headers - setCommonHeaders(w, getContentTypeString(acceptsContentType)) - w.WriteHeader(error.HTTPStatusCode) - // write body - encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) - w.Write(encodedErrorResponse) + writeErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path) } case drivers.BucketNotFound: { - // get error - error := getErrorCode(NoSuchBucket) - errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) - // set headers - setCommonHeaders(w, getContentTypeString(acceptsContentType)) - w.WriteHeader(error.HTTPStatusCode) - // write body - encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) - w.Write(encodedErrorResponse) + writeErrorResponse(w, req, NoSuchBucket, acceptsContentType, req.URL.Path) } case drivers.ObjectNameInvalid: { - // get error - error := getErrorCode(NoSuchKey) - errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) - // set headers - setCommonHeaders(w, getContentTypeString(acceptsContentType)) - w.WriteHeader(error.HTTPStatusCode) - // write body - encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) - w.Write(encodedErrorResponse) + writeErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path) } case drivers.BucketNameInvalid: { - // get error - error := getErrorCode(InvalidBucketName) - errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) - // set headers - setCommonHeaders(w, getContentTypeString(acceptsContentType)) - w.WriteHeader(error.HTTPStatusCode) - // wrkite body - encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) - w.Write(encodedErrorResponse) + writeErrorResponse(w, req, InvalidBucketName, acceptsContentType, req.URL.Path) } default: { - // get error - // Embed errors log on serve side log.Error.Println(err) - // set headers - error := getErrorCode(InternalError) - errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) - // write body - setCommonHeaders(w, getContentTypeString(acceptsContentType)) - w.WriteHeader(error.HTTPStatusCode) - encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) - w.Write(encodedErrorResponse) + writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) } } } @@ -153,43 +103,19 @@ func (server *minioAPI) headObjectHandler(w http.ResponseWriter, req *http.Reque switch err := err.(type) { case nil: setObjectHeaders(w, metadata) + w.WriteHeader(http.StatusOK) case drivers.ObjectNotFound: { - // get error - error := getErrorCode(NoSuchKey) - errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) - // set headers - setCommonHeaders(w, getContentTypeString(acceptsContentType)) - w.WriteHeader(error.HTTPStatusCode) - // write body - encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) - w.Write(encodedErrorResponse) + writeErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path) } case drivers.ObjectNameInvalid: { - // get error - error := getErrorCode(NoSuchKey) - errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) - // set headers - setCommonHeaders(w, getContentTypeString(acceptsContentType)) - w.WriteHeader(error.HTTPStatusCode) - // write body - encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) - w.Write(encodedErrorResponse) + writeErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path) } case drivers.ImplementationError: { - // Embed error log on server side log.Error.Println(err) - // get error - error := getErrorCode(InternalError) - errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) - // set headers - setCommonHeaders(w, getContentTypeString(acceptsContentType)) - w.WriteHeader(error.HTTPStatusCode) - // write body - encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) - w.Write(encodedErrorResponse) + writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) } } } @@ -217,79 +143,31 @@ func (server *minioAPI) putObjectHandler(w http.ResponseWriter, req *http.Reques case nil: w.Header().Set("Server", "Minio") w.Header().Set("Connection", "close") + w.WriteHeader(http.StatusOK) case drivers.ImplementationError: { - // Embed error log on server side log.Error.Println(err) - // get error - error := getErrorCode(InternalError) - errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) - // set headers - setCommonHeaders(w, getContentTypeString(acceptsContentType)) - w.WriteHeader(error.HTTPStatusCode) - // write body - encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) - w.Write(encodedErrorResponse) + writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) } case drivers.BucketNotFound: { - // get error - error := getErrorCode(NoSuchBucket) - errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) - // set headers - setCommonHeaders(w, getContentTypeString(acceptsContentType)) - w.WriteHeader(error.HTTPStatusCode) - // write body - encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) - w.Write(encodedErrorResponse) + writeErrorResponse(w, req, NoSuchBucket, acceptsContentType, req.URL.Path) } case drivers.BucketNameInvalid: { - // get error - error := getErrorCode(InvalidBucketName) - errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) - // set headers - setCommonHeaders(w, getContentTypeString(acceptsContentType)) - w.WriteHeader(error.HTTPStatusCode) - // write body - encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) - w.Write(encodedErrorResponse) + writeErrorResponse(w, req, InvalidBucketName, acceptsContentType, req.URL.Path) } case drivers.ObjectExists: { - // get error - error := getErrorCode(NotImplemented) - errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) - // set headers - setCommonHeaders(w, getContentTypeString(acceptsContentType)) - w.WriteHeader(error.HTTPStatusCode) - // write body - encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) - w.Write(encodedErrorResponse) + writeErrorResponse(w, req, NotImplemented, acceptsContentType, req.URL.Path) } case drivers.BadDigest: { - // get error - error := getErrorCode(BadDigest) - errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) - // set headers - setCommonHeaders(w, getContentTypeString(acceptsContentType)) - w.WriteHeader(error.HTTPStatusCode) - // write body - encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) - w.Write(encodedErrorResponse) + writeErrorResponse(w, req, BadDigest, acceptsContentType, req.URL.Path) } case drivers.InvalidDigest: { - // get error - error := getErrorCode(InvalidDigest) - errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) - // set headers - setCommonHeaders(w, getContentTypeString(acceptsContentType)) - w.WriteHeader(error.HTTPStatusCode) - // write body - encodedErrorResponse := encodeErrorResponse(errorResponse, acceptsContentType) - w.Write(encodedErrorResponse) + writeErrorResponse(w, req, InvalidDigest, acceptsContentType, req.URL.Path) } } }