aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLapshinn Vitaly <mr.lapshin.vitaly@gmail.com>2022-02-04 03:28:37 +0300
committerLapshinn Vitaly <mr.lapshin.vitaly@gmail.com>2022-02-04 03:28:37 +0300
commit6bdc274d4db8063db44bb7b71ef7a1f354c07ee1 (patch)
treecfc72e68b2ce094b8ba6e3d37780dc2e24a602c0
parent6cf2e7d49300b96263845337aa0b64a54e21e094 (diff)
downloadseaweedfs-6bdc274d4db8063db44bb7b71ef7a1f354c07ee1.tar.xz
seaweedfs-6bdc274d4db8063db44bb7b71ef7a1f354c07ee1.zip
add s3api error for copy in file, not directory
-rw-r--r--weed/s3api/s3api_object_handlers.go8
-rw-r--r--weed/s3api/s3err/s3api_errors.go6
2 files changed, 12 insertions, 2 deletions
diff --git a/weed/s3api/s3api_object_handlers.go b/weed/s3api/s3api_object_handlers.go
index fd2a0e6bd..f454bfad2 100644
--- a/weed/s3api/s3api_object_handlers.go
+++ b/weed/s3api/s3api_object_handlers.go
@@ -436,10 +436,14 @@ func setEtag(w http.ResponseWriter, etag string) {
}
func filerErrorToS3Error(errString string) s3err.ErrorCode {
- if strings.HasPrefix(errString, "existing ") && strings.HasSuffix(errString, "is a directory") {
+ switch {
+ case strings.HasPrefix(errString, "existing ") && strings.HasSuffix(errString, "is a directory"):
return s3err.ErrExistingObjectIsDirectory
+ case strings.HasSuffix(errString, "is a file"):
+ return s3err.ErrExistingObjectIsFile
+ default:
+ return s3err.ErrInternalError
}
- return s3err.ErrInternalError
}
func (s3a *S3ApiServer) maybeAddFilerJwtAuthorization(r *http.Request, isWrite bool) {
diff --git a/weed/s3api/s3err/s3api_errors.go b/weed/s3api/s3err/s3api_errors.go
index 8d02f15b1..f4a83d979 100644
--- a/weed/s3api/s3err/s3api_errors.go
+++ b/weed/s3api/s3err/s3api_errors.go
@@ -101,6 +101,7 @@ const (
ErrPreconditionFailed
ErrExistingObjectIsDirectory
+ ErrExistingObjectIsFile
)
// error code to APIError structure, these fields carry respective
@@ -383,6 +384,11 @@ var errorCodeResponse = map[ErrorCode]APIError{
Description: "Existing Object is a directory.",
HTTPStatusCode: http.StatusConflict,
},
+ ErrExistingObjectIsFile: {
+ Code: "ExistingObjectIsFile",
+ Description: "Existing Object is a file.",
+ HTTPStatusCode: http.StatusConflict,
+ },
}
// GetAPIError provides API Error for input API error code.