/*
* ============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.
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;
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<String, Collection<ModuleReference>> moduleSetTagCache;
private static final Map<String, String> NO_NEW_MODULES = Collections.emptyMap();
/**
*/
public void syncAndCreateOrUpgradeSchemaSetAndAnchor(final YangModelCmHandle yangModelCmHandle) {
+ final boolean inUpgrade = ModuleOperationsUtils.inUpgradeOrUpgradeFailed(yangModelCmHandle.getCompositeState());
+
+ final ImmutableTriple<String, Map<String, String>, Collection<ModuleReference>>
+ allModuleReferencesAndNewModuleNameByModuleSetTag
+ = getAllModuleReferencesAndNewYangResourcesByModuleSetTag(yangModelCmHandle, inUpgrade);
+
+ final String moduleSetTag = allModuleReferencesAndNewModuleNameByModuleSetTag.getLeft();
+ final Map<String, String> newYangResources = allModuleReferencesAndNewModuleNameByModuleSetTag.getMiddle();
+ final Collection<ModuleReference> allModuleReferences
+ = allModuleReferencesAndNewModuleNameByModuleSetTag.getRight();
final String cmHandleId = yangModelCmHandle.getId();
- final CompositeState compositeState = yangModelCmHandle.getCompositeState();
- final boolean inUpgrade = ModuleOperationsUtils.isInUpgradeOrUpgradeFailed(compositeState);
- final String moduleSetTag = getModuleSetTag(yangModelCmHandle, compositeState, inUpgrade);
-
- final Collection<ModuleReference> moduleReferencesFromCache = moduleSetTagCache.get(moduleSetTag);
-
- if (moduleReferencesFromCache == null) {
- final Optional<DataNode> existingCmHandleWithSameModuleSetTag
- = getFirstReadyDataNodeWithModuleSetTag(moduleSetTag);
-
- if (existingCmHandleWithSameModuleSetTag.isPresent()) {
- final String existingAnchorName = existingCmHandleWithSameModuleSetTag.get().getAnchorName();
- final Collection<ModuleReference> moduleReferencesFromExistingCmHandle =
- upgradeOrCreateSchemaSetUsingModuleSetTag(yangModelCmHandle.getId(), moduleSetTag,
- existingAnchorName, inUpgrade);
- updateModuleSetTagCache(moduleSetTag, moduleReferencesFromExistingCmHandle);
- } else {
- final Collection<ModuleReference> allModuleReferencesFromCmHandle
- = syncAndCreateSchemaSet(yangModelCmHandle);
- updateModuleSetTagCache(moduleSetTag, allModuleReferencesFromCmHandle);
- }
+
+ if (inUpgrade) {
+ cpsModuleService.upgradeSchemaSetFromModules(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, cmHandleId,
+ newYangResources, allModuleReferences);
+ setCmHandleModuleSetTag(yangModelCmHandle, moduleSetTag);
} else {
- if (inUpgrade) {
- cpsModuleService.upgradeSchemaSetFromModules(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, cmHandleId,
- NO_NEW_MODULES, moduleReferencesFromCache);
- } else {
- cpsModuleService.createSchemaSetFromModules(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME,
- cmHandleId, NO_NEW_MODULES, moduleReferencesFromCache);
- }
- }
- if (!inUpgrade) {
- cpsAdminService.createAnchor(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, cmHandleId, cmHandleId);
+ cpsModuleService.createSchemaSetFromModules(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, cmHandleId,
+ newYangResources, allModuleReferences);
+ cpsAnchorService.createAnchor(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, cmHandleId, cmHandleId);
}
- setCmHandleModuleSetTag(yangModelCmHandle, moduleSetTag);
}
/**
}
}
- private Optional<DataNode> getFirstReadyDataNodeWithModuleSetTag(final String moduleSetTag) {
+ 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);
+
+ 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 {
+ allModuleReferences = dmiModelOperations.getModuleReferences(yangModelCmHandle);
+ newYangResources = getNewModuleNameToContentMap(yangModelCmHandle, allModuleReferences);
+ }
+ 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();
jsonObjectMapper.asJsonString(dmiRegistryProperties), OffsetDateTime.now());
}
- private Collection<ModuleReference> syncAndCreateSchemaSet(final YangModelCmHandle yangModelCmHandle) {
- final Collection<ModuleReference> allModuleReferencesFromCmHandle =
- dmiModelOperations.getModuleReferences(yangModelCmHandle);
- final Collection<ModuleReference> identifiedNewModuleReferencesFromCmHandle = cpsModuleService
- .identifyNewModuleReferences(allModuleReferencesFromCmHandle);
- final Map<String, String> newModuleNameToContentMap;
- if (identifiedNewModuleReferencesFromCmHandle.isEmpty()) {
- newModuleNameToContentMap = NO_NEW_MODULES;
- } else {
- newModuleNameToContentMap = dmiModelOperations.getNewYangResourcesFromDmi(yangModelCmHandle,
- identifiedNewModuleReferencesFromCmHandle);
- }
- cpsModuleService.createSchemaSetFromModules(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME,
- yangModelCmHandle.getId(), newModuleNameToContentMap, allModuleReferencesFromCmHandle);
- return allModuleReferencesFromCmHandle;
+ private Map<String, String> getNewModuleNameToContentMap(final YangModelCmHandle yangModelCmHandle,
+ final Collection<ModuleReference> moduleReferences) {
+ final Collection<ModuleReference> identifiedNewModuleReferences = cpsModuleService
+ .identifyNewModuleReferences(moduleReferences);
+ return dmiModelOperations.getNewYangResourcesFromDmi(yangModelCmHandle, identifiedNewModuleReferences);
}
- private Collection<ModuleReference> upgradeOrCreateSchemaSetUsingModuleSetTag(final String schemaSetName,
- final String moduleSetTag,
- final String existingAnchorName,
- final boolean inUpgrade) {
- log.info("Found cm handle having module set tag: {}", moduleSetTag);
- final Collection<ModuleReference> moduleReferencesFromExistingCmHandle =
- cpsModuleService.getYangResourcesModuleReferences(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME,
- existingAnchorName);
+ private String getModuleSetTag(final YangModelCmHandle yangModelCmHandle, final boolean inUpgrade) {
if (inUpgrade) {
- cpsModuleService.upgradeSchemaSetFromModules(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, schemaSetName,
- NO_NEW_MODULES, moduleReferencesFromExistingCmHandle);
- } else {
- cpsModuleService.createSchemaSetFromModules(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME,
- schemaSetName, NO_NEW_MODULES, moduleReferencesFromExistingCmHandle);
- }
- return moduleReferencesFromExistingCmHandle;
- }
-
- private String getModuleSetTag(final YangModelCmHandle yangModelCmHandle,
- final CompositeState compositeState,
- final boolean inUpgrade) {
- if (inUpgrade) {
- return ModuleOperationsUtils.getLockedCompositeStateDetails(compositeState.getLockReason())
- .get(ModuleOperationsUtils.MODULE_SET_TAG_KEY);
+ return ModuleOperationsUtils.getUpgradedModuleSetTagFromLockReason(
+ yangModelCmHandle.getCompositeState().getLockReason());
}
return yangModelCmHandle.getModuleSetTag();
}
- private void updateModuleSetTagCache(final String moduleSetTag,
- final Collection<ModuleReference> allModuleReferencesFromCmHandle) {
- if (StringUtils.isNotBlank(moduleSetTag)) {
- moduleSetTagCache.putIfAbsent(moduleSetTag, allModuleReferencesFromCmHandle);
- }
- }
-
}