diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadDLQMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadDLQMessageReceiver.java index dc4dc003d..27d60d0f9 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadDLQMessageReceiver.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadDLQMessageReceiver.java @@ -1,9 +1,13 @@ package com.iqser.red.service.persistence.management.v1.processor.service.download; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.X_ERROR_INFO_HEADER; + +import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.retry.support.RetryTemplate; import org.springframework.stereotype.Service; +import com.fasterxml.jackson.databind.ObjectMapper; import com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration; import com.iqser.red.service.persistence.management.v1.processor.model.DownloadJob; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DownloadStatusPersistenceService; @@ -12,6 +16,7 @@ import com.iqser.red.service.redaction.report.v1.api.model.ReportRequestMessage; import com.iqser.red.service.redaction.report.v1.api.model.ReportResultMessage; import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @Slf4j @@ -21,6 +26,7 @@ public class DownloadDLQMessageReceiver { private final DownloadStatusPersistenceService downloadStatusPersistenceService; private final RetryTemplate retryTemplate; + private final ObjectMapper objectMapper; @RabbitListener(queues = MessagingConfiguration.DOWNLOAD_COMPRESSION_DLQ) @@ -31,11 +37,16 @@ public class DownloadDLQMessageReceiver { } + @SneakyThrows @RabbitListener(queues = MessagingConfiguration.DOWNLOAD_DLQ) - public void handleDlqMessage(DownloadJob downloadJob) { - + public void handleDlqMessage(Message failedMessage) { + var downloadJob = objectMapper.readValue(failedMessage.getBody(), DownloadJob.class); + String errorCause = failedMessage.getMessageProperties().getHeader(X_ERROR_INFO_HEADER); + if (errorCause == null) { + errorCause = "Error occured during download job!"; + } log.warn("Handling download job in DLQ userId: {} storageId: {} - setting status to error!", downloadJob.getUserId(), downloadJob.getStorageId()); - setDownloadFailed(downloadJob.getUserId(), downloadJob.getStorageId()); + setDownloadFailed(downloadJob.getUserId(), downloadJob.getStorageId(), errorCause); } @@ -64,4 +75,13 @@ public class DownloadDLQMessageReceiver { }); } + private void setDownloadFailed(String userId, String downloadId, String errorCause) { + + retryTemplate.execute(retryContext -> { + log.warn("Retrying {} time to set FAILED status for downloadJob userId: {} storageId: {}", retryContext.getRetryCount(), userId, downloadId); + downloadStatusPersistenceService.updateStatus(downloadId, DownloadStatusValue.FAILED); + return null; + }); + } + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/117-add-download-status-error-cause.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/117-add-download-status-error-cause.yaml new file mode 100644 index 000000000..f8f4ae939 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/117-add-download-status-error-cause.yaml @@ -0,0 +1,11 @@ +databaseChangeLog: + - changeSet: + id: add-error-cause-to-download-status + author: yannik + changes: + - addColumn: + columns: + - column: + name: error_cause + type: VARCHAR(1024) + tableName: download_status \ No newline at end of file