Configure Hazelcast to have 1 backup to reduce memory 17/137517/3
authordanielhanrahan <daniel.hanrahan@est.tech>
Fri, 15 Mar 2024 12:42:15 +0000 (12:42 +0000)
committerdanielhanrahan <daniel.hanrahan@est.tech>
Tue, 19 Mar 2024 10:08:19 +0000 (10:08 +0000)
Currently Hazelcast is configured to have 3 synchronous backups
and 3 asynchronous backups. These are separate, meaning there will
be 7 copies in the cluster (1 original + 3 sync + 3 async backups).
Even if only 1 instance of CPS/NCMP is running, it will have 7 copies
in memory.

Given that CPS/NCMP is typically only deployed using 1 or 2 instances,
the settings are changed to 1 synchronous backup (same as Hazelcast's
default configuration). This change has been tested and shown to reduce
heap usage by around 100MB during 20K CM-handle registration.

Issue-ID: CPS-2146
Signed-off-by: danielhanrahan <daniel.hanrahan@est.tech>
Change-Id: I4a5f6d83bc35e2c13cfb32002e38dc365da34c8e

cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/config/embeddedcache/SynchronizationCacheConfigSpec.groovy
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/config/embeddedcache/TrustLevelCacheConfigSpec.groovy
cps-service/src/main/java/org/onap/cps/cache/HazelcastCacheConfig.java
cps-service/src/test/groovy/org/onap/cps/cache/AnchorDataCacheConfigSpec.groovy

index 3b1709d..6d09df0 100644 (file)
@@ -69,14 +69,14 @@ class SynchronizationCacheConfigSpec extends Specification {
             def dataSyncSemaphoresConfig =  Hazelcast.getHazelcastInstanceByName('dataSyncSemaphores').config
             def dataSyncSemaphoresMapConfig =  dataSyncSemaphoresConfig.mapConfigs.get('dataSyncSemaphoresConfig')
         expect: 'system created instance with correct config of Module Sync Work Queue'
-            assert moduleSyncDefaultWorkQueueConfig.backupCount == 3
-            assert moduleSyncDefaultWorkQueueConfig.asyncBackupCount == 3
+            assert moduleSyncDefaultWorkQueueConfig.backupCount == 1
+            assert moduleSyncDefaultWorkQueueConfig.asyncBackupCount == 0
         and: 'Module Sync Started Cm Handle Map has the correct settings'
-            assert moduleSyncStartedOnCmHandlesMapConfig.backupCount == 3
-            assert moduleSyncStartedOnCmHandlesMapConfig.asyncBackupCount == 3
+            assert moduleSyncStartedOnCmHandlesMapConfig.backupCount == 1
+            assert moduleSyncStartedOnCmHandlesMapConfig.asyncBackupCount == 0
         and: 'Data Sync Semaphore Map has the correct settings'
-            assert dataSyncSemaphoresMapConfig.backupCount == 3
-            assert dataSyncSemaphoresMapConfig.asyncBackupCount == 3
+            assert dataSyncSemaphoresMapConfig.backupCount == 1
+            assert dataSyncSemaphoresMapConfig.asyncBackupCount == 0
         and: 'all instances are part of same cluster'
             def testClusterName = 'cps-and-ncmp-test-caches'
             assert moduleSyncWorkQueueConfig.clusterName == testClusterName
index 3eff96d..c213ab6 100644 (file)
@@ -62,8 +62,8 @@ class TrustLevelCacheConfigSpec extends Specification {
         when: 'retrieving the map config for trustLevel'
             def mapConfig = cacheConfig.mapConfigs.get(hazelcastMapConfigName)
         then: 'the map config has the correct backup counts'
-            assert mapConfig.backupCount == 3
-            assert mapConfig.asyncBackupCount == 3
+            assert mapConfig.backupCount == 1
+            assert mapConfig.asyncBackupCount == 0
         where: 'the following caches are used'
             scenario         | hazelcastInstanceName                        | hazelcastMapConfigName
             'cmhandle map'   | 'hazelcastInstanceTrustLevelPerCmHandleMap'  | 'trustLevelPerCmHandleCacheConfig'
index 660176d..418de9b 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START========================================================
- *  Copyright (C) 2023 Nordix Foundation
+ *  Copyright (C) 2023-2024 Nordix Foundation
  *  ================================================================================
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -72,22 +72,19 @@ public class HazelcastCacheConfig {
 
     protected static MapConfig createMapConfig(final String configName) {
         final MapConfig mapConfig = new MapConfig(configName);
-        mapConfig.setBackupCount(3);
-        mapConfig.setAsyncBackupCount(3);
+        mapConfig.setBackupCount(1);
         return mapConfig;
     }
 
     protected static QueueConfig createQueueConfig(final String configName) {
         final QueueConfig commonQueueConfig = new QueueConfig(configName);
-        commonQueueConfig.setBackupCount(3);
-        commonQueueConfig.setAsyncBackupCount(3);
+        commonQueueConfig.setBackupCount(1);
         return commonQueueConfig;
     }
 
     protected static SetConfig createSetConfig(final String configName) {
         final SetConfig commonSetConfig = new SetConfig(configName);
         commonSetConfig.setBackupCount(1);
-        commonSetConfig.setAsyncBackupCount(1);
         return commonSetConfig;
     }
 
index e219945..010308c 100644 (file)
@@ -50,8 +50,8 @@ class AnchorDataCacheConfigSpec extends Specification {
             def anchorDataCacheMapConfig =  anchorDataCacheConfig.mapConfigs.get('anchorDataCacheMapConfig')
         expect: 'system created instance with correct config'
             assert anchorDataCacheConfig.clusterName == 'cps-and-ncmp-test-caches'
-            assert anchorDataCacheMapConfig.backupCount == 3
-            assert anchorDataCacheMapConfig.asyncBackupCount == 3
+            assert anchorDataCacheMapConfig.backupCount == 1
+            assert anchorDataCacheMapConfig.asyncBackupCount == 0
     }
 
     def 'Verify deployment network configs for Distributed Caches'() {