From 5dced82e5a51929b1e6d65ee8a669564c21d02c9 Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Sun, 1 Sep 2024 00:54:51 +0200 Subject: [PATCH] Fix/missed automated task execution failure crashes server on startup (#1019) * Catch automated backup task errors * Catch automated udpate task errors * Catch automated webui update task errors --- .../impl/backup/proto/ProtoBackupExport.kt | 10 +++++-- .../tachidesk/manga/impl/update/Updater.kt | 26 +++++++++------- .../server/util/WebInterfaceManager.kt | 30 +++++++++++-------- 3 files changed, 40 insertions(+), 26 deletions(-) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/ProtoBackupExport.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/ProtoBackupExport.kt index e8e56cd1..a7691d6b 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/ProtoBackupExport.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/ProtoBackupExport.kt @@ -84,9 +84,13 @@ object ProtoBackupExport : ProtoBackupBase() { } val task = { - cleanupAutomatedBackups() - createAutomatedBackup() - preferences.edit().putLong(LAST_AUTOMATED_BACKUP_KEY, System.currentTimeMillis()).apply() + try { + cleanupAutomatedBackups() + createAutomatedBackup() + preferences.edit().putLong(LAST_AUTOMATED_BACKUP_KEY, System.currentTimeMillis()).apply() + } catch (e: Exception) { + logger.error(e) { "scheduleAutomatedBackupTask: failed due to" } + } } val (hour, minute) = serverConfig.backupTime.value.split(":").map { it.toInt() } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/update/Updater.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/update/Updater.kt index 4b1cd84a..45491870 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/update/Updater.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/update/Updater.kt @@ -110,20 +110,24 @@ class Updater : IUpdater { } private fun autoUpdateTask() { - val lastAutomatedUpdate = preferences.getLong(lastAutomatedUpdateKey, 0) - preferences.edit().putLong(lastAutomatedUpdateKey, System.currentTimeMillis()).apply() + try { + val lastAutomatedUpdate = preferences.getLong(lastAutomatedUpdateKey, 0) + preferences.edit().putLong(lastAutomatedUpdateKey, System.currentTimeMillis()).apply() - if (getStatus().running) { - logger.debug { "Global update is already in progress" } - return - } + if (getStatus().running) { + logger.debug { "Global update is already in progress" } + return + } - logger.info { - "Trigger global update (interval= ${serverConfig.globalUpdateInterval.value}h, lastAutomatedUpdate= ${Date( - lastAutomatedUpdate, - )})" + logger.info { + "Trigger global update (interval= ${serverConfig.globalUpdateInterval.value}h, lastAutomatedUpdate= ${Date( + lastAutomatedUpdate, + )})" + } + addCategoriesToUpdateQueue(Category.getCategoryList(), clear = true, forceAll = false) + } catch (e: Exception) { + logger.error(e) { "autoUpdateTask: failed due to" } } - addCategoriesToUpdateQueue(Category.getCategoryList(), clear = true, forceAll = false) } @OptIn(DelicateCoroutinesApi::class) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/util/WebInterfaceManager.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/util/WebInterfaceManager.kt index 7e3f8f7c..857710d8 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/util/WebInterfaceManager.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/util/WebInterfaceManager.kt @@ -249,20 +249,26 @@ object WebInterfaceManager { val lastAutomatedUpdate = preferences.getLong(LAST_WEBUI_UPDATE_CHECK_KEY, System.currentTimeMillis()) val task = { - logger.debug { - "Checking for webUI update (" + - "flavor= ${WebUIFlavor.current.uiName}, " + - "channel= ${serverConfig.webUIChannel.value}, " + - "interval= ${serverConfig.webUIUpdateCheckInterval.value}h, " + - "lastAutomatedUpdate= ${ - Date( - lastAutomatedUpdate, - ) - })" - } + val log = + KotlinLogging.logger( + "${logger.name}::scheduleWebUIUpdateCheck(" + + "flavor= ${WebUIFlavor.current.uiName}, " + + "channel= ${serverConfig.webUIChannel.value}, " + + "interval= ${serverConfig.webUIUpdateCheckInterval.value}h, " + + "lastAutomatedUpdate= ${ + Date( + lastAutomatedUpdate, + ) + })", + ) + log.debug { "called" } runBlocking { - checkForUpdate(WebUIFlavor.current) + try { + checkForUpdate(WebUIFlavor.current) + } catch (e: Exception) { + log.error(e) { "failed due to" } + } } }