diff options
author | Liam Fallon <liam.fallon@est.tech> | 2021-08-26 08:21:49 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@onap.org> | 2021-08-26 08:21:49 +0000 |
commit | 281a36c50d68f29e0e47dfec10ee8be38f5e5761 (patch) | |
tree | 1ad3f98fd4c9a74b601577e463210e73eaa4f4f2 /participant | |
parent | db82b84e140e78e5f4145ed6d73fe089134dd173 (diff) | |
parent | 3971c419e094cb149c3e01781343d6265af64db6 (diff) |
Merge "Updated handling of ack messages"
Diffstat (limited to 'participant')
13 files changed, 109 insertions, 79 deletions
diff --git a/participant/participant-impl/participant-impl-dcae/src/main/java/org/onap/policy/clamp/controlloop/participant/dcae/main/handler/ControlLoopElementHandler.java b/participant/participant-impl/participant-impl-dcae/src/main/java/org/onap/policy/clamp/controlloop/participant/dcae/main/handler/ControlLoopElementHandler.java index b80fbfb5b..221635db0 100644 --- a/participant/participant-impl/participant-impl-dcae/src/main/java/org/onap/policy/clamp/controlloop/participant/dcae/main/handler/ControlLoopElementHandler.java +++ b/participant/participant-impl/participant-impl-dcae/src/main/java/org/onap/policy/clamp/controlloop/participant/dcae/main/handler/ControlLoopElementHandler.java @@ -30,6 +30,7 @@ import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementSt import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState; +import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType; import org.onap.policy.clamp.controlloop.participant.dcae.httpclient.ClampHttpClient; import org.onap.policy.clamp.controlloop.participant.dcae.httpclient.ConsulDcaeHttpClient; import org.onap.policy.clamp.controlloop.participant.dcae.main.parameters.ParticipantDcaeParameters; @@ -99,14 +100,16 @@ public class ControlLoopElementHandler implements ControlLoopElementListener { if (loop != null) { clampClient.undeploy(LOOP); intermediaryApi.updateControlLoopElementState(controlLoopElementId, newState, - ControlLoopState.UNINITIALISED); + ControlLoopState.UNINITIALISED, ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE); } break; case PASSIVE: - intermediaryApi.updateControlLoopElementState(controlLoopElementId, newState, ControlLoopState.PASSIVE); + intermediaryApi.updateControlLoopElementState(controlLoopElementId, newState, ControlLoopState.PASSIVE, + ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE); break; case RUNNING: - intermediaryApi.updateControlLoopElementState(controlLoopElementId, newState, ControlLoopState.RUNNING); + intermediaryApi.updateControlLoopElementState(controlLoopElementId, newState, ControlLoopState.RUNNING, + ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE); break; default: LOGGER.debug("Unknown orderedstate {}", newState); @@ -157,7 +160,7 @@ public class ControlLoopElementHandler implements ControlLoopElementListener { String status = ClampHttpClient.getStatusCode(loop); if (MICROSERVICE_INSTALLED_SUCCESSFULLY.equals(status)) { intermediaryApi.updateControlLoopElementState(element.getId(), element.getOrderedState(), - ControlLoopState.PASSIVE); + ControlLoopState.PASSIVE, ParticipantMessageType.CONTROL_LOOP_UPDATE); deployedFlag = true; break; } @@ -165,7 +168,7 @@ public class ControlLoopElementHandler implements ControlLoopElementListener { if (!deployedFlag) { LOGGER.warn("DCAE is not deployed properly, ClElement state will be UNINITIALISED2PASSIVE"); intermediaryApi.updateControlLoopElementState(element.getId(), element.getOrderedState(), - ControlLoopState.UNINITIALISED2PASSIVE); + ControlLoopState.UNINITIALISED2PASSIVE, ParticipantMessageType.CONTROL_LOOP_UPDATE); } } } catch (PfModelException e) { diff --git a/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/main/rest/TestListenerUtils.java b/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/main/rest/TestListenerUtils.java index c6dd927da..febdf6b08 100644 --- a/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/main/rest/TestListenerUtils.java +++ b/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/main/rest/TestListenerUtils.java @@ -51,7 +51,7 @@ public class TestListenerUtils { private static final YamlJsonTranslator yamlTranslator = new YamlJsonTranslator(); private static final Coder CODER = new StandardCoder(); private static final String TOSCA_TEMPLATE_YAML = "examples/controlloop/PMSubscriptionHandling.yaml"; - private static final String CONTROL_LOOP_ELEMENT = "ControlLoopElement"; + private static final String CONTROL_LOOP_ELEMENT = "org.onap.policy.clamp.controlloop.ControlLoopElement"; /** * Method to create a controlLoop from a yaml file. diff --git a/participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/handler/ControlLoopElementHandler.java b/participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/handler/ControlLoopElementHandler.java index 8aa74f30f..24a075529 100644 --- a/participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/handler/ControlLoopElementHandler.java +++ b/participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/handler/ControlLoopElementHandler.java @@ -33,6 +33,7 @@ import lombok.Setter; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState; +import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType; import org.onap.policy.clamp.controlloop.participant.intermediary.api.ControlLoopElementListener; import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi; import org.onap.policy.clamp.controlloop.participant.kubernetes.exception.ServiceException; @@ -96,7 +97,7 @@ public class ControlLoopElementHandler implements ControlLoopElementListener { try { chartService.uninstallChart(chart); intermediaryApi.updateControlLoopElementState(controlLoopElementId, newState, - ControlLoopState.UNINITIALISED); + ControlLoopState.UNINITIALISED, ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE); chartMap.remove(controlLoopElementId); podStatusMap.remove(chart.getReleaseName()); } catch (ServiceException se) { @@ -105,10 +106,12 @@ public class ControlLoopElementHandler implements ControlLoopElementListener { } break; case PASSIVE: - intermediaryApi.updateControlLoopElementState(controlLoopElementId, newState, ControlLoopState.PASSIVE); + intermediaryApi.updateControlLoopElementState(controlLoopElementId, newState, ControlLoopState.PASSIVE, + ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE); break; case RUNNING: - intermediaryApi.updateControlLoopElementState(controlLoopElementId, newState, ControlLoopState.RUNNING); + intermediaryApi.updateControlLoopElementState(controlLoopElementId, newState, ControlLoopState.RUNNING, + ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE); break; default: LOGGER.warn("cannot transition from state {} to state {}", currentState, newState); diff --git a/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/main/handler/ControlLoopElementHandler.java b/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/main/handler/ControlLoopElementHandler.java index 0e19ea33e..b17ae4311 100644 --- a/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/main/handler/ControlLoopElementHandler.java +++ b/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/main/handler/ControlLoopElementHandler.java @@ -32,6 +32,7 @@ import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementSt import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState; +import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType; import org.onap.policy.clamp.controlloop.participant.intermediary.api.ControlLoopElementListener; import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi; import org.onap.policy.clamp.controlloop.participant.policy.client.PolicyApiHttpClient; @@ -89,10 +90,12 @@ public class ControlLoopElementHandler implements ControlLoopElementListener { } break; case PASSIVE: - intermediaryApi.updateControlLoopElementState(controlLoopElementId, newState, ControlLoopState.PASSIVE); + intermediaryApi.updateControlLoopElementState(controlLoopElementId, newState, ControlLoopState.PASSIVE, + ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE); break; case RUNNING: - intermediaryApi.updateControlLoopElementState(controlLoopElementId, newState, ControlLoopState.RUNNING); + intermediaryApi.updateControlLoopElementState(controlLoopElementId, newState, ControlLoopState.RUNNING, + ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE); break; default: LOGGER.debug("Unknown orderedstate {}", newState); @@ -111,7 +114,8 @@ public class ControlLoopElementHandler implements ControlLoopElementListener { apiHttpClient.deletePolicyType(policyType.getKey(), policyType.getValue()); } policyTypeMap.clear(); - intermediaryApi.updateControlLoopElementState(controlLoopElementId, newState, ControlLoopState.UNINITIALISED); + intermediaryApi.updateControlLoopElementState(controlLoopElementId, newState, ControlLoopState.UNINITIALISED, + ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE); } /** @@ -125,7 +129,7 @@ public class ControlLoopElementHandler implements ControlLoopElementListener { public void controlLoopElementUpdate(ControlLoopElement element, ToscaNodeTemplate clElementDefinition) throws PfModelException { intermediaryApi.updateControlLoopElementState(element.getId(), element.getOrderedState(), - ControlLoopState.PASSIVE); + ControlLoopState.PASSIVE, ParticipantMessageType.CONTROL_LOOP_UPDATE); ToscaServiceTemplate controlLoopDefinition = intermediaryApi.getToscaServiceTemplate(); if (controlLoopDefinition.getToscaTopologyTemplate() != null) { if (controlLoopDefinition.getPolicyTypes() != null) { diff --git a/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/endtoend/ParticipantMessagesTest.java b/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/endtoend/ParticipantMessagesTest.java index df9a4b259..699df25e8 100644 --- a/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/endtoend/ParticipantMessagesTest.java +++ b/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/endtoend/ParticipantMessagesTest.java @@ -161,21 +161,7 @@ class ParticipantMessagesTest { @Test void testParticipantStatusHeartbeat() throws Exception { - final ParticipantStatus heartbeat = new ParticipantStatus(); - heartbeat.setParticipantId(getParticipantId()); - ControlLoopInfo clInfo = getControlLoopInfo(getControlLoopId()); - clInfo.setControlLoopId(getControlLoopId()); - heartbeat.setControlLoopInfoList(List.of(clInfo)); - - ControlLoopElementDefinition clDefinition = getClElementDefinition(); - List<ControlLoopElementDefinition> controlLoopElementDefinitionList = - List.of(clDefinition); - ParticipantDefinition participantDefinition = new ParticipantDefinition(); - participantDefinition.setParticipantId(getParticipantId()); - participantDefinition.setControlLoopElementDefinitionList(controlLoopElementDefinitionList); - List<ParticipantDefinition> participantDefinitionUpdates = List.of(participantDefinition); - heartbeat.setParticipantDefinitionUpdates(participantDefinitionUpdates); - + final ParticipantStatus heartbeat = participantHandler.makeHeartbeat(true); synchronized (lockit) { ParticipantMessagePublisher publisher = new ParticipantMessagePublisher(Collections.singletonList(Mockito.mock(TopicSink.class))); diff --git a/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/utils/TestListenerUtils.java b/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/utils/TestListenerUtils.java index 5984cf149..4c87e0875 100644 --- a/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/utils/TestListenerUtils.java +++ b/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/utils/TestListenerUtils.java @@ -59,7 +59,7 @@ public class TestListenerUtils { private static final Coder CODER = new StandardCoder(); static CommonTestData commonTestData = new CommonTestData(); private static final Logger LOGGER = LoggerFactory.getLogger(TestListenerUtils.class); - private static final String CONTROL_LOOP_ELEMENT = "ControlLoopElement"; + private static final String CONTROL_LOOP_ELEMENT = "org.onap.policy.clamp.controlloop.ControlLoopElement"; private TestListenerUtils() {} diff --git a/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/simulation/SimulationProvider.java b/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/simulation/SimulationProvider.java index 49338c2b0..a7d21164f 100644 --- a/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/simulation/SimulationProvider.java +++ b/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/simulation/SimulationProvider.java @@ -27,6 +27,7 @@ import org.onap.policy.clamp.controlloop.common.exception.ControlLoopException; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant; +import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType; import org.onap.policy.clamp.controlloop.models.messages.rest.TypedSimpleResponse; import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi; import org.springframework.stereotype.Service; @@ -79,7 +80,7 @@ public class SimulationProvider { public TypedSimpleResponse<ControlLoopElement> updateControlLoopElement(ControlLoopElement element) { TypedSimpleResponse<ControlLoopElement> response = new TypedSimpleResponse<>(); response.setResponse(intermediaryApi.updateControlLoopElementState(element.getId(), element.getOrderedState(), - element.getState())); + element.getState(), ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE)); return response; } diff --git a/participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/controlloop/participant/simulator/main/rest/TestListenerUtils.java b/participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/controlloop/participant/simulator/main/rest/TestListenerUtils.java index 2b8de6ae1..83ef68e86 100644 --- a/participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/controlloop/participant/simulator/main/rest/TestListenerUtils.java +++ b/participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/controlloop/participant/simulator/main/rest/TestListenerUtils.java @@ -59,7 +59,7 @@ public class TestListenerUtils { private static final Coder CODER = new StandardCoder(); static CommonTestData commonTestData = new CommonTestData(); private static final Logger LOGGER = LoggerFactory.getLogger(TestListenerUtils.class); - private static final String CONTROL_LOOP_ELEMENT = "ControlLoopElement"; + private static final String CONTROL_LOOP_ELEMENT = "org.onap.policy.clamp.controlloop.ControlLoopElement"; private TestListenerUtils() {} diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/api/ParticipantIntermediaryApi.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/api/ParticipantIntermediaryApi.java index aa2027ab8..ed0aea4b3 100644 --- a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/api/ParticipantIntermediaryApi.java +++ b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/api/ParticipantIntermediaryApi.java @@ -31,6 +31,7 @@ import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatistics; +import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType; import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; @@ -123,7 +124,7 @@ public interface ParticipantIntermediaryApi { * @return ControlLoopElement updated control loop element */ ControlLoopElement updateControlLoopElementState(UUID id, ControlLoopOrderedState currentState, - ControlLoopState newState); + ControlLoopState newState, ParticipantMessageType messageType); /** * Update the control loop element statistics. diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/api/impl/ParticipantIntermediaryApiImpl.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/api/impl/ParticipantIntermediaryApiImpl.java index a2a4c3436..ded102f5a 100644 --- a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/api/impl/ParticipantIntermediaryApiImpl.java +++ b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/api/impl/ParticipantIntermediaryApiImpl.java @@ -33,6 +33,7 @@ import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatistics; +import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType; import org.onap.policy.clamp.controlloop.participant.intermediary.api.ControlLoopElementListener; import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi; import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ParticipantHandler; @@ -127,8 +128,9 @@ public class ParticipantIntermediaryApiImpl implements ParticipantIntermediaryAp @Override public ControlLoopElement updateControlLoopElementState(UUID id, ControlLoopOrderedState currentState, - ControlLoopState newState) { - return participantHandler.getControlLoopHandler().updateControlLoopElementState(id, currentState, newState); + ControlLoopState newState, ParticipantMessageType messageType) { + return participantHandler.getControlLoopHandler().updateControlLoopElementState(id, currentState, newState, + messageType); } @Override diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/MessageSender.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/MessageSender.java index 990c3df7d..680acd276 100644 --- a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/MessageSender.java +++ b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/MessageSender.java @@ -146,7 +146,7 @@ public class MessageSender extends TimerTask implements Closeable { * Dispatch a heartbeat for this participant. */ public void sendHeartbeat() { - publisher.sendHeartbeat(participantHandler.makeHeartbeat()); + publisher.sendHeartbeat(participantHandler.makeHeartbeat(false)); } /** diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ControlLoopHandler.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ControlLoopHandler.java index 2bc21f713..0e276f390 100644 --- a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ControlLoopHandler.java +++ b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ControlLoopHandler.java @@ -64,6 +64,7 @@ public class ControlLoopHandler { private ToscaConceptIdentifier participantId = null; private MessageSender messageSender = null; + @Getter private final Map<ToscaConceptIdentifier, ControlLoop> controlLoopMap = new LinkedHashMap<>(); @Getter @@ -97,7 +98,7 @@ public class ControlLoopHandler { * @return controlLoopElement the updated controlloop element */ public ControlLoopElement updateControlLoopElementState(UUID id, ControlLoopOrderedState orderedState, - ControlLoopState newState) { + ControlLoopState newState, ParticipantMessageType messageType) { if (id == null) { LOGGER.warn("Cannot update Control loop element state, id is null"); @@ -146,37 +147,38 @@ public class ControlLoopHandler { } var controlLoop = controlLoopMap.get(stateChangeMsg.getControlLoopId()); + var controlLoopAck = new ControlLoopAck(ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE); if (controlLoop == null) { + controlLoopAck.setMessage("Control loop " + stateChangeMsg.getControlLoopId() + + " does not use this participant " + participantId); + controlLoopAck.setResult(false); + controlLoopAck.setResponseTo(stateChangeMsg.getMessageId()); + controlLoopAck.setControlLoopId(stateChangeMsg.getControlLoopId()); + messageSender.sendAckResponse(controlLoopAck); LOGGER.debug("Control loop {} does not use this participant", stateChangeMsg.getControlLoopId()); return; } - var controlLoopStateChangeAck = new ControlLoopAck(ParticipantMessageType.CONTROLLOOP_STATECHANGE_ACK); - controlLoopStateChangeAck.setResponseTo(stateChangeMsg.getMessageId()); - controlLoopStateChangeAck.setControlLoopId(stateChangeMsg.getControlLoopId()); - handleState(controlLoop, controlLoopStateChangeAck, stateChangeMsg.getOrderedState()); - messageSender.sendAckResponse(controlLoopStateChangeAck); + handleState(controlLoop, stateChangeMsg.getOrderedState()); } /** * Method to handle state changes. * * @param controlLoop participant response - * @param response participant response * @param orderedState controlloop ordered state */ - private void handleState(final ControlLoop controlLoop, final ControlLoopAck response, - ControlLoopOrderedState orderedState) { + private void handleState(final ControlLoop controlLoop, ControlLoopOrderedState orderedState) { switch (orderedState) { case UNINITIALISED: - handleUninitialisedState(controlLoop, orderedState, response); + handleUninitialisedState(controlLoop, orderedState); break; case PASSIVE: - handlePassiveState(controlLoop, orderedState, response); + handlePassiveState(controlLoop, orderedState); break; case RUNNING: - handleRunningState(controlLoop, orderedState, response); + handleRunningState(controlLoop, orderedState); break; default: LOGGER.debug("StateChange message has no state, state is null {}", controlLoop.getDefinition()); @@ -203,11 +205,11 @@ public class ControlLoopHandler { // TODO: Updates to existing ControlLoops are not supported yet (Addition/Removal of ControlLoop // elements to existing ControlLoop has to be supported). if (controlLoop != null) { - controlLoopUpdateAck.setResponseTo(updateMsg.getMessageId()); - controlLoopUpdateAck.setControlLoopId(updateMsg.getControlLoopId()); controlLoopUpdateAck.setMessage("Control loop " + updateMsg.getControlLoopId() + " already defined on participant " + participantId); controlLoopUpdateAck.setResult(false); + controlLoopUpdateAck.setResponseTo(updateMsg.getMessageId()); + controlLoopUpdateAck.setControlLoopId(updateMsg.getControlLoopId()); messageSender.sendAckResponse(controlLoopUpdateAck); return; } @@ -231,13 +233,6 @@ public class ControlLoopHandler { controlLoop.setDefinition(updateMsg.getControlLoopId()); controlLoop.setElements(clElementMap); controlLoopMap.put(updateMsg.getControlLoopId(), controlLoop); - - controlLoopUpdateAck.setResponseTo(updateMsg.getMessageId()); - controlLoopUpdateAck.setControlLoopId(updateMsg.getControlLoopId()); - controlLoopUpdateAck.setMessage("Control loop " + updateMsg.getControlLoopId() - + " defined on participant " + participantId); - controlLoopUpdateAck.setResult(true); - messageSender.sendAckResponse(controlLoopUpdateAck); } private ToscaNodeTemplate getClElementNodeTemplate(List<ControlLoopElementDefinition> clElementDefinitions, @@ -276,11 +271,9 @@ public class ControlLoopHandler { * * @param controlLoop participant response * @param orderedState orderedState - * @param response participant response */ - private void handleUninitialisedState(final ControlLoop controlLoop, final ControlLoopOrderedState orderedState, - final ControlLoopAck response) { - handleStateChange(controlLoop, orderedState, ControlLoopState.UNINITIALISED, response); + private void handleUninitialisedState(final ControlLoop controlLoop, final ControlLoopOrderedState orderedState) { + handleStateChange(controlLoop, orderedState, ControlLoopState.UNINITIALISED); controlLoopMap.remove(controlLoop.getKey().asIdentifier()); for (ControlLoopElementListener clElementListener : listeners) { @@ -299,11 +292,9 @@ public class ControlLoopHandler { * * @param controlLoop participant response * @param orderedState orderedState - * @param response participant response */ - private void handlePassiveState(final ControlLoop controlLoop, final ControlLoopOrderedState orderedState, - final ControlLoopAck response) { - handleStateChange(controlLoop, orderedState, ControlLoopState.PASSIVE, response); + private void handlePassiveState(final ControlLoop controlLoop, final ControlLoopOrderedState orderedState) { + handleStateChange(controlLoop, orderedState, ControlLoopState.PASSIVE); } /** @@ -311,11 +302,9 @@ public class ControlLoopHandler { * * @param controlLoop participant response * @param orderedState orderedState - * @param response participant response */ - private void handleRunningState(final ControlLoop controlLoop, final ControlLoopOrderedState orderedState, - final ControlLoopAck response) { - handleStateChange(controlLoop, orderedState, ControlLoopState.RUNNING, response); + private void handleRunningState(final ControlLoop controlLoop, final ControlLoopOrderedState orderedState) { + handleStateChange(controlLoop, orderedState, ControlLoopState.RUNNING); } /** @@ -324,14 +313,16 @@ public class ControlLoopHandler { * @param controlLoop participant status in memory * @param orderedState orderedState the new ordered state the participant should have * @param newState new state of the control loop elements - * @param response the response to the state change request */ private void handleStateChange(ControlLoop controlLoop, final ControlLoopOrderedState orderedState, - ControlLoopState newState, ControlLoopAck response) { + ControlLoopState newState) { if (orderedState.equals(controlLoop.getOrderedState())) { - response.setMessage("Control loop is already in state " + orderedState); - response.setResult(false); + var controlLoopAck = new ControlLoopAck(ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE); + controlLoopAck.setMessage("Control loop is already in state" + orderedState); + controlLoopAck.setResult(false); + controlLoopAck.setControlLoopId(controlLoop.getDefinition()); + messageSender.sendAckResponse(controlLoopAck); return; } @@ -342,8 +333,6 @@ public class ControlLoopHandler { }); } - response.setMessage("ControlLoop state changed from " + controlLoop.getOrderedState() + " to " + orderedState); - response.setResult(true); controlLoop.setOrderedState(orderedState); } diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ParticipantHandler.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ParticipantHandler.java index f887f6578..1947fda1a 100644 --- a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ParticipantHandler.java +++ b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ParticipantHandler.java @@ -26,11 +26,16 @@ import java.io.Closeable; import java.time.Instant; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.UUID; import lombok.Getter; import lombok.Setter; +import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatisticsList; +import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElementDefinition; +import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopInfo; +import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopStatistics; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantDefinition; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantHealthStatus; @@ -112,7 +117,7 @@ public class ParticipantHandler implements Closeable { * @param participantStatusReqMsg participant participantStatusReq message */ public void handleParticipantStatusReq(final ParticipantStatusReq participantStatusReqMsg) { - sender.sendParticipantStatus(makeHeartbeat()); + sender.sendParticipantStatus(makeHeartbeat(true)); } /** @@ -247,10 +252,17 @@ public class ParticipantHandler implements Closeable { } toscaServiceTemplate = participantUpdateMsg.getToscaServiceTemplate(); - for (ParticipantDefinition participantDefinition : participantUpdateMsg.getParticipantDefinitionUpdates()) { - if (participantDefinition.getParticipantId().equals(participantType)) { - clElementDefsOnThisParticipant = participantDefinition.getControlLoopElementDefinitionList(); + if (toscaServiceTemplate != null) { + // This message is to commission the controlloop + for (ParticipantDefinition participantDefinition : participantUpdateMsg.getParticipantDefinitionUpdates()) { + if (participantDefinition.getParticipantId().equals(participantType)) { + clElementDefsOnThisParticipant = participantDefinition.getControlLoopElementDefinitionList(); + break; + } } + } else { + // This message is to decommision the controlloop + clElementDefsOnThisParticipant.clear(); } sendParticipantUpdateAck(participantUpdateMsg.getMessageId()); } @@ -272,7 +284,7 @@ public class ParticipantHandler implements Closeable { /** * Method to send heartbeat to controlloop runtime. */ - public ParticipantStatus makeHeartbeat() { + public ParticipantStatus makeHeartbeat(boolean responseToParticipantStatusReq) { this.participantStatistics.setState(state); this.participantStatistics.setHealthStatus(healthStatus); this.participantStatistics.setTimeStamp(Instant.now()); @@ -283,6 +295,35 @@ public class ParticipantHandler implements Closeable { heartbeat.setParticipantType(participantType); heartbeat.setHealthStatus(healthStatus); heartbeat.setState(state); + heartbeat.setControlLoopInfoList(getControlLoopInfoList()); + + if (responseToParticipantStatusReq) { + List<ParticipantDefinition> participantDefinitionUpdates = new ArrayList<>(); + ParticipantDefinition participantDefinition = new ParticipantDefinition(); + participantDefinition.setParticipantId(participantId); + participantDefinition.setControlLoopElementDefinitionList(clElementDefsOnThisParticipant); + participantDefinitionUpdates.add(participantDefinition); + heartbeat.setParticipantDefinitionUpdates(participantDefinitionUpdates); + } + return heartbeat; } + + private List<ControlLoopInfo> getControlLoopInfoList() { + List<ControlLoopInfo> controlLoopInfoList = new ArrayList<>(); + for (Map.Entry<ToscaConceptIdentifier, ControlLoop> entry : + controlLoopHandler.getControlLoopMap().entrySet()) { + ControlLoopInfo clInfo = new ControlLoopInfo(); + clInfo.setControlLoopId(entry.getKey()); + ControlLoopStatistics clStatitistics = new ControlLoopStatistics(); + clStatitistics.setControlLoopId(entry.getKey()); + ClElementStatisticsList clElementStatisticsList = new ClElementStatisticsList(); + clElementStatisticsList.setClElementStatistics( + entry.getValue().getControlLoopElementStatisticsList(entry.getValue())); + clStatitistics.setClElementStatisticsList(clElementStatisticsList); + clInfo.setControlLoopStatistics(clStatitistics); + clInfo.setState(entry.getValue().getState()); + } + return controlLoopInfoList; + } } |