Browse Source

Improve the performance of prefix list after fix #4668

pull/4956/head
Fan 1 year ago
parent
commit
7198c3b776
  1. 12
      weed/filer/filerstore_wrapper.go

12
weed/filer/filerstore_wrapper.go

@ -281,8 +281,16 @@ func (fsw *FilerStoreWrapper) prefixFilterEntries(ctx context.Context, dirPath u
return actualStore.ListDirectoryEntries(ctx, dirPath, startFileName, includeStartFile, limit, eachEntryFunc) return actualStore.ListDirectoryEntries(ctx, dirPath, startFileName, includeStartFile, limit, eachEntryFunc)
} }
// after remove compare in pr #4924 , the loop will fetch some objects based on the limit parameter
// When the limit parameter is set too small and the number of objects is too large, it can cause performance issues.
// so it will at least fetch 500 objects a time if limit < 500
fetchLimit := int64(500)
if limit > fetchLimit {
fetchLimit = limit
}
var notPrefixed []*Entry var notPrefixed []*Entry
lastFileName, err = actualStore.ListDirectoryEntries(ctx, dirPath, startFileName, includeStartFile, limit, func(entry *Entry) bool {
lastFileName, err = actualStore.ListDirectoryEntries(ctx, dirPath, startFileName, includeStartFile, fetchLimit, func(entry *Entry) bool {
notPrefixed = append(notPrefixed, entry) notPrefixed = append(notPrefixed, entry)
return true return true
}) })
@ -305,7 +313,7 @@ func (fsw *FilerStoreWrapper) prefixFilterEntries(ctx context.Context, dirPath u
} }
if count < limit && lastFileName <= prefix { if count < limit && lastFileName <= prefix {
notPrefixed = notPrefixed[:0] notPrefixed = notPrefixed[:0]
lastFileName, err = actualStore.ListDirectoryEntries(ctx, dirPath, lastFileName, false, limit, func(entry *Entry) bool {
lastFileName, err = actualStore.ListDirectoryEntries(ctx, dirPath, lastFileName, false, fetchLimit, func(entry *Entry) bool {
notPrefixed = append(notPrefixed, entry) notPrefixed = append(notPrefixed, entry)
return true return true
}) })

Loading…
Cancel
Save