diff options
| author | tnextday <fw2k4@163.com> | 2015-12-03 16:27:02 +0800 |
|---|---|---|
| committer | tnextday <fw2k4@163.com> | 2015-12-03 16:27:02 +0800 |
| commit | daac5de1bae20de28082367db44b7b7afa9e4aaf (patch) | |
| tree | 77b9ca3beb5f33f736b5a66da8ecf4a53ed1e576 /go/weed | |
| parent | a9a336fdff076211e7c94a4243b430219e5d891c (diff) | |
| download | seaweedfs-daac5de1bae20de28082367db44b7b7afa9e4aaf.tar.xz seaweedfs-daac5de1bae20de28082367db44b7b7afa9e4aaf.zip | |
more check in `http_util.Delete`
add status code in `DeleteResult` struct
operation.DeleteFiles maybe unsafe, so `ChunkManifest.DeleteChunks` manually delete each chunks
Diffstat (limited to 'go/weed')
| -rw-r--r-- | go/weed/weed_server/volume_server_handlers_write.go | 47 |
1 files changed, 39 insertions, 8 deletions
diff --git a/go/weed/weed_server/volume_server_handlers_write.go b/go/weed/weed_server/volume_server_handlers_write.go index c891b5af7..cd4a4c673 100644 --- a/go/weed/weed_server/volume_server_handlers_write.go +++ b/go/weed/weed_server/volume_server_handlers_write.go @@ -63,19 +63,20 @@ func (vs *VolumeServer) DeleteHandler(w http.ResponseWriter, r *http.Request) { if n.Cookie != cookie { glog.V(0).Infoln("delete", r.URL.Path, "with unmaching cookie from ", r.RemoteAddr, "agent", r.UserAgent()) + writeJsonError(w, r, http.StatusBadRequest, errors.New("File Random Cookie does not match.")) return } count := int64(n.Size) - if n.IsChunkedManifest(){ + if n.IsChunkedManifest() { chunkManifest, e := operation.LoadChunkManifest(n.Data, n.IsGzipped()) if e != nil { - writeJsonError(w, r, http.StatusInternalServerError, errors.New("Load chunks manifest error: " + e.Error())) + writeJsonError(w, r, http.StatusInternalServerError, errors.New("Load chunks manifest error: "+e.Error())) return } if e := chunkManifest.DeleteChunks(vs.GetMasterNode()); e != nil { - writeJsonError(w, r, http.StatusInternalServerError, errors.New("Delete chunks error: " + e.Error())) + writeJsonError(w, r, http.StatusInternalServerError, errors.New("Delete chunks error: "+e.Error())) return } count = chunkManifest.Size @@ -100,7 +101,10 @@ func (vs *VolumeServer) batchDeleteHandler(w http.ResponseWriter, r *http.Reques for _, fid := range r.Form["fid"] { vid, id_cookie, err := operation.ParseFileId(fid) if err != nil { - ret = append(ret, operation.DeleteResult{Fid: fid, Error: err.Error()}) + ret = append(ret, operation.DeleteResult{ + Fid: fid, + Status: http.StatusBadRequest, + Error: err.Error()}) continue } n := new(storage.Needle) @@ -109,18 +113,45 @@ func (vs *VolumeServer) batchDeleteHandler(w http.ResponseWriter, r *http.Reques glog.V(4).Infoln("batch deleting", n) cookie := n.Cookie if _, err := vs.store.ReadVolumeNeedle(volumeId, n); err != nil { - ret = append(ret, operation.DeleteResult{Fid: fid, Error: err.Error()}) + ret = append(ret, operation.DeleteResult{ + Fid: fid, + Status: http.StatusNotFound, + Error: err.Error(), + }) continue } + + if n.IsChunkedManifest() { + //Don't allow delete manifest in batch delete mode + ret = append(ret, operation.DeleteResult{ + Fid: fid, + Status: http.StatusNotAcceptable, + Error: "ChunkManifest: not allow.", + }) + continue + } + if n.Cookie != cookie { - ret = append(ret, operation.DeleteResult{Fid: fid, Error: "File Random Cookie does not match."}) + ret = append(ret, operation.DeleteResult{ + Fid: fid, + Status: http.StatusBadRequest, + Error: "File Random Cookie does not match.", + }) glog.V(0).Infoln("deleting", fid, "with unmaching cookie from ", r.RemoteAddr, "agent", r.UserAgent()) return } if size, err := vs.store.Delete(volumeId, n); err != nil { - ret = append(ret, operation.DeleteResult{Fid: fid, Error: err.Error()}) + ret = append(ret, operation.DeleteResult{ + Fid: fid, + Status: http.StatusInternalServerError, + Error: err.Error()}, + ) } else { - ret = append(ret, operation.DeleteResult{Fid: fid, Size: int(size)}) + ret = append(ret, operation.DeleteResult{ + Fid: fid, + Status: http.StatusAccepted, + Size: int(size)}, + ) } } |
