aboutsummaryrefslogtreecommitdiff
path: root/weed/s3api
diff options
context:
space:
mode:
authorKonstantin Lebedev <9497591+kmlebedev@users.noreply.github.com>2022-07-01 14:17:49 +0500
committerKonstantin Lebedev <9497591+kmlebedev@users.noreply.github.com>2022-07-01 14:17:49 +0500
commit3d5f1cbc5eeacc058c8b501f5ed8bfd501ffac4f (patch)
tree111d2453cd6bed157e272a13b443f1e8e9b6fdbc /weed/s3api
parent06a8b174b598676306643d937570102083d2c594 (diff)
downloadseaweedfs-3d5f1cbc5eeacc058c8b501f5ed8bfd501ffac4f.tar.xz
seaweedfs-3d5f1cbc5eeacc058c8b501f5ed8bfd501ffac4f.zip
fix pagination
Diffstat (limited to 'weed/s3api')
-rw-r--r--weed/s3api/s3api_objects_list_handlers.go29
1 files changed, 16 insertions, 13 deletions
diff --git a/weed/s3api/s3api_objects_list_handlers.go b/weed/s3api/s3api_objects_list_handlers.go
index 975ba6201..1c55f97ac 100644
--- a/weed/s3api/s3api_objects_list_handlers.go
+++ b/weed/s3api/s3api_objects_list_handlers.go
@@ -254,20 +254,23 @@ func (s3a *S3ApiServer) doListFilerEntries(client filer_pb.SeaweedFilerClient, d
sepIndex := strings.Index(marker, "/")
if sepIndex != -1 {
subPrefix, subMarker := marker[0:sepIndex], marker[sepIndex+1:]
- subDir := fmt.Sprintf("%s/%s", dir[0:bucketPrefixLen-1], subPrefix)
- if strings.HasPrefix(subDir, dir) {
- subCounter, subIsTruncated, subNextMarker, subErr := s3a.doListFilerEntries(client, subDir, "", maxKeys, subMarker, delimiter, false, false, bucketPrefixLen, eachEntryFn)
- if subErr != nil {
- err = subErr
- return
- }
- counter += subCounter
- isTruncated = isTruncated || subIsTruncated
- maxKeys -= subCounter
- nextMarker = subNextMarker
- // finished processing this sub directory
- marker = subPrefix
+ var subDir string
+ if len(dir) > bucketPrefixLen && dir[bucketPrefixLen:] == subPrefix {
+ subDir = dir
+ } else {
+ subDir = fmt.Sprintf("%s/%s", dir, subPrefix)
+ }
+ subCounter, subIsTruncated, subNextMarker, subErr := s3a.doListFilerEntries(client, subDir, "", maxKeys, subMarker, delimiter, false, false, bucketPrefixLen, eachEntryFn)
+ if subErr != nil {
+ err = subErr
+ return
}
+ counter += subCounter
+ isTruncated = isTruncated || subIsTruncated
+ maxKeys -= subCounter
+ nextMarker = subNextMarker
+ // finished processing this sub directory
+ marker = subPrefix
}
}
if maxKeys <= 0 {