Optimize Hazelcast usage in Trust Level Search 21/140421/2
authorseanbeirne <sean.beirne@est.tech>
Fri, 7 Mar 2025 16:18:12 +0000 (16:18 +0000)
committerseanbeirne <sean.beirne@est.tech>
Wed, 12 Mar 2025 17:43:10 +0000 (17:43 +0000)
Issue-ID: CPS-2674
Change-Id: I1f2fa5dce82eefbc99906bc468c6541f0d35851b
Signed-off-by: seanbeirne <sean.beirne@est.tech>
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/inventory/CmHandleQueryServiceImpl.java
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/impl/inventory/CmHandleQueryServiceImplSpec.groovy

index 890522c..6dbc09e 100644 (file)
@@ -26,6 +26,7 @@ import static org.onap.cps.ncmp.impl.inventory.NcmpPersistence.NCMP_DATASPACE_NA
 import static org.onap.cps.ncmp.impl.inventory.NcmpPersistence.NCMP_DMI_REGISTRY_ANCHOR;
 import static org.onap.cps.ncmp.impl.inventory.NcmpPersistence.NCMP_DMI_REGISTRY_PARENT;
 
+import com.hazelcast.map.IMap;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
@@ -61,7 +62,7 @@ public class CmHandleQueryServiceImpl implements CmHandleQueryService {
     private final Map<String, TrustLevel> trustLevelPerDmiPlugin;
 
     @Qualifier(TrustLevelCacheConfig.TRUST_LEVEL_PER_CM_HANDLE)
-    private final Map<String, TrustLevel> trustLevelPerCmHandleId;
+    private final IMap<String, TrustLevel> trustLevelPerCmHandleId;
 
     private final CpsValidator cpsValidator;
 
@@ -144,14 +145,15 @@ public class CmHandleQueryServiceImpl implements CmHandleQueryService {
             final TrustLevel dmiTrustLevel = mapEntry.getValue();
             final Collection<String> candidateCmHandleIds = getCmHandleReferencesByDmiPluginIdentifier(
                     dmiPluginIdentifier, false);
-            for (final String candidateCmHandleId : candidateCmHandleIds) {
-                final TrustLevel candidateCmHandleTrustLevel = trustLevelPerCmHandleId.get(candidateCmHandleId);
-                final TrustLevel effectiveTrustlevel =
-                        candidateCmHandleTrustLevel.getEffectiveTrustLevel(dmiTrustLevel);
-                if (targetTrustLevel.equals(effectiveTrustlevel)) {
-                    selectedCmHandleReferences.add(candidateCmHandleId);
+            final Set<String> candidateCmHandleIdsSet = new HashSet<>(candidateCmHandleIds);
+            final Map<String, TrustLevel> trustLevelPerCmHandleIdInBatch =
+                trustLevelPerCmHandleId.getAll(candidateCmHandleIdsSet);
+            trustLevelPerCmHandleIdInBatch.forEach((cmHandleId, trustLevel) -> {
+                final TrustLevel effectiveTrustLevel = trustLevel.getEffectiveTrustLevel(dmiTrustLevel);
+                if (targetTrustLevel.equals(effectiveTrustLevel)) {
+                    selectedCmHandleReferences.add(cmHandleId);
                 }
-            }
+            });
         }
         if (outputAlternateId) {
             return getAlternateIdsByCmHandleIds(selectedCmHandleReferences);
index 884d968..67a5c54 100644 (file)
@@ -241,7 +241,7 @@ class CmHandleQueryServiceImplSpec extends Specification {
         mockCpsQueryService.queryDataLeaf(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, '/dmi-registry/cm-handles[@dmi-data-service-name=\'my-dmi-plugin-identifier\']/@alternate-id', _) >> [pnfDemo.getLeaves().get('alternate-id'), pnfDemo4.getLeaves().get('alternate-id')]
         mockCpsQueryService.queryDataLeaf(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, '/dmi-registry/cm-handles[@dmi-model-service-name=\'my-dmi-plugin-identifier\']/@alternate-id', _) >> [pnfDemo2.getLeaves().get('alternate-id'), pnfDemo4.getLeaves().get('alternate-id')]
         mockCpsQueryService.queryDataLeaf(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, '/dmi-registry/cm-handles[@id=\'PNFDemo\']/@alternate-id', _) >> [pnfDemo.getLeaves().get('alternate-id')]
-        mockCpsQueryService.queryDataLeaf(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, '/dmi-registry/cm-handles[@id=\'PNFDemo2\' or @id=\'PNFDemo\' or @id=\'PNFDemo4\']/@alternate-id', _) >> [pnfDemo2.getLeaves().get('alternate-id'), pnfDemo.getLeaves().get('alternate-id'), pnfDemo4.getLeaves().get('alternate-id')]
+        mockCpsQueryService.queryDataLeaf(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, '/dmi-registry/cm-handles[@id=\'PNFDemo2\' or @id=\'PNFDemo4\' or @id=\'PNFDemo\']/@alternate-id', _) >> [pnfDemo2.getLeaves().get('alternate-id'), pnfDemo.getLeaves().get('alternate-id'), pnfDemo4.getLeaves().get('alternate-id')]
 
         mockCpsQueryService.queryDataLeaf(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, '//public-properties[@name=\'Contact\' and @value=\'newemailforstore@bookstore.com\']/ancestor::cm-handles/@id',_) >> [pnfDemo.getLeaves().get('id'), pnfDemo2.getLeaves().get('id'), pnfDemo4.getLeaves().get('id')]
         mockCpsQueryService.queryDataLeaf(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, '//public-properties[@name=\'Contact\' and @value=\'newemailforstore@bookstore.com\']/ancestor::cm-handles/@alternate-id',_) >> [pnfDemo.getLeaves().get('alternate-id'), pnfDemo2.getLeaves().get('alternate-id'), pnfDemo4.getLeaves().get('alternate-id')]