aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/inventory/sync/ModuleSyncService.java14
-rw-r--r--cps-ri/pom.xml4
-rwxr-xr-xcps-ri/src/main/java/org/onap/cps/ri/CpsAdminPersistenceServiceImpl.java18
-rwxr-xr-xcps-ri/src/main/java/org/onap/cps/ri/CpsModulePersistenceServiceImpl.java163
-rw-r--r--cps-ri/src/main/java/org/onap/cps/ri/repository/SchemaSetYangResourceRepository.java36
-rw-r--r--cps-ri/src/main/java/org/onap/cps/ri/repository/SchemaSetYangResourceRepositoryImpl.java58
-rw-r--r--cps-ri/src/main/java/org/onap/cps/ri/repository/YangResourceNativeRepository.java31
-rw-r--r--cps-ri/src/main/java/org/onap/cps/ri/repository/YangResourceNativeRepositoryImpl.java69
-rw-r--r--cps-ri/src/main/java/org/onap/cps/ri/repository/YangResourceRepository.java10
-rw-r--r--cps-ri/src/test/groovy/org/onap/cps/ri/CpsModulePersistenceServiceImplSpec.groovy6
-rw-r--r--cps-service/src/main/java/org/onap/cps/api/CpsDataService.java4
-rw-r--r--cps-service/src/main/java/org/onap/cps/api/CpsModuleService.java14
-rw-r--r--cps-service/src/main/java/org/onap/cps/impl/CpsDataServiceImpl.java24
-rw-r--r--cps-service/src/main/java/org/onap/cps/impl/CpsModuleServiceImpl.java21
-rw-r--r--cps-service/src/main/java/org/onap/cps/init/AbstractModelLoader.java4
-rwxr-xr-xcps-service/src/main/java/org/onap/cps/spi/CpsModulePersistenceService.java35
-rw-r--r--cps-service/src/main/java/org/onap/cps/utils/YangParser.java16
-rw-r--r--cps-service/src/main/java/org/onap/cps/yang/TimedYangTextSchemaSourceSetBuilder.java4
-rw-r--r--cps-service/src/test/groovy/org/onap/cps/impl/CpsDataServiceImplSpec.groovy18
-rw-r--r--cps-service/src/test/groovy/org/onap/cps/impl/CpsModuleServiceImplSpec.groovy14
-rwxr-xr-xcps-service/src/test/groovy/org/onap/cps/impl/E2ENetworkSliceSpec.groovy30
-rw-r--r--cps-service/src/test/groovy/org/onap/cps/impl/YangTextSchemaSourceSetCacheSpec.groovy18
-rw-r--r--cps-service/src/test/groovy/org/onap/cps/utils/YangParserSpec.groovy6
-rw-r--r--docker-compose/config/grafana/cps-database-pool.json886
-rw-r--r--docker-compose/config/grafana/data-dashboard.json14
-rw-r--r--docker-compose/config/grafana/inventory-dashboard.json16
-rw-r--r--docker-compose/config/grafana/jvm-micrometer-dashboard.json735
-rw-r--r--docker-compose/config/grafana/postgresql-statistics-dashboard.json34
-rw-r--r--docker-compose/docker-compose.yml1
-rw-r--r--integration-test/src/test/groovy/org/onap/cps/integration/base/CpsIntegrationSpecBase.groovy13
-rw-r--r--integration-test/src/test/groovy/org/onap/cps/integration/base/DmiDispatcher.groovy12
-rw-r--r--integration-test/src/test/groovy/org/onap/cps/integration/functional/cps/ModuleServiceIntegrationSpec.groovy95
-rw-r--r--integration-test/src/test/groovy/org/onap/cps/integration/performance/cps/CpsModuleServicePerfTest.groovy6
33 files changed, 1317 insertions, 1112 deletions
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/inventory/sync/ModuleSyncService.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/inventory/sync/ModuleSyncService.java
index f929d6708c..79f5496eb7 100644
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/inventory/sync/ModuleSyncService.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/inventory/sync/ModuleSyncService.java
@@ -56,7 +56,7 @@ public class ModuleSyncService {
@AllArgsConstructor
private static final class ModuleDelta {
Collection<ModuleReference> allModuleReferences;
- Map<String, String> newModuleNameToContentMap;
+ Map<String, String> newYangResourceContentPerName;
}
/**
@@ -90,7 +90,7 @@ public class ModuleSyncService {
if (sourceModuleSetTag.isEmpty() && targetModuleSetTag.isEmpty()) {
final ModuleDelta moduleDelta = getModuleDelta(yangModelCmHandle, targetModuleSetTag);
cpsModuleService.upgradeSchemaSetFromModules(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME,
- schemaSetName, moduleDelta.newModuleNameToContentMap, moduleDelta.allModuleReferences);
+ schemaSetName, moduleDelta.newYangResourceContentPerName, moduleDelta.allModuleReferences);
} else {
syncAndCreateSchemaSet(yangModelCmHandle, schemaSetName, targetModuleSetTag);
cpsAnchorService.updateAnchorSchemaSet(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, cmHandleId, schemaSetName);
@@ -111,7 +111,7 @@ public class ModuleSyncService {
cpsModuleService.createSchemaSetFromModules(
NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME,
schemaSetName,
- moduleDelta.newModuleNameToContentMap,
+ moduleDelta.newYangResourceContentPerName,
moduleDelta.allModuleReferences
);
log.info("Successfully created Schema Set {} for CM Handle {}", schemaSetName,
@@ -133,11 +133,11 @@ public class ModuleSyncService {
dmiModelOperations.getModuleReferences(yangModelCmHandle, targetModuleSetTag);
final Collection<ModuleReference> newModuleReferences =
cpsModuleService.identifyNewModuleReferences(allModuleReferences);
- final Map<String, String> newYangResources = dmiModelOperations.getNewYangResourcesFromDmi(yangModelCmHandle,
- targetModuleSetTag, newModuleReferences);
+ final Map<String, String> newYangResourceContentPerName =
+ dmiModelOperations.getNewYangResourcesFromDmi(yangModelCmHandle, targetModuleSetTag, newModuleReferences);
log.debug("Module delta calculated for CM handle ID: {}. All references: {}. New modules: {}",
- yangModelCmHandle.getId(), allModuleReferences, newYangResources.keySet());
- return new ModuleDelta(allModuleReferences, newYangResources);
+ yangModelCmHandle.getId(), allModuleReferences, newYangResourceContentPerName.keySet());
+ return new ModuleDelta(allModuleReferences, newYangResourceContentPerName);
}
private void setCmHandleModuleSetTag(final YangModelCmHandle yangModelCmHandle, final String newModuleSetTag) {
diff --git a/cps-ri/pom.xml b/cps-ri/pom.xml
index 7ae85df851..aa5fad9ac2 100644
--- a/cps-ri/pom.xml
+++ b/cps-ri/pom.xml
@@ -3,7 +3,7 @@
============LICENSE_START=======================================================
Copyright (C) 2020-2021 Pantheon.tech
Modifications Copyright (C) 2020-2021 Bell Canada
- Modifications Copyright (C) 2020-2024 Nordix Foundation
+ Modifications Copyright (C) 2020-2025 Nordix Foundation
================================================================================
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -33,7 +33,7 @@
<artifactId>cps-ri</artifactId>
<properties>
- <minimum-coverage>0.29</minimum-coverage>
+ <minimum-coverage>0.31</minimum-coverage>
<!-- Additional coverage is provided by integration-test module -->
</properties>
diff --git a/cps-ri/src/main/java/org/onap/cps/ri/CpsAdminPersistenceServiceImpl.java b/cps-ri/src/main/java/org/onap/cps/ri/CpsAdminPersistenceServiceImpl.java
index 494d6919da..588a639ab8 100755
--- a/cps-ri/src/main/java/org/onap/cps/ri/CpsAdminPersistenceServiceImpl.java
+++ b/cps-ri/src/main/java/org/onap/cps/ri/CpsAdminPersistenceServiceImpl.java
@@ -1,6 +1,6 @@
/*
* ============LICENSE_START=======================================================
- * Copyright (C) 2020-2024 Nordix Foundation.
+ * Copyright (C) 2020-2025 Nordix Foundation.
* Modifications Copyright (C) 2020-2022 Bell Canada.
* Modifications Copyright (C) 2021 Pantheon.tech
* Modifications Copyright (C) 2022 TechMahindra Ltd.
@@ -91,10 +91,10 @@ public class CpsAdminPersistenceServiceImpl implements CpsAdminPersistenceServic
@Override
public void createAnchor(final String dataspaceName, final String schemaSetName, final String anchorName) {
- final var dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
- final var schemaSetEntity =
- schemaSetRepository.getByDataspaceAndName(dataspaceEntity, schemaSetName);
- final var anchorEntity = AnchorEntity.builder()
+ final DataspaceEntity dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
+ final SchemaSetEntity schemaSetEntity = schemaSetRepository
+ .getByDataspaceAndName(dataspaceEntity, schemaSetName);
+ final AnchorEntity anchorEntity = AnchorEntity.builder()
.name(anchorName)
.dataspace(dataspaceEntity)
.schemaSet(schemaSetEntity)
@@ -114,7 +114,7 @@ public class CpsAdminPersistenceServiceImpl implements CpsAdminPersistenceServic
@Override
public Collection<Anchor> getAnchors(final String dataspaceName) {
- final var dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
+ final DataspaceEntity dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
final Collection<AnchorEntity> anchorEntities = anchorRepository.findAllByDataspace(dataspaceEntity);
return anchorEntities.stream().map(CpsAdminPersistenceServiceImpl::toAnchor).collect(Collectors.toSet());
}
@@ -154,14 +154,14 @@ public class CpsAdminPersistenceServiceImpl implements CpsAdminPersistenceServic
@Transactional
@Override
public void deleteAnchor(final String dataspaceName, final String anchorName) {
- final var anchorEntity = getAnchorEntity(dataspaceName, anchorName);
+ final AnchorEntity anchorEntity = getAnchorEntity(dataspaceName, anchorName);
anchorRepository.delete(anchorEntity);
}
@Transactional
@Override
public void deleteAnchors(final String dataspaceName, final Collection<String> anchorNames) {
- final var dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
+ final DataspaceEntity dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
anchorRepository.deleteAllByDataspaceAndNameIn(dataspaceEntity, anchorNames);
}
@@ -178,7 +178,7 @@ public class CpsAdminPersistenceServiceImpl implements CpsAdminPersistenceServic
}
private AnchorEntity getAnchorEntity(final String dataspaceName, final String anchorName) {
- final var dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
+ final DataspaceEntity dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
return anchorRepository.getByDataspaceAndName(dataspaceEntity, anchorName);
}
diff --git a/cps-ri/src/main/java/org/onap/cps/ri/CpsModulePersistenceServiceImpl.java b/cps-ri/src/main/java/org/onap/cps/ri/CpsModulePersistenceServiceImpl.java
index aaf6165471..dbc6c28ec5 100755
--- a/cps-ri/src/main/java/org/onap/cps/ri/CpsModulePersistenceServiceImpl.java
+++ b/cps-ri/src/main/java/org/onap/cps/ri/CpsModulePersistenceServiceImpl.java
@@ -36,7 +36,6 @@ import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -103,10 +102,9 @@ public class CpsModulePersistenceServiceImpl implements CpsModulePersistenceServ
@Override
public Collection<ModuleReference> getYangResourceModuleReferences(final String dataspaceName) {
- final Set<YangResourceModuleReference> yangResourceModuleReferenceList =
+ final Collection<YangResourceModuleReference> yangResourceModuleReferences =
yangResourceRepository.findAllModuleReferencesByDataspace(dataspaceName);
- return yangResourceModuleReferenceList.stream().map(CpsModulePersistenceServiceImpl::toModuleReference)
- .collect(Collectors.toList());
+ return yangResourceModuleReferences.stream().map(CpsModulePersistenceServiceImpl::toModuleReference).toList();
}
@Override
@@ -150,19 +148,24 @@ public class CpsModulePersistenceServiceImpl implements CpsModulePersistenceServ
@Override
@Transactional
- public void storeSchemaSet(final String dataspaceName, final String schemaSetName,
- final Map<String, String> moduleReferenceNameToContentMap) {
- final DataspaceEntity dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
- final Set<YangResourceEntity> yangResourceEntities = synchronizeYangResources(moduleReferenceNameToContentMap);
- final SchemaSetEntity schemaSetEntity = new SchemaSetEntity();
- schemaSetEntity.setName(schemaSetName);
- schemaSetEntity.setDataspace(dataspaceEntity);
- schemaSetEntity.setYangResources(yangResourceEntities);
- try {
- schemaSetRepository.save(schemaSetEntity);
- } catch (final DataIntegrityViolationException e) {
- throw AlreadyDefinedException.forSchemaSet(schemaSetName, dataspaceName, e);
- }
+ @Timed(value = "cps.module.persistence.schemaset.create",
+ description = "Time taken to store a schemaset (list of module references)")
+ public void createSchemaSet(final String dataspaceName, final String schemaSetName,
+ final Map<String, String> yangResourceContentPerName) {
+ final Set<YangResourceEntity> yangResourceEntities = synchronizeYangResources(yangResourceContentPerName);
+ createAndSaveSchemaSetEntity(dataspaceName, schemaSetName, yangResourceEntities);
+ }
+
+ @Override
+ @Transactional
+ @Timed(value = "cps.module.persistence.schemaset.createFromNewAndExistingModules",
+ description = "Time taken to store a schemaset (from new and existing)")
+ public void createSchemaSetFromNewAndExistingModules(final String dataspaceName, final String schemaSetName,
+ final Map<String, String> newYangResourceContentPerName,
+ final Collection<ModuleReference> allModuleReferences) {
+ synchronizeYangResources(newYangResourceContentPerName);
+ final Set<YangResourceEntity> allYangResourceEntities = getYangResourceEntities(allModuleReferences);
+ createAndSaveSchemaSetEntity(dataspaceName, schemaSetName, allYangResourceEntities);
}
@Override
@@ -181,22 +184,6 @@ public class CpsModulePersistenceServiceImpl implements CpsModulePersistenceServ
@Override
@Transactional
- @Timed(value = "cps.module.persistence.schemaset.store",
- description = "Time taken to store a schemaset (list of module references)")
- public void storeSchemaSetFromModules(final String dataspaceName, final String schemaSetName,
- final Map<String, String> newModuleNameToContentMap,
- final Collection<ModuleReference> allModuleReferences) {
- storeSchemaSet(dataspaceName, schemaSetName, newModuleNameToContentMap);
- final DataspaceEntity dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
- final SchemaSetEntity schemaSetEntity =
- schemaSetRepository.getByDataspaceAndName(dataspaceEntity, schemaSetName);
- final List<Integer> allYangResourceIds =
- yangResourceRepository.getResourceIdsByModuleReferences(allModuleReferences);
- yangResourceRepository.insertSchemaSetIdYangResourceId(schemaSetEntity.getId(), allYangResourceIds);
- }
-
- @Override
- @Transactional
public void deleteSchemaSet(final String dataspaceName, final String schemaSetName) {
final DataspaceEntity dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
final SchemaSetEntity schemaSetEntity =
@@ -213,14 +200,16 @@ public class CpsModulePersistenceServiceImpl implements CpsModulePersistenceServ
@Override
@Transactional
- public void updateSchemaSetFromModules(final String dataspaceName, final String schemaSetName,
- final Map<String, String> newModuleNameToContentMap,
- final Collection<ModuleReference> allModuleReferences) {
+ public void updateSchemaSetFromNewAndExistingModules(final String dataspaceName, final String schemaSetName,
+ final Map<String, String> newYangResourcesPerName,
+ final Collection<ModuleReference> allModuleReferences) {
final DataspaceEntity dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
final SchemaSetEntity schemaSetEntity =
schemaSetRepository.getByDataspaceAndName(dataspaceEntity, schemaSetName);
- storeAndLinkNewModules(newModuleNameToContentMap, schemaSetEntity);
- updateAllModuleReferences(allModuleReferences, schemaSetEntity.getId());
+ synchronizeYangResources(newYangResourcesPerName);
+ final Set<YangResourceEntity> allYangResourceEntities = getYangResourceEntities(allModuleReferences);
+ schemaSetEntity.setYangResources(allYangResourceEntities);
+ schemaSetRepository.save(schemaSetEntity);
}
@Override
@@ -237,9 +226,35 @@ public class CpsModulePersistenceServiceImpl implements CpsModulePersistenceServ
return moduleReferenceRepository.identifyNewModuleReferences(moduleReferencesToCheck);
}
- private Set<YangResourceEntity> synchronizeYangResources(
- final Map<String, String> moduleReferenceNameToContentMap) {
- final Map<String, YangResourceEntity> checksumToEntityMap = moduleReferenceNameToContentMap.entrySet().stream()
+ private Set<YangResourceEntity> synchronizeYangResources(final Map<String, String> yangResourceContentPerName) {
+ final Map<String, YangResourceEntity> yangResourceEntitiesPerChecksum =
+ getYangResourceEntityPerChecksum(yangResourceContentPerName);
+
+ final List<YangResourceEntity> existingYangResourceEntities =
+ yangResourceRepository.findAllByChecksumIn(yangResourceEntitiesPerChecksum.keySet());
+
+ existingYangResourceEntities.forEach(exist -> yangResourceEntitiesPerChecksum.remove(exist.getChecksum()));
+ final Collection<YangResourceEntity> newYangResourceEntities = yangResourceEntitiesPerChecksum.values();
+
+ if (!newYangResourceEntities.isEmpty()) {
+ try {
+ yangResourceRepository.saveAll(newYangResourceEntities);
+ } catch (final DataIntegrityViolationException dataIntegrityViolationException) {
+ convertExceptionIfNeeded(dataIntegrityViolationException, newYangResourceEntities);
+ }
+ }
+
+ // return ALL yang resourceEntities
+ return ImmutableSet.<YangResourceEntity>builder()
+ .addAll(existingYangResourceEntities)
+ .addAll(newYangResourceEntities)
+ .build();
+ }
+
+ private static Map<String, YangResourceEntity> getYangResourceEntityPerChecksum(
+ final Map<String, String> yangResourceContentPerName) {
+ final Map<String, YangResourceEntity> yangResourceEntityPerChecksum =
+ yangResourceContentPerName.entrySet().stream()
.map(entry -> {
final String checksum = DigestUtils.sha256Hex(entry.getValue().getBytes(StandardCharsets.UTF_8));
final Map<String, String> moduleNameAndRevisionMap = createModuleNameAndRevisionMap(entry.getKey(),
@@ -256,29 +271,22 @@ public class CpsModulePersistenceServiceImpl implements CpsModulePersistenceServ
YangResourceEntity::getChecksum,
entity -> entity
));
+ return yangResourceEntityPerChecksum;
+ }
- final List<YangResourceEntity> existingYangResourceEntities =
- yangResourceRepository.findAllByChecksumIn(checksumToEntityMap.keySet());
- existingYangResourceEntities.forEach(yangFile -> checksumToEntityMap.remove(yangFile.getChecksum()));
-
- final Collection<YangResourceEntity> newYangResourceEntities = checksumToEntityMap.values();
- if (!newYangResourceEntities.isEmpty()) {
- try {
- yangResourceRepository.saveAll(newYangResourceEntities);
- } catch (final DataIntegrityViolationException dataIntegrityViolationException) {
- // Throw a CPS duplicated Yang resource exception if the cause of the error is a yang checksum
- // database constraint violation. If it is not, then throw the original exception
- final Optional<DuplicatedYangResourceException> convertedException =
- convertToDuplicatedYangResourceException(
- dataIntegrityViolationException, newYangResourceEntities);
- throw convertedException.isPresent() ? convertedException.get() : dataIntegrityViolationException;
- }
+ private void createAndSaveSchemaSetEntity(final String dataspaceName,
+ final String schemaSetName,
+ final Set<YangResourceEntity> yangResourceEntities) {
+ final DataspaceEntity dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
+ final SchemaSetEntity schemaSetEntity = new SchemaSetEntity();
+ schemaSetEntity.setName(schemaSetName);
+ schemaSetEntity.setDataspace(dataspaceEntity);
+ schemaSetEntity.setYangResources(yangResourceEntities);
+ try {
+ schemaSetRepository.save(schemaSetEntity);
+ } catch (final DataIntegrityViolationException e) {
+ throw AlreadyDefinedException.forSchemaSet(schemaSetName, dataspaceName, e);
}
-
- return ImmutableSet.<YangResourceEntity>builder()
- .addAll(existingYangResourceEntities)
- .addAll(newYangResourceEntities)
- .build();
}
private static Map<String, String> createModuleNameAndRevisionMap(final String sourceName, final String source) {
@@ -323,6 +331,14 @@ public class CpsModulePersistenceServiceImpl implements CpsModulePersistenceServ
return RevisionSourceIdentifier.create(sourceName);
}
+ private void convertExceptionIfNeeded(final DataIntegrityViolationException dataIntegrityViolationException,
+ final Collection<YangResourceEntity> newYangResourceEntities) {
+ final Optional<DuplicatedYangResourceException> convertedException =
+ convertToDuplicatedYangResourceException(
+ dataIntegrityViolationException, newYangResourceEntities);
+ throw convertedException.isPresent() ? convertedException.get() : dataIntegrityViolationException;
+ }
+
/**
* Convert the specified data integrity violation exception into a CPS duplicated Yang resource exception
* if the cause of the error is a yang checksum database constraint violation.
@@ -372,6 +388,13 @@ public class CpsModulePersistenceServiceImpl implements CpsModulePersistenceServ
return "no checksum found";
}
+ private Set<YangResourceEntity> getYangResourceEntities(final Collection<ModuleReference> moduleReferences) {
+ return moduleReferences.stream().map(moduleReference ->
+ yangResourceRepository
+ .findByModuleNameAndRevision(moduleReference.getModuleName(), moduleReference.getRevision()))
+ .collect(Collectors.toSet());
+ }
+
private static ModuleReference toModuleReference(
final YangResourceModuleReference yangResourceModuleReference) {
return ModuleReference.builder()
@@ -392,20 +415,4 @@ public class CpsModulePersistenceServiceImpl implements CpsModulePersistenceServ
.dataspaceName(schemaSetEntity.getDataspace().getName()).build();
}
- private void storeAndLinkNewModules(final Map<String, String> newModuleNameToContentMap,
- final SchemaSetEntity schemaSetEntity) {
- final Set<YangResourceEntity> yangResourceEntities
- = new HashSet<>(synchronizeYangResources(newModuleNameToContentMap));
- schemaSetEntity.setYangResources(yangResourceEntities);
- schemaSetRepository.save(schemaSetEntity);
- }
-
- private void updateAllModuleReferences(final Collection<ModuleReference> allModuleReferences,
- final Integer schemaSetEntityId) {
- yangResourceRepository.deleteSchemaSetYangResourceForSchemaSetId(schemaSetEntityId);
- final List<Integer> allYangResourceIds =
- yangResourceRepository.getResourceIdsByModuleReferences(allModuleReferences);
- yangResourceRepository.insertSchemaSetIdYangResourceId(schemaSetEntityId, allYangResourceIds);
- }
-
}
diff --git a/cps-ri/src/main/java/org/onap/cps/ri/repository/SchemaSetYangResourceRepository.java b/cps-ri/src/main/java/org/onap/cps/ri/repository/SchemaSetYangResourceRepository.java
deleted file mode 100644
index 410dcc2e26..0000000000
--- a/cps-ri/src/main/java/org/onap/cps/ri/repository/SchemaSetYangResourceRepository.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Copyright (C) 2021-2025 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.cps.ri.repository;
-
-import java.util.List;
-
-public interface SchemaSetYangResourceRepository {
-
-
- /**
- * Link yang resources (ids) with a schema set (id).
- *
- * @param schemaSetId the schema set id
- * @param yangResourceIds list of yang resource ids
- */
- void insertSchemaSetIdYangResourceId(final Integer schemaSetId, final List<Integer> yangResourceIds);
-
-}
diff --git a/cps-ri/src/main/java/org/onap/cps/ri/repository/SchemaSetYangResourceRepositoryImpl.java b/cps-ri/src/main/java/org/onap/cps/ri/repository/SchemaSetYangResourceRepositoryImpl.java
deleted file mode 100644
index 989809af5b..0000000000
--- a/cps-ri/src/main/java/org/onap/cps/ri/repository/SchemaSetYangResourceRepositoryImpl.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Copyright (C) 2021-2023 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.cps.ri.repository;
-
-import jakarta.persistence.EntityManager;
-import jakarta.persistence.PersistenceContext;
-import java.sql.PreparedStatement;
-import java.util.List;
-import org.hibernate.Session;
-import org.springframework.transaction.annotation.Transactional;
-
-@Transactional
-public class SchemaSetYangResourceRepositoryImpl implements SchemaSetYangResourceRepository {
-
- private static final int MAX_INSERT_BATCH_SIZE = 100;
-
- @PersistenceContext
- private EntityManager entityManager;
-
- @Override
- public void insertSchemaSetIdYangResourceId(final Integer schemaSetId, final List<Integer> yangResourceIds) {
- final Session session = entityManager.unwrap(Session.class);
- session.doWork(connection -> {
- try (PreparedStatement preparedStatement = connection.prepareStatement(
- "INSERT INTO SCHEMA_SET_YANG_RESOURCES (SCHEMA_SET_ID, YANG_RESOURCE_ID) VALUES ( ?, ?)")) {
- int sqlQueryCount = 1;
- for (final int yangResourceId : yangResourceIds) {
- preparedStatement.setInt(1, schemaSetId);
- preparedStatement.setInt(2, yangResourceId);
- preparedStatement.addBatch();
- if (sqlQueryCount % MAX_INSERT_BATCH_SIZE == 0 || sqlQueryCount == yangResourceIds.size()) {
- preparedStatement.executeBatch();
- }
- sqlQueryCount++;
- }
- }
- });
- }
-}
-
diff --git a/cps-ri/src/main/java/org/onap/cps/ri/repository/YangResourceNativeRepository.java b/cps-ri/src/main/java/org/onap/cps/ri/repository/YangResourceNativeRepository.java
deleted file mode 100644
index 2875511c1e..0000000000
--- a/cps-ri/src/main/java/org/onap/cps/ri/repository/YangResourceNativeRepository.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Copyright (C) 2022-2023 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.cps.ri.repository;
-
-import java.util.Collection;
-import java.util.List;
-import org.onap.cps.api.model.ModuleReference;
-
-public interface YangResourceNativeRepository {
-
- List<Integer> getResourceIdsByModuleReferences(Collection<ModuleReference> moduleReferences);
-
-}
diff --git a/cps-ri/src/main/java/org/onap/cps/ri/repository/YangResourceNativeRepositoryImpl.java b/cps-ri/src/main/java/org/onap/cps/ri/repository/YangResourceNativeRepositoryImpl.java
deleted file mode 100644
index 34f1ee362a..0000000000
--- a/cps-ri/src/main/java/org/onap/cps/ri/repository/YangResourceNativeRepositoryImpl.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Copyright (C) 2022-2023 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.cps.ri.repository;
-
-import jakarta.persistence.EntityManager;
-import jakarta.persistence.PersistenceContext;
-import jakarta.persistence.Query;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.StringJoiner;
-import lombok.extern.slf4j.Slf4j;
-import org.hibernate.type.StandardBasicTypes;
-import org.onap.cps.api.model.ModuleReference;
-import org.springframework.stereotype.Repository;
-import org.springframework.transaction.annotation.Transactional;
-
-@Slf4j
-@Repository
-public class YangResourceNativeRepositoryImpl implements YangResourceNativeRepository {
-
- @PersistenceContext
- private EntityManager entityManager;
-
- @Override
- @Transactional
- public List<Integer> getResourceIdsByModuleReferences(final Collection<ModuleReference> moduleReferences) {
- if (moduleReferences.isEmpty()) {
- return Collections.emptyList();
- }
- final Query query = entityManager.createNativeQuery(getCombinedSelectSqlQuery(moduleReferences))
- .unwrap(org.hibernate.query.NativeQuery.class)
- .addScalar("id", StandardBasicTypes.INTEGER);
- final List<Integer> yangResourceIds = query.getResultList();
- if (yangResourceIds.size() != moduleReferences.size()) {
- log.warn("ModuleReferences size : {} and QueryResult size : {}", moduleReferences.size(),
- yangResourceIds.size());
- }
- return yangResourceIds;
- }
-
- private String getCombinedSelectSqlQuery(final Collection<ModuleReference> moduleReferences) {
- final StringJoiner sqlQueryJoiner = new StringJoiner(" UNION ALL ");
- moduleReferences.forEach(moduleReference ->
- sqlQueryJoiner.add(String.format("SELECT id FROM yang_resource WHERE module_name='%s' and revision='%s'",
- moduleReference.getModuleName(),
- moduleReference.getRevision()))
- );
- return sqlQueryJoiner.toString();
- }
-}
diff --git a/cps-ri/src/main/java/org/onap/cps/ri/repository/YangResourceRepository.java b/cps-ri/src/main/java/org/onap/cps/ri/repository/YangResourceRepository.java
index 628502f846..e36e376bc6 100644
--- a/cps-ri/src/main/java/org/onap/cps/ri/repository/YangResourceRepository.java
+++ b/cps-ri/src/main/java/org/onap/cps/ri/repository/YangResourceRepository.java
@@ -32,8 +32,10 @@ import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
-public interface YangResourceRepository extends JpaRepository<YangResourceEntity, Integer>,
- YangResourceNativeRepository, SchemaSetYangResourceRepository {
+public interface YangResourceRepository extends JpaRepository<YangResourceEntity, Integer> {
+
+ YangResourceEntity findByModuleNameAndRevision(@Param("moduleName") String moduleName,
+ @Param("revision") String revision);
List<YangResourceEntity> findAllByChecksumIn(Collection<String> checksums);
@@ -88,10 +90,6 @@ public interface YangResourceRepository extends JpaRepository<YangResourceEntity
@Param("moduleName") String moduleName, @Param("revision") String revision);
@Modifying
- @Query(value = "DELETE FROM schema_set_yang_resources WHERE schema_set_id = :schemaSetId", nativeQuery = true)
- void deleteSchemaSetYangResourceForSchemaSetId(@Param("schemaSetId") int schemaSetId);
-
- @Modifying
@Query(value = """
DELETE FROM yang_resource WHERE NOT EXISTS (SELECT 1 FROM schema_set_yang_resources
WHERE schema_set_yang_resources.yang_resource_id = yang_resource.id)
diff --git a/cps-ri/src/test/groovy/org/onap/cps/ri/CpsModulePersistenceServiceImplSpec.groovy b/cps-ri/src/test/groovy/org/onap/cps/ri/CpsModulePersistenceServiceImplSpec.groovy
index 2915bc8e8c..9abfdbeb33 100644
--- a/cps-ri/src/test/groovy/org/onap/cps/ri/CpsModulePersistenceServiceImplSpec.groovy
+++ b/cps-ri/src/test/groovy/org/onap/cps/ri/CpsModulePersistenceServiceImplSpec.groovy
@@ -78,8 +78,8 @@ class CpsModulePersistenceServiceImplSpec extends Specification {
and: 'persisting yang resource raises db constraint exception (in case of concurrent requests for example)'
mockYangResourceRepository.saveAll(_) >> { throw dbException }
when: 'attempt to store schema set '
- def newYangResourcesNameToContentMap = [(yangResourceName):yangResourceContent]
- objectUnderTest.storeSchemaSet('my-dataspace', 'my-schema-set', newYangResourcesNameToContentMap)
+ def newYangResourceContentPerName = [(yangResourceName):yangResourceContent]
+ objectUnderTest.createSchemaSet('my-dataspace', 'my-schema-set', newYangResourceContentPerName)
then: 'an #expectedThrownException is thrown'
def e = thrown(expectedThrownException)
assert e.getMessage().contains(expectedThrownExceptionMessage)
@@ -96,7 +96,7 @@ class CpsModulePersistenceServiceImplSpec extends Specification {
def schemaSetEntity = new SchemaSetEntity(id: 1)
mockSchemaSetRepository.getByDataspaceAndName(_, _) >> schemaSetEntity
when: 'schema set update is requested'
- objectUnderTest.updateSchemaSetFromModules('my-dataspace', 'my-schemaset', [:], [new ModuleReference('some module name', 'some revision name')])
+ objectUnderTest.updateSchemaSetFromNewAndExistingModules('my-dataspace', 'my-schemaset', [:], [new ModuleReference('some module name', 'some revision name')])
then: 'no exception is thrown '
noExceptionThrown()
}
diff --git a/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java b/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java
index 345bc8825b..41713746b7 100644
--- a/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java
+++ b/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java
@@ -314,13 +314,13 @@ public interface CpsDataService {
* @param dataspaceName source dataspace name
* @param sourceAnchorName source anchor name
* @param xpath xpath
- * @param yangResourcesNameToContentMap YANG resources (files) map where key is a name and value is content
+ * @param yangResourceContentPerName YANG resources (files) map where key is a name and value is content
* @param targetData target data to be compared in JSON string format
* @param fetchDescendantsOption defines the scope of data to fetch: defaulted to INCLUDE_ALL_DESCENDANTS
* @return list containing {@link DeltaReport} objects
*/
List<DeltaReport> getDeltaByDataspaceAnchorAndPayload(String dataspaceName, String sourceAnchorName, String xpath,
- Map<String, String> yangResourcesNameToContentMap,
+ Map<String, String> yangResourceContentPerName,
String targetData,
FetchDescendantsOption fetchDescendantsOption);
diff --git a/cps-service/src/main/java/org/onap/cps/api/CpsModuleService.java b/cps-service/src/main/java/org/onap/cps/api/CpsModuleService.java
index c6b8c60ab9..2494be4021 100644
--- a/cps-service/src/main/java/org/onap/cps/api/CpsModuleService.java
+++ b/cps-service/src/main/java/org/onap/cps/api/CpsModuleService.java
@@ -40,21 +40,21 @@ public interface CpsModuleService {
*
* @param dataspaceName dataspace name
* @param schemaSetName schema set name
- * @param yangResourcesNameToContentMap yang resources (files) as a mep where key is resource name
+ * @param yangResourceContentPerName yang resources (files) as a mep where key is resource name
* and value is content
*/
void createSchemaSet(String dataspaceName, String schemaSetName,
- Map<String, String> yangResourcesNameToContentMap);
+ Map<String, String> yangResourceContentPerName);
/**
* Create or upgrade a schema set from new modules and existing modules or only existing modules.
- * @param dataspaceName Dataspace name
- * @param schemaSetName schema set name
- * @param newModuleNameToContentMap YANG resources map where key is a module name and value is content
- * @param allModuleReferences All YANG resource module references
+ * @param dataspaceName Dataspace name
+ * @param schemaSetName schema set name
+ * @param yangResourceContentPerName YANG resources map where key is a name and value is content
+ * @param allModuleReferences All YANG resource module references
*/
void createSchemaSetFromModules(String dataspaceName, String schemaSetName,
- Map<String, String> newModuleNameToContentMap,
+ Map<String, String> yangResourceContentPerName,
Collection<ModuleReference> allModuleReferences);
/**
diff --git a/cps-service/src/main/java/org/onap/cps/impl/CpsDataServiceImpl.java b/cps-service/src/main/java/org/onap/cps/impl/CpsDataServiceImpl.java
index 71e6f79bb7..9f70ac9132 100644
--- a/cps-service/src/main/java/org/onap/cps/impl/CpsDataServiceImpl.java
+++ b/cps-service/src/main/java/org/onap/cps/impl/CpsDataServiceImpl.java
@@ -230,7 +230,7 @@ public class CpsDataServiceImpl implements CpsDataService {
@Override
public List<DeltaReport> getDeltaByDataspaceAnchorAndPayload(final String dataspaceName,
final String sourceAnchorName, final String xpath,
- final Map<String, String> yangResourcesNameToContentMap,
+ final Map<String, String> yangResourceContentPerName,
final String targetData,
final FetchDescendantsOption fetchDescendantsOption) {
@@ -243,7 +243,7 @@ public class CpsDataServiceImpl implements CpsDataService {
new ArrayList<>(rebuildSourceDataNodes(xpath, sourceAnchor, sourceDataNodes));
final Collection<DataNode> targetDataNodes =
- new ArrayList<>(buildTargetDataNodes(sourceAnchor, xpath, yangResourcesNameToContentMap, targetData));
+ new ArrayList<>(buildTargetDataNodes(sourceAnchor, xpath, yangResourceContentPerName, targetData));
return cpsDeltaService.getDeltaReports(sourceDataNodesRebuilt, targetDataNodes);
}
@@ -380,12 +380,12 @@ public class CpsDataServiceImpl implements CpsDataService {
}
private Collection<DataNode> buildTargetDataNodes(final Anchor sourceAnchor, final String xpath,
- final Map<String, String> yangResourcesNameToContentMap,
+ final Map<String, String> yangResourceContentPerName,
final String targetData) {
- if (yangResourcesNameToContentMap.isEmpty()) {
+ if (yangResourceContentPerName.isEmpty()) {
return buildDataNodesWithAnchorAndXpath(sourceAnchor, xpath, targetData, ContentType.JSON);
} else {
- return buildDataNodesWithYangResourceAndXpath(yangResourcesNameToContentMap, xpath,
+ return buildDataNodesWithYangResourceAndXpath(yangResourceContentPerName, xpath,
targetData, ContentType.JSON);
}
}
@@ -454,12 +454,12 @@ public class CpsDataServiceImpl implements CpsDataService {
}
private Collection<DataNode> buildDataNodesWithParentNodeXpath(
- final Map<String, String> yangResourcesNameToContentMap, final String xpath,
+ final Map<String, String> yangResourceContentPerName, final String xpath,
final String nodeData, final ContentType contentType) {
if (isRootNodeXpath(xpath)) {
final ContainerNode containerNode = yangParser.parseData(contentType, nodeData,
- yangResourcesNameToContentMap, PARENT_NODE_XPATH_FOR_ROOT_NODE_XPATH);
+ yangResourceContentPerName, PARENT_NODE_XPATH_FOR_ROOT_NODE_XPATH);
final Collection<DataNode> dataNodes = new DataNodeBuilder()
.withContainerNode(containerNode)
.buildCollection();
@@ -470,7 +470,7 @@ public class CpsDataServiceImpl implements CpsDataService {
}
final String normalizedParentNodeXpath = CpsPathUtil.getNormalizedXpath(xpath);
final ContainerNode containerNode =
- yangParser.parseData(contentType, nodeData, yangResourcesNameToContentMap, normalizedParentNodeXpath);
+ yangParser.parseData(contentType, nodeData, yangResourceContentPerName, normalizedParentNodeXpath);
final Collection<DataNode> dataNodes = new DataNodeBuilder()
.withParentNodeXpath(normalizedParentNodeXpath)
.withContainerNode(containerNode)
@@ -496,18 +496,18 @@ public class CpsDataServiceImpl implements CpsDataService {
}
private Collection<DataNode> buildDataNodesWithYangResourceAndXpath(
- final Map<String, String> yangResourcesNameToContentMap, final String xpath,
+ final Map<String, String> yangResourceContentPerName, final String xpath,
final String nodeData, final ContentType contentType) {
if (!isRootNodeXpath(xpath)) {
final String parentNodeXpath = CpsPathUtil.getNormalizedParentXpath(xpath);
if (parentNodeXpath.isEmpty()) {
- return buildDataNodesWithParentNodeXpath(yangResourcesNameToContentMap, ROOT_NODE_XPATH,
+ return buildDataNodesWithParentNodeXpath(yangResourceContentPerName, ROOT_NODE_XPATH,
nodeData, contentType);
}
- return buildDataNodesWithParentNodeXpath(yangResourcesNameToContentMap, parentNodeXpath,
+ return buildDataNodesWithParentNodeXpath(yangResourceContentPerName, parentNodeXpath,
nodeData, contentType);
}
- return buildDataNodesWithParentNodeXpath(yangResourcesNameToContentMap, xpath, nodeData, contentType);
+ return buildDataNodesWithParentNodeXpath(yangResourceContentPerName, xpath, nodeData, contentType);
}
private static boolean isRootNodeXpath(final String xpath) {
diff --git a/cps-service/src/main/java/org/onap/cps/impl/CpsModuleServiceImpl.java b/cps-service/src/main/java/org/onap/cps/impl/CpsModuleServiceImpl.java
index b16abcc31f..e50325c739 100644
--- a/cps-service/src/main/java/org/onap/cps/impl/CpsModuleServiceImpl.java
+++ b/cps-service/src/main/java/org/onap/cps/impl/CpsModuleServiceImpl.java
@@ -57,21 +57,21 @@ public class CpsModuleServiceImpl implements CpsModuleService {
@Timed(value = "cps.module.service.schemaset.create",
description = "Time taken to create (and store) a schemaset")
public void createSchemaSet(final String dataspaceName, final String schemaSetName,
- final Map<String, String> yangResourcesNameToContentMap) {
+ final Map<String, String> yangResourceContentPerName) {
cpsValidator.validateNameCharacters(dataspaceName);
- cpsModulePersistenceService.storeSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap);
+ cpsModulePersistenceService.createSchemaSet(dataspaceName, schemaSetName, yangResourceContentPerName);
final YangTextSchemaSourceSet yangTextSchemaSourceSet =
- timedYangTextSchemaSourceSetBuilder.getYangTextSchemaSourceSet(yangResourcesNameToContentMap);
+ timedYangTextSchemaSourceSetBuilder.getYangTextSchemaSourceSet(yangResourceContentPerName);
yangTextSchemaSourceSetCache.updateCache(dataspaceName, schemaSetName, yangTextSchemaSourceSet);
}
@Override
public void createSchemaSetFromModules(final String dataspaceName, final String schemaSetName,
- final Map<String, String> newModuleNameToContentMap,
+ final Map<String, String> yangResourceContentPerName,
final Collection<ModuleReference> allModuleReferences) {
cpsValidator.validateNameCharacters(dataspaceName);
- cpsModulePersistenceService.storeSchemaSetFromModules(dataspaceName, schemaSetName,
- newModuleNameToContentMap, allModuleReferences);
+ cpsModulePersistenceService.createSchemaSetFromNewAndExistingModules(dataspaceName, schemaSetName,
+ yangResourceContentPerName, allModuleReferences);
}
@Override
@@ -83,7 +83,7 @@ public class CpsModuleServiceImpl implements CpsModuleService {
@Override
public SchemaSet getSchemaSet(final String dataspaceName, final String schemaSetName) {
cpsValidator.validateNameCharacters(dataspaceName);
- final var yangTextSchemaSourceSet = yangTextSchemaSourceSetCache
+ final YangTextSchemaSourceSet yangTextSchemaSourceSet = yangTextSchemaSourceSetCache
.get(dataspaceName, schemaSetName);
return SchemaSet.builder().name(schemaSetName).dataspaceName(dataspaceName)
.moduleReferences(yangTextSchemaSourceSet.getModuleReferences()).build();
@@ -130,15 +130,14 @@ public class CpsModuleServiceImpl implements CpsModuleService {
@Override
public void upgradeSchemaSetFromModules(final String dataspaceName, final String schemaSetName,
- final Map<String, String> newModuleNameToContentMap,
+ final Map<String, String> newYangResourceContentPerModule,
final Collection<ModuleReference> allModuleReferences) {
cpsValidator.validateNameCharacters(dataspaceName);
- cpsModulePersistenceService.updateSchemaSetFromModules(dataspaceName, schemaSetName,
- newModuleNameToContentMap, allModuleReferences);
+ cpsModulePersistenceService.updateSchemaSetFromNewAndExistingModules(dataspaceName, schemaSetName,
+ newYangResourceContentPerModule, allModuleReferences);
yangTextSchemaSourceSetCache.removeFromCache(dataspaceName, schemaSetName);
}
-
@Override
public Collection<ModuleReference> getYangResourceModuleReferences(final String dataspaceName) {
cpsValidator.validateNameCharacters(dataspaceName);
diff --git a/cps-service/src/main/java/org/onap/cps/init/AbstractModelLoader.java b/cps-service/src/main/java/org/onap/cps/init/AbstractModelLoader.java
index e864633f25..a80239039a 100644
--- a/cps-service/src/main/java/org/onap/cps/init/AbstractModelLoader.java
+++ b/cps-service/src/main/java/org/onap/cps/init/AbstractModelLoader.java
@@ -1,6 +1,6 @@
/*
* ============LICENSE_START=======================================================
- * Copyright (C) 2023-2024 Nordix Foundation
+ * Copyright (C) 2023-2025 Nordix Foundation
* Modifications Copyright (C) 2024 TechMahindra Ltd.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -77,7 +77,7 @@ public abstract class AbstractModelLoader implements ModelLoader {
} catch (final AlreadyDefinedException alreadyDefinedException) {
log.warn("Creating new schema set failed as schema set already exists");
} catch (final Exception exception) {
- log.error("Creating schema set failed: {} ", exception.getMessage());
+ log.error("Creating schema set {} failed: {} ", schemaSetName, exception.getMessage());
throw new ModelOnboardingException("Creating schema set failed", exception.getMessage());
}
}
diff --git a/cps-service/src/main/java/org/onap/cps/spi/CpsModulePersistenceService.java b/cps-service/src/main/java/org/onap/cps/spi/CpsModulePersistenceService.java
index 86ad50252d..02e1b6c754 100755
--- a/cps-service/src/main/java/org/onap/cps/spi/CpsModulePersistenceService.java
+++ b/cps-service/src/main/java/org/onap/cps/spi/CpsModulePersistenceService.java
@@ -36,34 +36,37 @@ public interface CpsModulePersistenceService {
/**
* Stores Schema Set.
*
- * @param dataspaceName dataspace name
- * @param schemaSetName schema set name
- * @param yangResourcesNameToContentMap YANG resources (files) map where key is a name and value is content
+ * @param dataspaceName dataspace name
+ * @param schemaSetName schema set name
+ * @param yangResourceContentPerName a map of YANG resources map where key is a name and value is content
*/
- void storeSchemaSet(String dataspaceName, String schemaSetName, Map<String, String> yangResourcesNameToContentMap);
+ void createSchemaSet(String dataspaceName, String schemaSetName, Map<String, String> yangResourceContentPerName);
/**
* Stores a new schema set from new modules and existing modules.
*
- * @param dataspaceName Dataspace name
- * @param schemaSetName Schema set name
- * @param newModuleNameToContentMap YANG resources map where key is a module name and value is content
- * @param allModuleReferences All YANG resources module references
+ * @param dataspaceName dataspace name
+ * @param schemaSetName Schema set name
+ * @param newYangResourceContentPerName a map of only the new YANG resources
+ * the key is a name and value is its content
+ * @param allModuleReferences all YANG resources module references
*/
- void storeSchemaSetFromModules(String dataspaceName, String schemaSetName,
- Map<String, String> newModuleNameToContentMap, Collection<ModuleReference> allModuleReferences);
+ void createSchemaSetFromNewAndExistingModules(String dataspaceName, String schemaSetName,
+ Map<String, String> newYangResourceContentPerName,
+ Collection<ModuleReference> allModuleReferences);
/**
* Update an existing schema set from new modules and existing modules.
*
- * @param dataspaceName Dataspace name
+ * @param dataspaceName dataspace name
* @param schemaSetName Schema set name
- * @param newModuleNameToContentMap YANG resources map where key is a module name and value is content
- * @param allModuleReferences All YANG resources module references
+ * @param newYangResourcesPerName a map of only the new YANG resources
+ * the key is a module name and value is its content
+ * @param allModuleReferences all YANG resources module references
*/
- void updateSchemaSetFromModules(final String dataspaceName, final String schemaSetName,
- final Map<String, String> newModuleNameToContentMap,
- final Collection<ModuleReference> allModuleReferences);
+ void updateSchemaSetFromNewAndExistingModules(String dataspaceName, String schemaSetName,
+ Map<String, String> newYangResourcesPerName,
+ Collection<ModuleReference> allModuleReferences);
/**
* Checks whether a schema set exists in the specified dataspace.
diff --git a/cps-service/src/main/java/org/onap/cps/utils/YangParser.java b/cps-service/src/main/java/org/onap/cps/utils/YangParser.java
index 08f450e2f1..5dfeb2fb3f 100644
--- a/cps-service/src/main/java/org/onap/cps/utils/YangParser.java
+++ b/cps-service/src/main/java/org/onap/cps/utils/YangParser.java
@@ -1,6 +1,6 @@
/*
* ============LICENSE_START=======================================================
- * Copyright (C) 2024 Nordix Foundation.
+ * Copyright (C) 2024-2025 Nordix Foundation.
* Modifications Copyright (C) 2024 TechMahindra Ltd.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -71,17 +71,17 @@ public class YangParser {
/**
* Parses data into (normalized) ContainerNode according to schema context for the given yang resource.
*
- * @param nodeData data string
- * @param yangResourcesNameToContentMap yang resource to content map
- * @return the NormalizedNode object
+ * @param nodeData data string
+ * @param yangResourceContentPerName yang resource content per name
+ * @return the NormalizedNode object
*/
@Timed(value = "cps.utils.yangparser.nodedata.with.parent.with.yangResourceMap.parse",
description = "Time taken to parse node data with a parent")
public ContainerNode parseData(final ContentType contentType,
final String nodeData,
- final Map<String, String> yangResourcesNameToContentMap,
+ final Map<String, String> yangResourceContentPerName,
final String parentNodeXpath) {
- final SchemaContext schemaContext = getSchemaContext(yangResourcesNameToContentMap);
+ final SchemaContext schemaContext = getSchemaContext(yangResourceContentPerName);
return yangParserHelper.parseData(contentType, nodeData, schemaContext, parentNodeXpath, VALIDATE_AND_PARSE);
}
@@ -114,8 +114,8 @@ public class YangParser {
anchor.getSchemaSetName()).getSchemaContext();
}
- private SchemaContext getSchemaContext(final Map<String, String> yangResourcesNameToContentMap) {
- return timedYangTextSchemaSourceSetBuilder.getYangTextSchemaSourceSet(yangResourcesNameToContentMap)
+ private SchemaContext getSchemaContext(final Map<String, String> yangResourceContentPerName) {
+ return timedYangTextSchemaSourceSetBuilder.getYangTextSchemaSourceSet(yangResourceContentPerName)
.getSchemaContext();
}
diff --git a/cps-service/src/main/java/org/onap/cps/yang/TimedYangTextSchemaSourceSetBuilder.java b/cps-service/src/main/java/org/onap/cps/yang/TimedYangTextSchemaSourceSetBuilder.java
index 013faff0c8..9b2ac944dc 100644
--- a/cps-service/src/main/java/org/onap/cps/yang/TimedYangTextSchemaSourceSetBuilder.java
+++ b/cps-service/src/main/java/org/onap/cps/yang/TimedYangTextSchemaSourceSetBuilder.java
@@ -30,8 +30,8 @@ public class TimedYangTextSchemaSourceSetBuilder {
@Timed(value = "cps.yangtextschemasourceset.build",
description = "Time taken to build a yang text schema source set")
public YangTextSchemaSourceSet getYangTextSchemaSourceSet(
- final Map<String, String> yangResourcesNameToContentMap) {
- return YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap);
+ final Map<String, String> yangResourceContentPerName) {
+ return YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName);
}
}
diff --git a/cps-service/src/test/groovy/org/onap/cps/impl/CpsDataServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/impl/CpsDataServiceImplSpec.groovy
index 34d2b7564a..abcda6c696 100644
--- a/cps-service/src/test/groovy/org/onap/cps/impl/CpsDataServiceImplSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/impl/CpsDataServiceImplSpec.groovy
@@ -248,10 +248,10 @@ class CpsDataServiceImplSpec extends Specification {
def 'Get delta between anchor and payload with user provided schema #scenario'() {
given: 'user provided schema set '
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('bookstore.yang')
- setupSchemaSetMocksForDelta(yangResourcesNameToContentMap)
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap('bookstore.yang')
+ setupSchemaSetMocksForDelta(yangResourceContentPerName)
when: 'attempt to get delta between an anchor and a JSON payload'
- objectUnderTest.getDeltaByDataspaceAnchorAndPayload(dataspaceName, anchorName, xpath, yangResourcesNameToContentMap, jsonData, FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS)
+ objectUnderTest.getDeltaByDataspaceAnchorAndPayload(dataspaceName, anchorName, xpath, yangResourceContentPerName, jsonData, FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS)
then: 'dataspacename and anchor names are validated'
1 * mockCpsValidator.validateNameCharacters(['some-dataspace', 'some-anchor'])
and: 'source data nodes are fetched using appropriate persistence layer method'
@@ -285,10 +285,10 @@ class CpsDataServiceImplSpec extends Specification {
def 'Delta between anchor and payload error scenario #scenario'() {
given: 'schema set for given anchor and dataspace references bookstore model'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('bookstore.yang')
- setupSchemaSetMocksForDelta(yangResourcesNameToContentMap)
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap('bookstore.yang')
+ setupSchemaSetMocksForDelta(yangResourceContentPerName)
when: 'attempt to get delta between anchor and payload'
- objectUnderTest.getDeltaByDataspaceAnchorAndPayload(dataspaceName, anchorName, xpath, yangResourcesNameToContentMap, jsonData, FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS)
+ objectUnderTest.getDeltaByDataspaceAnchorAndPayload(dataspaceName, anchorName, xpath, yangResourceContentPerName, jsonData, FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS)
then: 'expected exception is thrown'
thrown(DataValidationException)
where: 'following parameters were used'
@@ -654,11 +654,11 @@ class CpsDataServiceImplSpec extends Specification {
mockYangTextSchemaSourceSet.getSchemaContext() >> schemaContext
}
- def setupSchemaSetMocksForDelta(Map<String, String> yangResourcesNameToContentMap) {
+ def setupSchemaSetMocksForDelta(Map<String, String> yangResourceContentPerName) {
def mockYangTextSchemaSourceSet = Mock(YangTextSchemaSourceSet)
- mockTimedYangTextSchemaSourceSetBuilder.getYangTextSchemaSourceSet(yangResourcesNameToContentMap) >> mockYangTextSchemaSourceSet
+ mockTimedYangTextSchemaSourceSetBuilder.getYangTextSchemaSourceSet(yangResourceContentPerName) >> mockYangTextSchemaSourceSet
mockYangTextSchemaSourceSetCache.get(_, _) >> mockYangTextSchemaSourceSet
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName).getSchemaContext()
mockYangTextSchemaSourceSet.getSchemaContext() >> schemaContext
}
diff --git a/cps-service/src/test/groovy/org/onap/cps/impl/CpsModuleServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/impl/CpsModuleServiceImplSpec.groovy
index 041ce605c4..48db53c882 100644
--- a/cps-service/src/test/groovy/org/onap/cps/impl/CpsModuleServiceImplSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/impl/CpsModuleServiceImplSpec.groovy
@@ -56,7 +56,7 @@ class CpsModuleServiceImplSpec extends Specification {
when: 'Create schema set method is invoked'
objectUnderTest.createSchemaSet('someDataspace', 'schemaSetName@with Special!Characters', [:])
then: 'Parameters are validated and processing is delegated to persistence service'
- 1 * mockCpsModulePersistenceService.storeSchemaSet('someDataspace', 'schemaSetName@with Special!Characters', [:])
+ 1 * mockCpsModulePersistenceService.createSchemaSet('someDataspace', 'schemaSetName@with Special!Characters', [:])
and: 'the CpsValidator is called on the dataspaceName'
1 * mockCpsValidator.validateNameCharacters('someDataspace')
}
@@ -68,16 +68,16 @@ class CpsModuleServiceImplSpec extends Specification {
when: 'create schema set from modules method is invoked'
objectUnderTest.createSchemaSetFromModules('someDataspaceName', 'someSchemaSetName', [newModule: 'newContent'], listOfExistingModulesModuleReference)
then: 'processing is delegated to persistence service'
- 1 * mockCpsModulePersistenceService.storeSchemaSetFromModules('someDataspaceName', 'someSchemaSetName', [newModule: 'newContent'], listOfExistingModulesModuleReference)
+ 1 * mockCpsModulePersistenceService.createSchemaSetFromNewAndExistingModules('someDataspaceName', 'someSchemaSetName', [newModule: 'newContent'], listOfExistingModulesModuleReference)
and: 'the CpsValidator is called on the dataspaceName'
1 * mockCpsValidator.validateNameCharacters('someDataspaceName')
}
def 'Create schema set from invalid resources'() {
given: 'Invalid yang resource as name-to-content map'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('invalid.yang')
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap('invalid.yang')
when: 'Create schema set method is invoked'
- objectUnderTest.createSchemaSet('someDataspace', 'someSchemaSet', yangResourcesNameToContentMap)
+ objectUnderTest.createSchemaSet('someDataspace', 'someSchemaSet', yangResourceContentPerName)
then: 'Model validation exception is thrown'
thrown(ModelValidationException)
}
@@ -85,7 +85,7 @@ class CpsModuleServiceImplSpec extends Specification {
def 'Create schema set with duplicate yang resource exception in persistence layer.'() {
given: 'the persistence layer throws an duplicated yang resource exception'
def originalException = new DuplicatedYangResourceException('name', '123', null)
- mockCpsModulePersistenceService.storeSchemaSet(*_) >> { throw originalException }
+ mockCpsModulePersistenceService.createSchemaSet(*_) >> { throw originalException }
when: 'attempt to create schema set'
objectUnderTest.createSchemaSet('someDataspace', 'someSchemaSet', [:])
then: 'the same duplicated yang resource exception is thrown (up)'
@@ -98,9 +98,9 @@ class CpsModuleServiceImplSpec extends Specification {
def 'Get schema set by name and dataspace.'() {
given: 'an already present schema set'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('bookstore.yang')
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap('bookstore.yang')
and: 'yang resource cache returns the expected schema set'
- mockYangTextSchemaSourceSetCache.get('someDataspace', 'schemaSetName@with Special!Characters') >> YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)
+ mockYangTextSchemaSourceSetCache.get('someDataspace', 'schemaSetName@with Special!Characters') >> YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName)
when: 'get schema set method is invoked'
def result = objectUnderTest.getSchemaSet('someDataspace', 'schemaSetName@with Special!Characters')
then: 'the correct schema set is returned'
diff --git a/cps-service/src/test/groovy/org/onap/cps/impl/E2ENetworkSliceSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/impl/E2ENetworkSliceSpec.groovy
index 8171209947..db5b4f104e 100755
--- a/cps-service/src/test/groovy/org/onap/cps/impl/E2ENetworkSliceSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/impl/E2ENetworkSliceSpec.groovy
@@ -1,6 +1,6 @@
/*
* ============LICENSE_START=======================================================
- * Copyright (C) 2021-2024 Nordix Foundation.
+ * Copyright (C) 2021-2025 Nordix Foundation.
* Modifications Copyright (C) 2021-2022 Bell Canada.
* Modifications Copyright (C) 2021 Pantheon.tech
* Modifications Copyright (C) 2022-2024 TechMahindra Ltd.
@@ -66,32 +66,32 @@ class E2ENetworkSliceSpec extends Specification {
def 'E2E model can be parsed by CPS.'() {
given: 'Valid yang resource as name-to-content map'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap(
'ietf/ietf-inet-types@2013-07-15.yang',
'ietf/ietf-yang-types@2013-07-15.yang',
'e2e/basic/ran-network2020-08-06.yang'
)
when: 'Create schema set method is invoked'
- cpsModuleServiceImpl.createSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)
+ cpsModuleServiceImpl.createSchemaSet(dataspaceName, schemaSetName, yangResourceContentPerName)
then: 'Parameters are validated and processing is delegated to persistence service'
- 1 * mockModuleStoreService.storeSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)
+ 1 * mockModuleStoreService.createSchemaSet(dataspaceName, schemaSetName, yangResourceContentPerName)
}
def 'E2E Coverage Area-Tracking Area & TA-Cell mapping model can be parsed by CPS.'() {
given: 'Valid yang resource as name-to-content map'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap(
'e2e/basic/cps-cavsta-onap-internal2021-01-28.yang')
when: 'Create schema set method is invoked'
- cpsModuleServiceImpl.createSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)
+ cpsModuleServiceImpl.createSchemaSet(dataspaceName, schemaSetName, yangResourceContentPerName)
then: 'Parameters are validated and processing is delegated to persistence service'
- 1 * mockModuleStoreService.storeSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)
+ 1 * mockModuleStoreService.createSchemaSet(dataspaceName, schemaSetName, yangResourceContentPerName)
}
def 'E2E Coverage Area-Tracking Area & TA-Cell mapping data can be parsed by CPS.'() {
given: 'Valid yang resource as name-to-content map'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap(
'e2e/basic/cps-cavsta-onap-internal2021-01-28.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName).getSchemaContext()
def dataNodeStored
and : 'a valid json is provided for the model'
def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-Cavsta-Data.txt')
@@ -99,7 +99,7 @@ class E2ENetworkSliceSpec extends Specification {
mockCpsAnchorService.getAnchor(dataspaceName, anchorName) >>
new Anchor().builder().name(anchorName).schemaSetName(schemaSetName).dataspaceName(dataspaceName).build()
mockYangTextSchemaSourceSetCache.get(dataspaceName, schemaSetName) >>
- YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)
+ YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName)
mockModuleStoreService.getYangSchemaResources(dataspaceName, schemaSetName) >> schemaContext
when: 'saveData method is invoked'
cpsDataServiceImpl.saveData(dataspaceName, anchorName, jsonData, noTimestamp)
@@ -123,15 +123,15 @@ class E2ENetworkSliceSpec extends Specification {
def 'E2E Coverage Area-Tracking Area & TA-Cell mapping data can be parsed for RAN inventory.'() {
def dataNodeStored
given: 'valid yang resource as name-to-content map'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap(
'e2e/basic/cps-ran-inventory@2021-01-28.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName).getSchemaContext()
and : 'a valid json is provided for the model'
def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-ran-inventory-data.json')
and : 'all the further dependencies are mocked '
mockCpsAnchorService.getAnchor('someDataspace', 'someAnchor') >>
new Anchor().builder().name('someAnchor').schemaSetName('someSchemaSet').dataspaceName(dataspaceName).build()
- mockYangTextSchemaSourceSetCache.get('someDataspace', 'someSchemaSet') >> YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)
+ mockYangTextSchemaSourceSetCache.get('someDataspace', 'someSchemaSet') >> YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName)
mockModuleStoreService.getYangSchemaResources('someDataspace', 'someSchemaSet') >> schemaContext
when: 'saveData method is invoked'
cpsDataServiceImpl.saveData('someDataspace', 'someAnchor', jsonData, noTimestamp)
@@ -161,7 +161,7 @@ class E2ENetworkSliceSpec extends Specification {
def 'E2E RAN Schema Model.'(){
given: 'yang resources'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap(
'ietf/ietf-inet-types@2013-07-15.yang',
'ietf/ietf-yang-types@2013-07-15.yang',
'e2e/basic/cps-ran-schema-model@2021-05-19.yang'
@@ -169,7 +169,7 @@ class E2ENetworkSliceSpec extends Specification {
and : 'json data'
def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-ran-schema-model-data-v4.json')
expect: 'schema context is built with no exception indicating the schema set being valid '
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName).getSchemaContext()
and: 'data is parsed with no exception indicating the model match'
new YangParserHelper().parseData(ContentType.JSON, jsonData, schemaContext, '', false) != null
}
diff --git a/cps-service/src/test/groovy/org/onap/cps/impl/YangTextSchemaSourceSetCacheSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/impl/YangTextSchemaSourceSetCacheSpec.groovy
index 6694e7712f..e71782ce4f 100644
--- a/cps-service/src/test/groovy/org/onap/cps/impl/YangTextSchemaSourceSetCacheSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/impl/YangTextSchemaSourceSetCacheSpec.groovy
@@ -65,13 +65,13 @@ class YangTextSchemaSourceSetCacheSpec extends Specification {
given: 'cache is empty'
yangResourceCacheImpl.clear()
and: 'a schema set exists'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('bookstore.yang')
- def expectedYangTextSchemaSourceSet = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap('bookstore.yang')
+ def expectedYangTextSchemaSourceSet = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName)
when: 'schema-set information is asked'
def result = objectUnderTest.get('my-dataspace', 'my-schemaset')
then: 'information fetched from cps module persistence'
1 * mockModuleStoreService.getYangSchemaResources('my-dataspace', 'my-schemaset')
- >> yangResourcesNameToContentMap
+ >> yangResourceContentPerName
and: 'stored in the cache'
def cachedValue = getCachedValue('my-dataspace', 'my-schemaset')
assert cachedValue.getModuleReferences() == expectedYangTextSchemaSourceSet.getModuleReferences()
@@ -83,8 +83,8 @@ class YangTextSchemaSourceSetCacheSpec extends Specification {
def 'Cache Hit: Respond from cache'() {
given: 'a schema set exists'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('bookstore.yang')
- def expectedYangTextSchemaSourceSet = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap('bookstore.yang')
+ def expectedYangTextSchemaSourceSet = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName)
and: 'stored in cache'
yangResourceCacheImpl.put(getCacheKey('my-dataspace', 'my-schemaset'), expectedYangTextSchemaSourceSet)
when: 'schema-set information is asked'
@@ -97,8 +97,8 @@ class YangTextSchemaSourceSetCacheSpec extends Specification {
def 'Cache Update: when no data exist in the cache'() {
given: 'a schema set exists'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('bookstore.yang')
- def yangTextSchemaSourceSet = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap('bookstore.yang')
+ def yangTextSchemaSourceSet = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName)
when: 'cache is updated'
objectUnderTest.updateCache('my-dataspace', 'my-schemaset', yangTextSchemaSourceSet)
then: 'cached value is same as expected'
@@ -110,8 +110,8 @@ class YangTextSchemaSourceSetCacheSpec extends Specification {
def 'Cache Evict:with invalid #scenario'() {
given: 'a schema set exists in cache'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('bookstore.yang')
- def yangTextSchemaSourceSet = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap('bookstore.yang')
+ def yangTextSchemaSourceSet = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName)
yangResourceCacheImpl.put(getCacheKey('my-dataspace', 'my-schemaset'), yangTextSchemaSourceSet)
def cachedValue = getCachedValue('my-dataspace', 'my-schemaset')
assert cachedValue.getModuleReferences() == yangTextSchemaSourceSet.getModuleReferences()
diff --git a/cps-service/src/test/groovy/org/onap/cps/utils/YangParserSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/utils/YangParserSpec.groovy
index a2fadb7e9f..cb7a16cb84 100644
--- a/cps-service/src/test/groovy/org/onap/cps/utils/YangParserSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/utils/YangParserSpec.groovy
@@ -40,7 +40,7 @@ class YangParserSpec extends Specification {
def objectUnderTest = new YangParser(mockYangParserHelper, mockYangTextSchemaSourceSetCache, mockTimedYangTextSchemaSourceSetBuilder)
def anchor = new Anchor(dataspaceName: 'my dataspace', schemaSetName: 'my schema')
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('bookstore.yang')
+ def yangResourceContentPerName = TestUtils.getYangResourcesAsMap('bookstore.yang')
def mockYangTextSchemaSourceSet = Mock(YangTextSchemaSourceSet)
def mockSchemaContext = Mock(SchemaContext)
def containerNodeFromYangUtils = Mock(ContainerNode)
@@ -91,9 +91,9 @@ class YangParserSpec extends Specification {
def 'Parsing data with yang resource to context map.'() {
given: 'the schema source set for the yang resource map is returned'
- mockTimedYangTextSchemaSourceSetBuilder.getYangTextSchemaSourceSet(yangResourcesNameToContentMap) >> mockYangTextSchemaSourceSet
+ mockTimedYangTextSchemaSourceSetBuilder.getYangTextSchemaSourceSet(yangResourceContentPerName) >> mockYangTextSchemaSourceSet
when: 'parsing some json data'
- def result = objectUnderTest.parseData(ContentType.JSON, 'some json', yangResourcesNameToContentMap, noParent)
+ def result = objectUnderTest.parseData(ContentType.JSON, 'some json', yangResourceContentPerName, noParent)
then: 'the yang parser helper always returns a container node'
1 * mockYangParserHelper.parseData(ContentType.JSON, 'some json', mockSchemaContext, noParent, validateAndParse) >> containerNodeFromYangUtils
and: 'the result is the same container node as return from yang utils'
diff --git a/docker-compose/config/grafana/cps-database-pool.json b/docker-compose/config/grafana/cps-database-pool.json
new file mode 100644
index 0000000000..37782af71a
--- /dev/null
+++ b/docker-compose/config/grafana/cps-database-pool.json
@@ -0,0 +1,886 @@
+{
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": {
+ "type": "datasource",
+ "uid": "grafana"
+ },
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "type": "dashboard"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "enable": true,
+ "expr": "resets(process_uptime_seconds{application=\"$application\", region=\"$region\", instance=\"$instance\"}[1m]) > 0",
+ "hide": false,
+ "iconColor": "rgba(255, 96, 96, 1)",
+ "limit": 100,
+ "name": "Restart Detection",
+ "showIn": 0,
+ "step": "1m",
+ "tagKeys": "restart-tag",
+ "tags": [],
+ "textFormat": "uptime reset",
+ "titleFormat": "Restart",
+ "type": "tags"
+ }
+ ]
+ },
+ "description": "HikariCP & JDBC Dashboard (Micrometer.io)",
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "graphTooltip": 1,
+ "id": 16,
+ "links": [],
+ "panels": [
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 4,
+ "panels": [],
+ "title": "JDBC Connections",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "mappings": [
+ {
+ "options": {
+ "match": "null",
+ "result": {
+ "text": "N/A"
+ }
+ },
+ "type": "special"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 8,
+ "x": 0,
+ "y": 1
+ },
+ "id": 6,
+ "maxDataPoints": 100,
+ "options": {
+ "colorMode": "none",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.3.1",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "expr": "jdbc_connections_min{application=\"$application\", region=~\"$region\", instance=~\"$instance\", name=~\"$jdbc_connection_name\"}",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "refId": "A"
+ }
+ ],
+ "title": "Min",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "rgb(31, 120, 193)",
+ "mode": "fixed"
+ },
+ "mappings": [
+ {
+ "options": {
+ "match": "null",
+ "result": {
+ "text": "N/A"
+ }
+ },
+ "type": "special"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 8,
+ "x": 8,
+ "y": 1
+ },
+ "id": 7,
+ "maxDataPoints": 100,
+ "options": {
+ "colorMode": "none",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.3.1",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "expr": "jdbc_connections_active{application=\"$application\", region=~\"$region\", instance=~\"$instance\", name=~\"$jdbc_connection_name\"}",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "refId": "A"
+ }
+ ],
+ "title": "Active",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "mappings": [
+ {
+ "options": {
+ "match": "null",
+ "result": {
+ "text": "N/A"
+ }
+ },
+ "type": "special"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 8,
+ "x": 16,
+ "y": 1
+ },
+ "id": 8,
+ "maxDataPoints": 100,
+ "options": {
+ "colorMode": "none",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.3.1",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "expr": "jdbc_connections_max{application=\"$application\", region=~\"$region\", instance=~\"$instance\", name=~\"$jdbc_connection_name\"}",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "refId": "A"
+ }
+ ],
+ "title": "Max",
+ "type": "stat"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 4
+ },
+ "id": 2,
+ "panels": [],
+ "title": "Hikari Connections",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "short"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 12,
+ "w": 21,
+ "x": 0,
+ "y": 5
+ },
+ "id": 10,
+ "options": {
+ "legend": {
+ "calcs": [
+ "max",
+ "min"
+ ],
+ "displayMode": "table",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.3.1",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "expr": "hikaricp_connections_active{application=\"$application\", region=~\"$region\", instance=~\"$instance\", pool=~\"$hikaricp_pool_name\"}",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "legendFormat": "Active connections",
+ "refId": "C"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "expr": "hikaricp_connections_idle{application=\"$application\", region=~\"$region\", instance=~\"$instance\", pool=~\"$hikaricp_pool_name\"}",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "legendFormat": "Idle connections",
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "expr": "hikaricp_connections_pending{application=\"$application\", region=~\"$region\", instance=~\"$instance\", pool=~\"$hikaricp_pool_name\"}",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "legendFormat": "Pending threads",
+ "refId": "B"
+ }
+ ],
+ "title": "Connections",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "mappings": [
+ {
+ "options": {
+ "match": "null",
+ "result": {
+ "text": "N/A"
+ }
+ },
+ "type": "special"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 21,
+ "y": 5
+ },
+ "id": 12,
+ "maxDataPoints": 100,
+ "options": {
+ "colorMode": "none",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.3.1",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "expr": "hikaricp_connections_max{application=\"$application\", region=~\"$region\", instance=~\"$instance\", pool=~\"$hikaricp_pool_name\"}",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "refId": "A"
+ }
+ ],
+ "title": "Max",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "mappings": [
+ {
+ "options": {
+ "match": "null",
+ "result": {
+ "text": "N/A"
+ }
+ },
+ "type": "special"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 21,
+ "y": 9
+ },
+ "id": 13,
+ "maxDataPoints": 100,
+ "options": {
+ "colorMode": "none",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.3.1",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "expr": "hikaricp_connections_min{application=\"$application\", region=~\"$region\", instance=~\"$instance\", pool=~\"$hikaricp_pool_name\"}",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "refId": "A"
+ }
+ ],
+ "title": "Min",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "mappings": [
+ {
+ "options": {
+ "match": "null",
+ "result": {
+ "text": "N/A"
+ }
+ },
+ "type": "special"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 21,
+ "y": 13
+ },
+ "id": 17,
+ "maxDataPoints": 100,
+ "options": {
+ "colorMode": "none",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.3.1",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "expr": "hikaricp_connections_timeout_total{application=\"$application\", region=~\"$region\", instance=~\"$instance\", pool=~\"$hikaricp_pool_name\"}",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "legendFormat": "",
+ "refId": "A"
+ }
+ ],
+ "title": "Total Timeout",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 10,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "dtdurations"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 24,
+ "x": 0,
+ "y": 17
+ },
+ "id": 16,
+ "options": {
+ "legend": {
+ "calcs": [
+ "max",
+ "min"
+ ],
+ "displayMode": "table",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "multi",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.3.1",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "expr": "irate(hikaricp_connections_usage_seconds_sum{application=\"$application\", region=~\"$region\", instance=~\"$instance\", pool=~\"$hikaricp_pool_name\"}[5m]) / irate(hikaricp_connections_usage_seconds_count{application=\"$application\", region=~\"$region\", instance=~\"$instance\", pool=~\"$hikaricp_pool_name\"}[5m])",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "legendFormat": "Usage time",
+ "refId": "C"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "expr": "irate(hikaricp_connections_creation_seconds_sum{application=\"$application\", region=~\"$region\", instance=~\"$instance\", pool=~\"$hikaricp_pool_name\"}[5m]) / irate(hikaricp_connections_creation_seconds_count{application=\"$application\", region=~\"$region\", instance=~\"$instance\", pool=~\"$hikaricp_pool_name\"}[5m])",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "legendFormat": "Creation time",
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "PBFA97CFB590B2093"
+ },
+ "expr": "irate(hikaricp_connections_acquire_seconds_sum{application=\"$application\", region=~\"$region\", instance=~\"$instance\", pool=~\"$hikaricp_pool_name\"}[5m]) / irate(hikaricp_connections_acquire_seconds_count{application=\"$application\", region=~\"$region\", instance=~\"$instance\", pool=~\"$hikaricp_pool_name\"}[5m])",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "legendFormat": "Acquire time",
+ "refId": "B"
+ }
+ ],
+ "title": "Connections Time",
+ "type": "timeseries"
+ }
+ ],
+ "preload": false,
+ "refresh": "5s",
+ "schemaVersion": 40,
+ "tags": [
+ "prometheus",
+ "hikaricp",
+ "micrometer",
+ "spring boot",
+ "jdbc"
+ ],
+ "templating": {
+ "list": [
+ {
+ "current": {
+ "text": "",
+ "value": ""
+ },
+ "datasource": "PBFA97CFB590B2093",
+ "definition": "",
+ "includeAll": false,
+ "label": "Application",
+ "name": "application",
+ "options": [],
+ "query": "label_values(application)",
+ "refresh": 2,
+ "regex": "",
+ "type": "query"
+ },
+ {
+ "current": {
+ "text": "All",
+ "value": "$__all"
+ },
+ "datasource": "PBFA97CFB590B2093",
+ "definition": "",
+ "includeAll": true,
+ "label": "Region",
+ "name": "region",
+ "options": [],
+ "query": "label_values(jdbc_connections_min{application=\"$application\"}, region)",
+ "refresh": 1,
+ "regex": "",
+ "sort": 1,
+ "type": "query"
+ },
+ {
+ "current": {
+ "text": "129.192.80.24:9998",
+ "value": "129.192.80.24:9998"
+ },
+ "datasource": "PBFA97CFB590B2093",
+ "definition": "label_values(jdbc_connections_min{application=\"$application\", region=~\"$region\"}, instance)",
+ "includeAll": true,
+ "label": "Instance",
+ "name": "instance",
+ "options": [],
+ "query": "label_values(jdbc_connections_min{application=\"$application\", region=~\"$region\"}, instance)",
+ "refresh": 2,
+ "regex": "",
+ "sort": 1,
+ "type": "query"
+ },
+ {
+ "current": {
+ "text": "dataSource",
+ "value": "dataSource"
+ },
+ "datasource": "PBFA97CFB590B2093",
+ "definition": "label_values(jdbc_connections_min{application=\"$application\", region=~\"$region\", instance=~\"$instance\"}, name)",
+ "includeAll": false,
+ "label": "JDBC Connection Name",
+ "name": "jdbc_connection_name",
+ "options": [],
+ "query": "label_values(jdbc_connections_min{application=\"$application\", region=~\"$region\", instance=~\"$instance\"}, name)",
+ "refresh": 2,
+ "regex": "",
+ "sort": 1,
+ "type": "query"
+ },
+ {
+ "current": {
+ "text": "CpsDatabasePool",
+ "value": "CpsDatabasePool"
+ },
+ "datasource": "PBFA97CFB590B2093",
+ "definition": "label_values(hikaricp_connections_min{application=\"$application\", region=~\"$region\", instance=~\"$instance\"}, pool)",
+ "includeAll": false,
+ "label": "Hikari Pool Name",
+ "name": "hikaricp_pool_name",
+ "options": [],
+ "query": "label_values(hikaricp_connections_min{application=\"$application\", region=~\"$region\", instance=~\"$instance\"}, pool)",
+ "refresh": 2,
+ "regex": "",
+ "sort": 1,
+ "type": "query"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-1h",
+ "to": "now"
+ },
+ "timepicker": {},
+ "timezone": "",
+ "title": "Cps Database Pool",
+ "uid": "wdV6wx7iz",
+ "version": 1,
+ "weekStart": ""
+} \ No newline at end of file
diff --git a/docker-compose/config/grafana/data-dashboard.json b/docker-compose/config/grafana/data-dashboard.json
index a75e7a59ea..4fbb65ee5b 100644
--- a/docker-compose/config/grafana/data-dashboard.json
+++ b/docker-compose/config/grafana/data-dashboard.json
@@ -19,7 +19,7 @@
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
- "id": 13,
+ "id": 2,
"links": [],
"panels": [
{
@@ -101,7 +101,7 @@
"sort": "none"
}
},
- "pluginVersion": "11.3.1",
+ "pluginVersion": "11.4.0",
"targets": [
{
"disableTextWrap": false,
@@ -197,7 +197,7 @@
"sort": "none"
}
},
- "pluginVersion": "11.3.1",
+ "pluginVersion": "11.4.0",
"targets": [
{
"disableTextWrap": false,
@@ -219,9 +219,9 @@
"refresh": "5s",
"schemaVersion": 40,
"tags": [
- "CPS",
- "NCMP",
- "k6"
+ "ncmp",
+ "data",
+ "api"
],
"templating": {
"list": [
@@ -271,6 +271,6 @@
"timezone": "browser",
"title": "Data REST Interfaces",
"uid": "aeavdgvjyt2iob",
- "version": 5,
+ "version": 1,
"weekStart": ""
} \ No newline at end of file
diff --git a/docker-compose/config/grafana/inventory-dashboard.json b/docker-compose/config/grafana/inventory-dashboard.json
index f6a7e8cbb2..959995fa69 100644
--- a/docker-compose/config/grafana/inventory-dashboard.json
+++ b/docker-compose/config/grafana/inventory-dashboard.json
@@ -18,7 +18,7 @@
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
- "id": 12,
+ "id": 3,
"links": [],
"panels": [
{
@@ -100,7 +100,7 @@
"sort": "none"
}
},
- "pluginVersion": "11.3.1",
+ "pluginVersion": "11.4.0",
"targets": [
{
"disableTextWrap": false,
@@ -196,7 +196,7 @@
"sort": "none"
}
},
- "pluginVersion": "11.3.1",
+ "pluginVersion": "11.4.0",
"targets": [
{
"disableTextWrap": false,
@@ -292,7 +292,7 @@
"sort": "none"
}
},
- "pluginVersion": "11.3.1",
+ "pluginVersion": "11.4.0",
"targets": [
{
"disableTextWrap": false,
@@ -313,9 +313,9 @@
"preload": false,
"schemaVersion": 40,
"tags": [
- "CPS",
- "NCMP",
- "k6"
+ "lcm-state",
+ "inventory",
+ "ncmp"
],
"templating": {
"list": [
@@ -365,6 +365,6 @@
"timezone": "browser",
"title": "Inventory REST Interfaces",
"uid": "beao8xrt6qjnkc",
- "version": 7,
+ "version": 1,
"weekStart": ""
} \ No newline at end of file
diff --git a/docker-compose/config/grafana/jvm-micrometer-dashboard.json b/docker-compose/config/grafana/jvm-micrometer-dashboard.json
index 8f7747c596..9f09d2e2cb 100644
--- a/docker-compose/config/grafana/jvm-micrometer-dashboard.json
+++ b/docker-compose/config/grafana/jvm-micrometer-dashboard.json
@@ -22,6 +22,7 @@
},
"enable": true,
"expr": "resets(process_uptime_seconds{application=\"$application\", instance=\"$instance\"}[1m]) > 0",
+ "hide": false,
"iconColor": "rgba(255, 96, 96, 1)",
"name": "Restart Detection",
"showIn": 0,
@@ -35,17 +36,12 @@
"description": "Dashboard for Micrometer instrumented applications (Java, Spring Boot, Micronaut)",
"editable": true,
"fiscalYearStartMonth": 0,
- "gnetId": 4701,
"graphTooltip": 1,
- "id": 1,
+ "id": 3,
"links": [],
"panels": [
{
"collapsed": false,
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
"gridPos": {
"h": 1,
"w": 24,
@@ -54,15 +50,6 @@
},
"id": 139,
"panels": [],
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
- "refId": "A"
- }
- ],
"title": "Quick Facts",
"type": "row"
},
@@ -73,6 +60,10 @@
},
"fieldConfig": {
"defaults": {
+ "color": {
+ "fixedColor": "green",
+ "mode": "fixed"
+ },
"decimals": 1,
"mappings": [
{
@@ -127,7 +118,7 @@
"textMode": "auto",
"wideLayout": true
},
- "pluginVersion": "11.1.4",
+ "pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
@@ -153,6 +144,10 @@
},
"fieldConfig": {
"defaults": {
+ "color": {
+ "fixedColor": "green",
+ "mode": "fixed"
+ },
"mappings": [
{
"options": {
@@ -206,7 +201,7 @@
"textMode": "auto",
"wideLayout": true
},
- "pluginVersion": "11.1.4",
+ "pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
@@ -292,7 +287,7 @@
"textMode": "auto",
"wideLayout": true
},
- "pluginVersion": "11.1.4",
+ "pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
@@ -387,7 +382,7 @@
"textMode": "auto",
"wideLayout": true
},
- "pluginVersion": "11.1.4",
+ "pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
@@ -407,10 +402,6 @@
},
{
"collapsed": false,
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
"gridPos": {
"h": 1,
"w": 24,
@@ -419,15 +410,6 @@
},
"id": 140,
"panels": [],
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
- "refId": "A"
- }
- ],
"title": "I/O Overview",
"type": "row"
},
@@ -448,6 +430,7 @@
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
+ "barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
@@ -513,6 +496,7 @@
"sort": "none"
}
},
+ "pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
@@ -546,6 +530,7 @@
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
+ "barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
@@ -642,6 +627,7 @@
"sort": "none"
}
},
+ "pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
@@ -675,6 +661,7 @@
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
+ "barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
@@ -740,6 +727,7 @@
"sort": "none"
}
},
+ "pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
@@ -787,6 +775,7 @@
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
+ "barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
@@ -852,6 +841,7 @@
"sort": "none"
}
},
+ "pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
@@ -931,10 +921,6 @@
},
{
"collapsed": false,
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
"gridPos": {
"h": 1,
"w": 24,
@@ -943,15 +929,6 @@
},
"id": 141,
"panels": [],
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
- "refId": "A"
- }
- ],
"title": "JVM Memory",
"type": "row"
},
@@ -972,6 +949,7 @@
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
+ "barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
@@ -1038,6 +1016,7 @@
"sort": "none"
}
},
+ "pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
@@ -1097,6 +1076,7 @@
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
+ "barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
@@ -1163,6 +1143,7 @@
"sort": "none"
}
},
+ "pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
@@ -1223,6 +1204,7 @@
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
+ "barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
@@ -1289,6 +1271,7 @@
"sort": "none"
}
},
+ "pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
@@ -1348,6 +1331,7 @@
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
+ "barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
@@ -1414,6 +1398,7 @@
"sort": "none"
}
},
+ "pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
@@ -1468,10 +1453,6 @@
},
{
"collapsed": false,
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
"gridPos": {
"h": 1,
"w": 24,
@@ -1480,15 +1461,6 @@
},
"id": 142,
"panels": [],
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
- "refId": "A"
- }
- ],
"title": "JVM Misc",
"type": "row"
},
@@ -1509,6 +1481,7 @@
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
+ "barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
@@ -1577,6 +1550,7 @@
"sort": "none"
}
},
+ "pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
@@ -1637,6 +1611,7 @@
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
+ "barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
@@ -1704,6 +1679,7 @@
"sort": "none"
}
},
+ "pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
@@ -1750,6 +1726,7 @@
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
+ "barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
@@ -1817,6 +1794,7 @@
"sort": "none"
}
},
+ "pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
@@ -1890,6 +1868,7 @@
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
+ "barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
@@ -2046,6 +2025,7 @@
"sort": "none"
}
},
+ "pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
@@ -2080,6 +2060,7 @@
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
+ "barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
@@ -2148,6 +2129,7 @@
"sort": "none"
}
},
+ "pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
@@ -2181,6 +2163,7 @@
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
+ "barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
@@ -2324,6 +2307,7 @@
"sort": "none"
}
},
+ "pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
@@ -2360,6 +2344,7 @@
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
+ "barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
@@ -2428,6 +2413,7 @@
"sort": "none"
}
},
+ "pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
@@ -2463,10 +2449,6 @@
},
{
"collapsed": false,
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
"gridPos": {
"h": 1,
"w": 24,
@@ -2476,15 +2458,6 @@
"id": 143,
"panels": [],
"repeat": "persistence_counts",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
- "refId": "A"
- }
- ],
"title": "JVM Memory Pools (Heap)",
"type": "row"
},
@@ -2536,8 +2509,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
},
{
"color": "red",
@@ -2551,7 +2523,7 @@
},
"gridPos": {
"h": 7,
- "w": 8,
+ "w": 24,
"x": 0,
"y": 36
},
@@ -2572,6 +2544,7 @@
}
},
"repeat": "jvm_memory_pool_heap",
+ "repeatDirection": "h",
"targets": [
{
"datasource": {
@@ -2624,10 +2597,6 @@
},
{
"collapsed": false,
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
"gridPos": {
"h": 1,
"w": 24,
@@ -2636,66 +2605,29 @@
},
"id": 144,
"panels": [],
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
- "refId": "A"
- }
- ],
"title": "JVM Memory Pools (Non-Heap)",
"type": "row"
},
{
- "aliasColors": {},
- "autoMigrateFrom": "graph",
- "bars": false,
- "dashLength": 10,
- "dashes": false,
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
- "editable": true,
- "error": false,
- "fill": 1,
- "grid": {
- "leftLogBase": 1,
- "rightLogBase": 1
+ "fieldConfig": {
+ "defaults": {},
+ "overrides": []
},
"gridPos": {
"h": 7,
- "w": 8,
+ "w": 24,
"x": 0,
"y": 44
},
"id": 78,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": true,
- "max": true,
- "min": false,
- "rightSide": false,
- "show": true,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 1,
"maxPerRow": 3,
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
+ "options": {},
"repeat": "jvm_memory_pool_nonheap",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "repeatDirection": "h",
"targets": [
{
"datasource": {
@@ -2743,104 +2675,39 @@
"step": 1800
}
],
- "thresholds": [],
"title": "$jvm_memory_pool_nonheap",
- "tooltip": {
- "msResolution": false,
- "shared": true,
- "sort": 0,
- "value_type": "cumulative"
- },
- "type": "timeseries",
- "x-axis": true,
- "xaxis": {
- "mode": "time",
- "show": true,
- "values": []
- },
- "y-axis": true,
- "y_formats": [
- "mbytes",
- "short"
- ],
- "yaxes": [
- {
- "format": "bytes",
- "logBase": 1,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "logBase": 1,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
"collapsed": false,
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
- "y": 58
+ "y": 51
},
"id": 145,
"panels": [],
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
- "refId": "A"
- }
- ],
"title": "Garbage Collection",
"type": "row"
},
{
- "aliasColors": {},
- "autoMigrateFrom": "graph",
- "bars": false,
- "dashLength": 10,
- "dashes": false,
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
- "fill": 1,
+ "fieldConfig": {
+ "defaults": {},
+ "overrides": []
+ },
"gridPos": {
"h": 7,
"w": 8,
"x": 0,
- "y": 59
+ "y": 52
},
"id": 98,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "options": {},
"targets": [
{
"datasource": {
@@ -2855,72 +2722,26 @@
"refId": "A"
}
],
- "thresholds": [],
"title": "Collections",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "timeseries",
- "xaxis": {
- "mode": "time",
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "ops",
- "logBase": 1,
- "min": "0",
- "show": true
- },
- {
- "format": "short",
- "label": "",
- "logBase": 1,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": {},
- "autoMigrateFrom": "graph",
- "bars": false,
- "dashLength": 10,
- "dashes": false,
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
- "fill": 1,
+ "fieldConfig": {
+ "defaults": {},
+ "overrides": []
+ },
"gridPos": {
"h": 7,
"w": 8,
"x": 8,
- "y": 59
+ "y": 52
},
"id": 101,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "options": {},
"targets": [
{
"datasource": {
@@ -2949,72 +2770,26 @@
"refId": "B"
}
],
- "thresholds": [],
"title": "Pause Durations",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "timeseries",
- "xaxis": {
- "mode": "time",
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "s",
- "logBase": 1,
- "min": "0",
- "show": true
- },
- {
- "format": "short",
- "label": "",
- "logBase": 1,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": {},
- "autoMigrateFrom": "graph",
- "bars": false,
- "dashLength": 10,
- "dashes": false,
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
- "fill": 1,
+ "fieldConfig": {
+ "defaults": {},
+ "overrides": []
+ },
"gridPos": {
"h": 7,
"w": 8,
"x": 16,
- "y": 59
+ "y": 52
},
"id": 99,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "options": {},
"targets": [
{
"datasource": {
@@ -3041,103 +2816,39 @@
"refId": "B"
}
],
- "thresholds": [],
"title": "Allocated/Promoted",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "timeseries",
- "xaxis": {
- "mode": "time",
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "Bps",
- "logBase": 1,
- "min": "0",
- "show": true
- },
- {
- "format": "short",
- "logBase": 1,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
"collapsed": false,
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
- "y": 66
+ "y": 59
},
"id": 146,
"panels": [],
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
- "refId": "A"
- }
- ],
"title": "Classloading",
"type": "row"
},
{
- "aliasColors": {},
- "autoMigrateFrom": "graph",
- "bars": false,
- "dashLength": 10,
- "dashes": false,
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
- "editable": true,
- "error": false,
- "fill": 1,
- "grid": {
- "leftLogBase": 1,
- "rightLogBase": 1
+ "fieldConfig": {
+ "defaults": {},
+ "overrides": []
},
"gridPos": {
"h": 7,
"w": 12,
"x": 0,
- "y": 67
+ "y": 60
},
"id": 37,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "options": {},
"targets": [
{
"datasource": {
@@ -3153,84 +2864,26 @@
"step": 1200
}
],
- "thresholds": [],
"title": "Classes loaded",
- "tooltip": {
- "msResolution": false,
- "shared": true,
- "sort": 0,
- "value_type": "cumulative"
- },
- "type": "timeseries",
- "x-axis": true,
- "xaxis": {
- "mode": "time",
- "show": true,
- "values": []
- },
- "y-axis": true,
- "y_formats": [
- "short",
- "short"
- ],
- "yaxes": [
- {
- "format": "short",
- "logBase": 1,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "logBase": 1,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
- "aliasColors": {},
- "autoMigrateFrom": "graph",
- "bars": false,
- "dashLength": 10,
- "dashes": false,
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
- "editable": true,
- "error": false,
- "fill": 1,
- "grid": {
- "leftLogBase": 1,
- "rightLogBase": 1
+ "fieldConfig": {
+ "defaults": {},
+ "overrides": []
},
"gridPos": {
"h": 7,
"w": 12,
"x": 12,
- "y": 67
+ "y": 60
},
"id": 38,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "options": {},
"targets": [
{
"datasource": {
@@ -3248,115 +2901,42 @@
"step": 1200
}
],
- "thresholds": [],
"title": "Class delta",
- "tooltip": {
- "msResolution": false,
- "shared": true,
- "sort": 0,
- "value_type": "cumulative"
- },
- "type": "timeseries",
- "x-axis": true,
- "xaxis": {
- "mode": "time",
- "show": true,
- "values": []
- },
- "y-axis": true,
- "y_formats": [
- "ops",
- "short"
- ],
- "yaxes": [
- {
- "format": "short",
- "label": "",
- "logBase": 1,
- "show": true
- },
- {
- "format": "short",
- "logBase": 1,
- "show": true
- }
- ]
+ "type": "timeseries"
},
{
"collapsed": false,
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
- "y": 74
+ "y": 67
},
"id": 147,
"panels": [],
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
- "refId": "A"
- }
- ],
"title": "Buffer Pools",
"type": "row"
},
{
- "aliasColors": {},
- "autoMigrateFrom": "graph",
- "bars": false,
- "dashLength": 10,
- "dashes": false,
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
- "fill": 1,
+ "fieldConfig": {
+ "defaults": {},
+ "overrides": []
+ },
"gridPos": {
"h": 7,
- "w": 8,
+ "w": 24,
"x": 0,
- "y": 75
+ "y": 68
},
"id": 131,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
"maxPerRow": 3,
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
+ "options": {},
"repeat": "jvm_buffer_pool",
- "seriesOverrides": [
- {
- "alias": "count",
- "yaxis": 2
- },
- {
- "alias": "buffers",
- "yaxis": 2
- }
- ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
+ "repeatDirection": "h",
"targets": [
{
"datasource": {
@@ -3393,46 +2973,23 @@
"refId": "C"
}
],
- "thresholds": [],
"title": "$jvm_buffer_pool",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "timeseries",
- "xaxis": {
- "mode": "time",
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "decbytes",
- "logBase": 1,
- "min": "0",
- "show": true
- },
- {
- "decimals": 0,
- "format": "short",
- "label": "",
- "logBase": 1,
- "min": "0",
- "show": true
- }
- ]
+ "type": "timeseries"
}
],
+ "preload": false,
"refresh": "auto",
- "schemaVersion": 39,
- "tags": [],
+ "schemaVersion": 40,
+ "tags": [
+ "jvm",
+ "prometheus",
+ "micrometer"
+ ],
"templating": {
"list": [
{
"current": {
"isNone": true,
- "selected": false,
"text": "None",
"value": ""
},
@@ -3441,26 +2998,17 @@
"uid": "PBFA97CFB590B2093"
},
"definition": "",
- "hide": 0,
"includeAll": false,
"label": "Application",
- "multi": false,
"name": "application",
"options": [],
"query": "label_values(application)",
"refresh": 2,
"regex": "",
- "skipUrlSync": false,
- "sort": 0,
- "tagValuesQuery": "",
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allFormat": "glob",
"current": {
- "selected": false,
"text": "docker-compose-cps-and-ncmp-1:8080",
"value": "docker-compose-cps-and-ncmp-1:8080"
},
@@ -3469,27 +3017,17 @@
"uid": "PBFA97CFB590B2093"
},
"definition": "",
- "hide": 0,
"includeAll": false,
"label": "Instance",
- "multi": false,
- "multiFormat": "glob",
"name": "instance",
"options": [],
"query": "label_values(jvm_memory_used_bytes{application=\"$application\"}, instance)",
"refresh": 2,
"regex": "",
- "skipUrlSync": false,
- "sort": 0,
- "tagValuesQuery": "",
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allFormat": "glob",
"current": {
- "selected": false,
"text": "All",
"value": "$__all"
},
@@ -3501,24 +3039,16 @@
"hide": 2,
"includeAll": true,
"label": "JVM Memory Pools Heap",
- "multi": false,
- "multiFormat": "glob",
"name": "jvm_memory_pool_heap",
"options": [],
"query": "label_values(jvm_memory_used_bytes{application=\"$application\", instance=\"$instance\", area=\"heap\"},id)",
"refresh": 1,
"regex": "",
- "skipUrlSync": false,
"sort": 1,
- "tagValuesQuery": "",
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allFormat": "glob",
"current": {
- "selected": false,
"text": "All",
"value": "$__all"
},
@@ -3530,24 +3060,16 @@
"hide": 2,
"includeAll": true,
"label": "JVM Memory Pools Non-Heap",
- "multi": false,
- "multiFormat": "glob",
"name": "jvm_memory_pool_nonheap",
"options": [],
"query": "label_values(jvm_memory_used_bytes{application=\"$application\", instance=\"$instance\", area=\"nonheap\"},id)",
"refresh": 1,
"regex": "",
- "skipUrlSync": false,
"sort": 2,
- "tagValuesQuery": "",
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
},
{
- "allFormat": "glob",
"current": {
- "selected": false,
"text": "All",
"value": "$__all"
},
@@ -3559,19 +3081,13 @@
"hide": 2,
"includeAll": true,
"label": "JVM Buffer Pools",
- "multi": false,
- "multiFormat": "glob",
"name": "jvm_buffer_pool",
"options": [],
"query": "label_values(jvm_buffer_memory_used_bytes{application=\"$application\", instance=\"$instance\"},id)",
"refresh": 1,
"regex": "",
- "skipUrlSync": false,
"sort": 1,
- "tagValuesQuery": "",
- "tagsQuery": "",
- "type": "query",
- "useTags": false
+ "type": "query"
}
]
},
@@ -3579,35 +3095,10 @@
"from": "now-30m",
"to": "now"
},
- "timepicker": {
- "now": true,
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
+ "timepicker": {},
"timezone": "browser",
"title": "JVM (Micrometer)",
"uid": "bdvp1kgecrda8f",
"version": 1,
"weekStart": ""
-}
+} \ No newline at end of file
diff --git a/docker-compose/config/grafana/postgresql-statistics-dashboard.json b/docker-compose/config/grafana/postgresql-statistics-dashboard.json
index 642294167e..afc428f8cf 100644
--- a/docker-compose/config/grafana/postgresql-statistics-dashboard.json
+++ b/docker-compose/config/grafana/postgresql-statistics-dashboard.json
@@ -25,7 +25,7 @@
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
- "id": 4,
+ "id": 5,
"links": [],
"panels": [
{
@@ -1257,8 +1257,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
},
{
"color": "red",
@@ -1365,8 +1364,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
},
{
"color": "red",
@@ -1483,8 +1481,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
},
{
"color": "red",
@@ -1582,8 +1579,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
},
{
"color": "red",
@@ -1688,8 +1684,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
},
{
"color": "red",
@@ -1826,8 +1821,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
},
{
"color": "red",
@@ -1930,8 +1924,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
},
{
"color": "red",
@@ -2029,8 +2022,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
},
{
"color": "red",
@@ -2122,8 +2114,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
},
{
"color": "red",
@@ -2189,7 +2180,10 @@
"preload": false,
"refresh": "5s",
"schemaVersion": 40,
- "tags": [],
+ "tags": [
+ "postgresql",
+ "postgres-exporter"
+ ],
"templating": {
"list": [
{
diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml
index 687babed32..2573e3280c 100644
--- a/docker-compose/docker-compose.yml
+++ b/docker-compose/docker-compose.yml
@@ -203,6 +203,7 @@ services:
- ./config/grafana/inventory-dashboard.json:/var/lib/grafana/dashboards/inventory-dashboard.json
- ./config/grafana/data-dashboard.json:/var/lib/grafana/dashboards/data-dashboard.json
- ./config/grafana/postgresql-statistics-dashboard.json:/var/lib/grafana/dashboards/postgresql-statistics-dashboard.json
+ - ./config/grafana/cps-database-pool.json:/var/lib/grafana/dashboards/cps-database-pool.json
- grafana:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
diff --git a/integration-test/src/test/groovy/org/onap/cps/integration/base/CpsIntegrationSpecBase.groovy b/integration-test/src/test/groovy/org/onap/cps/integration/base/CpsIntegrationSpecBase.groovy
index 3f7b25d2fa..27d85de034 100644
--- a/integration-test/src/test/groovy/org/onap/cps/integration/base/CpsIntegrationSpecBase.groovy
+++ b/integration-test/src/test/groovy/org/onap/cps/integration/base/CpsIntegrationSpecBase.groovy
@@ -44,6 +44,7 @@ import org.onap.cps.ncmp.impl.inventory.sync.ModuleSyncService
import org.onap.cps.ncmp.impl.inventory.sync.ModuleSyncWatchdog
import org.onap.cps.ncmp.impl.utils.AlternateIdMatcher
import org.onap.cps.ri.repository.DataspaceRepository
+import org.onap.cps.ri.repository.SchemaSetRepository
import org.onap.cps.ri.utils.SessionManager
import org.onap.cps.utils.JsonObjectMapper
import org.springframework.beans.factory.annotation.Autowired
@@ -102,6 +103,12 @@ abstract class CpsIntegrationSpecBase extends Specification {
SessionManager sessionManager
@Autowired
+ DataspaceRepository dataspaceRepository
+
+ @Autowired
+ SchemaSetRepository schemaSetRepository
+
+ @Autowired
ParameterizedCmHandleQueryService networkCmProxyCmHandleQueryService
@Autowired
@@ -204,18 +211,18 @@ abstract class CpsIntegrationSpecBase extends Specification {
return nodeCount
}
- def getBookstoreYangResourcesNameToContentMap() {
+ def getBookstoreyangResourceContentPerName() {
def bookstoreModelFileContent = readResourceDataFile('bookstore/bookstore.yang')
def bookstoreTypesFileContent = readResourceDataFile('bookstore/bookstore-types.yang')
return [bookstore: bookstoreModelFileContent, bookstoreTypes: bookstoreTypesFileContent]
}
def createStandardBookStoreSchemaSet(targetDataspace) {
- cpsModuleService.createSchemaSet(targetDataspace, BOOKSTORE_SCHEMA_SET, getBookstoreYangResourcesNameToContentMap())
+ cpsModuleService.createSchemaSet(targetDataspace, BOOKSTORE_SCHEMA_SET, getBookstoreyangResourceContentPerName())
}
def createStandardBookStoreSchemaSet(targetDataspace, targetSchemaSet) {
- cpsModuleService.createSchemaSet(targetDataspace, targetSchemaSet, getBookstoreYangResourcesNameToContentMap())
+ cpsModuleService.createSchemaSet(targetDataspace, targetSchemaSet, getBookstoreyangResourceContentPerName())
}
def dataspaceExists(dataspaceName) {
diff --git a/integration-test/src/test/groovy/org/onap/cps/integration/base/DmiDispatcher.groovy b/integration-test/src/test/groovy/org/onap/cps/integration/base/DmiDispatcher.groovy
index c790521627..11c0ff2743 100644
--- a/integration-test/src/test/groovy/org/onap/cps/integration/base/DmiDispatcher.groovy
+++ b/integration-test/src/test/groovy/org/onap/cps/integration/base/DmiDispatcher.groovy
@@ -29,6 +29,7 @@ import org.springframework.http.HttpStatus
import org.springframework.http.MediaType
import java.util.regex.Matcher
+import java.util.stream.Collectors
import static org.onap.cps.integration.base.CpsIntegrationSpecBase.readResourceDataFile
@@ -81,7 +82,7 @@ class DmiDispatcher extends Dispatcher {
// get module resources for a CM-handle
case ~'^/dmi/v1/ch/(.*)/moduleResources$':
def cmHandleId = Matcher.lastMatcher[0][1]
- return getModuleResourcesResponse(cmHandleId)
+ return getModuleResourcesResponse(request, cmHandleId)
// pass-through data operation for a CM-handle
case ~'^/dmi/v1/ch/(.*)/data/ds/(.*)$':
@@ -124,8 +125,13 @@ class DmiDispatcher extends Dispatcher {
return mockResponseWithBody(HttpStatus.OK, moduleReferences)
}
- def getModuleResourcesResponse(cmHandleId) {
- def moduleResources = '[' + getModuleNamesForCmHandle(cmHandleId).collect {
+ def getModuleResourcesResponse(request, cmHandleId) {
+ def moduleResourcesRequest = jsonSlurper.parseText(request.getBody().readUtf8())
+ def requestedModuleNames = moduleResourcesRequest.get('data').get('modules').collect{it.get('name')}
+ def candidateModuleNames = getModuleNamesForCmHandle(cmHandleId)
+ def moduleNames = candidateModuleNames.stream().filter(candidate -> requestedModuleNames.contains(candidate)).toList()
+
+ def moduleResources = '[' + moduleNames.collect {
MODULE_RESOURCES_RESPONSE_TEMPLATE.replaceAll("<MODULE_NAME>", it)
}.join(',') + ']'
return mockResponseWithBody(HttpStatus.OK, moduleResources)
diff --git a/integration-test/src/test/groovy/org/onap/cps/integration/functional/cps/ModuleServiceIntegrationSpec.groovy b/integration-test/src/test/groovy/org/onap/cps/integration/functional/cps/ModuleServiceIntegrationSpec.groovy
index c787b4209e..49201e8f22 100644
--- a/integration-test/src/test/groovy/org/onap/cps/integration/functional/cps/ModuleServiceIntegrationSpec.groovy
+++ b/integration-test/src/test/groovy/org/onap/cps/integration/functional/cps/ModuleServiceIntegrationSpec.groovy
@@ -53,8 +53,8 @@ class ModuleServiceIntegrationSpec extends FunctionalSpecBase {
}
"""
- def newYangResourcesNameToContentMap = [:]
- def moduleReferences = []
+ def yangResourceContentPerName = [:]
+ def allModuleReferences = []
def noNewModules = [:]
def bookstoreModelFileContent = readResourceDataFile('bookstore/bookstore.yang')
def bookstoreTypesFileContent = readResourceDataFile('bookstore/bookstore-types.yang')
@@ -67,9 +67,9 @@ class ModuleServiceIntegrationSpec extends FunctionalSpecBase {
def 'Create new schema set from yang resources with #scenario'() {
given: 'a new schema set with #numberOfModules modules'
- populateNewYangResourcesNameToContentMapAndAllModuleReferences(numberOfNewModules)
+ populateYangResourceContentPerNameAndAllModuleReferences(numberOfNewModules)
when: 'the new schema set is created'
- objectUnderTest.createSchemaSet(FUNCTIONAL_TEST_DATASPACE_1, 'newSchemaSet', newYangResourcesNameToContentMap)
+ objectUnderTest.createSchemaSet(FUNCTIONAL_TEST_DATASPACE_1, 'newSchemaSet', yangResourceContentPerName)
then: 'the number of module references has increased by #numberOfNewModules'
def yangResourceModuleReferences = objectUnderTest.getYangResourceModuleReferences(FUNCTIONAL_TEST_DATASPACE_1)
originalNumberOfModuleReferences + numberOfNewModules == yangResourceModuleReferences.size()
@@ -93,39 +93,43 @@ class ModuleServiceIntegrationSpec extends FunctionalSpecBase {
def 'Create new schema set from modules with #scenario'() {
given: 'a new schema set with #numberOfNewModules modules'
- populateNewYangResourcesNameToContentMapAndAllModuleReferences(numberOfNewModules)
+ populateYangResourceContentPerNameAndAllModuleReferences(numberOfNewModules)
and: 'add existing module references (optional)'
- moduleReferences.addAll(existingModuleReferences)
+ allModuleReferences.addAll(existingModuleReferences)
when: 'the new schema set is created'
def schemaSetName = "NewSchemaWith${numberOfNewModules}Modules"
- objectUnderTest.createSchemaSetFromModules(FUNCTIONAL_TEST_DATASPACE_1, schemaSetName, newYangResourcesNameToContentMap, moduleReferences)
+ objectUnderTest.createSchemaSetFromModules(FUNCTIONAL_TEST_DATASPACE_1, schemaSetName, yangResourceContentPerName, allModuleReferences)
and: 'associated with a new anchor'
cpsAnchorService.createAnchor(FUNCTIONAL_TEST_DATASPACE_1, schemaSetName, 'newAnchor')
then: 'the new anchor has the correct number of modules'
def yangResourceModuleReferences = objectUnderTest.getYangResourcesModuleReferences(FUNCTIONAL_TEST_DATASPACE_1, 'newAnchor')
assert expectedNumberOfModulesForAnchor == yangResourceModuleReferences.size()
+ and: 'the schema set has the correct number of modules too'
+ def dataspaceEntity = dataspaceRepository.getByName(FUNCTIONAL_TEST_DATASPACE_1)
+ def schemaSetEntity = schemaSetRepository.getByDataspaceAndName(dataspaceEntity, schemaSetName)
+ assert expectedNumberOfModulesForAnchor == schemaSetEntity.yangResources.size()
cleanup:
objectUnderTest.deleteSchemaSetsWithCascade(FUNCTIONAL_TEST_DATASPACE_1, [ schemaSetName.toString() ])
where: 'the following module references are provided'
scenario | numberOfNewModules | existingModuleReferences || expectedNumberOfModulesForAnchor
'empty schema set' | 0 | [ ] || 0
- 'one existing module' | 0 | [bookStoreModuleReference ] || 1
+ 'one existing module' | 0 | [ bookStoreModuleReference ] || 1
'two new modules' | 2 | [ ] || 2
- 'two new modules, one existing' | 2 | [bookStoreModuleReference ] || 3
+ 'two new modules, one existing' | 2 | [ bookStoreModuleReference ] || 3
'over max batch size #modules' | 101 | [ ] || 101
'two valid, one invalid module' | 2 | [ new ModuleReference('NOT EXIST','IRRELEVANT') ] || 2
}
def 'Duplicate schema content.'() {
given: 'a map of yang resources'
- populateNewYangResourcesNameToContentMapAndAllModuleReferences(1)
+ populateYangResourceContentPerNameAndAllModuleReferences(1)
when: 'a new schema set is created'
- objectUnderTest.createSchemaSet(FUNCTIONAL_TEST_DATASPACE_1, 'newSchema1', newYangResourcesNameToContentMap)
+ objectUnderTest.createSchemaSet(FUNCTIONAL_TEST_DATASPACE_1, 'newSchema1', yangResourceContentPerName)
then: 'the dataspace has one new module (reference)'
def numberOfModuleReferencesAfterFirstSchemaSetHasBeenAdded = objectUnderTest.getYangResourceModuleReferences(FUNCTIONAL_TEST_DATASPACE_1).size()
assert numberOfModuleReferencesAfterFirstSchemaSetHasBeenAdded == originalNumberOfModuleReferences + 1
when: 'a second new schema set is created'
- objectUnderTest.createSchemaSet(FUNCTIONAL_TEST_DATASPACE_1, 'newSchema2', newYangResourcesNameToContentMap)
+ objectUnderTest.createSchemaSet(FUNCTIONAL_TEST_DATASPACE_1, 'newSchema2', yangResourceContentPerName)
then: 'the dataspace has no additional module (reference)'
assert numberOfModuleReferencesAfterFirstSchemaSetHasBeenAdded == objectUnderTest.getYangResourceModuleReferences(FUNCTIONAL_TEST_DATASPACE_1).size()
cleanup:
@@ -134,8 +138,8 @@ class ModuleServiceIntegrationSpec extends FunctionalSpecBase {
def 'Attempt to create schema set, error scenario: #scenario.'() {
when: 'attempt to store schema set #schemaSetName in dataspace #dataspaceName'
- populateNewYangResourcesNameToContentMapAndAllModuleReferences(0)
- objectUnderTest.createSchemaSet(dataspaceName, schemaSetName, newYangResourcesNameToContentMap)
+ populateYangResourceContentPerNameAndAllModuleReferences(0)
+ objectUnderTest.createSchemaSet(dataspaceName, schemaSetName, yangResourceContentPerName)
then: 'an #expectedException is thrown'
thrown(expectedException)
where: 'the following data is used'
@@ -146,7 +150,7 @@ class ModuleServiceIntegrationSpec extends FunctionalSpecBase {
def 'Attempt to create duplicate schema set from modules.'() {
when: 'attempt to store duplicate schema set from modules'
- objectUnderTest.createSchemaSetFromModules(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_SCHEMA_SET, newYangResourcesNameToContentMap, [])
+ objectUnderTest.createSchemaSetFromModules(FUNCTIONAL_TEST_DATASPACE_1, BOOKSTORE_SCHEMA_SET, yangResourceContentPerName, [])
then: 'an Already Defined Exception is thrown'
thrown(AlreadyDefinedException)
}
@@ -192,12 +196,12 @@ class ModuleServiceIntegrationSpec extends FunctionalSpecBase {
def 'Identifying new module references with #scenario'() {
when: 'identifyNewModuleReferences is called'
- def result = objectUnderTest.identifyNewModuleReferences(moduleReferences)
+ def result = objectUnderTest.identifyNewModuleReferences(allModuleReferences)
then: 'the correct module references are returned'
assert result.size() == expectedResult.size()
assert result.containsAll(expectedResult)
where: 'the following data is used'
- scenario | moduleReferences || expectedResult
+ scenario | allModuleReferences || expectedResult
'just new module references' | [new ModuleReference('new1', 'r1'), new ModuleReference('new2', 'r1')] || [new ModuleReference('new1', 'r1'), new ModuleReference('new2', 'r1')]
'one new module,one existing reference' | [new ModuleReference('new1', 'r1'), bookStoreModuleReference] || [new ModuleReference('new1', 'r1')]
'no new module references' | [bookStoreModuleReference] || []
@@ -216,8 +220,8 @@ class ModuleServiceIntegrationSpec extends FunctionalSpecBase {
def 'Retrieve all schema sets.'() {
given: 'an extra schema set is stored'
- populateNewYangResourcesNameToContentMapAndAllModuleReferences(1)
- objectUnderTest.createSchemaSet(FUNCTIONAL_TEST_DATASPACE_1, 'newSchema1', newYangResourcesNameToContentMap)
+ populateYangResourceContentPerNameAndAllModuleReferences(1)
+ objectUnderTest.createSchemaSet(FUNCTIONAL_TEST_DATASPACE_1, 'newSchema1', yangResourceContentPerName)
when: 'all schema sets are retrieved'
def result = objectUnderTest.getSchemaSets(FUNCTIONAL_TEST_DATASPACE_1)
then: 'the result contains all expected schema sets'
@@ -233,8 +237,8 @@ class ModuleServiceIntegrationSpec extends FunctionalSpecBase {
def 'Delete schema sets with(out) cascade.'() {
given: 'a schema set'
- populateNewYangResourcesNameToContentMapAndAllModuleReferences(1)
- objectUnderTest.createSchemaSet(FUNCTIONAL_TEST_DATASPACE_1, 'newSchemaSet', newYangResourcesNameToContentMap)
+ populateYangResourceContentPerNameAndAllModuleReferences(1)
+ objectUnderTest.createSchemaSet(FUNCTIONAL_TEST_DATASPACE_1, 'newSchemaSet', yangResourceContentPerName)
and: 'optionally create anchor for the schema set'
if (associateWithAnchor) {
cpsAnchorService.createAnchor(FUNCTIONAL_TEST_DATASPACE_1, 'newSchemaSet', 'newAnchor')
@@ -261,11 +265,11 @@ class ModuleServiceIntegrationSpec extends FunctionalSpecBase {
def 'Delete schema sets with shared resources.'() {
given: 'a new schema set'
- populateNewYangResourcesNameToContentMapAndAllModuleReferences(1)
- objectUnderTest.createSchemaSet(FUNCTIONAL_TEST_DATASPACE_1, 'newSchemaSet1', newYangResourcesNameToContentMap)
+ populateYangResourceContentPerNameAndAllModuleReferences(1)
+ objectUnderTest.createSchemaSet(FUNCTIONAL_TEST_DATASPACE_1, 'newSchemaSet1', yangResourceContentPerName)
and: 'another schema set which shares one yang resource (module)'
- populateNewYangResourcesNameToContentMapAndAllModuleReferences(2)
- objectUnderTest.createSchemaSet(FUNCTIONAL_TEST_DATASPACE_1, 'newSchemaSet2', newYangResourcesNameToContentMap)
+ populateYangResourceContentPerNameAndAllModuleReferences(2)
+ objectUnderTest.createSchemaSet(FUNCTIONAL_TEST_DATASPACE_1, 'newSchemaSet2', yangResourceContentPerName)
when: 'all schema sets are retrieved'
def moduleRevisions = objectUnderTest.getYangResourceModuleReferences(FUNCTIONAL_TEST_DATASPACE_1).revision
then: 'both modules (revisions) are present'
@@ -299,23 +303,23 @@ class ModuleServiceIntegrationSpec extends FunctionalSpecBase {
U P G R A D E
*/
- def 'Upgrade schema set (with existing and new modules, no matching module set tag in NCMP)'() {
+ def 'Upgrade schema set [with existing and new modules, no matching module set tag in NCMP]'() {
given: 'an anchor and schema set with 2 modules (to be upgraded)'
- populateNewYangResourcesNameToContentMapAndAllModuleReferences('original', 2)
- objectUnderTest.createSchemaSetFromModules(FUNCTIONAL_TEST_DATASPACE_1, 'targetSchema', newYangResourcesNameToContentMap, [])
+ populateYangResourceContentPerNameAndAllModuleReferences('original', 2)
+ objectUnderTest.createSchemaSetFromModules(FUNCTIONAL_TEST_DATASPACE_1, 'targetSchema', yangResourceContentPerName, allModuleReferences)
cpsAnchorService.createAnchor(FUNCTIONAL_TEST_DATASPACE_1, 'targetSchema', 'targetAnchor')
def yangResourceModuleReferencesBeforeUpgrade = objectUnderTest.getYangResourcesModuleReferences(FUNCTIONAL_TEST_DATASPACE_1, 'targetAnchor')
assert yangResourceModuleReferencesBeforeUpgrade.size() == 2
assert yangResourceModuleReferencesBeforeUpgrade.containsAll([new ModuleReference('original_0','2000-01-01'),new ModuleReference('original_1','2001-01-01')])
and: 'two new 2 modules (from node)'
- populateNewYangResourcesNameToContentMapAndAllModuleReferences('new', 2)
+ populateYangResourceContentPerNameAndAllModuleReferences('new', 2)
def newModuleReferences = [new ModuleReference('new_0','2000-01-01'),new ModuleReference('new_1','2001-01-01')]
and: 'a list of all module references (normally retrieved from node)'
- def allModuleReferences = []
- allModuleReferences.add(bookStoreModuleReference)
- allModuleReferences.addAll(newModuleReferences)
+ def allOtherModuleReferences = []
+ allOtherModuleReferences.add(bookStoreModuleReference)
+ allOtherModuleReferences.addAll(newModuleReferences)
when: 'the schema set is upgraded'
- objectUnderTest.upgradeSchemaSetFromModules(FUNCTIONAL_TEST_DATASPACE_1, 'targetSchema', newYangResourcesNameToContentMap, allModuleReferences)
+ objectUnderTest.upgradeSchemaSetFromModules(FUNCTIONAL_TEST_DATASPACE_1, 'targetSchema', yangResourceContentPerName, allOtherModuleReferences)
then: 'the new anchor has the correct new and existing modules'
def yangResourceModuleReferencesAfterUpgrade = objectUnderTest.getYangResourcesModuleReferences(FUNCTIONAL_TEST_DATASPACE_1, 'targetAnchor')
assert yangResourceModuleReferencesAfterUpgrade.size() == 3
@@ -325,18 +329,19 @@ class ModuleServiceIntegrationSpec extends FunctionalSpecBase {
objectUnderTest.deleteSchemaSetsWithCascade(FUNCTIONAL_TEST_DATASPACE_1, ['targetSchema'])
}
- def 'Upgrade existing schema set from another anchor (used in NCMP for matching module set tag)'() {
+ def 'Upgrade existing schema set from another anchor [used in NCMP for matching module set tag]'() {
given: 'an anchor and schema set with 1 module (target)'
- populateNewYangResourcesNameToContentMapAndAllModuleReferences('target', 1)
- objectUnderTest.createSchemaSetFromModules(FUNCTIONAL_TEST_DATASPACE_1, 'targetSchema', newYangResourcesNameToContentMap, [])
+ populateYangResourceContentPerNameAndAllModuleReferences('target', 1)
+ objectUnderTest.createSchemaSetFromModules(FUNCTIONAL_TEST_DATASPACE_1, 'targetSchema', yangResourceContentPerName, allModuleReferences)
cpsAnchorService.createAnchor(FUNCTIONAL_TEST_DATASPACE_1, 'targetSchema', 'targetAnchor')
def moduleReferencesBeforeUpgrade = objectUnderTest.getYangResourcesModuleReferences(FUNCTIONAL_TEST_DATASPACE_1, 'targetAnchor')
assert moduleReferencesBeforeUpgrade.size() == 1
and: 'another anchor and schema set with 2 other modules (source for upgrade)'
- populateNewYangResourcesNameToContentMapAndAllModuleReferences('source', 2)
- objectUnderTest.createSchemaSetFromModules(FUNCTIONAL_TEST_DATASPACE_1, 'sourceSchema', newYangResourcesNameToContentMap, [])
+ populateYangResourceContentPerNameAndAllModuleReferences('source', 2)
+ objectUnderTest.createSchemaSetFromModules(FUNCTIONAL_TEST_DATASPACE_1, 'sourceSchema', yangResourceContentPerName, allModuleReferences)
cpsAnchorService.createAnchor(FUNCTIONAL_TEST_DATASPACE_1, 'sourceSchema', 'sourceAnchor')
- assert objectUnderTest.getYangResourcesModuleReferences(FUNCTIONAL_TEST_DATASPACE_1, 'sourceAnchor').size() == 2
+ def yangResourcesModuleReferences = objectUnderTest.getYangResourcesModuleReferences(FUNCTIONAL_TEST_DATASPACE_1, 'sourceAnchor')
+ assert yangResourcesModuleReferences.size() == 2
when: 'the target schema is upgraded using the module references from the source anchor'
def moduleReferencesFromSourceAnchor = objectUnderTest.getYangResourcesModuleReferences(FUNCTIONAL_TEST_DATASPACE_1, 'sourceAnchor')
objectUnderTest.upgradeSchemaSetFromModules(FUNCTIONAL_TEST_DATASPACE_1, 'targetSchema', noNewModules, moduleReferencesFromSourceAnchor)
@@ -354,17 +359,19 @@ class ModuleServiceIntegrationSpec extends FunctionalSpecBase {
H E L P E R M E T H O D S
*/
- def populateNewYangResourcesNameToContentMapAndAllModuleReferences(numberOfModules) {
- populateNewYangResourcesNameToContentMapAndAllModuleReferences('name', numberOfModules)
+ def populateYangResourceContentPerNameAndAllModuleReferences(numberOfModules) {
+ populateYangResourceContentPerNameAndAllModuleReferences('name', numberOfModules)
}
- def populateNewYangResourcesNameToContentMapAndAllModuleReferences(namePrefix, numberOfModules) {
+ def populateYangResourceContentPerNameAndAllModuleReferences(namePrefix, numberOfModules) {
+ yangResourceContentPerName.clear()
+ allModuleReferences.clear()
numberOfModules.times {
def uniqueName = namePrefix + '_' + it
def uniqueRevision = String.valueOf(2000 + it) + '-01-01'
- moduleReferences.add(new ModuleReference(uniqueName, uniqueRevision))
+ allModuleReferences.add(new ModuleReference(uniqueName, uniqueRevision))
def uniqueContent = NEW_RESOURCE_CONTENT.replace(NEW_RESOURCE_REVISION, uniqueRevision).replace('module test_module', 'module '+uniqueName)
- newYangResourcesNameToContentMap.put(uniqueRevision, uniqueContent)
+ yangResourceContentPerName.put(uniqueName, uniqueContent)
}
}
diff --git a/integration-test/src/test/groovy/org/onap/cps/integration/performance/cps/CpsModuleServicePerfTest.groovy b/integration-test/src/test/groovy/org/onap/cps/integration/performance/cps/CpsModuleServicePerfTest.groovy
index a37bb6ad4d..d8553419ce 100644
--- a/integration-test/src/test/groovy/org/onap/cps/integration/performance/cps/CpsModuleServicePerfTest.groovy
+++ b/integration-test/src/test/groovy/org/onap/cps/integration/performance/cps/CpsModuleServicePerfTest.groovy
@@ -47,15 +47,15 @@ class CpsModuleServicePerfTest extends CpsPerfTestBase {
def 'Store new schema set with many modules'() {
when: 'a new schema set with 200 modules is stored'
- def newYangResourcesNameToContentMap = [:]
+ def newYangResourceContentPerName = [:]
(1..200).each {
def year = 2000 + it
def resourceName = "module${it}".toString()
def moduleName = "stores${it}"
def content = NEW_RESOURCE_CONTENT.replace('2020',String.valueOf(year)).replace('stores',moduleName)
- newYangResourcesNameToContentMap.put(resourceName, content)
+ newYangResourceContentPerName.put(resourceName, content)
}
- objectUnderTest.createSchemaSet(CPS_PERFORMANCE_TEST_DATASPACE, 'perfSchemaSet', newYangResourcesNameToContentMap)
+ objectUnderTest.createSchemaSet(CPS_PERFORMANCE_TEST_DATASPACE, 'perfSchemaSet', newYangResourceContentPerName)
then: 'the schema set is persisted correctly'
def result = cpsModuleService.getSchemaSet(CPS_PERFORMANCE_TEST_DATASPACE, 'perfSchemaSet')
result.moduleReferences.size() == 200