in iot-onboarding-service/src/cloudrack-lambda-core/s3/s3.go [316:359]
func (mpc S3MultipartConfig) Parts() ([]*s3.CompletedPart, error) {
sess, _ := session.NewSession(&aws.Config{
Region: aws.String(mpc.S3Config.Region)},
)
svc := s3.New(sess)
log.Printf("[Parts] Listing parts for Multipart Upload %+v", mpc.MultipartUploadId)
parts := []*s3.CompletedPart{}
params := &s3.ListPartsInput{
Bucket: aws.String(mpc.S3Config.Bucket), // Required
Key: aws.String(mpc.Key()), // Required
UploadId: aws.String(mpc.MultipartUploadId), // Required
}
resp, err := svc.ListParts(params)
page := 0
for *resp.IsTruncated && err == nil {
for _, part := range resp.Parts {
parts = append(parts, &s3.CompletedPart{ETag: part.ETag, PartNumber: part.PartNumber})
}
page++
log.Printf("[Parts] List is paginated. Getting page %v", page)
params.PartNumberMarker = resp.NextPartNumberMarker
resp, err = svc.ListParts(params)
if page > LIST_PART_MAX_PAGE {
log.Printf("[Parts] Max number of pages (%v) exeeded. exiting to avoid infinite loop", LIST_PART_MAX_PAGE)
return parts, errors.New("Max number of pages exeeded. exiting to avoid infinite loop")
}
}
if err != nil {
// Print the error, cast err to awserr.Error to get the Code and
// Message from an error.
log.Printf("Failed to list Uploaded Parts: %+v", err)
return parts, err
}
for _, part := range resp.Parts {
parts = append(parts, &s3.CompletedPart{ETag: part.ETag, PartNumber: part.PartNumber})
}
log.Printf("[Parts] Found %v parts", len(parts))
return parts, nil
}