summaryrefslogtreecommitdiffstats
path: root/cps-ncmp-service/src/main
diff options
context:
space:
mode:
authordanielhanrahan <daniel.hanrahan@est.tech>2024-02-21 16:37:19 +0000
committerdanielhanrahan <daniel.hanrahan@est.tech>2024-02-22 10:52:40 +0000
commit63aff8f081da3ca039bd7a29075f7edc495fb5b6 (patch)
treea0a315cc8afc70472cadffd8ab074bfe8c1fdc89 /cps-ncmp-service/src/main
parent699e725c1d731275e1207f6e19330692569c2380 (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.java39
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) {