RED-6805: As Operation I want to see why downloads are in an ERROR state

added errorCause to dlq message receiver
added column with errorcause to downloadstatus table
This commit is contained in:
yhampe 2024-01-15 11:52:57 +01:00
parent 0d9f5276a5
commit bc348215a6
2 changed files with 34 additions and 3 deletions

View File

@ -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;
});
}
}

View File

@ -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