diff --git a/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/ConverterApplication.kt b/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/ConverterApplication.kt index 93d0f5ec..a45c1bd6 100644 --- a/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/ConverterApplication.kt +++ b/apps/converter/src/main/kotlin/no/iktdev/mediaprocessing/converter/ConverterApplication.kt @@ -14,9 +14,21 @@ import no.iktdev.mediaprocessing.shared.common.getAppVersion import no.iktdev.mediaprocessing.shared.common.toEventsDatabase import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication +import org.springframework.transaction.annotation.Transactional +import javax.annotation.PreDestroy @SpringBootApplication -class ConvertApplication +class ConvertApplication { + @PreDestroy + fun onShutdown() { + doTransactionalCleanup() + } + + @Transactional + fun doTransactionalCleanup() { + runnerManager.unlist() + } +} val ioCoroutine = CoroutinesIO() val defaultCoroutine = CoroutinesDefault() @@ -56,4 +68,4 @@ fun main(args: Array) { runApplication(*args) log.info { "App Version: ${getAppVersion()}" } } -//private val logger = KotlinLogging.logger {} \ No newline at end of file +//private val logger = KotlinLogging.logger {} diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/CoordinatorApplication.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/CoordinatorApplication.kt index 0f80ffe4..28105838 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/CoordinatorApplication.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/CoordinatorApplication.kt @@ -17,6 +17,8 @@ import no.iktdev.streamit.library.db.tables.helper.data_video import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication import org.springframework.context.annotation.Bean +import org.springframework.transaction.annotation.Transactional +import javax.annotation.PreDestroy val log = KotlinLogging.logger {} lateinit var eventDatabase: EventsDatabase @@ -32,6 +34,16 @@ class CoordinatorApplication { return eventsManager } + @PreDestroy + fun onShutdown() { + doTransactionalCleanup() + } + + @Transactional + fun doTransactionalCleanup() { + runnerManager.unlist() + } + } private lateinit var storeDatabase: MySqlDataSource @@ -120,4 +132,4 @@ fun printSharedConfig() { /*log.info { "Database: ${DatabaseConfig.database} @ ${DatabaseConfig.address}:${DatabaseConfig.port}" } log.info { "Username: ${DatabaseConfig.username}" } log.info { "Password: ${if (DatabaseConfig.password.isNullOrBlank()) "Is not set" else "Is set"}" }*/ -} +} \ No newline at end of file diff --git a/apps/processer/src/main/kotlin/no/iktdev/mediaprocessing/processer/ProcesserApplication.kt b/apps/processer/src/main/kotlin/no/iktdev/mediaprocessing/processer/ProcesserApplication.kt index 8f53d457..8cb9364a 100644 --- a/apps/processer/src/main/kotlin/no/iktdev/mediaprocessing/processer/ProcesserApplication.kt +++ b/apps/processer/src/main/kotlin/no/iktdev/mediaprocessing/processer/ProcesserApplication.kt @@ -17,7 +17,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication import org.springframework.scheduling.annotation.EnableScheduling import org.springframework.scheduling.annotation.Scheduled - +import org.springframework.transaction.annotation.Transactional +import javax.annotation.PreDestroy private val logger = KotlinLogging.logger {} @@ -27,6 +28,17 @@ val defaultCoroutine = CoroutinesDefault() @SpringBootApplication class ProcesserApplication { + + @PreDestroy + fun onShutdown() { + doTransactionalCleanup() + } + + @Transactional + fun doTransactionalCleanup() { + runnerManager.unlist() + } + } private lateinit var eventsDatabase: MySqlDataSource diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/cal/RunnerManager.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/cal/RunnerManager.kt index a1f00f7a..e298ebce 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/cal/RunnerManager.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/database/cal/RunnerManager.kt @@ -4,9 +4,12 @@ import mu.KotlinLogging import no.iktdev.eventi.database.DataSource import no.iktdev.eventi.database.executeOrException import no.iktdev.eventi.database.withDirtyRead +import no.iktdev.eventi.database.withTransaction import no.iktdev.mediaprocessing.shared.common.database.tables.runners import no.iktdev.mediaprocessing.shared.common.getAppVersion +import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq import org.jetbrains.exposed.sql.and +import org.jetbrains.exposed.sql.deleteWhere import org.jetbrains.exposed.sql.insert import org.jetbrains.exposed.sql.select import java.util.UUID @@ -50,6 +53,12 @@ class RunnerManager(private val dataSource: DataSource, val startId: String = UU } ?: true } ?: true } + + fun unlist() { + withTransaction(dataSource.database) { + runners.deleteWhere { (runners.startId eq startId) and (runners.application eq applicationName) } + } + } } enum class ActiveMode {