diff --git a/ee/app/services/vulnerabilities/starboard_vulnerability_create_service.rb b/ee/app/services/vulnerabilities/starboard_vulnerability_create_service.rb index 53d58bf63c592d5da0d4d51991d3597209bed86f..717e522cb6ca10d738da4e273bec40d26d268d17 100644 --- a/ee/app/services/vulnerabilities/starboard_vulnerability_create_service.rb +++ b/ee/app/services/vulnerabilities/starboard_vulnerability_create_service.rb @@ -39,40 +39,28 @@ def execute ) end - response = nil - Gitlab::Database::QueryAnalyzers::PreventCrossDatabaseModification.temporary_ignore_tables_in_transaction( - %w[ - vulnerabilities - vulnerability_historical_statistics - vulnerability_identifiers - vulnerability_occurrences - vulnerability_occurrence_identifiers - vulnerability_reads - vulnerability_scanners - cluster_agents - project_settings - ], url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/476584' - ) do - response = Vulnerability.transaction do - finding.save! - vulnerability.vulnerability_finding = finding - vulnerability.save! - finding.update!(vulnerability_id: vulnerability.id) - agent.update!(has_vulnerabilities: true) unless agent.has_vulnerabilities? - - vulnerability.vulnerability_read.update!(traversal_ids: project.namespace.traversal_ids) - project.mark_as_vulnerable! - update_security_statistics! - - Statistics::UpdateService.update_for(vulnerability) - - ServiceResponse.success(payload: { vulnerability: vulnerability }) - end + vulnerability_service_response = Vulnerability.transaction do + finding.save! + vulnerability.vulnerability_finding = finding + vulnerability.save! + finding.update!(vulnerability_id: vulnerability.id) + + vulnerability.vulnerability_read.update!(traversal_ids: project.namespace.traversal_ids) + update_security_statistics! + + Statistics::UpdateService.update_for(vulnerability) + + ServiceResponse.success(payload: { vulnerability: vulnerability }) + end + + Project.transaction do + agent.update!(has_vulnerabilities: true) unless agent.has_vulnerabilities? + project.mark_as_vulnerable! end - process_archival_and_traversal_ids_changes if response&.success? + process_archival_and_traversal_ids_changes if vulnerability_service_response&.success? - response + vulnerability_service_response rescue ActiveRecord::RecordInvalid => e ServiceResponse.error(message: e.message) end