aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chrislusf@users.noreply.github.com>2025-08-08 12:38:55 -0700
committerGitHub <noreply@github.com>2025-08-08 12:38:55 -0700
commit3ac2a2e22d863753a6b568596fbe9d76d03023b5 (patch)
tree3e4c282f412e1e283e3816e261fd87da2e380f67
parentfae416586b17aa37ccff38bc954c46a3c1e1f29d (diff)
downloadseaweedfs-3ac2a2e22d863753a6b568596fbe9d76d03023b5.tar.xz
seaweedfs-3ac2a2e22d863753a6b568596fbe9d76d03023b5.zip
fix tikv listing due to expired entries (#7115)
* fix tikv listing due to expired entries When there are many entries with empty fileName values (which can happen after TTL cleanup), the continue statements prevent the loop counter from incrementing, creating an infinite loop. * address comments * Update weed/filer/tikv/tikv_store.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * address comments Update weed/filer/tikv/tikv_store.go Co-Authored-By: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
-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)