Skip to content
This repository was archived by the owner on Sep 12, 2018. It is now read-only.

Commit 43716a2

Browse files
committed
Uses IsTruncated and NextMarker for S3 list internal pagination
1 parent b522fbd commit 43716a2

File tree

1 file changed

+11
-23
lines changed

1 file changed

+11
-23
lines changed

storagedriver/s3/s3.go

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,6 @@ func (d *S3Driver) WriteStream(path string, offset, size uint64, reader io.ReadC
161161
} else {
162162
part, err := multi.PutPart(int(partNumber), bytes.NewReader(buf[0:bytesRead]))
163163
if err != nil {
164-
165164
return err
166165
}
167166

@@ -192,15 +191,18 @@ func (d *S3Driver) ResumeWritePosition(path string) (uint64, error) {
192191
}
193192

194193
func (d *S3Driver) List(prefix string) ([]string, error) {
195-
listResponse, err := d.Bucket.List(prefix+"/", "/", "", listPartsMax)
194+
if prefix[len(prefix)-1] != '/' {
195+
prefix = prefix + "/"
196+
}
197+
listResponse, err := d.Bucket.List(prefix, "/", "", listPartsMax)
196198
if err != nil {
197199
return nil, err
198200
}
199201

200202
files := []string{}
201203
directories := []string{}
202204

203-
for len(listResponse.Contents) > 0 || len(listResponse.CommonPrefixes) > 0 {
205+
for {
204206
for _, key := range listResponse.Contents {
205207
files = append(files, key.Key)
206208
}
@@ -209,27 +211,13 @@ func (d *S3Driver) List(prefix string) ([]string, error) {
209211
directories = append(directories, commonPrefix[0:len(commonPrefix)-1])
210212
}
211213

212-
lastFile := ""
213-
lastDirectory := ""
214-
lastMarker := ""
215-
216-
if len(files) > 0 {
217-
lastFile = files[len(files)-1]
218-
}
219-
220-
if len(directories) > 0 {
221-
lastDirectory = directories[len(directories)-1] + "/"
222-
}
223-
224-
if lastDirectory > lastFile {
225-
lastMarker = lastDirectory
214+
if listResponse.IsTruncated {
215+
listResponse, err = d.Bucket.List(prefix, "/", listResponse.NextMarker, listPartsMax)
216+
if err != nil {
217+
return nil, err
218+
}
226219
} else {
227-
lastMarker = lastFile
228-
}
229-
230-
listResponse, err = d.Bucket.List(prefix+"/", "/", lastMarker, listPartsMax)
231-
if err != nil {
232-
return nil, err
220+
break
233221
}
234222
}
235223

0 commit comments

Comments
 (0)