From 144ad09096b1a0cf0539c3fd4b1db22edb4074e0 Mon Sep 17 00:00:00 2001
From: NThakur4 <nthakur4@slb.com>
Date: Wed, 2 Mar 2022 12:05:40 -0600
Subject: [PATCH] retry entire batch if all record indexing is failing

---
 .../osdu/indexer/service/IndexerServiceImpl.java         | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexerServiceImpl.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexerServiceImpl.java
index e23773e09..4027d0ef3 100644
--- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexerServiceImpl.java
+++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexerServiceImpl.java
@@ -430,6 +430,8 @@ public class IndexerServiceImpl implements IndexerService {
 
         List<String> failureRecordIds = new LinkedList<>();
         if (bulkRequest.numberOfActions() == 0) return failureRecordIds;
+        int failedRequestStatus = 200;
+        String failedRequestMessage = "";
 
         try {
             BulkResponse bulkResponse = restClient.bulk(bulkRequest, RequestOptions.DEFAULT);
@@ -447,6 +449,10 @@ public class IndexerServiceImpl implements IndexerService {
                     if (RETRY_ELASTIC_EXCEPTION.contains(bulkItemResponse.status())) {
                         failureRecordIds.add(bulkItemResponse.getId());
                     }
+                    if (Strings.isNullOrEmpty(failedRequestMessage)) {
+                        failedRequestMessage = failure.getMessage();
+                        failedRequestStatus = failure.getStatus().getStatus();
+                    }
                     failedResponses++;
                 } else {
                     succeededResponses++;
@@ -456,6 +462,9 @@ public class IndexerServiceImpl implements IndexerService {
             if (!bulkFailures.isEmpty()) this.jaxRsDpsLog.warning(bulkFailures);
 
             jaxRsDpsLog.info(String.format("records in elasticsearch service bulk request: %s | successful: %s | failed: %s", bulkRequest.numberOfActions(), succeededResponses, failedResponses));
+
+            // retry entire message if all records are failing
+            if (bulkRequest.numberOfActions() == failedResponses) throw new AppException(failedRequestStatus,  "Elastic error", failedRequestMessage);
         } catch (IOException e) {
             // throw explicit 504 for IOException
             throw new AppException(HttpStatus.SC_GATEWAY_TIMEOUT, "Elastic error", "Request cannot be completed in specified time.", e);
-- 
GitLab