private def checkStatus()

in app/services/GlacierRestoreActor.scala [101:137]


  private def checkStatus(result:HeadObjectResponse, entry: ArchiveEntry, lbEntry: Option[LightboxEntry], jobs:Option[List[JobModel]], originalSender:ActorRef) = {
    logger.info(s"Got metadata for s3://${entry.bucket}/${entry.path} @${entry.maybeVersion.getOrElse("LATEST")}. Archive status is ${result.archiveStatusAsString()}")
    val maybeRestoreStatus = Option(result.restore()).map(S3RestoreHeader.apply)
    logger.info(s"s3://${entry.bucket}/${entry.path} @${entry.maybeVersion.getOrElse("LATEST")} restore status is ${maybeRestoreStatus}")

    maybeRestoreStatus match {
      case None=>
        logger.info(s"s3://${entry.bucket}/${entry.path} @${entry.maybeVersion.getOrElse("LATEST")} - there is no restore header in the head response")
        updateLightboxExpired(lbEntry, entry.bucket, entry.path) //will only update if there _is_ a lightbox entry to update
        originalSender ! RestoreNotRequested(entry)
      case Some(Failure(err)) =>
        logger.info(s"s3://${entry.bucket}/${entry.path} could not check restore status: ${err.getMessage}")
        if(result.storageClass()!=StorageClass.GLACIER){
          logger.info(s"s3://${entry.bucket}/${entry.path} storage class is ${result.storageClassAsString()}, assuming not in archive")
          originalSender ! NotInArchive(entry)
        } else {
          logger.warn(s"s3://${entry.bucket}/${entry.path} there is no restore record in S3")
          if(jobs.isDefined) jobs.get.foreach(job=>updateJob(job, JobStatus.ST_ERROR,Some("No restore record in S3")))
          if(lbEntry.isDefined) updateLightbox(lbEntry.get,None,error=Some(new RuntimeException("No restore record in S3")))
          originalSender ! RestoreNotRequested(entry)
        }
      case Some(Success(S3RestoreHeader(true, _))) => //restore is in progress
        logger.info(s"s3://${entry.bucket}/${entry.path} is currently under restore: $maybeRestoreStatus")
        if(jobs.isDefined) jobs.get.foreach(job=>updateJob(job, JobStatus.ST_RUNNING, None))
        if(lbEntry.isDefined) updateLightboxFull(lbEntry.get,RestoreStatus.RS_UNDERWAY,None)
        originalSender ! RestoreInProgress(entry)
      case Some(Success(S3RestoreHeader(false, None))) => //restore not in progress, but no expiry time - expiry time is probably passed
        logger.info(s"s3://${entry.bucket}/${entry.path} is not currently under restore and probably expired: $maybeRestoreStatus")
        updateLightboxExpired(lbEntry, entry.bucket, entry.path)
        originalSender ! RestoreNotRequested(entry)
      case Some(Success(S3RestoreHeader(false, Some(expiry)))) => //restore not in progress, it's available unless the expiry time is already passed
        logger.info(s"s3://${entry.bucket}/${entry.path} has completed restore: ${maybeRestoreStatus}")
        if(jobs.isDefined) jobs.get.foreach(job=>updateJob(job,JobStatus.ST_SUCCESS,None))
        if(lbEntry.isDefined) updateLightboxFull(lbEntry.get, RestoreStatus.RS_SUCCESS, Some(expiry))
        originalSender ! RestoreCompleted(entry, expiry)
      }
    }