aboutsummaryrefslogtreecommitdiff
path: root/weed
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2021-01-30 13:38:44 -0800
committerChris Lu <chris.lu@gmail.com>2021-01-30 13:38:44 -0800
commit314dc1c957041501349fa731e21148c7e93d0006 (patch)
treece3a38ebb5b0a7e6182a006135a8bb13d22b6ba8 /weed
parent87d1bfa862e60b53eda7487dd523a04bf4c730c4 (diff)
downloadseaweedfs-314dc1c957041501349fa731e21148c7e93d0006.tar.xz
seaweedfs-314dc1c957041501349fa731e21148c7e93d0006.zip
filer: etcd store fix listing
fix https://github.com/chrislusf/seaweedfs/issues/1767
Diffstat (limited to 'weed')
-rw-r--r--weed/filer/etcd/etcd_store.go12
1 files changed, 10 insertions, 2 deletions
diff --git a/weed/filer/etcd/etcd_store.go b/weed/filer/etcd/etcd_store.go
index 8159c634d..71ed738f9 100644
--- a/weed/filer/etcd/etcd_store.go
+++ b/weed/filer/etcd/etcd_store.go
@@ -1,6 +1,7 @@
package etcd
import (
+ "bytes"
"context"
"fmt"
"strings"
@@ -145,14 +146,21 @@ func (store *EtcdStore) ListDirectoryPrefixedEntries(ctx context.Context, dirPat
func (store *EtcdStore) ListDirectoryEntries(ctx context.Context, dirPath weed_util.FullPath, startFileName string, includeStartFile bool, limit int64, eachEntryFunc filer.ListEachEntryFunc) (lastFileName string, err error) {
directoryPrefix := genDirectoryKeyPrefix(dirPath, "")
+ lastFileStart := directoryPrefix
+ if startFileName != "" {
+ lastFileStart = genDirectoryKeyPrefix(dirPath, startFileName)
+ }
- resp, err := store.client.Get(ctx, string(directoryPrefix),
+ resp, err := store.client.Get(ctx, string(lastFileStart),
clientv3.WithPrefix(), clientv3.WithSort(clientv3.SortByKey, clientv3.SortDescend))
if err != nil {
return lastFileName, fmt.Errorf("list %s : %v", dirPath, err)
}
for _, kv := range resp.Kvs {
+ if !bytes.HasPrefix(kv.Key, directoryPrefix) {
+ break
+ }
fileName := getNameFromKey(kv.Key)
if fileName == "" {
continue
@@ -160,7 +168,6 @@ func (store *EtcdStore) ListDirectoryEntries(ctx context.Context, dirPath weed_u
if fileName == startFileName && !includeStartFile {
continue
}
- lastFileName = fileName
limit--
if limit < 0 {
break
@@ -176,6 +183,7 @@ func (store *EtcdStore) ListDirectoryEntries(ctx context.Context, dirPath weed_u
if !eachEntryFunc(entry) {
break
}
+ lastFileName = fileName
}
return lastFileName, err