func()

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
}