Support iterating through ListObjectParts using NextPartNumberMarker, closes #4284

This commit is contained in:
Remco Verhoef 2017-05-10 19:23:44 -07:00 committed by Harshavardhana
parent 4430085981
commit c63cdca11f

View File

@ -697,20 +697,22 @@ func (l *gcsGateway) PutObjectPart(bucket string, key string, uploadID string, p
// ListObjectParts returns all object parts for specified object in specified bucket // ListObjectParts returns all object parts for specified object in specified bucket
func (l *gcsGateway) ListObjectParts(bucket string, key string, uploadID string, partNumberMarker int, maxParts int) (ListPartsInfo, error) { func (l *gcsGateway) ListObjectParts(bucket string, key string, uploadID string, partNumberMarker int, maxParts int) (ListPartsInfo, error) {
// TODO: support partNumberMarker prefix := ""
prefix := fmt.Sprintf("%s/multipart-%s-%s", ZZZZMinioPrefix, key, uploadID)
delimiter := "/" delimiter := "/"
it := l.client.Bucket(bucket).Objects(l.ctx, &storage.Query{Delimiter: delimiter, Prefix: prefix, Versions: false}) it := l.client.Bucket(bucket).Objects(l.ctx, &storage.Query{Delimiter: delimiter, Prefix: prefix, Versions: false})
isTruncated := false isTruncated := false
it.PageInfo().Token = toGCSMultipartKey(key, uploadID, partNumberMarker)
it.PageInfo().MaxSize = maxParts
nextPartnumberMarker := 0
parts := []PartInfo{} parts := []PartInfo{}
for { for {
if maxParts <= len(parts) { if len(parts) >= maxParts {
isTruncated = true isTruncated = true
// nextMarker = it.PageInfo().Token
break break
} }
@ -736,6 +738,8 @@ func (l *gcsGateway) ListObjectParts(bucket string, key string, uploadID string,
continue continue
} }
nextPartnumberMarker = partID
parts = append(parts, PartInfo{ parts = append(parts, PartInfo{
PartNumber: partID, PartNumber: partID,
LastModified: attrs.Updated, LastModified: attrs.Updated,
@ -745,8 +749,9 @@ func (l *gcsGateway) ListObjectParts(bucket string, key string, uploadID string,
} }
return ListPartsInfo{ return ListPartsInfo{
IsTruncated: isTruncated, IsTruncated: isTruncated,
Parts: parts, NextPartNumberMarker: nextPartnumberMarker,
Parts: parts,
}, nil }, nil
} }