12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package weed_server
- import (
- "context"
- "net/http"
- "time"
- "github.com/chrislusf/seaweedfs/weed/operation"
- "github.com/chrislusf/seaweedfs/weed/pb/volume_server_pb"
- "github.com/chrislusf/seaweedfs/weed/storage/needle"
- )
- func (vs *VolumeServer) BatchDelete(ctx context.Context, req *volume_server_pb.BatchDeleteRequest) (*volume_server_pb.BatchDeleteResponse, error) {
- resp := &volume_server_pb.BatchDeleteResponse{}
- now := uint64(time.Now().Unix())
- for _, fid := range req.FileIds {
- vid, id_cookie, err := operation.ParseFileId(fid)
- if err != nil {
- resp.Results = append(resp.Results, &volume_server_pb.DeleteResult{
- FileId: fid,
- Status: http.StatusBadRequest,
- Error: err.Error()})
- continue
- }
- n := new(needle.Needle)
- volumeId, _ := needle.NewVolumeId(vid)
- if req.SkipCookieCheck {
- n.Id, _, err = needle.ParseNeedleIdCookie(id_cookie)
- if err != nil {
- resp.Results = append(resp.Results, &volume_server_pb.DeleteResult{
- FileId: fid,
- Status: http.StatusBadRequest,
- Error: err.Error()})
- continue
- }
- } else {
- n.ParsePath(id_cookie)
- cookie := n.Cookie
- if _, err := vs.store.ReadVolumeNeedle(volumeId, n, nil, nil); err != nil {
- resp.Results = append(resp.Results, &volume_server_pb.DeleteResult{
- FileId: fid,
- Status: http.StatusNotFound,
- Error: err.Error(),
- })
- continue
- }
- if n.Cookie != cookie {
- resp.Results = append(resp.Results, &volume_server_pb.DeleteResult{
- FileId: fid,
- Status: http.StatusBadRequest,
- Error: "File Random Cookie does not match.",
- })
- break
- }
- }
- if n.IsChunkedManifest() {
- resp.Results = append(resp.Results, &volume_server_pb.DeleteResult{
- FileId: fid,
- Status: http.StatusNotAcceptable,
- Error: "ChunkManifest: not allowed in batch delete mode.",
- })
- continue
- }
- n.LastModified = now
- if size, err := vs.store.DeleteVolumeNeedle(volumeId, n); err != nil {
- resp.Results = append(resp.Results, &volume_server_pb.DeleteResult{
- FileId: fid,
- Status: http.StatusInternalServerError,
- Error: err.Error()},
- )
- } else {
- resp.Results = append(resp.Results, &volume_server_pb.DeleteResult{
- FileId: fid,
- Status: http.StatusAccepted,
- Size: uint32(size)},
- )
- }
- }
- return resp, nil
- }
|