aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2020-12-21 23:37:43 -0800
committerChris Lu <chris.lu@gmail.com>2020-12-21 23:37:43 -0800
commitfe46411cd4e675d910fdac1a5d91964376518c1c (patch)
treed16518c7b77d2704dab1c25b53ed4c68a8c4a522
parentc74bede730be11c0c0847bbb6c5ec36aac5388d6 (diff)
downloadseaweedfs-fe46411cd4e675d910fdac1a5d91964376518c1c.tar.xz
seaweedfs-fe46411cd4e675d910fdac1a5d91964376518c1c.zip
handle directory listing edge cases
-rw-r--r--weed/filer/filerstore_translate_path.go23
-rw-r--r--weed/filer/filerstore_wrapper.go2
2 files changed, 18 insertions, 7 deletions
diff --git a/weed/filer/filerstore_translate_path.go b/weed/filer/filerstore_translate_path.go
index b40e32d3d..4ea69ea8d 100644
--- a/weed/filer/filerstore_translate_path.go
+++ b/weed/filer/filerstore_translate_path.go
@@ -30,12 +30,23 @@ func NewFilerStorePathTranlator(storeRoot string, store FilerStore) *FilerStoreP
}
}
+func (t *FilerStorePathTranlator) translatePath(fp util.FullPath) (newPath util.FullPath){
+ newPath = fp
+ if t.storeRoot == "/" {
+ return
+ }
+ newPath = fp[len(t.storeRoot)-1:]
+ if newPath == "" {
+ newPath = "/"
+ }
+ return
+}
func (t *FilerStorePathTranlator) changeEntryPath(entry *Entry) (previousPath util.FullPath){
previousPath = entry.FullPath
if t.storeRoot == "/" {
return
}
- entry.FullPath = previousPath[len(t.storeRoot)-1:]
+ entry.FullPath = t.translatePath(previousPath)
return
}
func (t *FilerStorePathTranlator) recoverEntryPath(entry *Entry, previousPath util.FullPath) {
@@ -68,7 +79,7 @@ func (t *FilerStorePathTranlator) FindEntry(ctx context.Context, fp util.FullPat
if t.storeRoot == "/" {
return t.actualStore.FindEntry(ctx, fp)
}
- newFullPath := fp[len(t.storeRoot)-1:]
+ newFullPath := t.translatePath(fp)
entry, err = t.actualStore.FindEntry(ctx, newFullPath)
if err == nil {
entry.FullPath = fp[:len(t.storeRoot)-1] + entry.FullPath
@@ -77,7 +88,7 @@ func (t *FilerStorePathTranlator) FindEntry(ctx context.Context, fp util.FullPat
}
func (t *FilerStorePathTranlator) DeleteEntry(ctx context.Context, fp util.FullPath) (err error) {
- newFullPath := fp[len(t.storeRoot)-1:]
+ newFullPath := t.translatePath(fp)
return t.actualStore.DeleteEntry(ctx, newFullPath)
}
@@ -90,14 +101,14 @@ func (t *FilerStorePathTranlator) DeleteOneEntry(ctx context.Context, existingEn
}
func (t *FilerStorePathTranlator) DeleteFolderChildren(ctx context.Context, fp util.FullPath) (err error) {
- newFullPath := fp[len(t.storeRoot)-1:]
+ newFullPath := t.translatePath(fp)
return t.actualStore.DeleteFolderChildren(ctx, newFullPath)
}
func (t *FilerStorePathTranlator) ListDirectoryEntries(ctx context.Context, dirPath util.FullPath, startFileName string, includeStartFile bool, limit int) ([]*Entry, error) {
- newFullPath := dirPath[len(t.storeRoot)-1:]
+ newFullPath := t.translatePath(dirPath)
entries, err := t.actualStore.ListDirectoryEntries(ctx, newFullPath, startFileName, includeStartFile, limit)
if err != nil {
@@ -111,7 +122,7 @@ func (t *FilerStorePathTranlator) ListDirectoryEntries(ctx context.Context, dirP
func (t *FilerStorePathTranlator) ListDirectoryPrefixedEntries(ctx context.Context, dirPath util.FullPath, startFileName string, includeStartFile bool, limit int, prefix string) ([]*Entry, error) {
- newFullPath := dirPath[len(t.storeRoot)-1:]
+ newFullPath := t.translatePath(dirPath)
entries, err := t.actualStore.ListDirectoryPrefixedEntries(ctx, newFullPath, startFileName, includeStartFile, limit, prefix)
if err != nil {
diff --git a/weed/filer/filerstore_wrapper.go b/weed/filer/filerstore_wrapper.go
index ba26ca41b..011bab963 100644
--- a/weed/filer/filerstore_wrapper.go
+++ b/weed/filer/filerstore_wrapper.go
@@ -237,7 +237,7 @@ func (fsw *FilerStoreWrapper) ListDirectoryPrefixedEntries(ctx context.Context,
}
func (fsw *FilerStoreWrapper) prefixFilterEntries(ctx context.Context, dirPath util.FullPath, startFileName string, includeStartFile bool, limit int, prefix string) (entries []*Entry, err error) {
- actualStore := fsw.getActualStore(dirPath)
+ actualStore := fsw.getActualStore(dirPath+"/")
entries, err = actualStore.ListDirectoryEntries(ctx, dirPath, startFileName, includeStartFile, limit)
if err != nil {
return nil, err