diff --git a/src/main/kotlin/no/iktdev/eventi/tasks/TaskListener.kt b/src/main/kotlin/no/iktdev/eventi/tasks/TaskListener.kt index b24fab8..5f49300 100644 --- a/src/main/kotlin/no/iktdev/eventi/tasks/TaskListener.kt +++ b/src/main/kotlin/no/iktdev/eventi/tasks/TaskListener.kt @@ -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) diff --git a/src/test/kotlin/no/iktdev/eventi/tasks/TaskListenerTest.kt b/src/test/kotlin/no/iktdev/eventi/tasks/TaskListenerTest.kt index 665e58e..e27e9a4 100644 --- a/src/test/kotlin/no/iktdev/eventi/tasks/TaskListenerTest.kt +++ b/src/test/kotlin/no/iktdev/eventi/tasks/TaskListenerTest.kt @@ -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) } } diff --git a/src/test/kotlin/no/iktdev/eventi/tasks/TaskPollerImplementationTest.kt b/src/test/kotlin/no/iktdev/eventi/tasks/TaskPollerImplementationTest.kt index 98abd74..fb88a54 100644 --- a/src/test/kotlin/no/iktdev/eventi/tasks/TaskPollerImplementationTest.kt +++ b/src/test/kotlin/no/iktdev/eventi/tasks/TaskPollerImplementationTest.kt @@ -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) } }