mirror of
https://github.com/gotson/komga.git
synced 2025-12-22 00:13:30 +01:00
fix(admin rpc): fix transaction issues on thumbnails regeneration
This commit is contained in:
parent
1d5500d560
commit
af8e3ea433
2 changed files with 12 additions and 17 deletions
|
|
@ -46,21 +46,12 @@ class AsyncOrchestrator(
|
|||
}
|
||||
|
||||
@Async("regenerateThumbnailsTaskExecutor")
|
||||
fun regenerateAllThumbnails() {
|
||||
logger.info { "Regenerate thumbnail for all books" }
|
||||
generateThumbnails(bookRepository.findAll())
|
||||
}
|
||||
|
||||
@Async("regenerateThumbnailsTaskExecutor")
|
||||
fun regenerateMissingThumbnails() {
|
||||
logger.info { "Regenerate missing thumbnails" }
|
||||
generateThumbnails(bookRepository.findAllByMediaThumbnailIsNull())
|
||||
}
|
||||
|
||||
private fun generateThumbnails(books: List<Book>) {
|
||||
@Transactional
|
||||
fun generateThumbnails(books: List<Book>) {
|
||||
val loadedBooks = bookRepository.findAllById(books.map { it.id })
|
||||
var sumOfTasksTime = 0L
|
||||
measureTimeMillis {
|
||||
sumOfTasksTime = books
|
||||
sumOfTasksTime = loadedBooks
|
||||
.map { bookLifecycle.regenerateThumbnailAndPersist(it) }
|
||||
.map {
|
||||
try {
|
||||
|
|
@ -71,7 +62,7 @@ class AsyncOrchestrator(
|
|||
}
|
||||
.sum()
|
||||
}.also {
|
||||
logger.info { "Generated ${books.size} thumbnails in ${DurationFormatUtils.formatDurationHMS(it)} (virtual: ${DurationFormatUtils.formatDurationHMS(sumOfTasksTime)})" }
|
||||
logger.info { "Generated ${loadedBooks.size} thumbnails in ${DurationFormatUtils.formatDurationHMS(it)} (virtual: ${DurationFormatUtils.formatDurationHMS(sumOfTasksTime)})" }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package org.gotson.komga.interfaces.rest
|
|||
|
||||
import mu.KotlinLogging
|
||||
import org.gotson.komga.application.service.AsyncOrchestrator
|
||||
import org.gotson.komga.domain.persistence.BookRepository
|
||||
import org.springframework.http.HttpStatus
|
||||
import org.springframework.security.access.prepost.PreAuthorize
|
||||
import org.springframework.web.bind.annotation.PostMapping
|
||||
|
|
@ -17,14 +18,16 @@ private val logger = KotlinLogging.logger {}
|
|||
@RequestMapping("api/v1/admin")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||
class AdminController(
|
||||
private val asyncOrchestrator: AsyncOrchestrator
|
||||
private val asyncOrchestrator: AsyncOrchestrator,
|
||||
private val bookRepository: BookRepository
|
||||
) {
|
||||
|
||||
@PostMapping("rpc/thumbnails/regenerate/all")
|
||||
@ResponseStatus(HttpStatus.ACCEPTED)
|
||||
fun regenerateAllThumbnails() {
|
||||
try {
|
||||
asyncOrchestrator.regenerateAllThumbnails()
|
||||
logger.info { "Regenerate thumbnail for all books" }
|
||||
asyncOrchestrator.generateThumbnails(bookRepository.findAll())
|
||||
} catch (e: RejectedExecutionException) {
|
||||
throw ResponseStatusException(HttpStatus.SERVICE_UNAVAILABLE, "Thumbnail regeneration task is already running")
|
||||
}
|
||||
|
|
@ -34,7 +37,8 @@ class AdminController(
|
|||
@ResponseStatus(HttpStatus.ACCEPTED)
|
||||
fun regenerateMissingThumbnails() {
|
||||
try {
|
||||
asyncOrchestrator.regenerateMissingThumbnails()
|
||||
logger.info { "Regenerate missing thumbnails" }
|
||||
asyncOrchestrator.generateThumbnails(bookRepository.findAllByMediaThumbnailIsNull())
|
||||
} catch (e: RejectedExecutionException) {
|
||||
throw ResponseStatusException(HttpStatus.SERVICE_UNAVAILABLE, "Thumbnail regeneration task is already running")
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue