diff options
| author | Konstantin Lebedev <9497591+kmlebedev@users.noreply.github.com> | 2022-07-01 14:17:49 +0500 |
|---|---|---|
| committer | Konstantin Lebedev <9497591+kmlebedev@users.noreply.github.com> | 2022-07-01 14:17:49 +0500 |
| commit | 3d5f1cbc5eeacc058c8b501f5ed8bfd501ffac4f (patch) | |
| tree | 111d2453cd6bed157e272a13b443f1e8e9b6fdbc /weed/s3api | |
| parent | 06a8b174b598676306643d937570102083d2c594 (diff) | |
| download | seaweedfs-3d5f1cbc5eeacc058c8b501f5ed8bfd501ffac4f.tar.xz seaweedfs-3d5f1cbc5eeacc058c8b501f5ed8bfd501ffac4f.zip | |
fix pagination
Diffstat (limited to 'weed/s3api')
| -rw-r--r-- | weed/s3api/s3api_objects_list_handlers.go | 29 |
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 { |
