Cancellation handling

This commit is contained in:
Brage Skjønborg 2026-01-30 01:05:51 +01:00
parent b62079f65f
commit ce75726824
3 changed files with 20 additions and 9 deletions

View File

@ -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)

View File

@ -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)
}
}

View File

@ -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)
}
}