def handleInternalArchiveCompleteForNearline()

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}"))
    })