diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/api/RecordIndexerApi.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/api/RecordIndexerApi.java index 4f08bbc5489e121e5405b926257522c79516ef54..c58170b0e9951338c3c4c1c6c831d5530c82d746 100644 --- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/api/RecordIndexerApi.java +++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/api/RecordIndexerApi.java @@ -113,7 +113,7 @@ public class RecordIndexerApi { public ResponseEntity<?> reindex( @RequestBody @NotNull(message = SwaggerDoc.REQUEST_VALIDATION_NOT_NULL_BODY) @Valid RecordReindexRequest recordReindexRequest) { - return new ResponseEntity<>(reIndexService.reindexKind(recordReindexRequest, false), HttpStatus.OK); + return new ResponseEntity<>(reIndexService.reindexKind(recordReindexRequest, false, false), HttpStatus.OK); } // THIS IS AN INTERNAL USE API ONLY diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/api/ReindexApi.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/api/ReindexApi.java index c4ea75f991793fcea471a4cee6f51b369be316c1..73834c2bcd0a938ed909fddd4bd6900f6ee94aee 100644 --- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/api/ReindexApi.java +++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/api/ReindexApi.java @@ -104,7 +104,7 @@ public class ReindexApi { public ResponseEntity<?> reindex(@NotNull @Valid @RequestBody RecordReindexRequest recordReindexRequest, @Parameter(description = "Force Clean") @RequestParam(value = "force_clean", defaultValue = "false") boolean forceClean) throws IOException { - this.reIndexService.reindexKind(recordReindexRequest, this.indexSchemaService.isStorageSchemaSyncRequired(recordReindexRequest.getKind(), forceClean)); + this.reIndexService.reindexKind(recordReindexRequest, this.indexSchemaService.isStorageSchemaSyncRequired(recordReindexRequest.getKind(), forceClean), true); this.auditLogger.getReindex(singletonList(recordReindexRequest.getKind())); return new ResponseEntity<>(org.springframework.http.HttpStatus.OK); } diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexSchemaService.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexSchemaService.java index 9b19787c35ec5247e1a88ef4c2f63e68d1a3d421..f4242786d9d89dc9cdb3fbe4b3faea5f6aa8ec80 100644 --- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexSchemaService.java +++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexSchemaService.java @@ -35,6 +35,8 @@ public interface IndexSchemaService { void processSchemaMessages(Map<String, OperationType> schemaMsgs) throws IOException; + void processSchemaUpsert(String kind) throws AppException; + void processSchemaUpsertEvent(RestHighLevelClient restClient, String kind) throws IOException, ElasticsearchStatusException, URISyntaxException; void syncIndexMappingWithStorageSchema(String kind) throws ElasticsearchException, IOException, AppException, URISyntaxException; diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexSchemaServiceImpl.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexSchemaServiceImpl.java index 048e87a393dd515143288d1426b0d152e777882a..93faa0486ae50ecf63a7d9e5d6d7d547ca7413ea 100644 --- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexSchemaServiceImpl.java +++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexSchemaServiceImpl.java @@ -106,6 +106,15 @@ public class IndexSchemaServiceImpl implements IndexSchemaService { } } + @Override + public void processSchemaUpsert(String kind) throws AppException { + try (RestHighLevelClient restClient = this.elasticClientHandler.createRestClient()) { + processSchemaUpsertEvent(restClient, kind); + } catch (IOException | ElasticsearchStatusException | URISyntaxException e) { + throw new AppException(HttpStatus.SC_INTERNAL_SERVER_ERROR, "unable to process schema update", e.getMessage()); + } + } + @Override public void processSchemaUpsertEvent(RestHighLevelClient restClient, String kind) throws IOException, ElasticsearchStatusException, URISyntaxException { String index = this.elasticIndexNameResolver.getIndexNameFromKind(kind); diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/ReindexService.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/ReindexService.java index 231cbf2ad089e0839efe8e5141a1ea4ae7078f09..59b799f52ccd9e7ea8439a1da79068afa6cc2bf5 100644 --- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/ReindexService.java +++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/ReindexService.java @@ -22,7 +22,7 @@ import java.util.List; public interface ReindexService { - String reindexKind(RecordReindexRequest recordReindexRequest, boolean forceClean); + String reindexKind(RecordReindexRequest recordReindexRequest, boolean forceClean, boolean updateSchemaMapping); Records reindexRecords(List<String> recordIds); diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/ReindexServiceImpl.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/ReindexServiceImpl.java index 062c48da5c31506fd443d9551191d1ac86cf6af0..e0bfb4b9b196052cc401d71b710c70fddb75fc43 100644 --- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/ReindexServiceImpl.java +++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/ReindexServiceImpl.java @@ -52,7 +52,7 @@ public class ReindexServiceImpl implements ReindexService { @SneakyThrows @Override - public String reindexKind(RecordReindexRequest recordReindexRequest, boolean forceClean) { + public String reindexKind(RecordReindexRequest recordReindexRequest, boolean forceClean, boolean updateSchemaMapping) { Long initialDelayMillis = 0l; @@ -62,6 +62,10 @@ public class ReindexServiceImpl implements ReindexService { this.indexSchemaService.syncIndexMappingWithStorageSchema(recordReindexRequest.getKind()); initialDelayMillis = 30000l; } + else if(updateSchemaMapping){ + this.indexSchemaService.processSchemaUpsert(recordReindexRequest.getKind()); + initialDelayMillis = 15000l; + } RecordQueryResponse recordQueryResponse = this.storageService.getRecordsByKind(recordReindexRequest); @@ -113,7 +117,7 @@ public class ReindexServiceImpl implements ReindexService { } for (String kind : allKinds) { try { - reindexKind(new RecordReindexRequest(kind, ""), forceClean); + reindexKind(new RecordReindexRequest(kind, ""), forceClean, true); } catch (Exception e) { jaxRsDpsLog.warning(String.format("kind: %s cannot be re-indexed", kind)); continue; diff --git a/indexer-core/src/test/java/org/opengroup/osdu/indexer/api/ReindexApiTest.java b/indexer-core/src/test/java/org/opengroup/osdu/indexer/api/ReindexApiTest.java index f5437fbd963bcaf622406c2ebde8be6b90374ac8..dadaed397be30e5b0fd4e7a01154db7d99e0e691 100644 --- a/indexer-core/src/test/java/org/opengroup/osdu/indexer/api/ReindexApiTest.java +++ b/indexer-core/src/test/java/org/opengroup/osdu/indexer/api/ReindexApiTest.java @@ -64,7 +64,7 @@ public class ReindexApiTest { @Test public void should_return200_when_valid_kind_provided() throws IOException { - when(this.reIndexService.reindexKind(recordReindexRequest, false)).thenReturn("something"); + when(this.reIndexService.reindexKind(recordReindexRequest, false, false)).thenReturn("something"); ResponseEntity<?> response = sut.reindex(recordReindexRequest, false); @@ -73,14 +73,14 @@ public class ReindexApiTest { @Test(expected = AppException.class) public void should_throwAppException_ifUnknownExceptionCaught_reindexTest() throws IOException { - when(this.reIndexService.reindexKind(recordReindexRequest, false)).thenThrow(new AppException(500, "", "")); + when(this.reIndexService.reindexKind(recordReindexRequest, false, true)).thenThrow(new AppException(500, "", "")); sut.reindex(recordReindexRequest, false); } @Test(expected = NullPointerException.class) public void should_throwAppException_ifNullPointerExceptionCaught_ReindexTest() throws IOException { - when(this.reIndexService.reindexKind(recordReindexRequest, false)).thenThrow(new NullPointerException("")); + when(this.reIndexService.reindexKind(recordReindexRequest, false, true)).thenThrow(new NullPointerException("")); sut.reindex(recordReindexRequest, false); } diff --git a/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/service/ReindexServiceTest.java b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/service/ReindexServiceTest.java index 6e6e52d896ae6712c93b7957b7947fc7c0002ae4..6cdeb05c1148a68fc681bc1d8da424565e5a8945 100644 --- a/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/service/ReindexServiceTest.java +++ b/provider/indexer-azure/src/test/java/org/opengroup/osdu/indexer/azure/service/ReindexServiceTest.java @@ -104,7 +104,7 @@ public class ReindexServiceTest { recordQueryResponse.setResults(null); when(storageService.getRecordsByKind(ArgumentMatchers.any())).thenReturn(recordQueryResponse); - String response = sut.reindexKind(recordReindexRequest, false); + String response = sut.reindexKind(recordReindexRequest, false, false); Assert.assertNull(response); } catch (Exception e) { @@ -118,7 +118,7 @@ public class ReindexServiceTest { recordQueryResponse.setResults(new ArrayList<>()); when(storageService.getRecordsByKind(ArgumentMatchers.any())).thenReturn(recordQueryResponse); - String response = sut.reindexKind(recordReindexRequest, false); + String response = sut.reindexKind(recordReindexRequest, false, false); Assert.assertNull(response); } catch (Exception e) { @@ -138,7 +138,7 @@ public class ReindexServiceTest { when(storageService.getRecordsByKind(ArgumentMatchers.any())).thenReturn(recordQueryResponse); - String taskQueuePayload = sut.reindexKind(recordReindexRequest, false); + String taskQueuePayload = sut.reindexKind(recordReindexRequest, false, false); Assert.assertEquals("{\"kind\":\"tenant:test:test:1.0.0\",\"cursor\":\"100\"}", taskQueuePayload); } catch (Exception e) { @@ -154,7 +154,7 @@ public class ReindexServiceTest { recordQueryResponse.setResults(results); when(storageService.getRecordsByKind(ArgumentMatchers.any())).thenReturn(recordQueryResponse); - String taskQueuePayload = sut.reindexKind(recordReindexRequest, false); + String taskQueuePayload = sut.reindexKind(recordReindexRequest, false, false); Assert.assertEquals(String.format("{\"data\":\"[{\\\"id\\\":\\\"test1\\\",\\\"kind\\\":\\\"tenant:test:test:1.0.0\\\",\\\"op\\\":\\\"create\\\"}]\",\"attributes\":{\"slb-correlation-id\":\"%s\"}}", correlationId), taskQueuePayload); } catch (Exception e) { diff --git a/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/service/ReindexServiceTest.java b/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/service/ReindexServiceTest.java index 7fef8d1e99d9bdb60b273c902dda14bb1c15345d..34102903c7c7038631551b05cbd724e3fa991b8f 100644 --- a/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/service/ReindexServiceTest.java +++ b/provider/indexer-gc/src/test/java/org/opengroup/osdu/indexer/service/ReindexServiceTest.java @@ -94,7 +94,7 @@ public class ReindexServiceTest { recordQueryResponse.setResults(null); when(storageService.getRecordsByKind(any())).thenReturn(recordQueryResponse); - String response = sut.reindexKind(recordReindexRequest, false); + String response = sut.reindexKind(recordReindexRequest, false, false); Assert.assertNull(response); } catch (Exception e) { @@ -108,7 +108,7 @@ public class ReindexServiceTest { recordQueryResponse.setResults(new ArrayList<>()); when(storageService.getRecordsByKind(any())).thenReturn(recordQueryResponse); - String response = sut.reindexKind(recordReindexRequest, false); + String response = sut.reindexKind(recordReindexRequest, false, false); Assert.assertNull(response); } catch (Exception e) { @@ -128,7 +128,7 @@ public class ReindexServiceTest { when(storageService.getRecordsByKind(any())).thenReturn(recordQueryResponse); - String taskQueuePayload = sut.reindexKind(recordReindexRequest, false); + String taskQueuePayload = sut.reindexKind(recordReindexRequest, false, false); Assert.assertEquals("{\"kind\":\"tenant:test:test:1.0.0\",\"cursor\":\"100\"}", taskQueuePayload); } catch (Exception e) { @@ -144,7 +144,7 @@ public class ReindexServiceTest { recordQueryResponse.setResults(results); when(storageService.getRecordsByKind(any())).thenReturn(recordQueryResponse); - String taskQueuePayload = sut.reindexKind(recordReindexRequest, false); + String taskQueuePayload = sut.reindexKind(recordReindexRequest, false, false); Assert.assertEquals(String.format("{\"data\":\"[{\\\"id\\\":\\\"test1\\\",\\\"kind\\\":\\\"tenant:test:test:1.0.0\\\",\\\"op\\\":\\\"create\\\"}]\",\"attributes\":{\"correlation-id\":\"%s\"}}", correlationId), taskQueuePayload); } catch (Exception e) { diff --git a/provider/indexer-ibm/src/test/java/org/opengroup/osdu/indexer/ibm/service/ReindexServiceTest.java b/provider/indexer-ibm/src/test/java/org/opengroup/osdu/indexer/ibm/service/ReindexServiceTest.java index 1d562afe6e2c2525c8a41e0a3b58f49d89ad0dbf..0af01628e06425975aa4c0b35858ef3afcdecba5 100644 --- a/provider/indexer-ibm/src/test/java/org/opengroup/osdu/indexer/ibm/service/ReindexServiceTest.java +++ b/provider/indexer-ibm/src/test/java/org/opengroup/osdu/indexer/ibm/service/ReindexServiceTest.java @@ -88,7 +88,7 @@ public class ReindexServiceTest { recordQueryResponse.setResults(null); when(storageService.getRecordsByKind(ArgumentMatchers.any())).thenReturn(recordQueryResponse); - String response = sut.reindexKind(recordReindexRequest, false); + String response = sut.reindexKind(recordReindexRequest, false, false); Assert.assertNull(response); } catch (Exception e) { @@ -102,7 +102,7 @@ public class ReindexServiceTest { recordQueryResponse.setResults(new ArrayList<>()); when(storageService.getRecordsByKind(ArgumentMatchers.any())).thenReturn(recordQueryResponse); - String response = sut.reindexKind(recordReindexRequest, false); + String response = sut.reindexKind(recordReindexRequest, false, false); Assert.assertNull(response); } catch (Exception e) { @@ -122,7 +122,7 @@ public class ReindexServiceTest { when(storageService.getRecordsByKind(ArgumentMatchers.any())).thenReturn(recordQueryResponse); - String taskQueuePayload = sut.reindexKind(recordReindexRequest, false); + String taskQueuePayload = sut.reindexKind(recordReindexRequest, false, false); Assert.assertEquals("{\"kind\":\"tenant:test:test:1.0.0\",\"cursor\":\"100\"}", taskQueuePayload); } catch (Exception e) { @@ -138,7 +138,7 @@ public class ReindexServiceTest { recordQueryResponse.setResults(results); when(storageService.getRecordsByKind(ArgumentMatchers.any())).thenReturn(recordQueryResponse); - String taskQueuePayload = sut.reindexKind(recordReindexRequest, false); + String taskQueuePayload = sut.reindexKind(recordReindexRequest, false, false); Assert.assertEquals(String.format("{\"data\":\"[{\\\"id\\\":\\\"test1\\\",\\\"kind\\\":\\\"tenant:test:test:1.0.0\\\",\\\"op\\\":\\\"create\\\"}]\",\"attributes\":{\"slb-correlation-id\":\"%s\"}}", correlationId), taskQueuePayload); } catch (Exception e) {