Allow to skip joex notification on uploads

This commit is contained in:
Eike Kettner 2020-05-19 05:47:14 +02:00
parent 852455c610
commit 451a09dda0
2 changed files with 25 additions and 10 deletions

View File

@ -14,9 +14,17 @@ import org.log4s._
trait OUpload[F[_]] { trait OUpload[F[_]] {
def submit(data: OUpload.UploadData[F], account: AccountId): F[OUpload.UploadResult] def submit(
data: OUpload.UploadData[F],
account: AccountId,
notifyJoex: Boolean
): F[OUpload.UploadResult]
def submit(data: OUpload.UploadData[F], sourceId: Ident): F[OUpload.UploadResult] def submit(
data: OUpload.UploadData[F],
sourceId: Ident,
notifyJoex: Boolean
): F[OUpload.UploadResult]
} }
object OUpload { object OUpload {
@ -59,7 +67,8 @@ object OUpload {
def submit( def submit(
data: OUpload.UploadData[F], data: OUpload.UploadData[F],
account: AccountId account: AccountId,
notifyJoex: Boolean
): F[OUpload.UploadResult] = ): F[OUpload.UploadResult] =
for { for {
files <- data.files.traverse(saveFile).map(_.flatten) files <- data.files.traverse(saveFile).map(_.flatten)
@ -77,13 +86,17 @@ object OUpload {
else Vector(ProcessItemArgs(meta, files.toList)) else Vector(ProcessItemArgs(meta, files.toList))
job <- pred.traverse(_ => makeJobs(args, account, data.priority, data.tracker)) job <- pred.traverse(_ => makeJobs(args, account, data.priority, data.tracker))
_ <- logger.fdebug(s"Storing jobs: $job") _ <- logger.fdebug(s"Storing jobs: $job")
res <- job.traverse(submitJobs) res <- job.traverse(submitJobs(notifyJoex))
_ <- store.transact( _ <- store.transact(
RSource.incrementCounter(data.meta.sourceAbbrev, account.collective) RSource.incrementCounter(data.meta.sourceAbbrev, account.collective)
) )
} yield res.fold(identity, identity) } yield res.fold(identity, identity)
def submit(data: OUpload.UploadData[F], sourceId: Ident): F[OUpload.UploadResult] = def submit(
data: OUpload.UploadData[F],
sourceId: Ident,
notifyJoex: Boolean
): F[OUpload.UploadResult] =
for { for {
sOpt <- sOpt <-
store store
@ -92,14 +105,16 @@ object OUpload {
abbrev = sOpt.map(_.abbrev).toOption.getOrElse(data.meta.sourceAbbrev) abbrev = sOpt.map(_.abbrev).toOption.getOrElse(data.meta.sourceAbbrev)
updata = data.copy(meta = data.meta.copy(sourceAbbrev = abbrev)) updata = data.copy(meta = data.meta.copy(sourceAbbrev = abbrev))
accId = sOpt.map(source => AccountId(source.cid, source.sid)) accId = sOpt.map(source => AccountId(source.cid, source.sid))
result <- accId.traverse(acc => submit(updata, acc)) result <- accId.traverse(acc => submit(updata, acc, notifyJoex))
} yield result.fold(identity, identity) } yield result.fold(identity, identity)
private def submitJobs(jobs: Vector[RJob]): F[OUpload.UploadResult] = private def submitJobs(
notifyJoex: Boolean
)(jobs: Vector[RJob]): F[OUpload.UploadResult] =
for { for {
_ <- logger.fdebug(s"Storing jobs: $jobs") _ <- logger.fdebug(s"Storing jobs: $jobs")
_ <- queue.insertAll(jobs) _ <- queue.insertAll(jobs)
_ <- joex.notifyAllNodes _ <- if (notifyJoex) joex.notifyAllNodes else ().pure[F]
} yield UploadResult.Success } yield UploadResult.Success
private def saveFile(file: File[F]): F[Option[ProcessItemArgs.File]] = private def saveFile(file: File[F]): F[Option[ProcessItemArgs.File]] =

View File

@ -37,7 +37,7 @@ object UploadRoutes {
Priority.High, Priority.High,
cfg.backend.files.validMimeTypes cfg.backend.files.validMimeTypes
) )
result <- backend.upload.submit(updata, user.account) result <- backend.upload.submit(updata, user.account, true)
res <- Ok(basicResult(result)) res <- Ok(basicResult(result))
} yield res } yield res
@ -61,7 +61,7 @@ object UploadRoutes {
Priority.Low, Priority.Low,
cfg.backend.files.validMimeTypes cfg.backend.files.validMimeTypes
) )
result <- backend.upload.submit(updata, id) result <- backend.upload.submit(updata, id, true)
res <- Ok(basicResult(result)) res <- Ok(basicResult(result))
} yield res } yield res