diff options
author | danielhanrahan <daniel.hanrahan@est.tech> | 2024-02-21 16:37:19 +0000 |
---|---|---|
committer | danielhanrahan <daniel.hanrahan@est.tech> | 2024-02-22 10:52:40 +0000 |
commit | 63aff8f081da3ca039bd7a29075f7edc495fb5b6 (patch) | |
tree | a0a315cc8afc70472cadffd8ab074bfe8c1fdc89 /cps-ncmp-service/src/main | |
parent | 699e725c1d731275e1207f6e19330692569c2380 (diff) |
Improve performance of moduleSetTag lookup
- Using absolute cps-path /dmi-registry/cm-handles is faster
than descendant cps-path //cm-handles due to CPS-2087.
- Converting DataNodes to YangModelCmHandle allows checking if
the handles are READY without needing to send additional DB
queries via cmHandleQueries::cmHandleHasState.
Issue-ID: CPS-2027
Signed-off-by: danielhanrahan <daniel.hanrahan@est.tech>
Change-Id: Ied7e884b0f779f394854603a7f8b186d09eb5be8
Diffstat (limited to 'cps-ncmp-service/src/main')
-rw-r--r-- | cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/inventory/sync/ModuleSyncService.java | 39 |
1 files changed, 19 insertions, 20 deletions
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/inventory/sync/ModuleSyncService.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/inventory/sync/ModuleSyncService.java index 333a6f28b2..dabfbbc6da 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/inventory/sync/ModuleSyncService.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/inventory/sync/ModuleSyncService.java @@ -31,7 +31,6 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Optional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -113,34 +112,34 @@ public class ModuleSyncService { private ImmutableTriple<String, Map<String, String>, Collection<ModuleReference>> getAllModuleReferencesAndNewYangResourcesByModuleSetTag(final YangModelCmHandle yangModelCmHandle, final boolean inUpgrade) { - final String moduleSetTag = getModuleSetTag(yangModelCmHandle, inUpgrade); final Collection<ModuleReference> allModuleReferences; - Map<String, String> newYangResources = Collections.emptyMap(); - - final Optional<DataNode> optionalDataNode = getFirstReadyDataNodeByModuleSetTagProvidedInDb(moduleSetTag); + final Map<String, String> newYangResources; - if (optionalDataNode.isPresent()) { - log.info("Found other cm handle having same module set tag: {}", moduleSetTag); - final String otherAnchorWithSameModuleSetTag - = YangDataConverter.extractCmHandleIdFromXpath(optionalDataNode.get().getXpath()); - allModuleReferences = cpsModuleService.getYangResourcesModuleReferences( - NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, otherAnchorWithSameModuleSetTag); - } else { + final YangModelCmHandle cmHandleWithSameModuleSetTag = getAnyReadyCmHandleByModuleSetTag(moduleSetTag); + if (cmHandleWithSameModuleSetTag == null) { allModuleReferences = dmiModelOperations.getModuleReferences(yangModelCmHandle); newYangResources = getNewModuleNameToContentMap(yangModelCmHandle, allModuleReferences); + } else { + log.info("Found other cm handle having same module set tag: {}", moduleSetTag); + allModuleReferences = cpsModuleService.getYangResourcesModuleReferences( + NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, cmHandleWithSameModuleSetTag.getId()); + newYangResources = NO_NEW_MODULES; } return ImmutableTriple.of(moduleSetTag, newYangResources, allModuleReferences); } - private Optional<DataNode> getFirstReadyDataNodeByModuleSetTagProvidedInDb(final String moduleSetTag) { - final List<DataNode> dataNodes = StringUtils.isNotBlank(moduleSetTag) ? cmHandleQueries - .queryNcmpRegistryByCpsPath("//cm-handles[@module-set-tag='" + moduleSetTag + "']", - FetchDescendantsOption.OMIT_DESCENDANTS) : Collections.emptyList(); - return dataNodes.stream().filter(dataNode -> { - final String cmHandleId = YangDataConverter.extractCmHandleIdFromXpath(dataNode.getXpath()); - return cmHandleQueries.cmHandleHasState(cmHandleId, CmHandleState.READY); - }).findFirst(); + private YangModelCmHandle getAnyReadyCmHandleByModuleSetTag(final String moduleSetTag) { + if (StringUtils.isBlank(moduleSetTag)) { + return null; + } + final String escapedModuleSetTag = moduleSetTag.replace("'", "''"); + final List<DataNode> dataNodes = cmHandleQueries.queryNcmpRegistryByCpsPath( + NCMP_DMI_REGISTRY_PARENT + "/cm-handles[@module-set-tag='" + escapedModuleSetTag + "']", + FetchDescendantsOption.DIRECT_CHILDREN_ONLY); + return dataNodes.stream().map(YangDataConverter::convertCmHandleToYangModel) + .filter(cmHandle -> cmHandle.getCompositeState().getCmHandleState() == CmHandleState.READY) + .findFirst().orElse(null); } private void setCmHandleModuleSetTag(final YangModelCmHandle upgradedCmHandle, final String moduleSetTag) { |