Update participant state and health in DB 74/124074/1
authorSirisha_Manchikanti <sirisha.manchikanti@est.tech>
Mon, 13 Sep 2021 13:52:59 +0000 (14:52 +0100)
committerSirisha_Manchikanti <sirisha.manchikanti@est.tech>
Mon, 13 Sep 2021 14:02:07 +0000 (15:02 +0100)
Update the state and health-status of a participant in database
to TERMINATED and OFF_LINE respectively when there is a
ParticipantDeregister message from any of the participants.

Issue-ID: POLICY-3578
Signed-off-by: Sirisha_Manchikanti <sirisha.manchikanti@est.tech>
Change-Id: I9c6c028be4c15922717795e2a53cb53d02579dcc

runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionHandler.java

index a426cac..dbc2c4e 100644 (file)
@@ -34,6 +34,8 @@ import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop
 import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopInfo;
 import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
 import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
+import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantHealthStatus;
+import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
 import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ControlLoopProvider;
 import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantProvider;
 import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopAck;
@@ -159,6 +161,22 @@ public class SupervisionHandler {
     @MessageIntercept
     public void handleParticipantMessage(ParticipantDeregister participantDeregisterMessage) {
         LOGGER.debug("Participant Deregister received {}", participantDeregisterMessage);
+        try {
+            var participantList =
+                participantProvider.getParticipants(participantDeregisterMessage.getParticipantId().getName(),
+                    participantDeregisterMessage.getParticipantId().getVersion());
+
+            if (participantList != null) {
+                for (Participant participant : participantList) {
+                    participant.setParticipantState(ParticipantState.TERMINATED);
+                    participant.setHealthStatus(ParticipantHealthStatus.OFF_LINE);
+                }
+                participantProvider.updateParticipants(participantList);
+            }
+        } catch (PfModelException pfme) {
+            LOGGER.warn("Model exception occured {}", participantDeregisterMessage.getParticipantId());
+        }
+
         participantDeregisterAckPublisher.send(participantDeregisterMessage.getMessageId());
     }