From 00bc055d6938856342b108720d2804259635d4b4 Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Sun, 6 Aug 2023 02:10:12 +0200 Subject: [PATCH] Fix/load extension log load failure (#641) * Log extension load failure In case the extension couldn't be loaded the error was never logged, making it impossible to analyse what was going on * Log exception in "GetCatalogueSource:: getCatalogueSourceOrNull" In case "GetCatalogueSource::getCatalogueSource" threw an error, this was never logged here --- .../tachidesk/manga/impl/util/PackageTools.kt | 15 ++++++++++----- .../manga/impl/util/source/GetCatalogueSource.kt | 10 +++++++++- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/PackageTools.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/PackageTools.kt index 7b345bd5..448f2c95 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/PackageTools.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/PackageTools.kt @@ -143,12 +143,17 @@ object PackageTools { * It may return an instance of HttpSource or SourceFactory depending on the extension. */ fun loadExtensionSources(jarPath: String, className: String): Any { - logger.debug { "loading jar with path: $jarPath" } - val classLoader = jarLoaderMap[jarPath] ?: URLClassLoader(arrayOf(URL("file:$jarPath"))) - val classToLoad = Class.forName(className, false, classLoader) + try { + logger.debug { "loading jar with path: $jarPath" } + val classLoader = jarLoaderMap[jarPath] ?: URLClassLoader(arrayOf(URL("file:$jarPath"))) + val classToLoad = Class.forName(className, false, classLoader) - jarLoaderMap[jarPath] = classLoader + jarLoaderMap[jarPath] = classLoader - return classToLoad.getDeclaredConstructor().newInstance() + return classToLoad.getDeclaredConstructor().newInstance() + } catch (e: Exception) { + logger.error(e) { "Failed to load jar with path: $jarPath" } + throw e + } } } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/source/GetCatalogueSource.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/source/GetCatalogueSource.kt index c3e2a06e..7375282a 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/source/GetCatalogueSource.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/source/GetCatalogueSource.kt @@ -11,6 +11,7 @@ import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceFactory import eu.kanade.tachiyomi.source.online.HttpSource +import mu.KotlinLogging import org.jetbrains.exposed.sql.select import org.jetbrains.exposed.sql.transactions.transaction import org.kodein.di.DI @@ -23,6 +24,8 @@ import suwayomi.tachidesk.server.ApplicationDirs import java.util.concurrent.ConcurrentHashMap object GetCatalogueSource { + private val logger = KotlinLogging.logger { } + private val sourceCache = ConcurrentHashMap() private val applicationDirs by DI.global.instance() @@ -57,7 +60,12 @@ object GetCatalogueSource { } fun getCatalogueSourceOrNull(sourceId: Long): CatalogueSource? { - return runCatching { getCatalogueSource(sourceId) }.getOrNull() + return try { + getCatalogueSource(sourceId) + } catch (e: Exception) { + logger.warn(e) { "getCatalogueSource($sourceId) failed" } + null + } } fun getCatalogueSourceOrStub(sourceId: Long): CatalogueSource {