diff --git a/webapi/src/main/resources/application.conf b/webapi/src/main/resources/application.conf index c53690fe21..3ed032868c 100644 --- a/webapi/src/main/resources/application.conf +++ b/webapi/src/main/resources/application.conf @@ -335,12 +335,6 @@ app { allow-reload-over-http = false allow-reload-over-http = ${?KNORA_WEBAPI_ALLOW_RELOAD_OVER_HTTP} - // Configuration for updating the repository when Knora is upgraded - upgrade { - // The directory to which the repository should be downloaded. If not configured, a temporary directory is used. - // download-dir = "/tmp/knora-upgrade" - } - knora-api { // relevant for direct communication inside the knora stack internal-host = "0.0.0.0" diff --git a/webapi/src/main/scala/org/knora/webapi/settings/KnoraSettings.scala b/webapi/src/main/scala/org/knora/webapi/settings/KnoraSettings.scala index 035cafe402..81884673a5 100644 --- a/webapi/src/main/scala/org/knora/webapi/settings/KnoraSettings.scala +++ b/webapi/src/main/scala/org/knora/webapi/settings/KnoraSettings.scala @@ -281,12 +281,6 @@ class KnoraSettingsImpl(config: Config, log: LoggingAdapter) extends Extension { val prometheusEndpoint: Boolean = config.getBoolean("app.monitoring.prometheus-endpoint") - val upgradeDownloadDir: Option[String] = if (config.hasPath("app.upgrade.download-dir")) { - Some(config.getString("app.upgrade.download-dir")) - } else { - None - } - val shaclShapesDir: Path = Paths.get(config.getString("app.shacl.shapes-dir")) val featureToggles: Set[FeatureToggleBaseConfig] = if (config.hasPath(featureTogglesPath)) { diff --git a/webapi/src/main/scala/org/knora/webapi/store/triplestore/upgrade/RepositoryUpdater.scala b/webapi/src/main/scala/org/knora/webapi/store/triplestore/upgrade/RepositoryUpdater.scala index c350b4b5be..7a9ed5f3da 100644 --- a/webapi/src/main/scala/org/knora/webapi/store/triplestore/upgrade/RepositoryUpdater.scala +++ b/webapi/src/main/scala/org/knora/webapi/store/triplestore/upgrade/RepositoryUpdater.scala @@ -1,6 +1,8 @@ package org.knora.webapi.store.triplestore.upgrade import java.nio.file.{Files, Path, Paths} +import java.io.File +import scala.reflect.io.Directory import akka.actor.{ActorRef, ActorSystem} import akka.http.scaladsl.util.FastFuture @@ -72,6 +74,24 @@ class RepositoryUpdater( log = log ) + private val tempDirNamePrefix: String = "knora" + + /** + * Deletes directories inside temp directory starting with `tempDirNamePrefix`. + */ + def deleteTempDirectories(): Unit = { + val rootDir = new File("/tmp/") + val getTempToDelete = rootDir.listFiles.filter(_.getName.startsWith(tempDirNamePrefix)) + + if (getTempToDelete.length != 0) { + getTempToDelete.foreach(dir => { + val dirToDelete = new Directory(dir) + dirToDelete.deleteRecursively() + }) + log.info(s"Deleted temp directories: ${getTempToDelete.map(_.getName()).mkString(", ")}") + } + } + /** * Updates the repository, if necessary, to work with the current version of Knora. * @@ -83,18 +103,20 @@ class RepositoryUpdater( requiredRepositoryVersion = org.knora.webapi.KnoraBaseVersion // Is the repository up to date? - repositoryUpToData = foundRepositoryVersion.contains(requiredRepositoryVersion) + repositoryUpToDate: Boolean = foundRepositoryVersion.contains(requiredRepositoryVersion) + repositoryUpdatedResponse: RepositoryUpdatedResponse <- - if (repositoryUpToData) { + if (repositoryUpToDate) { // Yes. Nothing more to do. FastFuture.successful(RepositoryUpdatedResponse(s"Repository is up to date at $requiredRepositoryVersion")) } else { // No. Construct the list of updates that it needs. - log.info( s"Repository not up-to-date. Found: ${foundRepositoryVersion.getOrElse("None")}, Required: $requiredRepositoryVersion" ) + deleteTempDirectories() + val selectedPlugins: Seq[PluginForKnoraBaseVersion] = selectPluginsForNeededUpdates(foundRepositoryVersion) log.info(s"Updating repository with transformations: ${selectedPlugins.map(_.versionString).mkString(", ")}") @@ -164,21 +186,8 @@ class RepositoryUpdater( private def updateRepositoryWithSelectedPlugins( pluginsForNeededUpdates: Seq[PluginForKnoraBaseVersion] ): Future[RepositoryUpdatedResponse] = { - // Was a download directory specified in the application settings? - val downloadDir: Path = settings.upgradeDownloadDir match { - case Some(configuredDir) => - // Yes. Use that directory. - log.info(s"Repository update using configured download directory $configuredDir") - val dirFile = Paths.get(configuredDir) - Files.createDirectories(dirFile) - dirFile - - case None => - // No. Create a temporary directory. - val dirFile = Files.createTempDirectory("knora") - log.info(s"Repository update using download directory $dirFile") - dirFile - } + val downloadDir: Path = Files.createTempDirectory(tempDirNamePrefix) + log.info(s"Repository update using download directory $downloadDir") // The file to save the repository in. val downloadedRepositoryFile = downloadDir.resolve("downloaded-repository.nq")