From b5686e6e95550af4e36027a80c3d7f2dd498fa1e Mon Sep 17 00:00:00 2001 From: Jan-Niclas Struewer <j.n.struewer@gmail.com> Date: Fri, 22 Nov 2024 10:47:43 +0100 Subject: [PATCH] hotfix: fixed race condition in transactional context --- .../controller/RepositoryController.kt | 21 +++++++++++++------ .../iem/app/toolRun/service/ToolRunService.kt | 9 ++++---- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/main/kotlin/de/fraunhofer/iem/app/repository/controller/RepositoryController.kt b/src/main/kotlin/de/fraunhofer/iem/app/repository/controller/RepositoryController.kt index d3099f1..e0561b8 100644 --- a/src/main/kotlin/de/fraunhofer/iem/app/repository/controller/RepositoryController.kt +++ b/src/main/kotlin/de/fraunhofer/iem/app/repository/controller/RepositoryController.kt @@ -166,13 +166,22 @@ class RepositoryController( false } - val toolRun = - toolRunService.getToolRunForRepository( - projectId = id, - includeFindings = isProjectMember, - ) ?: throw ResponseStatusException(HttpStatus.NOT_FOUND, "tool run not found") + val toolRunDto = + repositoryService.getToolRunByProjectId(projectId = id) + ?: throw ResponseStatusException(HttpStatus.NOT_FOUND, "tool run not found") + + val response = + if (isProjectMember) { + toolRunService.getFindingsForToolRun( + projectId = id, + includeFindings = isProjectMember, + toolRun = toolRunDto, + ) + } else { + toolRunDto + } - return ToolRunResponseDto(isProjectMember = isProjectMember, toolRun = toolRun) + return ToolRunResponseDto(isProjectMember = isProjectMember, toolRun = response) } @PostMapping(ApiPaths.REPOSITORY_UPDATE_CONSENT) diff --git a/src/main/kotlin/de/fraunhofer/iem/app/toolRun/service/ToolRunService.kt b/src/main/kotlin/de/fraunhofer/iem/app/toolRun/service/ToolRunService.kt index 4cc7d02..d742077 100644 --- a/src/main/kotlin/de/fraunhofer/iem/app/toolRun/service/ToolRunService.kt +++ b/src/main/kotlin/de/fraunhofer/iem/app/toolRun/service/ToolRunService.kt @@ -142,17 +142,16 @@ class ToolRunService( * This method retrieves the tool run stored for the given repository. Additionally, it queries * the tool APIs for all tools contained in the tool run and create finding objects for them. */ - suspend fun getToolRunForRepository( + suspend fun getFindingsForToolRun( projectId: Long, + toolRun: ToolRunDto, includeFindings: Boolean = false, - ): ToolRunDto? { - - val toolRun = repositoryService.getToolRunByProjectId(projectId = projectId) + ): ToolRunDto { val apiJobs: MutableList<Job> = mutableListOf() if (includeFindings) { - toolRun?.tools?.forEach { tool -> + toolRun.tools.forEach { tool -> when (tool.toolType) { ToolType.ORT -> { apiJobs.add( -- GitLab