From f05ea41c3345263fdab83a86ac5721f8a6ef8d8d Mon Sep 17 00:00:00 2001 From: ZMai <zmai@slb.com> Date: Thu, 8 Jun 2023 06:51:58 -0500 Subject: [PATCH] Cache the children's property configurations to avoid additonal search --- .../PropertyConfigurationsServiceImpl.java | 16 +++++++--------- .../PropertyConfigurationsServiceImplTest.java | 9 ++++----- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/PropertyConfigurationsServiceImpl.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/PropertyConfigurationsServiceImpl.java index 4b49a8c04..3f8d892bc 100644 --- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/PropertyConfigurationsServiceImpl.java +++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/PropertyConfigurationsServiceImpl.java @@ -775,17 +775,13 @@ public class PropertyConfigurationsServiceImpl implements PropertyConfigurations return; } - StringBuilder kindBuilder = new StringBuilder(); + List<String> multiKinds = new ArrayList<>(); for(String kind: childrenKinds) { - if(kindBuilder.length() > 0) { - kindBuilder.append(","); - } - kindBuilder.append(kind + "*"); + String kindWithMajor = PropertyUtil.getKindWithMajor(kind) + "*.*"; + multiKinds.add(kindWithMajor); } - - final int limit = configurationProperties.getStorageRecordsByKindBatchSize(); SearchRequest searchRequest = new SearchRequest(); - searchRequest.setKind(kindBuilder.toString()); + searchRequest.setKind(multiKinds); searchRequest.setQuery(query); searchRequest.setReturnedFields(Arrays.asList("kind", "id", "data." + ASSOCIATED_IDENTITIES_PROPERTY)); List<RecordInfo> recordInfos = new ArrayList<>(); @@ -804,7 +800,7 @@ public class PropertyConfigurationsServiceImpl implements PropertyConfigurations recordInfo.setOp(OperationType.update.getValue()); recordInfos.add(recordInfo); - if (recordInfos.size() >= limit) { + if (recordInfos.size() >= configurationProperties.getStorageRecordsByKindBatchSize()) { createWorkerTask(ancestors, recordInfos); recordInfos = new ArrayList<>(); } @@ -879,6 +875,8 @@ public class PropertyConfigurationsServiceImpl implements PropertyConfigurations try { String data = objectMapper.writeValueAsString(searchRecord.getData()); PropertyConfigurations configurations = objectMapper.readValue(data, PropertyConfigurations.class); + String kind = PropertyUtil.getKindWithMajor(configurations.getCode()); + propertyConfigurationCache.put(kind, configurations); configurationsList.add(configurations); } catch (JsonProcessingException e) { jaxRsDpsLog.error("failed to deserialize PropertyConfigurations object", e); diff --git a/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/PropertyConfigurationsServiceImplTest.java b/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/PropertyConfigurationsServiceImplTest.java index b5783bf56..9a11d7a79 100644 --- a/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/PropertyConfigurationsServiceImplTest.java +++ b/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/PropertyConfigurationsServiceImplTest.java @@ -55,8 +55,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.powermock.api.mockito.PowerMockito.when; @@ -186,13 +185,13 @@ public class PropertyConfigurationsServiceImplTest { searchResponse.setResults(results); searchResponse.setTotalCount(results.size()); when(this.searchService.queryWithCursor(any())).thenReturn(searchResponse); - String kind = "osdu:wks:master-data--Well:1.0.0"; String code = "osdu:wks:master-data--Well:1."; PropertyConfigurations configuration = sut.getPropertyConfigurations(kind); ArgumentCaptor<PropertyConfigurations> argumentCaptor = ArgumentCaptor.forClass(PropertyConfigurations.class); - verify(this.propertyConfigurationCache, times(1)).put(any(), argumentCaptor.capture()); + // If we mock the implementation of propertyConfigurationCache, it should be called once + verify(this.propertyConfigurationCache, times(2)).put(any(), argumentCaptor.capture()); Assert.assertNotNull(configuration); Assert.assertEquals(code, configuration.getCode()); Assert.assertEquals(code, argumentCaptor.getValue().getCode()); @@ -840,7 +839,7 @@ public class PropertyConfigurationsServiceImplTest { // No result } } else { - if(searchRequest.getKind().toString().equals("osdu:wks:master-data--Well:1.*")) { + if(searchRequest.getKind().toString().contains("osdu:wks:master-data--Well:1.")) { // Return of searchUniqueParentIds(...) SearchRecord searchRecord = new SearchRecord(); Map<String, Object> childDataMap = new HashMap<>(); -- GitLab