Skip to content

Commit

Permalink
fix(admin rpc): fix transaction issues on thumbnails regeneration
Browse files Browse the repository at this point in the history
  • Loading branch information
gotson committed Jan 17, 2020
1 parent 1d5500d commit af8e3ea
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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)})" }
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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")
}
Expand All @@ -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")
}
Expand Down

0 comments on commit af8e3ea

Please sign in to comment.