aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2020-08-31 10:39:24 -0700
committerChris Lu <chris.lu@gmail.com>2020-08-31 10:39:24 -0700
commit8a1c8e41b301fff49f0e55a4810c056406f2bf7d (patch)
tree943157fac924f7f0913a0e2ca59c96bfd55d1d5d
parentf0c89cfacdc6d83ea4a3ce6241d593506529b6c1 (diff)
downloadseaweedfs-8a1c8e41b301fff49f0e55a4810c056406f2bf7d.tar.xz
seaweedfs-8a1c8e41b301fff49f0e55a4810c056406f2bf7d.zip
simplify if else logic
-rw-r--r--weed/filer2/filerstore.go67
1 files changed, 35 insertions, 32 deletions
diff --git a/weed/filer2/filerstore.go b/weed/filer2/filerstore.go
index ff35ae3f3..1d677e507 100644
--- a/weed/filer2/filerstore.go
+++ b/weed/filer2/filerstore.go
@@ -145,38 +145,9 @@ func (fsw *FilerStoreWrapper) ListDirectoryPrefixedEntries(ctx context.Context,
}()
entries, err := fsw.ActualStore.ListDirectoryPrefixedEntries(ctx, dirPath, startFileName, includeStartFile, limit, prefix)
if err == ErrUnsupportedListDirectoryPrefixed {
- count := 0
- notPrefixed, err := fsw.ActualStore.ListDirectoryEntries(ctx, dirPath, startFileName, includeStartFile, limit)
- if err != nil {
- return nil, err
- }
- if prefix == "" {
- entries = notPrefixed
- } else {
- var lastFileName string
- for count < limit {
- for _, entry := range notPrefixed {
- lastFileName = entry.Name()
- if strings.HasPrefix(entry.Name(), prefix) {
- count++
- entries = append(entries, entry)
- }
- if count >= limit {
- goto Exit
- }
- }
- notPrefixed, err = fsw.ActualStore.ListDirectoryEntries(ctx, dirPath, lastFileName, false, limit)
- if err != nil {
- return nil, err
- }
-
- if len(notPrefixed) == 0 {
- break
- }
- }
- Exit:
- }
- } else if err != nil {
+ entries, err = fsw.prefixFilterEntries(ctx, dirPath, startFileName, includeStartFile, limit, prefix)
+ }
+ if err != nil {
return nil, err
}
for _, entry := range entries {
@@ -185,6 +156,38 @@ func (fsw *FilerStoreWrapper) ListDirectoryPrefixedEntries(ctx context.Context,
return entries, nil
}
+func (fsw *FilerStoreWrapper) prefixFilterEntries(ctx context.Context, dirPath util.FullPath, startFileName string, includeStartFile bool, limit int, prefix string) (entries []*Entry, err error) {
+ entries, err = fsw.ActualStore.ListDirectoryEntries(ctx, dirPath, startFileName, includeStartFile, limit)
+ if err != nil {
+ return nil, err
+ }
+
+ if prefix == "" {
+ return
+ }
+
+ count := 0
+ var lastFileName string
+ notPrefixed := entries
+ entries = nil
+ for count < limit && len(notPrefixed) > 0 {
+ for _, entry := range notPrefixed {
+ lastFileName = entry.Name()
+ if strings.HasPrefix(entry.Name(), prefix) {
+ count++
+ entries = append(entries, entry)
+ }
+ }
+ if count < limit {
+ notPrefixed, err = fsw.ActualStore.ListDirectoryEntries(ctx, dirPath, lastFileName, false, limit-count)
+ if err != nil {
+ return
+ }
+ }
+ }
+ return
+}
+
func (fsw *FilerStoreWrapper) BeginTransaction(ctx context.Context) (context.Context, error) {
return fsw.ActualStore.BeginTransaction(ctx)
}