fix(content-ranking): 스냅샷 job 실패 상태를 보존한다
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package kr.co.vividnext.sodalive.v2.ranking.application
|
||||
|
||||
import kr.co.vividnext.sodalive.v2.ranking.domain.CreatorRankingPeriodPolicy
|
||||
import kr.co.vividnext.sodalive.v2.ranking.domain.CreatorRankingType
|
||||
import kr.co.vividnext.sodalive.v2.ranking.domain.CreatorRankingUtcRange
|
||||
import kr.co.vividnext.sodalive.v2.ranking.port.out.CreatorRankingSnapshotJobPort
|
||||
import kr.co.vividnext.sodalive.v2.ranking.port.out.CreatorRankingSnapshotJobRecord
|
||||
@@ -34,9 +35,7 @@ class CreatorRankingSnapshotJobService(
|
||||
|
||||
fun refreshLastCompletedWeekByScheduledJob() {
|
||||
withLastCompletedWeekPeriodLock { now, utcRange ->
|
||||
transactionTemplate.executeWithoutResult {
|
||||
refreshLastCompletedWeekByScheduledJob(now, utcRange)
|
||||
}
|
||||
refreshLastCompletedWeekByScheduledJob(now, utcRange)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,31 +43,66 @@ class CreatorRankingSnapshotJobService(
|
||||
now: ZonedDateTime,
|
||||
utcRange: CreatorRankingUtcRange
|
||||
) {
|
||||
val job = jobPort.save(
|
||||
CreatorRankingSnapshotJobRecord(
|
||||
aggregationStartAtUtc = utcRange.startInclusiveUtc,
|
||||
aggregationEndAtUtc = utcRange.endExclusiveUtc,
|
||||
trigger = CreatorRankingSnapshotJobTrigger.SCHEDULED,
|
||||
status = CreatorRankingSnapshotJobStatus.PENDING,
|
||||
lastError = null,
|
||||
processingStartedAt = null,
|
||||
processedAt = null
|
||||
)
|
||||
)
|
||||
val job = savePendingJob(utcRange, CreatorRankingSnapshotJobTrigger.SCHEDULED)
|
||||
val jobId = job.id ?: return
|
||||
jobPort.markProcessing(jobId, LocalDateTime.now())
|
||||
markProcessing(jobId)
|
||||
logJobStatusChanged(job, CreatorRankingSnapshotJobStatus.PROCESSING)
|
||||
try {
|
||||
refreshService.refreshLastCompletedWeek(now)
|
||||
jobPort.markDone(jobId, LocalDateTime.now())
|
||||
refresh(now)
|
||||
markDone(jobId)
|
||||
logJobStatusChanged(job, CreatorRankingSnapshotJobStatus.DONE)
|
||||
} catch (ex: Exception) {
|
||||
jobPort.markFailed(jobId, LocalDateTime.now(), ex.message)
|
||||
markFailed(jobId, ex.message)
|
||||
logJobStatusChanged(job, CreatorRankingSnapshotJobStatus.FAILED, ex.message)
|
||||
throw ex
|
||||
}
|
||||
}
|
||||
|
||||
private fun refresh(now: ZonedDateTime) {
|
||||
transactionTemplate.executeWithoutResult {
|
||||
refreshService.refreshLastCompletedWeek(now)
|
||||
}
|
||||
}
|
||||
|
||||
private fun savePendingJob(
|
||||
utcRange: CreatorRankingUtcRange,
|
||||
trigger: CreatorRankingSnapshotJobTrigger
|
||||
): CreatorRankingSnapshotJobRecord {
|
||||
return transactionTemplate.execute {
|
||||
jobPort.save(
|
||||
CreatorRankingSnapshotJobRecord(
|
||||
rankingType = CreatorRankingType.WEEKLY,
|
||||
aggregationStartAtUtc = utcRange.startInclusiveUtc,
|
||||
aggregationEndAtUtc = utcRange.endExclusiveUtc,
|
||||
visibleFromAtUtc = utcRange.endExclusiveUtc.plusHours(9),
|
||||
trigger = trigger,
|
||||
status = CreatorRankingSnapshotJobStatus.PENDING,
|
||||
lastError = null,
|
||||
processingStartedAt = null,
|
||||
processedAt = null
|
||||
)
|
||||
)
|
||||
}!!
|
||||
}
|
||||
|
||||
private fun markProcessing(jobId: Long) {
|
||||
transactionTemplate.executeWithoutResult {
|
||||
jobPort.markProcessing(jobId, LocalDateTime.now())
|
||||
}
|
||||
}
|
||||
|
||||
private fun markDone(jobId: Long) {
|
||||
transactionTemplate.executeWithoutResult {
|
||||
jobPort.markDone(jobId, LocalDateTime.now())
|
||||
}
|
||||
}
|
||||
|
||||
private fun markFailed(jobId: Long, message: String?) {
|
||||
transactionTemplate.executeWithoutResult {
|
||||
jobPort.markFailed(jobId, LocalDateTime.now(), message)
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
fun createManualJob(
|
||||
aggregationStartAtUtc: LocalDateTime,
|
||||
@@ -76,8 +110,10 @@ class CreatorRankingSnapshotJobService(
|
||||
): CreatorRankingSnapshotJobRecord {
|
||||
return jobPort.save(
|
||||
CreatorRankingSnapshotJobRecord(
|
||||
rankingType = CreatorRankingType.WEEKLY,
|
||||
aggregationStartAtUtc = aggregationStartAtUtc,
|
||||
aggregationEndAtUtc = aggregationEndAtUtc,
|
||||
visibleFromAtUtc = aggregationEndAtUtc.plusHours(9),
|
||||
trigger = CreatorRankingSnapshotJobTrigger.MANUAL,
|
||||
status = CreatorRankingSnapshotJobStatus.PENDING,
|
||||
lastError = null,
|
||||
|
||||
Reference in New Issue
Block a user