|
|
@ -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)}, |
|
|
|
) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|