aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2021-06-10 21:55:13 -0700
committerChris Lu <chris.lu@gmail.com>2021-06-10 21:55:13 -0700
commit310e31424e37c16dd73d911e79f31159d1b367a3 (patch)
tree6c592b73152d5eb248f2c7032bc38dc747ec2494
parent8b382a82097d6fb0f6addb4095a5a090a0ba09d9 (diff)
downloadseaweedfs-310e31424e37c16dd73d911e79f31159d1b367a3.tar.xz
seaweedfs-310e31424e37c16dd73d911e79f31159d1b367a3.zip
adjust the error output
fix https://github.com/chrislusf/seaweedfs/issues/2123
-rw-r--r--weed/s3api/s3err/error_handler.go23
-rw-r--r--weed/s3api/s3err/s3api_errors.go12
2 files changed, 24 insertions, 11 deletions
diff --git a/weed/s3api/s3err/error_handler.go b/weed/s3api/s3err/error_handler.go
index f176d4b6c..09b83065f 100644
--- a/weed/s3api/s3err/error_handler.go
+++ b/weed/s3api/s3err/error_handler.go
@@ -5,8 +5,10 @@ import (
"encoding/xml"
"fmt"
"github.com/chrislusf/seaweedfs/weed/glog"
+ "github.com/gorilla/mux"
"net/http"
"strconv"
+ "strings"
"time"
)
@@ -26,18 +28,27 @@ func WriteEmptyResponse(w http.ResponseWriter, statusCode int) {
}
func WriteErrorResponse(w http.ResponseWriter, errorCode ErrorCode, r *http.Request) {
+ vars := mux.Vars(r)
+ bucket := vars["bucket"]
+ object := vars["object"]
+ if !strings.HasPrefix(object, "/") {
+ object = "/" + object
+ }
+
apiError := GetAPIError(errorCode)
- errorResponse := getRESTErrorResponse(apiError, r.URL.Path)
+ errorResponse := getRESTErrorResponse(apiError, r.URL.Path, bucket, object)
encodedErrorResponse := EncodeXMLResponse(errorResponse)
WriteResponse(w, apiError.HTTPStatusCode, encodedErrorResponse, MimeXML)
}
-func getRESTErrorResponse(err APIError, resource string) RESTErrorResponse {
+func getRESTErrorResponse(err APIError, resource string, bucket, object string) RESTErrorResponse {
return RESTErrorResponse{
- Code: err.Code,
- Message: err.Description,
- Resource: resource,
- RequestID: fmt.Sprintf("%d", time.Now().UnixNano()),
+ Code: err.Code,
+ BucketName: bucket,
+ Key: object[1:],
+ Message: err.Description,
+ Resource: resource,
+ RequestID: fmt.Sprintf("%d", time.Now().UnixNano()),
}
}
diff --git a/weed/s3api/s3err/s3api_errors.go b/weed/s3api/s3err/s3api_errors.go
index 7f0ffdf86..a46bd0f04 100644
--- a/weed/s3api/s3err/s3api_errors.go
+++ b/weed/s3api/s3err/s3api_errors.go
@@ -15,11 +15,13 @@ type APIError struct {
// RESTErrorResponse - error response format
type RESTErrorResponse struct {
- XMLName xml.Name `xml:"Error" json:"-"`
- Code string `xml:"Code" json:"Code"`
- Message string `xml:"Message" json:"Message"`
- Resource string `xml:"Resource" json:"Resource"`
- RequestID string `xml:"RequestId" json:"RequestId"`
+ XMLName xml.Name `xml:"Error" json:"-"`
+ Code string `xml:"Code" json:"Code"`
+ Message string `xml:"Message" json:"Message"`
+ Resource string `xml:"Resource" json:"Resource"`
+ RequestID string `xml:"RequestId" json:"RequestId"`
+ Key string `xml:"Key,omitempty" json:"Key,omitempty"`
+ BucketName string `xml:"BucketName,omitempty" json:"BucketName,omitempty"`
// Underlying HTTP status code for the returned error
StatusCode int `xml:"-" json:"-"`