Fix cancelling jobs

A request to cancel a job was not processed correctly. The cancelling
routine of a task must run, regardless of the (non-final) state. Now
it works like this: if a job is currently running, it is interrupted
and its cancel routine is invoked. It then enters "cancelled" state.
If it is stuck, it is loaded and only its cancel routine is run. If it
is in a final state or waiting, it is removed from the queue.
This commit is contained in:
Eike Kettner
2020-06-26 22:10:11 +02:00
parent a081591c1b
commit 41c0f70d3b
11 changed files with 191 additions and 79 deletions

View File

@ -4,9 +4,11 @@ import cats.implicits._
import cats.effect._
import docspell.common.{Ident, LenientUri}
import docspell.common.syntax.all._
import docspell.joexapi.model.BasicResult
import org.http4s.{Method, Request, Uri}
import org.http4s.client.Client
import org.http4s.client.blaze.BlazeClientBuilder
import org.http4s.circe.CirceEntityDecoder._
import scala.concurrent.ExecutionContext
import org.log4s.getLogger
@ -17,7 +19,7 @@ trait JoexClient[F[_]] {
def notifyJoexIgnoreErrors(base: LenientUri): F[Unit]
def cancelJob(base: LenientUri, job: Ident): F[Unit]
def cancelJob(base: LenientUri, job: Ident): F[BasicResult]
}
@ -44,10 +46,10 @@ object JoexClient {
()
}
def cancelJob(base: LenientUri, job: Ident): F[Unit] = {
def cancelJob(base: LenientUri, job: Ident): F[BasicResult] = {
val cancelUrl = base / "api" / "v1" / "job" / job.id / "cancel"
val req = Request[F](Method.POST, uri(cancelUrl))
client.expect[String](req).map(_ => ())
client.expect[BasicResult](req)
}
private def uri(u: LenientUri): Uri =