1
0
Fork 0
mirror of https://github.com/chrislusf/seaweedfs synced 2024-06-28 13:23:03 +02:00

s3: report error to s3 when updating an object but it is already a directory

fix https://github.com/chrislusf/seaweedfs/issues/1545
This commit is contained in:
Chris Lu 2020-10-20 10:25:16 -07:00
parent 7fc98da709
commit b3aa2fab9a
2 changed files with 17 additions and 2 deletions

View file

@ -5,12 +5,13 @@ import (
"encoding/json" "encoding/json"
"encoding/xml" "encoding/xml"
"fmt" "fmt"
"github.com/chrislusf/seaweedfs/weed/s3api/s3err"
"io" "io"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"strings" "strings"
"github.com/chrislusf/seaweedfs/weed/s3api/s3err"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/glog"
@ -333,7 +334,7 @@ func (s3a *S3ApiServer) putToFiler(r *http.Request, uploadUrl string, dataReader
} }
if ret.Error != "" { if ret.Error != "" {
glog.Errorf("upload to filer error: %v", ret.Error) glog.Errorf("upload to filer error: %v", ret.Error)
return "", s3err.ErrInternalError return "", filerErrorToS3Error(ret.Error)
} }
return etag, s3err.ErrNone return etag, s3err.ErrNone
@ -359,3 +360,10 @@ func getBucketAndObject(r *http.Request) (bucket, object string) {
return return
} }
func filerErrorToS3Error(errString string) s3err.ErrorCode {
if strings.HasPrefix(errString, "existing ") && strings.HasSuffix(errString, "is a directory") {
return s3err.ErrExistingObjectIsDirectory
}
return s3err.ErrInternalError
}

View file

@ -92,6 +92,8 @@ const (
ErrMissingDateHeader ErrMissingDateHeader
ErrInvalidRequest ErrInvalidRequest
ErrNotImplemented ErrNotImplemented
ErrExistingObjectIsDirectory
) )
// error code to APIError structure, these fields carry respective // error code to APIError structure, these fields carry respective
@ -344,6 +346,11 @@ var errorCodeResponse = map[ErrorCode]APIError{
Description: "A header you provided implies functionality that is not implemented", Description: "A header you provided implies functionality that is not implemented",
HTTPStatusCode: http.StatusNotImplemented, HTTPStatusCode: http.StatusNotImplemented,
}, },
ErrExistingObjectIsDirectory: {
Code: "ExistingObjectIsDirectory",
Description: "Existing Object is a directory.",
HTTPStatusCode: http.StatusConflict,
},
} }
// GetAPIError provides API Error for input API error code. // GetAPIError provides API Error for input API error code.