diff options
author | sourabh_sourabh <sourabh.sourabh@est.tech> | 2022-07-07 16:53:45 +0100 |
---|---|---|
committer | sourabh_sourabh <sourabh.sourabh@est.tech> | 2022-07-25 13:45:44 +0100 |
commit | 054873c7c52bdb9fae718a0d7651d57b1a995dfc (patch) | |
tree | 1dd91a2a83144d4ed07b18f12b1973cb8dc35337 /cps-ncmp-service/src/test/groovy/org/onap | |
parent | 9fdaf6c0f472cad13ade1469458822d468fd2d6d (diff) |
CmHandle creation performance degradation
- Created a dedicated threadpool for scheduler.
- Tuned async threadpool of notification executor from setting RejectedExecutionHandler and application.yml.
Issue-ID: CPS-1126
Signed-off-by: sourabh_sourabh <sourabh.sourabh@est.tech>
Change-Id: I2afe3c76c1aec78751777df0d2f08ddb8dcee102
Diffstat (limited to 'cps-ncmp-service/src/test/groovy/org/onap')
3 files changed, 70 insertions, 11 deletions
diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/inventory/sync/ModuleSyncWatchdogSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/inventory/sync/ModuleSyncWatchdogSpec.groovy index 4b92be37ab..40a0e39b9b 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/inventory/sync/ModuleSyncWatchdogSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/inventory/sync/ModuleSyncWatchdogSpec.groovy @@ -50,7 +50,7 @@ class ModuleSyncWatchdogSpec extends Specification { def yangModelCmHandle2 = new YangModelCmHandle(id: 'some-cm-handle-2', compositeState: compositeState2) objectUnderTest.isGlobalDataSyncCacheEnabled = dataSyncCacheEnabled and: 'sync utilities return a cm handle twice' - mockSyncUtils.getAnAdvisedCmHandle() >>> [yangModelCmHandle1, yangModelCmHandle2, null] + mockSyncUtils.getAdvisedCmHandles() >> [yangModelCmHandle1, yangModelCmHandle2] when: 'module sync poll is executed' objectUnderTest.executeAdvisedCmHandlePoll() then: 'the inventory persistence cm handle returns a composite state for the first cm handle' @@ -84,7 +84,7 @@ class ModuleSyncWatchdogSpec extends Specification { def compositeState = new CompositeState(cmHandleState: cmHandleState) def yangModelCmHandle = new YangModelCmHandle(id: 'some-cm-handle', compositeState: compositeState) and: 'sync utilities return a cm handle' - mockSyncUtils.getAnAdvisedCmHandle() >>> [yangModelCmHandle, null] + mockSyncUtils.getAdvisedCmHandles() >> [yangModelCmHandle] when: 'module sync poll is executed' objectUnderTest.executeAdvisedCmHandlePoll() then: 'the inventory persistence cm handle returns a composite state for the cm handle' diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/inventory/sync/SyncUtilsSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/inventory/sync/SyncUtilsSpec.groovy index 134ee38da7..6c2d8f15b3 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/inventory/sync/SyncUtilsSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/inventory/sync/SyncUtilsSpec.groovy @@ -41,6 +41,7 @@ import spock.lang.Specification import java.time.OffsetDateTime import java.time.format.DateTimeFormatter +import java.util.stream.Collectors class SyncUtilsSpec extends Specification{ @@ -61,17 +62,17 @@ class SyncUtilsSpec extends Specification{ def 'Get an advised Cm-Handle where ADVISED cm handle #scenario'() { given: 'the inventory persistence service returns a collection of data nodes' mockInventoryPersistence.getCmHandlesByState(CmHandleState.ADVISED) >> dataNodeCollection - when: 'get advised cm handle is called' - objectUnderTest.getAnAdvisedCmHandle() + when: 'get advised cm handles are fetched' + def yangModelCmHandles = objectUnderTest.getAdvisedCmHandles() then: 'the returned data node collection is the correct size' - dataNodeCollection.size() == expectedDataNodeSize - and: 'get yang model cm handles is invoked the correct number of times' - expectedCallsToGetYangModelCmHandle * mockInventoryPersistence.getYangModelCmHandle('cm-handle-123') + yangModelCmHandles.size() == expectedDataNodeSize + and: 'yang model collection contains the correct data' + yangModelCmHandles.stream().map(yangModel -> yangModel.id).collect(Collectors.toSet()) == + dataNodeCollection.stream().map(dataNode -> dataNode.leaves.get("id")).collect(Collectors.toSet()) where: 'the following scenarios are used' scenario | dataNodeCollection || expectedCallsToGetYangModelCmHandle | expectedDataNodeSize - 'exists' | [ dataNode ] || 1 | 1 - 'does not exist' | [ ] || 0 | 0 - + 'exists' | [dataNode] || 1 | 1 + 'does not exist' | [] || 0 | 0 } def 'Update Lock Reason, Details and Attempts where lock reason #scenario'() { @@ -120,7 +121,7 @@ class SyncUtilsSpec extends Specification{ given: 'the inventory persistence service returns a collection of data nodes' mockInventoryPersistence.getCmHandlesByOperationalSyncState(DataStoreSyncState.UNSYNCHRONIZED) >> unSynchronizedDataNodes mockInventoryPersistence.getCmHandlesByIdAndState("cm-handle-123", CmHandleState.READY) >> readyDataNodes - when: 'get advised cm handle is called' + when: 'get advised cm handles are fetched' objectUnderTest.getAnUnSynchronizedReadyCmHandle() then: 'the returned data node collection is the correct size' readyDataNodes.size() == expectedDataNodeSize diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/inventory/sync/config/WatchdogSchedulingConfigurerSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/inventory/sync/config/WatchdogSchedulingConfigurerSpec.groovy new file mode 100644 index 0000000000..d4010aa781 --- /dev/null +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/inventory/sync/config/WatchdogSchedulingConfigurerSpec.groovy @@ -0,0 +1,58 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2022 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.ncmp.api.inventory.sync.config + +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.BeforeEach +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.context.ConfigurableApplicationContext +import org.springframework.test.context.ContextConfiguration +import spock.lang.Specification + +@SpringBootTest +@ContextConfiguration(classes = [ConfigurableApplicationContext, WatchdogSchedulingConfigurer]) +class WatchdogSchedulingConfigurerSpec extends Specification { + + @Autowired + private ConfigurableApplicationContext applicationContext; + + def watchdogSchedulingConfigurer; + + @BeforeEach + void setup() { + watchdogSchedulingConfigurer = (WatchdogSchedulingConfigurer) applicationContext.getBean("watchdogSchedulingConfigurer") + } + + @AfterEach + void tearDown() { + if (applicationContext != null) { + applicationContext.close() + } + } + + def 'Validate watchdog scheduling configuration'() { + given: 'task scheduler configuration properties are loaded as map' + def linkedHashMap = watchdogSchedulingConfigurer.taskScheduler().getProperties() + expect: 'thread name prefix is mapped correctly' + assert linkedHashMap.'threadNamePrefix' == 'watchdog-th-' + } +} |