in media_remover/src/main/scala/OnlineNearlineMessageProcessor.scala [91:120]
def handleInternalArchiveCompleteForNearline(vault: Vault, internalArchiveVault: Vault, nearlineRecord: NearlineRecord): Future[Either[String, MessageProcessorReturnValue]] =
pendingDeletionRecordDAO.findByNearlineIdForNEARLINE(nearlineRecord.objectId).flatMap({
case Some(rec) =>
rec.nearlineId match {
case Some(nearlineId) =>
val exists = for {
fileSize <- nearlineHelper.getNearlineFileSize(vault, nearlineId)
exists <- nearlineExistsInInternalArchive(vault, internalArchiveVault, nearlineId, rec.originalFilePath, fileSize)
} yield exists
exists.flatMap({
case true =>
for {
mediaRemovedMsg <- nearlineHelper.deleteMediaFromNearline(vault, rec.mediaTier.toString, Some(rec.originalFilePath), rec.nearlineId, rec.vidispineItemId)
_ <- pendingDeletionRecordDAO.deleteRecord(rec)
} yield mediaRemovedMsg
case false =>
if (rec.attempt >= selfHealRetryLimit) {
Future.failed(new RuntimeException(s"Too many self-heal retries for ${MediaTiers.NEARLINE} ${rec.nearlineId.get}, ${rec.originalFilePath}, see logs for details"))
} else {
pendingDeletionRecordDAO.updateAttemptCount(rec.id.get, rec.attempt + 1)
nearlineHelper.outputInternalArchiveCopyRequiredForNearline(rec.nearlineId.get, Some(rec.originalFilePath))
}
})
case None => throw new RuntimeException("NEARLINE pending deletion record w/o nearline id!")
}
case None =>
throw SilentDropMessage(Some(s"ignoring internal archive confirmation, no pending deletion for this ${MediaTiers.NEARLINE} item with ${nearlineRecord.originalFilePath}"))
})