diff options
| author | Chris Lu <chris.lu@gmail.com> | 2014-04-15 09:09:40 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2014-04-15 09:09:40 -0700 |
| commit | cbc5a76e80b1bc45c642e2e2b601d9b7fa3634f7 (patch) | |
| tree | 963b8c5118d5fa0bc54ef0d09ba8457c2a440c60 /go/weed | |
| parent | b771f060f1fdb78bd561a2296d2aa1e4aa0f9136 (diff) | |
| download | seaweedfs-cbc5a76e80b1bc45c642e2e2b601d9b7fa3634f7.tar.xz seaweedfs-cbc5a76e80b1bc45c642e2e2b601d9b7fa3634f7.zip | |
Added batch file deleting.
Diffstat (limited to 'go/weed')
| -rw-r--r-- | go/weed/weed_server/common.go | 10 | ||||
| -rw-r--r-- | go/weed/weed_server/filer_server_handlers.go | 9 | ||||
| -rw-r--r-- | go/weed/weed_server/master_server.go | 1 | ||||
| -rw-r--r-- | go/weed/weed_server/master_server_handlers.go | 6 | ||||
| -rw-r--r-- | go/weed/weed_server/volume_server_handlers.go | 26 |
5 files changed, 18 insertions, 34 deletions
diff --git a/go/weed/weed_server/common.go b/go/weed/weed_server/common.go index 9703302f3..8d8c91da6 100644 --- a/go/weed/weed_server/common.go +++ b/go/weed/weed_server/common.go @@ -60,6 +60,7 @@ func writeJsonQuiet(w http.ResponseWriter, r *http.Request, obj interface{}) { } } func writeJsonError(w http.ResponseWriter, r *http.Request, err error) { + w.WriteHeader(http.StatusInternalServerError) m := make(map[string]interface{}) m["error"] = err.Error() writeJsonQuiet(w, r, m) @@ -133,9 +134,12 @@ func submitForClientHandler(w http.ResponseWriter, r *http.Request, masterUrl st func deleteForClientHandler(w http.ResponseWriter, r *http.Request, masterUrl string) { r.ParseForm() fids := r.Form["fid"] - fids = fids - m := make(map[string]interface{}) - writeJsonQuiet(w, r, m) + ret, err := operation.DeleteFiles(masterUrl, fids) + if err != nil { + writeJsonError(w, r, err) + return + } + writeJsonQuiet(w, r, ret) } func parseURLPath(path string) (vid, fid, filename, ext string, isVolumeIdOnly bool) { diff --git a/go/weed/weed_server/filer_server_handlers.go b/go/weed/weed_server/filer_server_handlers.go index 31e9d0c85..7df839754 100644 --- a/go/weed/weed_server/filer_server_handlers.go +++ b/go/weed/weed_server/filer_server_handlers.go @@ -96,7 +96,6 @@ func (fs *FilerServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request, resp, do_err := util.Do(request) if do_err != nil { glog.V(0).Infoln("failing to connect to volume server", do_err.Error()) - w.WriteHeader(http.StatusInternalServerError) writeJsonError(w, r, do_err) return } @@ -109,7 +108,6 @@ func (fs *FilerServer) PostHandler(w http.ResponseWriter, r *http.Request) { assignResult, ae := operation.Assign(fs.master, 1, query.Get("replication"), fs.collection) if ae != nil { glog.V(0).Infoln("failing to assign a file id", ae.Error()) - w.WriteHeader(http.StatusInternalServerError) writeJsonError(w, r, ae) return } @@ -130,7 +128,6 @@ func (fs *FilerServer) PostHandler(w http.ResponseWriter, r *http.Request) { resp, do_err := util.Do(request) if do_err != nil { glog.V(0).Infoln("failing to connect to volume server", do_err.Error()) - w.WriteHeader(http.StatusInternalServerError) writeJsonError(w, r, do_err) return } @@ -138,7 +135,6 @@ func (fs *FilerServer) PostHandler(w http.ResponseWriter, r *http.Request) { resp_body, ra_err := ioutil.ReadAll(resp.Body) if ra_err != nil { glog.V(0).Infoln("failing to upload to volume server", ra_err.Error()) - w.WriteHeader(http.StatusInternalServerError) writeJsonError(w, r, ra_err) return } @@ -147,13 +143,11 @@ func (fs *FilerServer) PostHandler(w http.ResponseWriter, r *http.Request) { unmarshal_err := json.Unmarshal(resp_body, &ret) if unmarshal_err != nil { glog.V(0).Infoln("failing to read upload resonse", string(resp_body)) - w.WriteHeader(http.StatusInternalServerError) writeJsonError(w, r, unmarshal_err) return } if ret.Error != "" { glog.V(0).Infoln("failing to post to volume server", ra_err.Error()) - w.WriteHeader(http.StatusInternalServerError) writeJsonError(w, r, errors.New(ret.Error)) return } @@ -164,7 +158,6 @@ func (fs *FilerServer) PostHandler(w http.ResponseWriter, r *http.Request) { } else { operation.DeleteFile(fs.master, assignResult.Fid) //clean up glog.V(0).Infoln("Can not to write to folder", path, "without a file name!") - w.WriteHeader(http.StatusInternalServerError) writeJsonError(w, r, errors.New("Can not to write to folder "+path+" without a file name")) return } @@ -173,7 +166,6 @@ func (fs *FilerServer) PostHandler(w http.ResponseWriter, r *http.Request) { if db_err := fs.filer.CreateFile(path, assignResult.Fid); db_err != nil { operation.DeleteFile(fs.master, assignResult.Fid) //clean up glog.V(0).Infoln("failing to write to filer server", db_err.Error()) - w.WriteHeader(http.StatusInternalServerError) writeJsonError(w, r, db_err) return } @@ -195,7 +187,6 @@ func (fs *FilerServer) DeleteHandler(w http.ResponseWriter, r *http.Request) { writeJsonQuiet(w, r, map[string]string{"error": ""}) } else { glog.V(4).Infoln("deleting", r.URL.Path, ":", err.Error()) - w.WriteHeader(http.StatusInternalServerError) writeJsonError(w, r, err) } } diff --git a/go/weed/weed_server/master_server.go b/go/weed/weed_server/master_server.go index 036b3d9b4..b932e1b11 100644 --- a/go/weed/weed_server/master_server.go +++ b/go/weed/weed_server/master_server.go @@ -40,6 +40,7 @@ func NewMasterServer(r *mux.Router, port int, metaFolder string, whiteList []string, ) *MasterServer { ms := &MasterServer{ + port: port, volumeSizeLimitMB: volumeSizeLimitMB, pulseSeconds: pulseSeconds, defaultReplicaPlacement: defaultReplicaPlacement, diff --git a/go/weed/weed_server/master_server_handlers.go b/go/weed/weed_server/master_server_handlers.go index 7da78d556..32422d497 100644 --- a/go/weed/weed_server/master_server_handlers.go +++ b/go/weed/weed_server/master_server_handlers.go @@ -61,11 +61,7 @@ func (ms *MasterServer) volumeLookupHandler(w http.ResponseWriter, r *http.Reque vids := r.Form["volumeId"] collection := r.FormValue("collection") //optional, but can be faster if too many collections volumeLocations := ms.lookupVolumeId(vids, collection) - var ret []operation.LookupResult - for _, volumeLocation := range volumeLocations { - ret = append(ret, volumeLocation) - } - writeJsonQuiet(w, r, ret) + writeJsonQuiet(w, r, volumeLocations) } func (ms *MasterServer) dirAssignHandler(w http.ResponseWriter, r *http.Request) { diff --git a/go/weed/weed_server/volume_server_handlers.go b/go/weed/weed_server/volume_server_handlers.go index d105cf72e..110e00ee1 100644 --- a/go/weed/weed_server/volume_server_handlers.go +++ b/go/weed/weed_server/volume_server_handlers.go @@ -196,42 +196,34 @@ func (vs *VolumeServer) DeleteHandler(w http.ResponseWriter, r *http.Request) { writeJsonQuiet(w, r, m) } -type DeleteResult struct { - Fid string `json:"fid"` - Size int `json:"size"` - Error string `json:"error,omitempty"` -} - //Experts only: takes multiple fid parameters. This function does not propagate deletes to replicas. func (vs *VolumeServer) batchDeleteHandler(w http.ResponseWriter, r *http.Request) { r.ParseForm() - var ret []DeleteResult + var ret []operation.DeleteResult for _, fid := range r.Form["fid"] { - n := new(storage.Needle) - commaIndex := strings.Index(fid, ",") - if commaIndex <= 0 { - ret = append(ret, DeleteResult{Fid: fid, Error: "Wrong fid format."}) + vid, id_cookie, err := operation.ParseFileId(fid) + if err != nil { + ret = append(ret, operation.DeleteResult{Fid: fid, Error: err.Error()}) continue } - vid := fid[:commaIndex] + n := new(storage.Needle) volumeId, _ := storage.NewVolumeId(vid) - id_cookie := fid[commaIndex+1:] n.ParsePath(id_cookie) glog.V(4).Infoln("batch deleting", n) cookie := n.Cookie if _, err := vs.store.Read(volumeId, n); err != nil { - ret = append(ret, DeleteResult{Fid: fid, Error: err.Error()}) + ret = append(ret, operation.DeleteResult{Fid: fid, Error: err.Error()}) continue } if n.Cookie != cookie { - ret = append(ret, DeleteResult{Fid: fid, Error: "File Random Cookie does not match."}) + ret = append(ret, operation.DeleteResult{Fid: fid, 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, DeleteResult{Fid: fid, Error: err.Error()}) + ret = append(ret, operation.DeleteResult{Fid: fid, Error: err.Error()}) } else { - ret = append(ret, DeleteResult{Fid: fid, Size: int(size)}) + ret = append(ret, operation.DeleteResult{Fid: fid, Size: int(size)}) } } |
