aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--weed/filer/tikv/tikv_store.go26
1 files changed, 21 insertions, 5 deletions
diff --git a/weed/filer/tikv/tikv_store.go b/weed/filer/tikv/tikv_store.go
index abc7ea55f..c02f2c22e 100644
--- a/weed/filer/tikv/tikv_store.go
+++ b/weed/filer/tikv/tikv_store.go
@@ -228,19 +228,31 @@ func (store *TikvStore) ListDirectoryPrefixedEntries(ctx context.Context, dirPat
return err
}
defer iter.Close()
- for i := int64(0); i < limit && iter.Valid(); i++ {
+ i := int64(0)
+ for iter.Valid() {
key := iter.Key()
if !bytes.HasPrefix(key, directoryPrefix) {
break
}
fileName := getNameFromKey(key)
- if fileName == "" || fileName == startFileName && !includeStartFile {
+ if fileName == "" {
if err := iter.Next(); err != nil {
break
- } else {
- continue
}
+ continue
}
+ if fileName == startFileName && !includeStartFile {
+ if err := iter.Next(); err != nil {
+ break
+ }
+ continue
+ }
+
+ // Check limit only before processing valid entries
+ if limit > 0 && i >= limit {
+ break
+ }
+
lastFileName = fileName
entry := &filer.Entry{
FullPath: util.NewFullPath(string(dirPath), fileName),
@@ -252,11 +264,15 @@ func (store *TikvStore) ListDirectoryPrefixedEntries(ctx context.Context, dirPat
glog.V(0).InfofCtx(ctx, "list %s : %v", entry.FullPath, err)
break
}
+
+ // Only increment counter after successful processing
+ i++
+
if err := iter.Next(); !eachEntryFunc(entry) || err != nil {
break
}
}
- return nil
+ return err
})
if err != nil {
return lastFileName, fmt.Errorf("prefix list %s : %v", dirPath, err)