From 9b603f5ffa66a55420b366731a8244c4c87613f4 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Mon, 28 May 2018 02:24:14 -0700 Subject: [PATCH] split filer read into 2 files --- weed/server/filer_server_handlers_read.go | 61 ---------------- weed/server/filer_server_handlers_read_dir.go | 70 +++++++++++++++++++ 2 files changed, 70 insertions(+), 61 deletions(-) create mode 100644 weed/server/filer_server_handlers_read_dir.go diff --git a/weed/server/filer_server_handlers_read.go b/weed/server/filer_server_handlers_read.go index 782ed55f1..a982806e3 100644 --- a/weed/server/filer_server_handlers_read.go +++ b/weed/server/filer_server_handlers_read.go @@ -4,75 +4,14 @@ import ( "io" "net/http" "net/url" - "strconv" "strings" "github.com/chrislusf/seaweedfs/weed/filer2" "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/operation" - ui "github.com/chrislusf/seaweedfs/weed/server/filer_ui" "github.com/chrislusf/seaweedfs/weed/util" ) -// listDirectoryHandler lists directories and folers under a directory -// files are sorted by name and paginated via "lastFileName" and "limit". -// sub directories are listed on the first page, when "lastFileName" -// is empty. -func (fs *FilerServer) listDirectoryHandler(w http.ResponseWriter, r *http.Request) { - path := r.URL.Path - if strings.HasSuffix(path, "/") && len(path) > 1 { - path = path[:len(path)-1] - } - - limit, limit_err := strconv.Atoi(r.FormValue("limit")) - if limit_err != nil { - limit = 100 - } - - lastFileName := r.FormValue("lastFileName") - - entries, err := fs.filer.ListDirectoryEntries(filer2.FullPath(path), lastFileName, false, limit) - - if err != nil { - glog.V(0).Infof("listDirectory %s %s $d: %s", path, lastFileName, limit, err) - w.WriteHeader(http.StatusNotFound) - return - } - - shouldDisplayLoadMore := len(entries) == limit - if path == "/" { - path = "" - } - - if len(entries) > 0 { - lastFileName = entries[len(entries)-1].Name() - } - - glog.V(4).Infof("listDirectory %s, last file %s, limit %d: %d items", path, lastFileName, limit, len(entries)) - - args := struct { - Path string - Breadcrumbs []ui.Breadcrumb - Entries interface{} - Limit int - LastFileName string - ShouldDisplayLoadMore bool - }{ - path, - ui.ToBreadcrumb(path), - entries, - limit, - lastFileName, - shouldDisplayLoadMore, - } - - if r.Header.Get("Accept") == "application/json" { - writeJsonQuiet(w, r, http.StatusOK, args) - } else { - ui.StatusTpl.Execute(w, args) - } -} - func (fs *FilerServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request, isGetMethod bool) { path := r.URL.Path if strings.HasSuffix(path, "/") && len(path) > 1 { diff --git a/weed/server/filer_server_handlers_read_dir.go b/weed/server/filer_server_handlers_read_dir.go new file mode 100644 index 000000000..a39fed3fd --- /dev/null +++ b/weed/server/filer_server_handlers_read_dir.go @@ -0,0 +1,70 @@ +package weed_server + +import ( + "net/http" + "strconv" + "strings" + + "github.com/chrislusf/seaweedfs/weed/filer2" + "github.com/chrislusf/seaweedfs/weed/glog" + ui "github.com/chrislusf/seaweedfs/weed/server/filer_ui" +) + +// listDirectoryHandler lists directories and folers under a directory +// files are sorted by name and paginated via "lastFileName" and "limit". +// sub directories are listed on the first page, when "lastFileName" +// is empty. +func (fs *FilerServer) listDirectoryHandler(w http.ResponseWriter, r *http.Request) { + path := r.URL.Path + if strings.HasSuffix(path, "/") && len(path) > 1 { + path = path[:len(path)-1] + } + + limit, limit_err := strconv.Atoi(r.FormValue("limit")) + if limit_err != nil { + limit = 100 + } + + lastFileName := r.FormValue("lastFileName") + + entries, err := fs.filer.ListDirectoryEntries(filer2.FullPath(path), lastFileName, false, limit) + + if err != nil { + glog.V(0).Infof("listDirectory %s %s $d: %s", path, lastFileName, limit, err) + w.WriteHeader(http.StatusNotFound) + return + } + + shouldDisplayLoadMore := len(entries) == limit + if path == "/" { + path = "" + } + + if len(entries) > 0 { + lastFileName = entries[len(entries)-1].Name() + } + + glog.V(4).Infof("listDirectory %s, last file %s, limit %d: %d items", path, lastFileName, limit, len(entries)) + + args := struct { + Path string + Breadcrumbs []ui.Breadcrumb + Entries interface{} + Limit int + LastFileName string + ShouldDisplayLoadMore bool + }{ + path, + ui.ToBreadcrumb(path), + entries, + limit, + lastFileName, + shouldDisplayLoadMore, + } + + if r.Header.Get("Accept") == "application/json" { + writeJsonQuiet(w, r, http.StatusOK, args) + } else { + ui.StatusTpl.Execute(w, args) + } +}