From 855fade6ec6e31a80681c692ddfdc21c97e97b08 Mon Sep 17 00:00:00 2001 From: ramverma Date: Fri, 22 Nov 2019 16:42:03 +0000 Subject: Re-register pdp if not found in DB During heartbeat processing, if the pdp instance is not found in the DB then registering the pdp again. So that it doesn't go out of sync. Added related test cases. Issue-ID: POLICY-2158 Change-Id: I557e2397536fd5b3a2783ec89d75ca0e43dcf9d0 Signed-off-by: ramverma --- .../pap/main/comm/PdpStatusMessageHandler.java | 15 +++--- .../pap/main/comm/PdpHeartbeatListenerTest.java | 58 ++++++++++++++++++---- main/src/test/resources/e2e/PdpGroups.json | 9 +++- 3 files changed, 62 insertions(+), 20 deletions(-) diff --git a/main/src/main/java/org/onap/policy/pap/main/comm/PdpStatusMessageHandler.java b/main/src/main/java/org/onap/policy/pap/main/comm/PdpStatusMessageHandler.java index 1ea8e86b..2b80a306 100644 --- a/main/src/main/java/org/onap/policy/pap/main/comm/PdpStatusMessageHandler.java +++ b/main/src/main/java/org/onap/policy/pap/main/comm/PdpStatusMessageHandler.java @@ -143,30 +143,27 @@ public class PdpStatusMessageHandler extends PdpMessageGenerator { } private void handlePdpHeartbeat(final PdpStatus message, final PolicyModelsProvider databaseProvider) - throws PfModelException, PolicyPapException { - boolean pdpInstanceFound = false; + throws PfModelException { Optional pdpSubgroup = null; Optional pdpInstance = null; + PdpGroup pdpGroup = null; final PdpGroupFilter filter = PdpGroupFilter.builder().name(message.getPdpGroup()).groupState(PdpState.ACTIVE).build(); final List pdpGroups = databaseProvider.getFilteredPdpGroups(filter); if (!pdpGroups.isEmpty()) { - final PdpGroup pdpGroup = pdpGroups.get(0); + pdpGroup = pdpGroups.get(0); pdpSubgroup = findPdpSubGroup(message, pdpGroup); if (pdpSubgroup.isPresent()) { pdpInstance = findPdpInstance(message, pdpSubgroup.get()); if (pdpInstance.isPresent()) { processPdpDetails(message, pdpSubgroup.get(), pdpInstance.get(), pdpGroup, databaseProvider); - pdpInstanceFound = true; + } else { + LOGGER.debug("PdpInstance not Found in DB. Sending Pdp for registration - {}", message); + registerPdp(message, databaseProvider, pdpGroup); } } } - if (!pdpInstanceFound) { - final String errorMessage = "Failed to process heartbeat. No matching PdpGroup/SubGroup Found - "; - LOGGER.debug("{}{}", errorMessage, message); - throw new PolicyPapException(errorMessage + message); - } } private Optional findPdpSubGroup(final PdpStatus message, final PdpGroup pdpGroup) { diff --git a/main/src/test/java/org/onap/policy/pap/main/comm/PdpHeartbeatListenerTest.java b/main/src/test/java/org/onap/policy/pap/main/comm/PdpHeartbeatListenerTest.java index 960adc16..93d65a09 100644 --- a/main/src/test/java/org/onap/policy/pap/main/comm/PdpHeartbeatListenerTest.java +++ b/main/src/test/java/org/onap/policy/pap/main/comm/PdpHeartbeatListenerTest.java @@ -45,7 +45,7 @@ import org.onap.policy.pap.main.rest.e2e.End2EndBase; public class PdpHeartbeatListenerTest extends End2EndBase { private static final String POLICY_VERSION = "1.0.0"; - private static final String POLICY_NAME = "onap.restart.tca"; + private static final String POLICY_NAME = "onap.policies.controlloop.operational.Apex.SampleDomain"; private static final String APEX_TYPE = "apex"; private static final String DEFAULT_GROUP = "defaultGroup"; private static final String PDP_NAME = "pdp_1"; @@ -98,7 +98,7 @@ public class PdpHeartbeatListenerTest extends End2EndBase { Arrays.asList(new ToscaPolicyIdentifier(POLICY_NAME, POLICY_VERSION)); status3.setPolicies(idents3); pdpHeartbeatListener.onTopicEvent(INFRA, TOPIC, status3); - verifyPdpGroup(DEFAULT_GROUP, 1); + verifyPdpGroup(DEFAULT_GROUP, 2); // Testing pdp registration failure case final PdpStatus status4 = new PdpStatus(); @@ -111,9 +111,9 @@ public class PdpHeartbeatListenerTest extends End2EndBase { Arrays.asList(new ToscaPolicyIdentifier(POLICY_NAME, POLICY_VERSION)); status4.setPolicies(idents4); pdpHeartbeatListener.onTopicEvent(INFRA, TOPIC, status4); - verifyPdpGroup(DEFAULT_GROUP, 1); + verifyPdpGroup(DEFAULT_GROUP, 2); - // Testing pdp heartbeat failure case with pdp mismatch + // Testing pdp heartbeat failure case with pdp state mismatch final PdpStatus status5 = new PdpStatus(); status5.setName(PDP_NAME); status5.setState(PdpState.PASSIVE); @@ -125,20 +125,60 @@ public class PdpHeartbeatListenerTest extends End2EndBase { Arrays.asList(new ToscaPolicyIdentifier(POLICY_NAME, POLICY_VERSION)); status5.setPolicies(idents5); pdpHeartbeatListener.onTopicEvent(INFRA, TOPIC, status5); - verifyPdpGroup(DEFAULT_GROUP, 1); + verifyPdpGroup(DEFAULT_GROUP, 2); - // Testing pdp termination case + // Testing pdp heartbeat failure case with pdp policies mismatch final PdpStatus status6 = new PdpStatus(); status6.setName(PDP_NAME); - status6.setState(PdpState.TERMINATED); + status6.setState(PdpState.ACTIVE); status6.setPdpGroup(DEFAULT_GROUP); status6.setPdpType(APEX_TYPE); - status6.setPdpSubgroup(APEX_TYPE); status6.setHealthy(PdpHealthStatus.HEALTHY); + status6.setPdpSubgroup(APEX_TYPE); final List idents6 = - Arrays.asList(new ToscaPolicyIdentifier(POLICY_NAME, POLICY_VERSION)); + Arrays.asList(new ToscaPolicyIdentifier(POLICY_NAME, POLICY_VERSION), + new ToscaPolicyIdentifier("onap.restart.tca", POLICY_VERSION)); status6.setPolicies(idents6); pdpHeartbeatListener.onTopicEvent(INFRA, TOPIC, status6); + verifyPdpGroup(DEFAULT_GROUP, 2); + + // Testing pdp heartbeat failure case with pdp no policies + final PdpStatus status7 = new PdpStatus(); + status7.setName(PDP_NAME); + status7.setState(PdpState.ACTIVE); + status7.setPdpGroup(DEFAULT_GROUP); + status7.setPdpType(APEX_TYPE); + status7.setHealthy(PdpHealthStatus.HEALTHY); + status7.setPdpSubgroup(APEX_TYPE); + pdpHeartbeatListener.onTopicEvent(INFRA, TOPIC, status7); + verifyPdpGroup(DEFAULT_GROUP, 2); + + // Testing pdp termination case for pdp_1 + final PdpStatus status8 = new PdpStatus(); + status8.setName(PDP_NAME); + status8.setState(PdpState.TERMINATED); + status8.setPdpGroup(DEFAULT_GROUP); + status8.setPdpType(APEX_TYPE); + status8.setPdpSubgroup(APEX_TYPE); + status8.setHealthy(PdpHealthStatus.HEALTHY); + final List idents8 = + Arrays.asList(new ToscaPolicyIdentifier(POLICY_NAME, POLICY_VERSION)); + status8.setPolicies(idents8); + pdpHeartbeatListener.onTopicEvent(INFRA, TOPIC, status8); + verifyPdpGroup(DEFAULT_GROUP, 1); + + // Testing pdp termination case for pdp_2 + final PdpStatus status9 = new PdpStatus(); + status9.setName("pdp_2"); + status9.setState(PdpState.TERMINATED); + status9.setPdpGroup(DEFAULT_GROUP); + status9.setPdpType(APEX_TYPE); + status9.setPdpSubgroup(APEX_TYPE); + status9.setHealthy(PdpHealthStatus.HEALTHY); + final List idents9 = + Arrays.asList(new ToscaPolicyIdentifier(POLICY_NAME, POLICY_VERSION)); + status9.setPolicies(idents9); + pdpHeartbeatListener.onTopicEvent(INFRA, TOPIC, status9); verifyPdpGroup(DEFAULT_GROUP, 0); } diff --git a/main/src/test/resources/e2e/PdpGroups.json b/main/src/test/resources/e2e/PdpGroups.json index a92ec063..e15a7acd 100644 --- a/main/src/test/resources/e2e/PdpGroups.json +++ b/main/src/test/resources/e2e/PdpGroups.json @@ -102,9 +102,14 @@ "version": "1.0.0" } ], + "policies": [ + { + "name": "onap.policies.controlloop.operational.Apex.SampleDomain", + "version": "1.0.0" + } + ], "currentInstanceCount": 0, - "desiredInstanceCount": 1, - "policies": [] + "desiredInstanceCount": 1 } ] } -- cgit 1.2.3-korg