Skip to content

Commit

Permalink
Map errors to HTTP statuses (#666)
Browse files Browse the repository at this point in the history
The initial motivation is to map ENAMETOOLONG from 500 Internal Error
to 400 Bad Request.  This prevents clients like gcsfuse from
unnecessarily retrying requests.  This commit also remove some panic
call paths.
  • Loading branch information
gaul authored Feb 3, 2022
1 parent b154f3c commit 2082726
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 6 deletions.
12 changes: 12 additions & 0 deletions fakestorage/json_response.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@ package fakestorage

import (
"encoding/json"
"errors"
"net/http"
"os"
"syscall"
)

type jsonResponse struct {
Expand Down Expand Up @@ -53,3 +56,12 @@ func (r *jsonResponse) getErrorMessage(status int) string {
}
return http.StatusText(status)
}

func errToJsonResponse(err error) jsonResponse {
status := 0
var pathError *os.PathError
if errors.As(err, &pathError) && pathError.Err == syscall.ENAMETOOLONG {
status = http.StatusBadRequest
}
return jsonResponse{errorMessage: err.Error(), status: status}
}
11 changes: 9 additions & 2 deletions fakestorage/object.go
Original file line number Diff line number Diff line change
Expand Up @@ -556,7 +556,10 @@ func (s *Server) setObjectACL(r *http.Request) jsonResponse {
Role: role,
}}

s.CreateObject(obj)
_, err = s.createObject(obj)
if err != nil {
return errToJsonResponse(err)
}

return jsonResponse{data: newACLListResponse(obj.ObjectAttrs)}
}
Expand Down Expand Up @@ -607,7 +610,11 @@ func (s *Server) rewriteObject(r *http.Request) jsonResponse {
Content: append([]byte(nil), obj.Content...),
}

s.CreateObject(newObject)
_, err = s.createObject(newObject)
if err != nil {
return errToJsonResponse(err)
}

return jsonResponse{data: newObjectRewriteResponse(newObject.ObjectAttrs)}
}

Expand Down
8 changes: 4 additions & 4 deletions fakestorage/upload.go
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ func (s *Server) simpleUpload(bucketName string, r *http.Request) jsonResponse {
}
obj, err = s.createObject(obj)
if err != nil {
return jsonResponse{errorMessage: err.Error()}
return errToJsonResponse(err)
}
return jsonResponse{data: obj}
}
Expand Down Expand Up @@ -239,7 +239,7 @@ func (s *Server) signedUpload(bucketName string, r *http.Request) jsonResponse {
}
obj, err = s.createObject(obj)
if err != nil {
return jsonResponse{errorMessage: err.Error()}
return errToJsonResponse(err)
}
return jsonResponse{data: obj}
}
Expand Down Expand Up @@ -319,7 +319,7 @@ func (s *Server) multipartUpload(bucketName string, r *http.Request) jsonRespons
}
obj, err = s.createObject(obj)
if err != nil {
return jsonResponse{errorMessage: err.Error()}
return errToJsonResponse(err)
}
return jsonResponse{data: obj}
}
Expand Down Expand Up @@ -433,7 +433,7 @@ func (s *Server) uploadFileContent(r *http.Request) jsonResponse {
s.uploads.Delete(uploadID)
obj, err = s.createObject(obj)
if err != nil {
return jsonResponse{errorMessage: err.Error()}
return errToJsonResponse(err)
}
} else {
if _, no308 := r.Header["X-Guploader-No-308"]; no308 {
Expand Down

0 comments on commit 2082726

Please sign in to comment.