From a56d6f1c1494c9b33e3bb32f2cae69193280a7df Mon Sep 17 00:00:00 2001 From: ZMai <zmai@slb.com> Date: Sun, 30 Jul 2023 11:15:17 -0500 Subject: [PATCH] Resolve duplicate index PropertyConfigurations by choosing the last modify one --- .../osdu/indexer/model/SearchRequest.java | 2 ++ .../PropertyConfigurationsServiceImpl.java | 20 +++++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/model/SearchRequest.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/model/SearchRequest.java index c36bde212..7af9c3089 100644 --- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/model/SearchRequest.java +++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/model/SearchRequest.java @@ -17,6 +17,7 @@ package org.opengroup.osdu.indexer.model; import lombok.Data; import lombok.ToString; +import org.opengroup.osdu.core.common.model.search.SortQuery; import javax.validation.constraints.NotNull; import java.util.List; @@ -31,5 +32,6 @@ public class SearchRequest { private int offset; private String cursor; private List<String> returnedFields; + private SortQuery sort; private boolean trackTotalCount = true; } 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 d7aa52e00..b2d5c822b 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 @@ -24,6 +24,8 @@ import org.opengroup.osdu.core.common.model.http.DpsHeaders; import org.opengroup.osdu.core.common.model.indexer.OperationType; import org.opengroup.osdu.core.common.model.indexer.RecordInfo; import org.opengroup.osdu.core.common.model.search.RecordChangedMessages; +import org.opengroup.osdu.core.common.model.search.SortOrder; +import org.opengroup.osdu.core.common.model.search.SortQuery; import org.opengroup.osdu.core.common.model.storage.RecordData; import org.opengroup.osdu.core.common.model.storage.Schema; import org.opengroup.osdu.core.common.model.storage.SchemaItem; @@ -46,6 +48,7 @@ import java.util.stream.Collectors; @Component public class PropertyConfigurationsServiceImpl implements PropertyConfigurationsService { private static final String ASSOCIATED_IDENTITIES_PROPERTY = "AssociatedIdentities"; + private static final String VERSION_PROPERTY = "version"; private static final String ASSOCIATED_IDENTITIES_PROPERTY_STORAGE_FORMAT_TYPE = "[]string"; private static final String INDEX_PROPERTY_PATH_CONFIGURATION_KIND = "osdu:wks:reference-data--IndexPropertyPathConfiguration:*"; private static final String ANCESTRY_KINDS_DELIMITER = ","; @@ -873,10 +876,19 @@ public class PropertyConfigurationsServiceImpl implements PropertyConfigurations private PropertyConfigurations searchConfigurations(String kind) { String query = String.format("data.Code: \"%s\"", kind); SearchRequest searchRequest = createSearchRequest(INDEX_PROPERTY_PATH_CONFIGURATION_KIND, query); - for(PropertyConfigurations configurations : searchConfigurations(searchRequest)) { - if (kind.equals(configurations.getCode())) { - return configurations; - } + // If there is more than PropertyConfigurations, pick the one that was last modified. + // Given the property "modifyTime" is not set for new created record, we use property "version" + // to sort the search result in descending order + SortQuery sort = new SortQuery(); + sort.setField(Arrays.asList(VERSION_PROPERTY)); + sort.setOrder(Arrays.asList(SortOrder.DESC)); + searchRequest.setSort(sort); + List<PropertyConfigurations> propertyConfigurationsList = searchConfigurations(searchRequest); + if(!propertyConfigurationsList.isEmpty()) { + if(propertyConfigurationsList.size() > 1) { + jaxRsDpsLog.warning(String.format("There is more than one PropertyConfigurations for kind: %s", kind)); + } + return propertyConfigurationsList.get(0); } return null; } -- GitLab