diff options
| -rw-r--r-- | weed/s3api/s3api_object_handlers_put.go | 3 | ||||
| -rw-r--r-- | weed/s3api/s3api_object_handlers_put_test.go | 10 |
2 files changed, 13 insertions, 0 deletions
diff --git a/weed/s3api/s3api_object_handlers_put.go b/weed/s3api/s3api_object_handlers_put.go index cbd8da54f..cc2fb3dfd 100644 --- a/weed/s3api/s3api_object_handlers_put.go +++ b/weed/s3api/s3api_object_handlers_put.go @@ -383,6 +383,9 @@ func filerErrorToS3Error(errString string) s3err.ErrorCode { switch { case errString == constants.ErrMsgBadDigest: return s3err.ErrBadDigest + case strings.Contains(errString, "context canceled") || strings.Contains(errString, "code = Canceled"): + // Client canceled the request, return client error not server error + return s3err.ErrInvalidRequest case strings.HasPrefix(errString, "existing ") && strings.HasSuffix(errString, "is a directory"): return s3err.ErrExistingObjectIsDirectory case strings.HasSuffix(errString, "is a file"): diff --git a/weed/s3api/s3api_object_handlers_put_test.go b/weed/s3api/s3api_object_handlers_put_test.go index 87b874e1f..9144e2cee 100644 --- a/weed/s3api/s3api_object_handlers_put_test.go +++ b/weed/s3api/s3api_object_handlers_put_test.go @@ -19,6 +19,16 @@ func TestFilerErrorToS3Error(t *testing.T) { expectedErr: s3err.ErrBadDigest, }, { + name: "Context canceled error", + errString: "rpc error: code = Canceled desc = context canceled", + expectedErr: s3err.ErrInvalidRequest, + }, + { + name: "Context canceled error (simple)", + errString: "context canceled", + expectedErr: s3err.ErrInvalidRequest, + }, + { name: "Directory exists error", errString: "existing /path/to/file is a directory", expectedErr: s3err.ErrExistingObjectIsDirectory, |
