def copyFileToMatrixStore()

in online_nearline/src/main/scala/FileCopier.scala [156:191]


  def copyFileToMatrixStore(vault: Vault, fileName: String, filePath: Path): Future[Either[String, String]] = {
    ( for {
      fileSize <- Future.fromTry(Try { getSizeFromPath(filePath) })
      potentialMatches <- findMatchingFilesOnNearline(vault, filePath, fileSize)
      potentialMatchesFiles <- Future.sequence(potentialMatches.map(entry=>Future.fromTry(openMxsObject(vault, entry.oid))))
      alreadyExists <- verifyChecksumMatchUsingHelper(filePath, potentialMatchesFiles)
      result <- alreadyExists match {
        case Some(existingId)=>
          logger.info(s"$filePath: Object already exists with object id ${existingId}")
          Future(Right(existingId))
        case None=>
          logger.info(s"$filePath: Out of ${potentialMatches.length} remote matches, none matched the checksum so creating new copy")
          copyUsingHelper(vault, fileName, filePath)
      }
    } yield result )
      .recoverWith({
        case err:java.io.IOException =>
          if(err.getMessage.contains("does not exist (error 306)")) {
            copyUsingHelper(vault, fileName, filePath)
          } else {
            //the most likely cause of this is that the sdk threw because the appliance is under heavy load and
            //can't do the checksum at this time
            logger.error(s"Error validating objectmatrix checksum: ${err.getMessage}", err)
            Future(Left(s"ObjectMatrix error: ${err.getMessage}"))
          }
        case err:BailOutException=>
          logger.error(s"A permanent error occurred: ${err.getMessage}", err)
          Future.failed(err)
        case err:Throwable =>
          // Error contacting ObjectMatrix, log it and retry via the queue
          logger.warn(s"Failed to get object from vault for checksum $filePath: ${err.getClass.getCanonicalName} ${err.getMessage} , will retry", err)
          Future(Left(s"ObjectMatrix error: ${err.getMessage}"))
        case _ =>
          Future(Left(s"ObjectMatrix error"))
      })
  }