in uploader/src/main/scala/com/gu/media/upload/CompleteMultipartCopy.scala [13:42]
override def handle(upload: Upload) = {
upload.progress.copyProgress match {
case Some(CopyProgress(copyId, _ , copyETags)) =>
val bucket = upload.metadata.bucket
val destination = upload.metadata.pluto.s3Key
val eTags = copyETags.map { case CopyETag(n, t) => new PartETag(n, t) }
log.info(s"Completing multipart copy. upload=${upload.id} multipart=$copyId")
val request = new CompleteMultipartUploadRequest(bucket, destination, copyId, eTags.asJava)
s3Client.completeMultipartUpload(request)
case None =>
log.error("Missing copyProgress when invoking CompleteMultipartCopy")
}
// The complete key will be deleted once it has been ingested by Pluto
upload.parts.foreach { part =>
try {
log.info(s"Deleting part $part")
s3Client.deleteObject(upload.metadata.bucket, part.key)
} catch {
case NonFatal(err) =>
// if we can't delete it, no problem. the bucket policy will remove it in time
log.warn(s"Unable to delete part $part: $err")
}
}
upload
}