From c63cdca11f5ecb85568c111efebc1dedf12e2857 Mon Sep 17 00:00:00 2001 From: Remco Verhoef Date: Wed, 10 May 2017 19:23:44 -0700 Subject: [PATCH] Support iterating through ListObjectParts using NextPartNumberMarker, closes #4284 --- cmd/gateway-gcs.go | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/cmd/gateway-gcs.go b/cmd/gateway-gcs.go index 9fe3035eb..3121422f5 100644 --- a/cmd/gateway-gcs.go +++ b/cmd/gateway-gcs.go @@ -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 func (l *gcsGateway) ListObjectParts(bucket string, key string, uploadID string, partNumberMarker int, maxParts int) (ListPartsInfo, error) { - // TODO: support partNumberMarker - - prefix := fmt.Sprintf("%s/multipart-%s-%s", ZZZZMinioPrefix, key, uploadID) + prefix := "" delimiter := "/" it := l.client.Bucket(bucket).Objects(l.ctx, &storage.Query{Delimiter: delimiter, Prefix: prefix, Versions: false}) isTruncated := false + it.PageInfo().Token = toGCSMultipartKey(key, uploadID, partNumberMarker) + it.PageInfo().MaxSize = maxParts + + nextPartnumberMarker := 0 + parts := []PartInfo{} for { - if maxParts <= len(parts) { + if len(parts) >= maxParts { isTruncated = true - // nextMarker = it.PageInfo().Token break } @@ -736,6 +738,8 @@ func (l *gcsGateway) ListObjectParts(bucket string, key string, uploadID string, continue } + nextPartnumberMarker = partID + parts = append(parts, PartInfo{ PartNumber: partID, LastModified: attrs.Updated, @@ -745,8 +749,9 @@ func (l *gcsGateway) ListObjectParts(bucket string, key string, uploadID string, } return ListPartsInfo{ - IsTruncated: isTruncated, - Parts: parts, + IsTruncated: isTruncated, + NextPartNumberMarker: nextPartnumberMarker, + Parts: parts, }, nil }