Очень плохо написано. Использование Object
почти никогда не рекомендуется. Использование изменяемого контейнера, такого как ListBuffer
, не рекомендуется в функциональном коде. Полезная информация о названии каждой строки выбрасывается. Я бы написал что-то вроде:
def bucketExists(row: Map[String, String]): Boolean = {
val buckets = listS3Buckets(row("s3_access_key"), row("s3_secret_key")) getOrElse List.empty[Bucket]
val bucketNames = buckets map {_.getName}
bucketNames contains row("s3_primary_bkt_name")
}
def getExistingBuckets(rows: Vector[Map[String, String]]): Vector[Map[String, String]] = {
val (exists, missing) = rows partition bucketExists
missing foreach {row =>
logger.info(s"WARNING: Provided S3 bucket ${row("s3_primary_bkt_name")} doesn't exist")
logger.info(s"WARNING: Dropping the App: ${row("app")} from backup schedule")
}
exists
}
Это значительно упрощает регистрацию информации о несуществующих сегментах и возвращает список только тех сегментов, которые существуют.