diff options
author | DylanB95EST <dylan.byrne@est.tech> | 2022-05-05 11:53:12 +0100 |
---|---|---|
committer | DylanB95EST <dylan.byrne@est.tech> | 2022-05-12 16:14:17 +0100 |
commit | f16b9614298e7f0a820435f2dab2a856b487bf45 (patch) | |
tree | 04a11809e4f69c7fab9c065fcc05733cf634f074 /cps-ncmp-service/src/main/java/org | |
parent | 8c0b1b62c1e88f0c0cc547bbf91d9b236839992b (diff) |
Watchdog-process that syncs 'ADVISED' CM Handles
- Sync and Create Schema Set during
module sync watchdog process.
- Add a cm handle state transition machine to handle
state changes for a cm handle during watchdog
which syncs module service.
Issue-ID: CPS-875
Change-Id: I3b178f5693cb7ac30577dd81cdc82b462555389a
Signed-off-by: DylanB95EST <dylan.byrne@est.tech>
Diffstat (limited to 'cps-ncmp-service/src/main/java/org')
5 files changed, 65 insertions, 16 deletions
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/config/NcmpConfiguration.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/config/NcmpConfiguration.java index 3aa17b70cb..11683ad6b2 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/config/NcmpConfiguration.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/config/NcmpConfiguration.java @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2021 Nordix Foundation + * Copyright (C) 2021-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. @@ -21,7 +21,9 @@ package org.onap.cps.ncmp.api.impl.config; import java.util.Arrays; +import lombok.AccessLevel; import lombok.Getter; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.annotation.Bean; @@ -29,10 +31,13 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; import org.springframework.http.MediaType; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; +@EnableScheduling @Configuration +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) public class NcmpConfiguration { @Getter @@ -67,4 +72,5 @@ public class NcmpConfiguration { Arrays.asList(MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN)); restTemplate.getMessageConverters().add(mappingJackson2HttpMessageConverter); } + } diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/yangmodels/YangModelCmHandle.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/yangmodels/YangModelCmHandle.java index 289d782cde..5680d54a48 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/yangmodels/YangModelCmHandle.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/yangmodels/YangModelCmHandle.java @@ -34,6 +34,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import org.onap.cps.ncmp.api.impl.operations.RequiredDmiService; +import org.onap.cps.ncmp.api.inventory.CmHandleState; import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle; import org.onap.cps.utils.CpsValidator; @@ -56,7 +57,7 @@ public class YangModelCmHandle { private String dmiDataServiceName; @JsonProperty("state") - private String cmHandleState; + private CmHandleState cmHandleState; @JsonProperty("dmi-model-service-name") private String dmiModelServiceName; diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/inventory/CmHandleState.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/inventory/CmHandleState.java new file mode 100644 index 0000000000..0fce1d1890 --- /dev/null +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/inventory/CmHandleState.java @@ -0,0 +1,41 @@ +/* + * ============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; + +public enum CmHandleState { + + ADVISED { + @Override + public CmHandleState ready() { + return READY; + } + }, + READY { + @Override + public CmHandleState ready() { + return this; + } + + }; + + public abstract CmHandleState ready(); + +} diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/inventory/sync/ModuleSyncWatchdog.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/inventory/sync/ModuleSyncWatchdog.java index 0d8f852193..368262b972 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/inventory/sync/ModuleSyncWatchdog.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/inventory/sync/ModuleSyncWatchdog.java @@ -23,32 +23,32 @@ package org.onap.cps.ncmp.api.inventory.sync; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle; -import org.springframework.scheduling.annotation.EnableScheduling; +import org.onap.cps.ncmp.api.inventory.CmHandleState; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Slf4j -@EnableScheduling @RequiredArgsConstructor @Component public class ModuleSyncWatchdog { private final SyncUtils syncUtils; + private final ModuleSyncService moduleSyncService; + /** * Execute Cm Handle poll which changes the cm handle state from 'ADVISED' to 'READY'. */ @Scheduled(fixedDelayString = "${ncmp.timers.advised-modules-sync.sleep-time-ms}") public void executeAdvisedCmHandlePoll() { - YangModelCmHandle newAdvisedCmHandle = syncUtils.getAnAdvisedCmHandle(); - while (newAdvisedCmHandle != null) { - // ToDo When Cm-Handle in the 'ADVISED' state is Retrieved, Set CM-Handle state to 'LOCKED' - // and give lock reason - // ToDo if lock fails, move to next cm handle. - // ToDo Update last update time with a timestamp everytime Cm-handle state is changed - syncUtils.updateCmHandleState(newAdvisedCmHandle, "READY"); - log.info("{} is now in READY state", newAdvisedCmHandle.getId()); - newAdvisedCmHandle = syncUtils.getAnAdvisedCmHandle(); + YangModelCmHandle advisedCmHandle = syncUtils.getAnAdvisedCmHandle(); + while (advisedCmHandle != null) { + final CmHandleState cmHandleState = advisedCmHandle.getCmHandleState(); + moduleSyncService.syncAndCreateSchemaSet(advisedCmHandle); + // ToDo Lock Cm Handle if module sync fails + syncUtils.updateCmHandleState(advisedCmHandle, cmHandleState.ready()); + log.info("{} is now in {} state", advisedCmHandle.getId(), advisedCmHandle.getCmHandleState()); + advisedCmHandle = syncUtils.getAnAdvisedCmHandle(); } log.debug("No Cm-Handles currently found in an ADVISED state"); } diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/inventory/sync/SyncUtils.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/inventory/sync/SyncUtils.java index 924546433e..019ab08cab 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/inventory/sync/SyncUtils.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/inventory/sync/SyncUtils.java @@ -32,6 +32,7 @@ import lombok.extern.slf4j.Slf4j; import org.onap.cps.api.CpsDataService; import org.onap.cps.ncmp.api.impl.operations.YangModelCmHandleRetriever; import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle; +import org.onap.cps.ncmp.api.inventory.CmHandleState; import org.onap.cps.spi.CpsDataPersistenceService; import org.onap.cps.spi.FetchDescendantsOption; import org.onap.cps.spi.model.DataNode; @@ -74,10 +75,10 @@ public class SyncUtils { * Update the Cm Handle state to "READY". * * @param yangModelCmHandle yang model cm handle - * @param state cm handle state + * @param cmHandleState cm handle state */ - public void updateCmHandleState(final YangModelCmHandle yangModelCmHandle, final String state) { - yangModelCmHandle.setCmHandleState(state); + public void updateCmHandleState(final YangModelCmHandle yangModelCmHandle, final CmHandleState cmHandleState) { + yangModelCmHandle.setCmHandleState(cmHandleState); final String cmHandleJsonData = String.format("{\"cm-handles\":[%s]}", jsonObjectMapper.asJsonString(yangModelCmHandle)); cpsDataService.updateNodeLeaves(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, NCMP_DMI_REGISTRY_PARENT, |