diff options
| author | Chris Lu <chris.lu@gmail.com> | 2021-01-30 13:38:44 -0800 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2021-01-30 13:38:44 -0800 |
| commit | 314dc1c957041501349fa731e21148c7e93d0006 (patch) | |
| tree | ce3a38ebb5b0a7e6182a006135a8bb13d22b6ba8 /weed | |
| parent | 87d1bfa862e60b53eda7487dd523a04bf4c730c4 (diff) | |
| download | seaweedfs-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.go | 12 |
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 |
