aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2018-05-19 12:07:15 -0700
committerChris Lu <chris.lu@gmail.com>2018-05-19 12:07:15 -0700
commitab4ddb1e0ee425d0d779eb529c42dc5361320822 (patch)
tree9d31d09bd934830e59f7f9518d9c85abff89ef55
parente31c514b00b97c2db20232812899d542e37ea931 (diff)
downloadseaweedfs-ab4ddb1e0ee425d0d779eb529c42dc5361320822.tar.xz
seaweedfs-ab4ddb1e0ee425d0d779eb529c42dc5361320822.zip
fix directory creation, directory listing
-rw-r--r--weed/filer2/filer.go11
-rw-r--r--weed/filer2/memdb/memdb_store.go8
-rw-r--r--weed/server/filer_server_handlers_admin.go3
-rw-r--r--weed/server/filer_server_handlers_read.go2
4 files changed, 17 insertions, 7 deletions
diff --git a/weed/filer2/filer.go b/weed/filer2/filer.go
index 4ee6f4e50..467f846ed 100644
--- a/weed/filer2/filer.go
+++ b/weed/filer2/filer.go
@@ -9,6 +9,7 @@ import (
"time"
"os"
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
+ "github.com/chrislusf/seaweedfs/weed/glog"
)
type Filer struct {
@@ -44,22 +45,23 @@ func (f *Filer) CreateEntry(entry *Entry) (error) {
dirPath := "/" + filepath.Join(dirParts[:i]...)
// fmt.Printf("%d directory: %+v\n", i, dirPath)
- dirFound := false
-
// first check local cache
dirEntry := f.cacheGetDirectory(dirPath)
// not found, check the store directly
if dirEntry == nil {
+ glog.V(4).Infof("find uncached directory: %s", dirPath)
var dirFindErr error
- dirFound, dirEntry, dirFindErr = f.FindEntry(FullPath(dirPath))
+ _, dirEntry, dirFindErr = f.FindEntry(FullPath(dirPath))
if dirFindErr != nil {
return fmt.Errorf("findDirectory %s: %v", dirPath, dirFindErr)
}
+ }else{
+ glog.V(4).Infof("found cached directory: %s", dirPath)
}
// no such existing directory
- if !dirFound {
+ if dirEntry == nil {
// create the directory
now := time.Now()
@@ -75,6 +77,7 @@ func (f *Filer) CreateEntry(entry *Entry) (error) {
},
}
+ glog.V(2).Infof("create directory: %s", dirPath)
mkdirErr := f.store.InsertEntry(dirEntry)
if mkdirErr != nil {
return fmt.Errorf("mkdir %s: %v", dirPath, mkdirErr)
diff --git a/weed/filer2/memdb/memdb_store.go b/weed/filer2/memdb/memdb_store.go
index 0276e9a7f..7e886f4ef 100644
--- a/weed/filer2/memdb/memdb_store.go
+++ b/weed/filer2/memdb/memdb_store.go
@@ -77,11 +77,13 @@ func (filer *MemDbStore) ListDirectoryEntries(fullpath filer2.FullPath, startFil
}
entry := item.(Entry).Entry
// println("checking", entry.FullPath)
+
if entry.FullPath == fullpath {
// skipping the current directory
// println("skipping the folder", entry.FullPath)
return true
}
+
dir, name := entry.FullPath.DirAndName()
if name == startFileName {
if inclusive {
@@ -90,11 +92,13 @@ func (filer *MemDbStore) ListDirectoryEntries(fullpath filer2.FullPath, startFil
}
return true
}
- if !strings.HasPrefix(dir, string(fullpath)) {
- // println("directory is:", dir, "fullpath:", fullpath)
+
+ // only iterate the same prefix
+ if !strings.HasPrefix(string(entry.FullPath), string(fullpath)) {
// println("breaking from", entry.FullPath)
return false
}
+
if dir != string(fullpath) {
// this could be items in deeper directories
// println("skipping deeper folder", entry.FullPath)
diff --git a/weed/server/filer_server_handlers_admin.go b/weed/server/filer_server_handlers_admin.go
index 2c5c1bc21..06d041398 100644
--- a/weed/server/filer_server_handlers_admin.go
+++ b/weed/server/filer_server_handlers_admin.go
@@ -15,7 +15,7 @@ func (fs *FilerServer) registerHandler(w http.ResponseWriter, r *http.Request) {
fileId := r.FormValue("fileId")
fileSize, err := strconv.ParseUint(r.FormValue("fileSize"), 10, 64)
if err != nil {
- glog.V(4).Infof("register %s to %s parse fileSize %s: %v", fileId, path, r.FormValue("fileSize"), err)
+ glog.V(0).Infof("register %s to %s parse fileSize %s: %v", fileId, path, r.FormValue("fileSize"), err)
writeJsonError(w, r, http.StatusInternalServerError, err)
return
}
@@ -30,6 +30,7 @@ func (fs *FilerServer) registerHandler(w http.ResponseWriter, r *http.Request) {
Mtime: time.Now().UnixNano(),
}},
}
+ glog.V(2).Infof("register %s to %s parse fileSize %s", fileId, path, r.FormValue("fileSize"))
err = fs.filer.CreateEntry(entry)
if err != nil {
glog.V(4).Infof("register %s to %s error: %v", fileId, path, err)
diff --git a/weed/server/filer_server_handlers_read.go b/weed/server/filer_server_handlers_read.go
index 3517299cf..52b7ba177 100644
--- a/weed/server/filer_server_handlers_read.go
+++ b/weed/server/filer_server_handlers_read.go
@@ -48,6 +48,8 @@ func (fs *FilerServer) listDirectoryHandler(w http.ResponseWriter, r *http.Reque
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
Entries interface{}