Skip to content

Commit

Permalink
fix: Translation limit catching, fíxes & expose hikaricp metrics (#1867)
Browse files Browse the repository at this point in the history
  • Loading branch information
JanCizmar committed Aug 17, 2023
1 parent e231431 commit 8159886
Show file tree
Hide file tree
Showing 10 changed files with 29 additions and 23 deletions.
1 change: 0 additions & 1 deletion backend/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,6 @@ dependencies {
implementation libs.amazonSTS
implementation libs.icu4j
implementation libs.jacksonModuleKotlin
implementation libs.micrometerPrometheus

testApi dependencies.create(libs.redissonSpringBootStarter.get()) {
exclude group: 'org.redisson', module: 'redisson-spring-data-31'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import org.springframework.context.event.EventListener
import org.springframework.data.redis.core.StringRedisTemplate
import org.springframework.stereotype.Service
import org.springframework.transaction.PlatformTransactionManager
import org.springframework.transaction.TransactionDefinition
import org.springframework.transaction.UnexpectedRollbackException
import javax.persistence.EntityManager
import javax.persistence.LockModeType
Expand Down Expand Up @@ -66,10 +65,7 @@ class BatchJobActionService(
var retryExecution: BatchJobChunkExecution? = null
try {
val execution = catchingExceptions(executionItem) {
executeInNewTransaction(
transactionManager,
isolationLevel = TransactionDefinition.ISOLATION_READ_COMMITTED
) { transactionStatus ->
executeInNewTransaction(transactionManager) { transactionStatus ->

val lockedExecution = getPendingUnlockedExecutionItem(executionItem)
?: return@executeInNewTransaction null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import org.springframework.context.event.EventListener
import org.springframework.data.redis.core.StringRedisTemplate
import org.springframework.stereotype.Component
import org.springframework.transaction.PlatformTransactionManager
import org.springframework.transaction.TransactionDefinition
import org.springframework.transaction.annotation.Transactional
import javax.persistence.EntityManager
import javax.persistence.LockModeType
Expand Down Expand Up @@ -61,10 +60,7 @@ class BatchJobCancellationManager(
}

fun cancelJob(jobId: Long) {
val executions = executeInNewTransaction(
transactionManager = transactionManager,
isolationLevel = TransactionDefinition.ISOLATION_DEFAULT
) {
val executions = executeInNewTransaction(transactionManager) {
entityManager.createNativeQuery("""SET enable_seqscan=off""")
val executions = entityManager.createQuery(
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import io.tolgee.util.logger
import org.springframework.context.ApplicationEventPublisher
import org.springframework.stereotype.Component
import org.springframework.transaction.PlatformTransactionManager
import org.springframework.transaction.TransactionDefinition

@Component
class ProgressManager(
Expand Down Expand Up @@ -182,7 +181,7 @@ class ProgressManager(
}

fun handleJobRunning(id: Long) {
executeInNewTransaction(transactionManager, isolationLevel = TransactionDefinition.ISOLATION_DEFAULT) {
executeInNewTransaction(transactionManager) {
logger.trace("""Fetching job $id""")
val job = batchJobService.getJobDto(id)
if (job.status == BatchJobStatus.PENDING) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import io.tolgee.component.CurrentDateProvider
import io.tolgee.component.machineTranslation.TranslationApiRateLimitException
import io.tolgee.constants.Message
import io.tolgee.exceptions.OutOfCreditsException
import io.tolgee.exceptions.PlanTranslationLimitExceeded
import io.tolgee.exceptions.TranslationSpendingLimitExceeded
import io.tolgee.service.LanguageService
import io.tolgee.service.key.KeyService
import io.tolgee.service.translation.AutoTranslationService
Expand Down Expand Up @@ -69,6 +71,10 @@ class GenericAutoTranslationChunkProcessor(
increaseFactor = 1,
maxRetries = -1
)
} catch (e: PlanTranslationLimitExceeded) {
throw FailedDontRequeueException(Message.PLAN_TRANSLATION_LIMIT_EXCEEDED, successfulTargets, e)
} catch (e: TranslationSpendingLimitExceeded) {
throw FailedDontRequeueException(Message.TRANSLATION_SPENDING_LIMIT_EXCEEDED, successfulTargets, e)
} catch (e: Throwable) {
throw RequeueWithDelayException(Message.TRANSLATION_FAILED, successfulTargets, e)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package io.tolgee.exceptions

import io.tolgee.constants.Message

class PlanTranslationLimitExceeded(required: Long, limit: Long) :
BadRequestException(Message.TRANSLATION_SPENDING_LIMIT_EXCEEDED, params = listOf(required, limit))
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package io.tolgee.exceptions

import io.tolgee.constants.Message

class TranslationSpendingLimitExceeded(required: Long, limit: Long) :
BadRequestException(
Message.PLAN_TRANSLATION_LIMIT_EXCEEDED, params = listOf(required, limit)
)
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import javax.persistence.OptimisticLockException

fun <T> executeInNewTransaction(
transactionManager: PlatformTransactionManager,
isolationLevel: Int = TransactionDefinition.ISOLATION_DEFAULT,
isolationLevel: Int = TransactionDefinition.ISOLATION_READ_COMMITTED,
propagationBehavior: Int = TransactionDefinition.PROPAGATION_REQUIRES_NEW,
fn: (ts: TransactionStatus) -> T
): T {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,12 @@ import io.tolgee.development.testDataBuilder.builders.TestDataBuilder
import io.tolgee.service.organization.OrganizationService
import io.tolgee.service.project.ProjectService
import io.tolgee.service.security.UserAccountService
import io.tolgee.util.executeInNewTransaction
import io.tolgee.util.executeInNewRepeatableTransaction
import io.tolgee.util.tryUntilItDoesntBreakConstraint
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.context.ApplicationContext
import org.springframework.http.ResponseEntity
import org.springframework.transaction.PlatformTransactionManager
import org.springframework.transaction.TransactionDefinition
import org.springframework.transaction.annotation.Transactional
import org.springframework.web.bind.annotation.GetMapping
import java.io.FileNotFoundException
Expand Down Expand Up @@ -66,17 +65,14 @@ abstract class AbstractE2eDataController {
@GetMapping(value = ["/clean"])
open fun cleanup(): Any? {
return tryUntilItDoesntBreakConstraint {
executeInNewTransaction(
transactionManager,
TransactionDefinition.ISOLATION_SERIALIZABLE
) {
executeInNewRepeatableTransaction(transactionManager) {
entityManager.clear()
try {
testDataService.cleanTestData(this.testData)
} catch (e: FileNotFoundException) {
return@executeInNewTransaction ResponseEntity.internalServerError().body(e.stackTraceToString())
return@executeInNewRepeatableTransaction ResponseEntity.internalServerError().body(e.stackTraceToString())
}
return@executeInNewTransaction null
return@executeInNewRepeatableTransaction null
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ dependencyResolutionManagement {
library('redissonSpringBootStarter', "org.redisson:redisson-spring-boot-starter:3.23.2")
library('redissonSpringData', 'org.redisson:redisson-spring-data-27:3.23.2')
library('postHog', 'com.posthog.java:posthog:1.1.0')
library('micrometerPrometheus', "io.micrometer:micrometer-registry-prometheus:1.11.2")
library('micrometerPrometheus', "io.micrometer:micrometer-registry-prometheus:1.9.12")
}
}
}
Expand Down

0 comments on commit 8159886

Please sign in to comment.