From 2e145e9164a8ae60ef771524a2c8eabc1aa7dff6 Mon Sep 17 00:00:00 2001 From: Thomas Neidhart Date: Fri, 1 Dec 2023 22:51:39 +0100 Subject: [PATCH] fix(analyze-command): Properly close PackageManagers after they have retrieved all dependencies. Signed-off-by: Thomas Neidhart --- analyzer/src/main/kotlin/PackageManager.kt | 8 +++++++- .../commands/analyzer/src/main/kotlin/AnalyzerCommand.kt | 4 ++++ plugins/package-managers/gradle/src/main/kotlin/Gradle.kt | 4 ++++ plugins/package-managers/maven/src/main/kotlin/Maven.kt | 4 ++++ .../maven/src/main/kotlin/utils/MavenSupport.kt | 7 ++++++- utils/common/src/main/kotlin/DiskCache.kt | 7 ++++++- 6 files changed, 31 insertions(+), 3 deletions(-) diff --git a/analyzer/src/main/kotlin/PackageManager.kt b/analyzer/src/main/kotlin/PackageManager.kt index 2ba08988832bd..8d4303a96e364 100644 --- a/analyzer/src/main/kotlin/PackageManager.kt +++ b/analyzer/src/main/kotlin/PackageManager.kt @@ -19,6 +19,7 @@ package org.ossreviewtoolkit.analyzer +import java.io.Closeable import java.io.File import java.nio.file.FileSystems import java.nio.file.Path @@ -62,7 +63,7 @@ abstract class PackageManager( val analysisRoot: File, val analyzerConfig: AnalyzerConfiguration, val repoConfig: RepositoryConfiguration -) { +) : Closeable { companion object { private val PACKAGE_MANAGER_DIRECTORIES = setOf( // Ignore intermediate build system directories. @@ -361,6 +362,11 @@ abstract class PackageManager( } } } + + /** + * [PackageManager] implementations should override this method if they need to clean resources. + */ + override fun close() {} } /** diff --git a/plugins/commands/analyzer/src/main/kotlin/AnalyzerCommand.kt b/plugins/commands/analyzer/src/main/kotlin/AnalyzerCommand.kt index da8120df37dec..15a56f229a4c5 100644 --- a/plugins/commands/analyzer/src/main/kotlin/AnalyzerCommand.kt +++ b/plugins/commands/analyzer/src/main/kotlin/AnalyzerCommand.kt @@ -228,5 +228,9 @@ class AnalyzerCommand : OrtCommand( val issues = analyzerRun.result.getAllIssues().flatMap { it.value } SeverityStatsPrinter(terminal, resolutionProvider).stats(issues) .print().conclude(ortConfig.severeIssueThreshold, 2) + + for (packageManager in info.managedFiles.keys) { + packageManager.close() + } } } diff --git a/plugins/package-managers/gradle/src/main/kotlin/Gradle.kt b/plugins/package-managers/gradle/src/main/kotlin/Gradle.kt index 090a72e75d655..588fda1616fd7 100644 --- a/plugins/package-managers/gradle/src/main/kotlin/Gradle.kt +++ b/plugins/package-managers/gradle/src/main/kotlin/Gradle.kt @@ -290,4 +290,8 @@ class Gradle( } } } + + override fun close() { + maven.close() + } } diff --git a/plugins/package-managers/maven/src/main/kotlin/Maven.kt b/plugins/package-managers/maven/src/main/kotlin/Maven.kt index 461164ccba926..d4a13e1380b3e 100644 --- a/plugins/package-managers/maven/src/main/kotlin/Maven.kt +++ b/plugins/package-managers/maven/src/main/kotlin/Maven.kt @@ -65,6 +65,10 @@ class Maven( ) = Maven(type, analysisRoot, analyzerConfig, repoConfig) } + override fun close() { + mvn.close() + } + private inner class LocalProjectWorkspaceReader : WorkspaceReader { private val workspaceRepository = WorkspaceRepository() diff --git a/plugins/package-managers/maven/src/main/kotlin/utils/MavenSupport.kt b/plugins/package-managers/maven/src/main/kotlin/utils/MavenSupport.kt index 9e32aad1a027e..3745997160088 100644 --- a/plugins/package-managers/maven/src/main/kotlin/utils/MavenSupport.kt +++ b/plugins/package-managers/maven/src/main/kotlin/utils/MavenSupport.kt @@ -19,6 +19,7 @@ package org.ossreviewtoolkit.plugins.packagemanagers.maven.utils +import java.io.Closeable import java.io.File import java.net.URI @@ -108,7 +109,7 @@ fun Artifact.identifier() = "$groupId:$artifactId:$version" private val File?.safePath: String get() = this?.invariantSeparatorsPath ?: "" -class MavenSupport(private val workspaceReader: WorkspaceReader) { +class MavenSupport(private val workspaceReader: WorkspaceReader) : Closeable { companion object { private val PACKAGING_TYPES = setOf( // Core packaging types, see https://maven.apache.org/pom.html#packaging. @@ -814,6 +815,10 @@ class MavenSupport(private val workspaceReader: WorkspaceReader) { legacySupport.session = null } } + + override fun close() { + remoteArtifactCache.close() + } } /** diff --git a/utils/common/src/main/kotlin/DiskCache.kt b/utils/common/src/main/kotlin/DiskCache.kt index c08825d1cf71f..2b96dddafe5c1 100644 --- a/utils/common/src/main/kotlin/DiskCache.kt +++ b/utils/common/src/main/kotlin/DiskCache.kt @@ -21,6 +21,7 @@ package org.ossreviewtoolkit.utils.common import com.jakewharton.disklrucache.DiskLruCache +import java.io.Closeable import java.io.File import java.io.IOException @@ -46,7 +47,7 @@ class DiskCache( * Duration in seconds that cache entries are valid. */ private val maxCacheEntryAgeInSeconds: Long -) { +) : Closeable { companion object { const val INDEX_FULL_KEY = 0 const val INDEX_TIMESTAMP = 1 @@ -144,4 +145,8 @@ class DiskCache( } private fun currentTimeInSeconds() = System.currentTimeMillis() / 1000L + + override fun close() { + diskLruCache.close() + } }