mirror of
https://github.com/pgsty/minio.git
synced 2026-07-20 12:40:24 +03:00
Fix error handling in DeleteFileBulk storage handler (#8327)
errors.errorString() cannot be marshalled by gob encoder, so using a slice of []error would fail to be encoded. This leads to no errors being generated instead gob.Decoder on the storage-client would see an io.EOF To avoid such bugs introduce a typed error for handling such translations and register this type for gob encoding support.
This commit is contained in:
+22
-17
@@ -49,22 +49,6 @@ func (s *storageRESTServer) writeErrorResponse(w http.ResponseWriter, err error)
|
||||
w.(http.Flusher).Flush()
|
||||
}
|
||||
|
||||
type bulkErrorsResponse struct {
|
||||
Errs []error `json:"errors"`
|
||||
}
|
||||
|
||||
func (s *storageRESTServer) writeErrorsResponse(w http.ResponseWriter, errs []error) {
|
||||
resp := bulkErrorsResponse{Errs: make([]error, len(errs))}
|
||||
for idx, err := range errs {
|
||||
if err == nil {
|
||||
continue
|
||||
}
|
||||
resp.Errs[idx] = err
|
||||
}
|
||||
gob.NewEncoder(w).Encode(resp)
|
||||
w.(http.Flusher).Flush()
|
||||
}
|
||||
|
||||
// DefaultSkewTime - skew time is 15 minutes between minio peers.
|
||||
const DefaultSkewTime = 15 * time.Minute
|
||||
|
||||
@@ -455,6 +439,19 @@ func (s *storageRESTServer) DeleteFileHandler(w http.ResponseWriter, r *http.Req
|
||||
}
|
||||
}
|
||||
|
||||
// DeleteFileBulkErrsResp - collection of deleteFile errors
|
||||
// for bulk deletes
|
||||
type DeleteFileBulkErrsResp struct {
|
||||
Errs []error
|
||||
}
|
||||
|
||||
// DeleteFileError - error captured per delete operation
|
||||
type DeleteFileError string
|
||||
|
||||
func (d DeleteFileError) Error() string {
|
||||
return string(d)
|
||||
}
|
||||
|
||||
// DeleteFileBulkHandler - delete a file.
|
||||
func (s *storageRESTServer) DeleteFileBulkHandler(w http.ResponseWriter, r *http.Request) {
|
||||
if !s.IsValid(w, r) {
|
||||
@@ -470,7 +467,15 @@ func (s *storageRESTServer) DeleteFileBulkHandler(w http.ResponseWriter, r *http
|
||||
return
|
||||
}
|
||||
|
||||
s.writeErrorsResponse(w, errs)
|
||||
derrsResp := &DeleteFileBulkErrsResp{Errs: make([]error, len(errs))}
|
||||
for idx, err := range errs {
|
||||
if err != nil {
|
||||
derrsResp.Errs[idx] = DeleteFileError(err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
gob.NewEncoder(w).Encode(derrsResp)
|
||||
w.(http.Flusher).Flush()
|
||||
}
|
||||
|
||||
// RenameFileHandler - rename a file.
|
||||
|
||||
Reference in New Issue
Block a user