aboutsummaryrefslogtreecommitdiff
path: root/weed/s3api/s3api_objects_list_handlers.go
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2019-12-13 00:22:37 -0800
committerChris Lu <chris.lu@gmail.com>2019-12-13 00:22:37 -0800
commit0fa1269bc77abe30f4d108a88a97e29e1bca3124 (patch)
tree5cc1c65ea9119dc23a5a4ded21e775d62c1bf9f3 /weed/s3api/s3api_objects_list_handlers.go
parentd0b423bbc07368bc53a08aec47618924851725a1 (diff)
downloadseaweedfs-0fa1269bc77abe30f4d108a88a97e29e1bca3124.tar.xz
seaweedfs-0fa1269bc77abe30f4d108a88a97e29e1bca3124.zip
filer: streaming file listing
Diffstat (limited to 'weed/s3api/s3api_objects_list_handlers.go')
-rw-r--r--weed/s3api/s3api_objects_list_handlers.go17
1 files changed, 15 insertions, 2 deletions
diff --git a/weed/s3api/s3api_objects_list_handlers.go b/weed/s3api/s3api_objects_list_handlers.go
index 1fc8b6b37..aa6849cbd 100644
--- a/weed/s3api/s3api_objects_list_handlers.go
+++ b/weed/s3api/s3api_objects_list_handlers.go
@@ -3,6 +3,7 @@ package s3api
import (
"context"
"fmt"
+ "io"
"net/http"
"net/url"
"path/filepath"
@@ -107,7 +108,7 @@ func (s3a *S3ApiServer) listFilerEntries(ctx context.Context, bucket, originalPr
InclusiveStartFrom: false,
}
- resp, err := client.ListEntries(ctx, request)
+ stream, err := client.ListEntries(ctx, request)
if err != nil {
return fmt.Errorf("list buckets: %v", err)
}
@@ -117,7 +118,18 @@ func (s3a *S3ApiServer) listFilerEntries(ctx context.Context, bucket, originalPr
var counter int
var lastEntryName string
var isTruncated bool
- for _, entry := range resp.Entries {
+
+ for {
+ resp, recvErr := stream.Recv()
+ if recvErr != nil {
+ if recvErr == io.EOF {
+ break
+ } else {
+ return recvErr
+ }
+ }
+
+ entry := resp.Entry
counter++
if counter > maxKeys {
isTruncated = true
@@ -143,6 +155,7 @@ func (s3a *S3ApiServer) listFilerEntries(ctx context.Context, bucket, originalPr
StorageClass: "STANDARD",
})
}
+
}
response = ListBucketResult{