From 6b58e8b8946da9f25540f904f45841a1bf0d08bb Mon Sep 17 00:00:00 2001 From: devplant Date: Thu, 25 May 2023 11:29:04 +0300 Subject: [PATCH] RED-6072 - As Operation I want to see why files are in an ERROR state - update the indexing failed with error information - in case of exception the reason is caught and added tot the message received from the queue --- .../search-service-server-v1/pom.xml | 2 +- .../server/queue/IndexingMessageReceiver.java | 54 ++++++++++++------- .../server/queue/MessagingConfiguration.java | 2 + 3 files changed, 39 insertions(+), 19 deletions(-) diff --git a/search-service-v1/search-service-server-v1/pom.xml b/search-service-v1/search-service-server-v1/pom.xml index 849eec0..0894b1e 100644 --- a/search-service-v1/search-service-server-v1/pom.xml +++ b/search-service-v1/search-service-server-v1/pom.xml @@ -12,7 +12,7 @@ search-service-server-v1 - 2.0.12 + 2.59.0 diff --git a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/queue/IndexingMessageReceiver.java b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/queue/IndexingMessageReceiver.java index ca40d81..6256678 100644 --- a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/queue/IndexingMessageReceiver.java +++ b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/queue/IndexingMessageReceiver.java @@ -4,7 +4,9 @@ import static com.iqser.red.service.search.v1.server.queue.MessagingConfiguratio import static com.iqser.red.service.search.v1.server.queue.MessagingConfiguration.DELETE_FROM_INDEX_QUEUE; import static com.iqser.red.service.search.v1.server.queue.MessagingConfiguration.INDEXING_DQL; import static com.iqser.red.service.search.v1.server.queue.MessagingConfiguration.INDEXING_QUEUE; +import static com.iqser.red.service.search.v1.server.queue.MessagingConfiguration.X_ERROR_INFO_HEADER; +import java.nio.charset.StandardCharsets; import java.util.List; import org.springframework.amqp.AmqpRejectAndDontRequeueException; @@ -17,6 +19,7 @@ import org.springframework.stereotype.Service; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileErrorInfo; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileModel; import com.iqser.red.service.search.v1.model.IndexMessage; import com.iqser.red.service.search.v1.model.IndexMessageType; @@ -70,7 +73,13 @@ public class IndexingMessageReceiver { indexRequest.getFileId())); } - receiveIndexingRequest(indexRequest); + try { + receiveIndexingRequest(indexRequest); + } catch (Exception e) { + log.warn("An exception occurred in processing the indexing request stage: ", e); + message.getMessageProperties().getHeaders().put(X_ERROR_INFO_HEADER, e.getMessage()); + throw e; + } } @@ -102,11 +111,7 @@ public class IndexingMessageReceiver { case DROP: indexDeleteService.recreateIndex(); addAllDocumentsToIndexQueue(); - try { - indexInformationService.updateIndexInformation(); - } catch (Exception e) { - log.error("Could not update index information", e); - } + indexInformationService.updateIndexInformation(); break; default: @@ -118,33 +123,46 @@ public class IndexingMessageReceiver { @RabbitHandler @RabbitListener(queues = INDEXING_DQL) - public void receiveIndexingRequestDQL(String in) throws JsonProcessingException { + public void receiveIndexingRequestDQL(Message in) throws JsonProcessingException { + + var indexRequest = objectMapper.readValue(new String(in.getBody(), StandardCharsets.UTF_8), IndexMessage.class); + String errorLog = "Failed to process indexing request:"; + log.info(errorLog + ": {}", indexRequest); + String errorMessage = errorLog + in.getMessageProperties().getHeader(X_ERROR_INFO_HEADER); + fileStatusProcessingUpdateClient.indexingFailed(indexRequest.getDossierId(), indexRequest.getFileId(), new FileErrorInfo(errorMessage, INDEXING_DQL, "search-service")); - var indexRequest = objectMapper.readValue(in, IndexMessage.class); - fileStatusProcessingUpdateClient.indexingFailed(indexRequest.getDossierId(), indexRequest.getFileId()); - log.info("Failed to process indexing request: {}", indexRequest); } @RabbitHandler @RabbitListener(queues = DELETE_FROM_INDEX_QUEUE) - public void receiveDeleteDocumentRequest(String in) throws JsonProcessingException { + public void receiveDeleteDocumentRequest(Message in) throws JsonProcessingException { - var indexRequest = objectMapper.readValue(in, IndexMessage.class); + var indexRequest = objectMapper.readValue(new String(in.getBody(), StandardCharsets.UTF_8), IndexMessage.class); log.info("Processing delete document request: {}", indexRequest); - documentDeleteService.deleteDocument(indexRequest.getFileId()); - log.info("Successfully deleted document with dossierId {} and fileId {}", indexRequest.getDossierId(), indexRequest.getFileId()); + try { + documentDeleteService.deleteDocument(indexRequest.getFileId()); + log.info("Successfully deleted document with dossierId {} and fileId {}", indexRequest.getDossierId(), indexRequest.getFileId()); + } catch (Exception e) { + log.warn("An exception occurred in processing delete document stage: ", e.getMessage()); + in.getMessageProperties().getHeaders().put(X_ERROR_INFO_HEADER, e.getMessage()); + throw e; + } } @RabbitHandler @RabbitListener(queues = DELETE_FROM_INDEX_DLQ) - public void receiveDeleteDocumentRequestDLQ(String in) throws JsonProcessingException { + public void receiveDeleteDocumentRequestDLQ(Message in) throws JsonProcessingException { + + var indexRequest = objectMapper.readValue(new String(in.getBody(), StandardCharsets.UTF_8), IndexMessage.class); + String errorLog = "Failed to process delete from index request "; + log.info(errorLog + ": {}", indexRequest); + String errorMessage = errorLog + in.getMessageProperties().getHeader(X_ERROR_INFO_HEADER); + + fileStatusProcessingUpdateClient.indexingFailed(indexRequest.getDossierId(), indexRequest.getFileId(), new FileErrorInfo(errorMessage, INDEXING_DQL, "search-service")); - var indexRequest = objectMapper.readValue(in, IndexMessage.class); - fileStatusProcessingUpdateClient.indexingFailed(indexRequest.getDossierId(), indexRequest.getFileId()); - log.info("Failed to process delete from index request: {}", indexRequest); } diff --git a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/queue/MessagingConfiguration.java b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/queue/MessagingConfiguration.java index 201571a..0d9d8d7 100644 --- a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/queue/MessagingConfiguration.java +++ b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/queue/MessagingConfiguration.java @@ -17,6 +17,8 @@ public class MessagingConfiguration { public static final String DELETE_FROM_INDEX_QUEUE = "deleteFromIndexQueue"; public static final String DELETE_FROM_INDEX_DLQ = "deleteFromIndexDLQ"; + public static final String X_ERROR_INFO_HEADER = "x-error-message"; + @Bean public Queue indexingQueue() {