diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/gitlab/GitlabController.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/gitlab/GitlabController.kt index e9429a96070b26ff26d55d12422bb8786408dfa8..13d95ee418df9f067ecda1d37efd587521482f05 100644 --- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/gitlab/GitlabController.kt +++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/gitlab/GitlabController.kt @@ -2,7 +2,7 @@ package de.fraunhofer.iem.dataprovider.gitlab import de.fraunhofer.iem.dataprovider.logger.getLogger import de.fraunhofer.iem.dataprovider.taskManager.TaskManager -import de.fraunhofer.iem.dataprovider.taskManager.tasks.ProcessTask +import de.fraunhofer.iem.dataprovider.taskManager.tasks.JavaTask import de.fraunhofer.iem.dataprovider.taskManager.tasks.TaskType import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.PostMapping @@ -51,6 +51,6 @@ class GitlabController(private val gitlabService: GitlabService, private val tas @GetMapping("/test") suspend fun test() { - taskManager.addTask(ProcessTask(TaskType.REPO_CHANGED)) + taskManager.addTask(JavaTask(TaskType.REPO_CHANGED, "-version", responseChannel = taskManager::addTask )) } } \ No newline at end of file diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/TaskManager.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/TaskManager.kt index 160edb3317a485a8911c9eb50aa33ae205f72fd6..9ffefe4d8fb540e954c9d9647d08fb067f80b10f 100644 --- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/TaskManager.kt +++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/TaskManager.kt @@ -36,15 +36,16 @@ class TaskManager: IWorker { private fun CoroutineScope.taskActor() = actor<ITask> { for (task in channel) { + logger.info("[${Thread.currentThread().name}] add task called in Task Manager $task") // For test purposes we have the Done task, which prints a control // message printed in the task manager. if (task.type == TaskType.DONE) { task.execute() - } - logger.info("[${Thread.currentThread().name}] add task called in Task Manager $task") - when(task) { - is GetGitlabProjectTask -> ioWorker.addTask(task) - else -> worker.addTask(task) + } else { + when (task) { + is GetGitlabProjectTask -> ioWorker.addTask(task) + else -> worker.addTask(task) + } } logger.info("[${Thread.currentThread().name}] add task finished in Task Manager $task") } diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/ProcessTask.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/ProcessTask.kt index 220f319c3377d9c9906292e0293212c59addf637..780ccf2c1aebd2750b87cb07575e07009902f17d 100644 --- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/ProcessTask.kt +++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/ProcessTask.kt @@ -1,31 +1,37 @@ package de.fraunhofer.iem.dataprovider.taskManager.tasks +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch + sealed class ProcessTask(protected open vararg val flags: String): Task() { protected abstract val execPath: String - + private val mainScope = CoroutineScope(Dispatchers.Default) override suspend fun execute() { val p = ProcessBuilder(execPath, *flags) .start() p.onExit().thenApply { p1 -> - handleProcessReturn(p1) + mainScope.launch { + handleProcessReturn(p1) + } } } - abstract fun handleProcessReturn(p: Process) + abstract suspend fun handleProcessReturn(p: Process) } class JavaTask( override val type: TaskType, - override val execPath: String, override vararg val flags: String, - val addTask: (task: Task) -> Unit + private val responseChannel: suspend (task: ITask) -> Unit ): ProcessTask() { - override fun handleProcessReturn(p: Process) { - addTask(DoneTask("Done with external process. Exit value ${p.exitValue()}")) + override val execPath: String = "java" + override suspend fun handleProcessReturn(p: Process) { + responseChannel(DoneTask("Done with external process. Exit value ${p.exitValue()}")) } } \ No newline at end of file