From 031a0fe51dff21445034befc8a6d8732622acd07 Mon Sep 17 00:00:00 2001 From: Jim Hahn Date: Fri, 6 Aug 2021 16:57:45 -0400 Subject: Leave xacml-pdp REST server always running Liveness checks depend on the xacml-pdp REST server being available. However, the REST server is only running when PAP puts it in an active state. Modified the code to always leave it running. In a subsequent review, we should split the healthcheck REST service onto its own port so it can be left running, while the other services are started/stopped in response to PAP active/passive requests. Issue-ID: POLICY-3531 Change-Id: I412064abaf91bb966d40adc46cee771b3a0a5dfc Signed-off-by: Jim Hahn --- .../java/org/onap/policy/pdpx/main/XacmlState.java | 27 ------------------ .../pdpx/main/startstop/XacmlPdpActivator.java | 5 ++++ .../org/onap/policy/pdpx/main/XacmlStateTest.java | 3 -- .../pdpx/main/startstop/TestXacmlPdpActivator.java | 32 ++++++++++------------ 4 files changed, 20 insertions(+), 47 deletions(-) diff --git a/main/src/main/java/org/onap/policy/pdpx/main/XacmlState.java b/main/src/main/java/org/onap/policy/pdpx/main/XacmlState.java index 857047bf..0b6f30ca 100644 --- a/main/src/main/java/org/onap/policy/pdpx/main/XacmlState.java +++ b/main/src/main/java/org/onap/policy/pdpx/main/XacmlState.java @@ -33,16 +33,11 @@ import org.onap.policy.models.pdp.enums.PdpResponseStatus; import org.onap.policy.models.pdp.enums.PdpState; import org.onap.policy.pdpx.main.rest.XacmlPdpApplicationManager; import org.onap.policy.pdpx.main.startstop.XacmlPdpActivator; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Current state of this XACML PDP. */ public class XacmlState { - // The logger for this class - private static final Logger LOGGER = LoggerFactory.getLogger(XacmlState.class); - /** * Unique name for the xacml-pdp JVM, used in PdpStatus messages. */ @@ -112,9 +107,6 @@ public class XacmlState { PdpStatus status2 = makeResponse(message, ""); - // start/stop rest controller based on state change - handleXacmlRestController(); - // these fields aren't needed in the response, so clear them out to avoid sending status2.setPolicies(null); @@ -167,23 +159,4 @@ public class XacmlState { status2.setResponse(resp); return status2; } - - /** - * Manages the Xacml-Pdp rest controller based on the Xacml-Pdp State. - * Current supported states: - * ACTIVE - rest service is running and handling requests - * PASSIVE - rest service is not running - */ - private void handleXacmlRestController() { - if (status.getState() == PdpState.ACTIVE) { - LOGGER.info("State change: {} - Starting rest controller", status.getState()); - XacmlPdpActivator.getCurrent().startXacmlRestController(); - } else if (status.getState() == PdpState.PASSIVE) { - LOGGER.info("State change: {} - Stopping rest controller", status.getState()); - XacmlPdpActivator.getCurrent().stopXacmlRestController(); - } else { - // unsupported state - LOGGER.warn("Unsupported state: {}", status.getState()); - } - } } diff --git a/main/src/main/java/org/onap/policy/pdpx/main/startstop/XacmlPdpActivator.java b/main/src/main/java/org/onap/policy/pdpx/main/startstop/XacmlPdpActivator.java index e74ab9bf..4dd8a9b3 100644 --- a/main/src/main/java/org/onap/policy/pdpx/main/startstop/XacmlPdpActivator.java +++ b/main/src/main/java/org/onap/policy/pdpx/main/startstop/XacmlPdpActivator.java @@ -145,11 +145,16 @@ public class XacmlPdpActivator extends ServiceManagerContainer { addAction("Terminate PDP", () -> { }, () -> sendTerminateMessage(sinkClient, state)); + // initial heart beats act as registration messages addAction("Heartbeat Publisher", heartbeat::start, heartbeat::terminate); + addAction("REST Server", + restServer::start, + restServer::stop); + // @formatter:on } diff --git a/main/src/test/java/org/onap/policy/pdpx/main/XacmlStateTest.java b/main/src/test/java/org/onap/policy/pdpx/main/XacmlStateTest.java index 5ff3d5c7..feaaf4f6 100644 --- a/main/src/test/java/org/onap/policy/pdpx/main/XacmlStateTest.java +++ b/main/src/test/java/org/onap/policy/pdpx/main/XacmlStateTest.java @@ -26,7 +26,6 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.junit.AfterClass; @@ -130,12 +129,10 @@ public class XacmlStateTest { req.setState(PdpState.ACTIVE); status = state.updateInternalState(req); assertEquals(PdpState.ACTIVE, status.getState()); - verify(act).startXacmlRestController(); req.setState(PdpState.PASSIVE); status = state.updateInternalState(req); assertEquals(PdpState.PASSIVE, status.getState()); - verify(act).stopXacmlRestController(); } @Test diff --git a/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java b/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java index bb814d37..4286ccf5 100644 --- a/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java +++ b/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2019 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -70,6 +70,17 @@ public class TestXacmlPdpActivator extends CommonRest { activator = new XacmlPdpActivator(parGroup); } + /** + * Teardown tests. + * @throws PolicyXacmlPdpException on termination errors + */ + @After + public void teardown() throws PolicyXacmlPdpException { + if (activator != null && activator.isAlive()) { + activator.stop(); + } + } + @Test public void testXacmlPdpActivator() throws Exception { assertFalse(activator.isAlive()); @@ -77,17 +88,15 @@ public class TestXacmlPdpActivator extends CommonRest { activator.start(); assertTrue(activator.isAlive()); - // XacmlPdp starts in PASSIVE state so the rest controller should not be alive - assertFalse(activator.isXacmlRestControllerAlive()); assertTrue(activator.getParameterGroup().isValid()); assertEquals(CommonTestData.PDPX_PARAMETER_GROUP_NAME, activator.getParameterGroup().getName()); assertEquals(CommonTestData.PDPX_GROUP, activator.getParameterGroup().getPdpGroup()); - activator.startXacmlRestController(); - assertTrue(activator.isXacmlRestControllerAlive()); - activator.stopXacmlRestController(); assertFalse(activator.isXacmlRestControllerAlive()); + + activator.startXacmlRestController(); + assertTrue(activator.isXacmlRestControllerAlive()); } @Test @@ -102,15 +111,4 @@ public class TestXacmlPdpActivator extends CommonRest { activator.stop(); assertFalse(activator.isAlive()); } - - /** - * Teardown tests. - * @throws PolicyXacmlPdpException on termination errors - */ - @After - public void teardown() throws PolicyXacmlPdpException { - if (activator != null && activator.isAlive()) { - activator.stop(); - } - } } -- cgit 1.2.3-korg