Cancellation handling
This commit is contained in:
parent
b62079f65f
commit
ce75726824
@ -69,10 +69,16 @@ abstract class TaskListener(val taskType: TaskType = TaskType.CPU_INTENSIVE): Ta
|
||||
val result = onTask(task)
|
||||
reporter.markCompleted(task.taskId)
|
||||
onComplete(task, result)
|
||||
|
||||
} catch (e: CancellationException) {
|
||||
onCancelled()
|
||||
// Dette er en ekte kansellering
|
||||
onCancelled(task)
|
||||
throw e // viktig: ikke svelg cancellation
|
||||
|
||||
} catch (e: Exception) {
|
||||
// Dette er en faktisk feil
|
||||
onError(task, e)
|
||||
|
||||
} finally {
|
||||
heartbeatRunner?.cancel()
|
||||
currentJob?.cancel()
|
||||
@ -82,6 +88,7 @@ abstract class TaskListener(val taskType: TaskType = TaskType.CPU_INTENSIVE): Ta
|
||||
this@TaskListener.reporter = null
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
@ -99,7 +106,8 @@ abstract class TaskListener(val taskType: TaskType = TaskType.CPU_INTENSIVE): Ta
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCancelled() {
|
||||
override fun onCancelled(task: Task) {
|
||||
reporter!!.markCancelled(task.taskId)
|
||||
currentJob?.cancel()
|
||||
heartbeatRunner?.cancel()
|
||||
currentTask = null
|
||||
@ -119,7 +127,7 @@ interface TaskListenerImplementation {
|
||||
suspend fun onTask(task: Task): Event?
|
||||
fun onComplete(task: Task, result: Event?)
|
||||
fun onError(task: Task, exception: Exception)
|
||||
fun onCancelled()
|
||||
fun onCancelled(task: Task)
|
||||
}
|
||||
|
||||
interface TaskReporter {
|
||||
@ -127,6 +135,7 @@ interface TaskReporter {
|
||||
fun updateLastSeen(taskId: UUID)
|
||||
fun markCompleted(taskId: UUID)
|
||||
fun markFailed(taskId: UUID)
|
||||
fun markCancelled(taskId: UUID)
|
||||
fun updateProgress(taskId: UUID, progress: Int)
|
||||
fun log(taskId: UUID, message: String)
|
||||
fun publishEvent(event: Event)
|
||||
|
||||
@ -9,7 +9,6 @@ import kotlinx.coroutines.test.runTest
|
||||
import kotlinx.coroutines.yield
|
||||
import no.iktdev.eventi.models.Event
|
||||
import no.iktdev.eventi.models.Task
|
||||
import org.assertj.core.api.Assertions.assertThat
|
||||
import org.junit.jupiter.api.Assertions.*
|
||||
import org.junit.jupiter.api.Test
|
||||
import java.util.UUID
|
||||
@ -42,6 +41,9 @@ class TaskListenerTest {
|
||||
consumed = true
|
||||
}
|
||||
|
||||
override fun markCancelled(taskId: UUID) {
|
||||
}
|
||||
|
||||
override fun updateProgress(taskId: UUID, progress: Int) {
|
||||
|
||||
}
|
||||
@ -428,8 +430,8 @@ class TaskListenerTest {
|
||||
return null
|
||||
}
|
||||
|
||||
override fun onCancelled() {
|
||||
super.onCancelled()
|
||||
override fun onCancelled(task: Task) {
|
||||
super.onCancelled(task)
|
||||
cancelledCalled.complete(Unit)
|
||||
}
|
||||
}
|
||||
|
||||
@ -38,7 +38,7 @@ class TaskPollerImplementationTest : TestBase() {
|
||||
override fun updateLastSeen(taskId: UUID) {}
|
||||
override fun markCompleted(taskId: UUID) {}
|
||||
override fun markFailed(taskId: UUID) {}
|
||||
|
||||
override fun markCancelled(taskId: UUID) {}
|
||||
override fun updateProgress(taskId: UUID, progress: Int) {}
|
||||
override fun log(taskId: UUID, message: String) {}
|
||||
override fun publishEvent(event: Event) {
|
||||
@ -92,8 +92,8 @@ class TaskPollerImplementationTest : TestBase() {
|
||||
super.onError(task, exception)
|
||||
}
|
||||
|
||||
override fun onCancelled() {
|
||||
super.onCancelled()
|
||||
override fun onCancelled(task: Task) {
|
||||
super.onCancelled(task)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user