From d7f9574986345d5a3eafe097c1c2afd15fb8930c Mon Sep 17 00:00:00 2001 From: "a.sreekumar" Date: Thu, 8 Aug 2019 08:57:34 +0000 Subject: Change to fix PDP-A incorrectly going into ACTIVE state even during APEX engine failure PDP-A goes to ACTIVE state even when the APEX engine failed to start. This is fixed. Change-Id: Iad4b45abf257f68267dd2526a624dc6d882c84af Issue-ID: POLICY-1980 Signed-off-by: a.sreekumar --- .../policy/apex/service/engine/main/ApexMain.java | 17 +++++-- .../services/onappf/handler/ApexEngineHandler.java | 2 +- .../handler/PdpStateChangeMessageHandler.java | 10 ++-- .../onappf/handler/PdpUpdateMessageHandler.java | 58 ++++++++++++++-------- 4 files changed, 59 insertions(+), 28 deletions(-) diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java index 2c649c274..3bf842c92 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java @@ -1,19 +1,20 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * Modification Copyright (C) 2019 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========================================================= */ @@ -23,7 +24,8 @@ package org.onap.policy.apex.service.engine.main; import java.util.Arrays; import java.util.Base64; import java.util.Map.Entry; - +import lombok.Getter; +import lombok.Setter; import org.onap.policy.apex.model.basicmodel.concepts.ApexException; import org.onap.policy.apex.service.parameters.ApexParameterHandler; import org.onap.policy.apex.service.parameters.ApexParameters; @@ -45,6 +47,10 @@ public class ApexMain { // The parameters read in from JSON private ApexParameters parameters; + @Getter + @Setter(lombok.AccessLevel.PRIVATE) + private volatile boolean alive = false; + /** * Instantiates the Apex service. * @@ -101,6 +107,7 @@ public class ApexMain { // Start the activator try { activator.initialize(); + setAlive(true); } catch (final ApexActivatorException e) { LOGGER.error("start of Apex service failed, used parameters are " + Arrays.toString(args), e); return; @@ -129,6 +136,7 @@ public class ApexMain { if (activator != null) { activator.terminate(); } + setAlive(false); } /** @@ -144,6 +152,7 @@ public class ApexMain { try { // Shutdown the Apex engine and wait for everything to stop activator.terminate(); + setAlive(false); } catch (final ApexException e) { LOGGER.warn("error occured during shut down of the Apex service", e); } diff --git a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/handler/ApexEngineHandler.java b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/handler/ApexEngineHandler.java index 699f26c66..4f68b90ae 100644 --- a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/handler/ApexEngineHandler.java +++ b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/handler/ApexEngineHandler.java @@ -96,7 +96,7 @@ public class ApexEngineHandler { * Method to check whether the apex engine is running or not. */ public boolean isApexEngineRunning() { - return null != apexMain; + return null != apexMain && apexMain.isAlive(); } /** diff --git a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/handler/PdpStateChangeMessageHandler.java b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/handler/PdpStateChangeMessageHandler.java index 495bceccd..8658150c0 100644 --- a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/handler/PdpStateChangeMessageHandler.java +++ b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/handler/PdpStateChangeMessageHandler.java @@ -21,7 +21,6 @@ package org.onap.policy.apex.services.onappf.handler; import java.util.List; - import org.onap.policy.apex.services.onappf.ApexStarterConstants; import org.onap.policy.apex.services.onappf.comm.PdpStatusPublisher; import org.onap.policy.apex.services.onappf.exception.ApexStarterException; @@ -99,9 +98,14 @@ public class PdpStateChangeMessageHandler { final ApexEngineHandler apexEngineHandler = new ApexEngineHandler(policies.get(0).getProperties().get("content")); Registry.registerOrReplace(ApexStarterConstants.REG_APEX_ENGINE_HANDLER, apexEngineHandler); - pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpStateChangeMsg.getRequestId(), + if (apexEngineHandler.isApexEngineRunning()) { + pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpStateChangeMsg.getRequestId(), PdpResponseStatus.SUCCESS, "Apex engine started. State changed to active."); - pdpStatusContext.setState(PdpState.ACTIVE); + pdpStatusContext.setState(PdpState.ACTIVE); + } else { + pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpStateChangeMsg.getRequestId(), + PdpResponseStatus.FAIL, "Apex engine failed to start. State cannot be changed to active."); + } } catch (final ApexStarterException e) { LOGGER.error("Pdp update failed as the policies couldn't be undeployed.", e); pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpStateChangeMsg.getRequestId(), diff --git a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/handler/PdpUpdateMessageHandler.java b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/handler/PdpUpdateMessageHandler.java index 64d465784..d807dc50e 100644 --- a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/handler/PdpUpdateMessageHandler.java +++ b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/handler/PdpUpdateMessageHandler.java @@ -21,7 +21,6 @@ package org.onap.policy.apex.services.onappf.handler; import java.util.List; - import org.onap.policy.apex.services.onappf.ApexStarterConstants; import org.onap.policy.apex.services.onappf.comm.PdpStatusPublisher; import org.onap.policy.apex.services.onappf.exception.ApexStarterException; @@ -106,30 +105,49 @@ public class PdpUpdateMessageHandler { LOGGER.debug("ApenEngineHandler not in registry.", e); } if (pdpUpdateMsg.getPolicies().isEmpty()) { - if (null != apexEngineHandler && apexEngineHandler.isApexEngineRunning()) { - try { - apexEngineHandler.shutdown(); - } catch (final ApexStarterException e) { - LOGGER.error("Pdp update failed as the policies couldn't be undeployed.", e); - pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpUpdateMsg.getRequestId(), - PdpResponseStatus.FAIL, "Pdp update failed as the policies couldn't be undeployed."); - } - } + pdpResponseDetails = stopApexEngineBasedOnPolicies(pdpUpdateMsg, pdpMessageHandler, apexEngineHandler); } else { + pdpResponseDetails = startApexEngineBasedOnPolicies(pdpUpdateMsg, pdpMessageHandler, apexEngineHandler); + } + return pdpResponseDetails; + } + + private PdpResponseDetails stopApexEngineBasedOnPolicies(final PdpUpdate pdpUpdateMsg, + final PdpMessageHandler pdpMessageHandler, ApexEngineHandler apexEngineHandler) { + PdpResponseDetails pdpResponseDetails = null; + if (null != apexEngineHandler && apexEngineHandler.isApexEngineRunning()) { try { - if (null != apexEngineHandler && apexEngineHandler.isApexEngineRunning()) { - apexEngineHandler.shutdown(); - } - apexEngineHandler = - new ApexEngineHandler(pdpUpdateMsg.getPolicies().get(0).getProperties().get("content")); - Registry.registerOrReplace(ApexStarterConstants.REG_APEX_ENGINE_HANDLER, apexEngineHandler); - pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpUpdateMsg.getRequestId(), - PdpResponseStatus.SUCCESS, "Apex engine started and policies are running."); + apexEngineHandler.shutdown(); } catch (final ApexStarterException e) { - LOGGER.error("Apex engine service running failed. ", e); + LOGGER.error("Pdp update failed as the policies couldn't be undeployed.", e); + pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpUpdateMsg.getRequestId(), + PdpResponseStatus.FAIL, "Pdp update failed as the policies couldn't be undeployed."); + } + } + return pdpResponseDetails; + } + + private PdpResponseDetails startApexEngineBasedOnPolicies(final PdpUpdate pdpUpdateMsg, + final PdpMessageHandler pdpMessageHandler, ApexEngineHandler apexEngineHandler) { + PdpResponseDetails pdpResponseDetails = null; + try { + if (null != apexEngineHandler && apexEngineHandler.isApexEngineRunning()) { + apexEngineHandler.shutdown(); + } + apexEngineHandler = + new ApexEngineHandler(pdpUpdateMsg.getPolicies().get(0).getProperties().get("content")); + Registry.registerOrReplace(ApexStarterConstants.REG_APEX_ENGINE_HANDLER, apexEngineHandler); + if (apexEngineHandler.isApexEngineRunning()) { + pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpUpdateMsg.getRequestId(), + PdpResponseStatus.SUCCESS, "Apex engine started and policies are running."); + } else { pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpUpdateMsg.getRequestId(), - PdpResponseStatus.FAIL, "Apex engine service running failed. " + e.getMessage()); + PdpResponseStatus.FAIL, "Apex engine failed to start."); } + } catch (final ApexStarterException e) { + LOGGER.error("Apex engine service running failed. ", e); + pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpUpdateMsg.getRequestId(), + PdpResponseStatus.FAIL, "Apex engine service running failed. " + e.getMessage()); } return pdpResponseDetails; } -- cgit 1.2.3-korg