in api/src/main/scala/com/gu/adapters/store/Store.scala [222:244]
def delete(bucket: String, keys: String*): Either[Error, Unit] = {
if (keys.nonEmpty) {
val request = new DeleteObjectsRequest(bucket).withKeys(keys: _*)
val resp = Try(client.deleteObjects(request))
// We need to unpack MultiObjectDeleteExceptions to ensure errors
// returned/logged are useful
val withErrors = resp match {
case Success(_) => Right(())
case Failure(ex: MultiObjectDeleteException) =>
val errors = ex.getErrors.asScala.toList
.map(ex => s"Unable to delete object '${ex.getKey}' from bucket '$bucket', reason: ${ex.getMessage}")
.mkString(", ")
Left(Errors.ioFailed(List(errors)))
case Failure(err) => Left(ioError(err))
}
withErrors.left.map(e => logError("Multi-delete failed", e))
withErrors
} else {
Right(())
}
}