X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=cps-ncmp-service%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fcps%2Fncmp%2Fapi%2Fimpl%2Finventory%2Fsync%2FModuleSyncService.java;h=dabfbbc6da323c411cce6cc3f28a336dcb928917;hb=63aff8f081da3ca039bd7a29075f7edc495fb5b6;hp=841368c0dba16cc7331c0b3da899acd703ff4ddd;hpb=13b8698611fcf3da3629d67360ba84d48f6049d7;p=cps.git 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 841368c0d..dabfbbc6d 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 @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2022-2023 Nordix Foundation + * Copyright (C) 2022-2024 Nordix Foundation * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,16 +31,15 @@ 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; -import org.onap.cps.api.CpsAdminService; +import org.apache.commons.lang3.tuple.ImmutableTriple; +import org.onap.cps.api.CpsAnchorService; import org.onap.cps.api.CpsDataService; import org.onap.cps.api.CpsModuleService; import org.onap.cps.ncmp.api.impl.inventory.CmHandleQueries; import org.onap.cps.ncmp.api.impl.inventory.CmHandleState; -import org.onap.cps.ncmp.api.impl.inventory.CompositeState; import org.onap.cps.ncmp.api.impl.operations.DmiModelOperations; import org.onap.cps.ncmp.api.impl.utils.YangDataConverter; import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle; @@ -59,11 +58,10 @@ public class ModuleSyncService { private final DmiModelOperations dmiModelOperations; private final CpsModuleService cpsModuleService; - private final CpsAdminService cpsAdminService; private final CmHandleQueries cmHandleQueries; private final CpsDataService cpsDataService; + private final CpsAnchorService cpsAnchorService; private final JsonObjectMapper jsonObjectMapper; - private final Map> moduleSetTagCache; private static final Map NO_NEW_MODULES = Collections.emptyMap(); /** @@ -73,57 +71,26 @@ public class ModuleSyncService { */ public void syncAndCreateOrUpgradeSchemaSetAndAnchor(final YangModelCmHandle yangModelCmHandle) { - final String moduleSetTag; - final String cmHandleId = yangModelCmHandle.getId(); - final CompositeState compositeState = yangModelCmHandle.getCompositeState(); - final boolean inUpgrade = ModuleOperationsUtils.isInUpgradeOrUpgradeFailed(compositeState); - - if (inUpgrade) { - moduleSetTag = ModuleOperationsUtils.getLockedCompositeStateDetails(compositeState.getLockReason()) - .get(ModuleOperationsUtils.MODULE_SET_TAG_KEY); - } else { - moduleSetTag = yangModelCmHandle.getModuleSetTag(); - } - - final Collection moduleReferencesFromCache = moduleSetTagCache.get(moduleSetTag); + final boolean inUpgrade = ModuleOperationsUtils.inUpgradeOrUpgradeFailed(yangModelCmHandle.getCompositeState()); - if (moduleReferencesFromCache == null) { - final Optional optionalExistingCmHandleWithSameModuleSetTag - = getFirstReadyDataNodeWithModuleSetTag(moduleSetTag); + final ImmutableTriple, Collection> + allModuleReferencesAndNewModuleNameByModuleSetTag + = getAllModuleReferencesAndNewYangResourcesByModuleSetTag(yangModelCmHandle, inUpgrade); - if (optionalExistingCmHandleWithSameModuleSetTag.isPresent()) { - final String existingCmHandleAnchorName - = optionalExistingCmHandleWithSameModuleSetTag.get().getAnchorName(); - createOrUpgradeSchemaSetUsingModuleSetTag(cmHandleId, moduleSetTag, existingCmHandleAnchorName); - } else { - syncAndCreateSchemaSet(yangModelCmHandle, moduleSetTag); - } - } else { - cpsModuleService.createOrUpgradeSchemaSetFromModules(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, - cmHandleId, NO_NEW_MODULES, moduleReferencesFromCache); - } - if (!inUpgrade) { - cpsAdminService.createAnchor(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, cmHandleId, cmHandleId); - } - setCmHandleModuleSetTag(yangModelCmHandle, moduleSetTag); - } + final String moduleSetTag = allModuleReferencesAndNewModuleNameByModuleSetTag.getLeft(); + final Map newYangResources = allModuleReferencesAndNewModuleNameByModuleSetTag.getMiddle(); + final Collection allModuleReferences + = allModuleReferencesAndNewModuleNameByModuleSetTag.getRight(); + final String cmHandleId = yangModelCmHandle.getId(); - private void syncAndCreateSchemaSet(final YangModelCmHandle yangModelCmHandle, final String moduleSetTag) { - final Collection allModuleReferencesFromCmHandle = - dmiModelOperations.getModuleReferences(yangModelCmHandle); - final Collection identifiedNewModuleReferencesFromCmHandle = cpsModuleService - .identifyNewModuleReferences(allModuleReferencesFromCmHandle); - final Map newModuleNameToContentMap; - if (identifiedNewModuleReferencesFromCmHandle.isEmpty()) { - newModuleNameToContentMap = NO_NEW_MODULES; + if (inUpgrade) { + cpsModuleService.upgradeSchemaSetFromModules(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, cmHandleId, + newYangResources, allModuleReferences); + setCmHandleModuleSetTag(yangModelCmHandle, moduleSetTag); } else { - newModuleNameToContentMap = dmiModelOperations.getNewYangResourcesFromDmi(yangModelCmHandle, - identifiedNewModuleReferencesFromCmHandle); - } - cpsModuleService.createOrUpgradeSchemaSetFromModules(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, - yangModelCmHandle.getId(), newModuleNameToContentMap, allModuleReferencesFromCmHandle); - if (StringUtils.isNotBlank(moduleSetTag)) { - moduleSetTagCache.put(moduleSetTag, allModuleReferencesFromCmHandle); + cpsModuleService.createSchemaSetFromModules(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, cmHandleId, + newYangResources, allModuleReferences); + cpsAnchorService.createAnchor(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, cmHandleId, cmHandleId); } } @@ -142,14 +109,37 @@ public class ModuleSyncService { } } - private Optional getFirstReadyDataNodeWithModuleSetTag(final String moduleSetTag) { - final List 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 ImmutableTriple, Collection> + getAllModuleReferencesAndNewYangResourcesByModuleSetTag(final YangModelCmHandle yangModelCmHandle, + final boolean inUpgrade) { + final String moduleSetTag = getModuleSetTag(yangModelCmHandle, inUpgrade); + final Collection allModuleReferences; + final Map newYangResources; + + 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 YangModelCmHandle getAnyReadyCmHandleByModuleSetTag(final String moduleSetTag) { + if (StringUtils.isBlank(moduleSetTag)) { + return null; + } + final String escapedModuleSetTag = moduleSetTag.replace("'", "''"); + final List 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) { @@ -162,16 +152,19 @@ public class ModuleSyncService { jsonObjectMapper.asJsonString(dmiRegistryProperties), OffsetDateTime.now()); } - private void createOrUpgradeSchemaSetUsingModuleSetTag(final String schemaSetName, - final String moduleSetTag, - final String existingCmHandleAnchorName) { - log.info("Found cm handle having module set tag: {}", moduleSetTag); - final Collection moduleReferencesFromExistingCmHandle = - cpsModuleService.getYangResourcesModuleReferences(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, - existingCmHandleAnchorName); - cpsModuleService.createOrUpgradeSchemaSetFromModules(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, - schemaSetName, NO_NEW_MODULES, moduleReferencesFromExistingCmHandle); - moduleSetTagCache.put(moduleSetTag, moduleReferencesFromExistingCmHandle); + private Map getNewModuleNameToContentMap(final YangModelCmHandle yangModelCmHandle, + final Collection moduleReferences) { + final Collection identifiedNewModuleReferences = cpsModuleService + .identifyNewModuleReferences(moduleReferences); + return dmiModelOperations.getNewYangResourcesFromDmi(yangModelCmHandle, identifiedNewModuleReferences); + } + + private String getModuleSetTag(final YangModelCmHandle yangModelCmHandle, final boolean inUpgrade) { + if (inUpgrade) { + return ModuleOperationsUtils.getUpgradedModuleSetTagFromLockReason( + yangModelCmHandle.getCompositeState().getLockReason()); + } + return yangModelCmHandle.getModuleSetTag(); } }