diff options
Diffstat (limited to 'runtime-acm/src/main')
5 files changed, 73 insertions, 34 deletions
diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionAcHandler.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionAcHandler.java index a5dc0e78e..d6fa5d8d7 100644 --- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionAcHandler.java +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionAcHandler.java @@ -204,7 +204,6 @@ public class SupervisionAcHandler { description = "AUTOMATION_COMPOSITION_DEPLOY_ACK messages received") public void handleAutomationCompositionUpdateAckMessage( AutomationCompositionDeployAck automationCompositionAckMessage) { - LOGGER.debug("AutomationComposition Update Ack message received {}", automationCompositionAckMessage); setAcElementStateInDb(automationCompositionAckMessage); } @@ -219,7 +218,6 @@ public class SupervisionAcHandler { description = "AUTOMATION_COMPOSITION_STATECHANGE_ACK messages received") public void handleAutomationCompositionStateChangeAckMessage( AutomationCompositionDeployAck automationCompositionAckMessage) { - LOGGER.debug("AutomationComposition StateChange Ack message received {}", automationCompositionAckMessage); setAcElementStateInDb(automationCompositionAckMessage); } diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandler.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandler.java index 660cb28a5..963e4830e 100644 --- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandler.java +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandler.java @@ -52,7 +52,6 @@ public class SupervisionHandler { */ @Timed(value = "listener.participant_prime_ack", description = "PARTICIPANT_PRIME_ACK messages received") public void handleParticipantMessage(ParticipantPrimeAck participantPrimeAckMessage) { - LOGGER.debug("Participant Prime Ack message received {}", participantPrimeAckMessage); var acDefinitionOpt = acDefinitionProvider.findAcDefinition(participantPrimeAckMessage.getCompositionId()); if (acDefinitionOpt.isEmpty()) { LOGGER.warn("AC Definition not found in database {}", participantPrimeAckMessage.getCompositionId()); @@ -74,8 +73,10 @@ public class SupervisionHandler { || AcTypeState.PRIMED.equals(acDefinition.getState()) ? AcTypeState.PRIMED : AcTypeState.COMMISSIONED; var msgInErrors = StateChangeResult.FAILED.equals(participantPrimeAckMessage.getStateChangeResult()); boolean inProgress = !StateChangeResult.FAILED.equals(acDefinition.getStateChangeResult()); + boolean toUpdate = false; if (inProgress && msgInErrors) { acDefinition.setStateChangeResult(StateChangeResult.FAILED); + toUpdate = true; } boolean completed = true; @@ -85,6 +86,7 @@ public class SupervisionHandler { element.setMessage(participantPrimeAckMessage.getMessage()); element.setState(participantPrimeAckMessage.getCompositionState()); element.setRestarting(null); + acDefinitionProvider.updateAcDefinitionElement(element, acDefinition.getCompositionId()); } if (!finalState.equals(element.getState())) { completed = false; @@ -95,16 +97,19 @@ public class SupervisionHandler { } if (inProgress && !msgInErrors && completed) { + toUpdate = true; acDefinition.setState(finalState); if (StateChangeResult.TIMEOUT.equals(acDefinition.getStateChangeResult())) { acDefinition.setStateChangeResult(StateChangeResult.NO_ERROR); } } - if (!restarting) { + if (!restarting && acDefinition.getRestarting() != null) { + toUpdate = true; acDefinition.setRestarting(null); } - acDefinitionProvider.updateAcDefinition(acDefinition, - acRuntimeParameterGroup.getAcmParameters().getToscaCompositionName()); + if (toUpdate) { + acDefinitionProvider.updateAcDefinitionState(acDefinition.getCompositionId(), acDefinition.getState(), + acDefinition.getStateChangeResult(), acDefinition.getRestarting()); + } } - } diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionParticipantHandler.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionParticipantHandler.java index 7a2c58d50..24c256fa4 100644 --- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionParticipantHandler.java +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionParticipantHandler.java @@ -74,7 +74,6 @@ public class SupervisionParticipantHandler { @MessageIntercept @Timed(value = "listener.participant_register", description = "PARTICIPANT_REGISTER messages received") public void handleParticipantMessage(ParticipantRegister participantRegisterMsg) { - LOGGER.debug("Participant Register received {}", participantRegisterMsg); var participantOpt = participantProvider.findParticipant(participantRegisterMsg.getParticipantId()); if (participantOpt.isPresent()) { @@ -100,7 +99,6 @@ public class SupervisionParticipantHandler { @MessageIntercept @Timed(value = "listener.participant_deregister", description = "PARTICIPANT_DEREGISTER messages received") public void handleParticipantMessage(ParticipantDeregister participantDeregisterMsg) { - LOGGER.debug("Participant Deregister received {}", participantDeregisterMsg); var participantOpt = participantProvider.findParticipant(participantDeregisterMsg.getParticipantId()); if (participantOpt.isPresent()) { @@ -120,7 +118,6 @@ public class SupervisionParticipantHandler { @MessageIntercept @Timed(value = "listener.participant_status", description = "PARTICIPANT_STATUS messages received") public void handleParticipantMessage(ParticipantStatus participantStatusMsg) { - LOGGER.debug("Participant Status received {}", participantStatusMsg); var participantOpt = participantProvider.findParticipant(participantStatusMsg.getParticipantId()); if (participantOpt.isEmpty()) { diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScanner.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScanner.java index 33118fab7..881969a90 100644 --- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScanner.java +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScanner.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2021-2023 Nordix Foundation. + * Copyright (C) 2021-2024 Nordix Foundation. * ================================================================================ * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved. * ================================================================================ @@ -23,8 +23,11 @@ package org.onap.policy.clamp.acm.runtime.supervision; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import java.util.UUID; +import java.util.stream.Collectors; import org.onap.policy.clamp.acm.runtime.main.parameters.AcRuntimeParameterGroup; import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionDeployPublisher; import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionStateChangePublisher; @@ -56,7 +59,6 @@ public class SupervisionScanner { private final AcDefinitionProvider acDefinitionProvider; private final AutomationCompositionStateChangePublisher automationCompositionStateChangePublisher; private final AutomationCompositionDeployPublisher automationCompositionDeployPublisher; - private final AcRuntimeParameterGroup acRuntimeParameterGroup; /** * Constructor for instantiating SupervisionScanner. @@ -76,7 +78,6 @@ public class SupervisionScanner { this.acDefinitionProvider = acDefinitionProvider; this.automationCompositionStateChangePublisher = automationCompositionStateChangePublisher; this.automationCompositionDeployPublisher = automationCompositionDeployPublisher; - this.acRuntimeParameterGroup = acRuntimeParameterGroup; acTimeout.setMaxWaitMs(acRuntimeParameterGroup.getParticipantParameters().getMaxStatusWaitMs()); } @@ -87,20 +88,27 @@ public class SupervisionScanner { public void run() { LOGGER.debug("Scanning automation compositions in the database . . ."); - var list = acDefinitionProvider.getAllAcDefinitions(); - for (var acDefinition : list) { - if (AcTypeState.PRIMING.equals(acDefinition.getState()) - || AcTypeState.DEPRIMING.equals(acDefinition.getState())) { - scanAutomationCompositionDefinition(acDefinition); - } else { - acTimeout.clear(acDefinition.getCompositionId()); - var acList = - automationCompositionProvider.getAcInstancesByCompositionId(acDefinition.getCompositionId()); - for (var automationComposition : acList) { - scanAutomationComposition(automationComposition, acDefinition.getServiceTemplate()); - } + var acDefinitionList = acDefinitionProvider.getAllAcDefinitionsInTransition(); + for (var acDefinition : acDefinitionList) { + scanAutomationCompositionDefinition(acDefinition); + } + Set<UUID> set = new HashSet<>(); + set.addAll(acDefinitionList + .stream().map(AutomationCompositionDefinition::getCompositionId).collect(Collectors.toSet())); + + var acList = automationCompositionProvider.getAcInstancesInTransition(); + HashMap<UUID, AutomationCompositionDefinition> acDefinitionMap = new HashMap<>(); + for (var automationComposition : acList) { + var acDefinition = acDefinitionMap.get(automationComposition.getCompositionId()); + if (acDefinition == null) { + acDefinition = acDefinitionProvider.getAcDefinition(automationComposition.getCompositionId()); + acDefinitionMap.put(acDefinition.getCompositionId(), acDefinition); } + scanAutomationComposition(automationComposition, acDefinition.getServiceTemplate()); } + set.addAll( + acList.stream().map(AutomationComposition::getInstanceId).collect(Collectors.toSet())); + acTimeout.removeIfNotPresent(set); LOGGER.debug("Automation composition scan complete . . ."); } @@ -110,7 +118,7 @@ public class SupervisionScanner { LOGGER.debug("automation definition {} scanned, OK", acDefinition.getCompositionId()); // Clear Timeout on ac Definition - acTimeout.clear(acDefinition.getCompositionId()); + acTimeout.remove(acDefinition.getCompositionId()); return; } @@ -121,7 +129,21 @@ public class SupervisionScanner { acTimeout.clear(acDefinition.getCompositionId()); } - handleTimeout(acDefinition); + boolean completed = true; + var finalState = AcTypeState.PRIMING.equals(acDefinition.getState()) + || AcTypeState.PRIMED.equals(acDefinition.getState()) ? AcTypeState.PRIMED : AcTypeState.COMMISSIONED; + for (var element : acDefinition.getElementStateMap().values()) { + if (!finalState.equals(element.getState())) { + completed = false; + } + } + if (completed) { + acDefinitionProvider.updateAcDefinitionState(acDefinition.getCompositionId(), finalState, + StateChangeResult.NO_ERROR, null); + acTimeout.remove(acDefinition.getCompositionId()); + } else { + handleTimeout(acDefinition); + } } private void scanAutomationComposition(final AutomationComposition automationComposition, @@ -134,7 +156,7 @@ public class SupervisionScanner { LOGGER.debug("automation composition {} scanned, OK", automationComposition.getInstanceId()); // Clear Timeout on automation composition - clearTimeout(automationComposition, true); + removeTimeout(automationComposition); return; } @@ -214,7 +236,7 @@ public class SupervisionScanner { } // Clear timeout on automation composition - clearTimeout(automationComposition, true); + removeTimeout(automationComposition); } private void clearTimeout(AutomationComposition automationComposition, boolean cleanPhase) { @@ -224,6 +246,11 @@ public class SupervisionScanner { } } + private void removeTimeout(AutomationComposition automationComposition) { + acTimeout.remove(automationComposition.getInstanceId()); + phaseMap.remove(automationComposition.getInstanceId()); + } + private void handleTimeout(AutomationCompositionDefinition acDefinition) { var compositionId = acDefinition.getCompositionId(); if (acTimeout.isTimeout(compositionId)) { @@ -235,8 +262,8 @@ public class SupervisionScanner { LOGGER.debug("Report timeout for the ac definition {}", acDefinition.getCompositionId()); acTimeout.setTimeout(compositionId); acDefinition.setStateChangeResult(StateChangeResult.TIMEOUT); - acDefinitionProvider.updateAcDefinition(acDefinition, - acRuntimeParameterGroup.getAcmParameters().getToscaCompositionName()); + acDefinitionProvider.updateAcDefinitionState(acDefinition.getCompositionId(), + acDefinition.getState(), acDefinition.getStateChangeResult(), acDefinition.getRestarting()); } } diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/TimeoutHandler.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/TimeoutHandler.java index 976c91438..3b34252bf 100644 --- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/TimeoutHandler.java +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/TimeoutHandler.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2023 Nordix Foundation. + * Copyright (C) 2023-2024 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,8 +33,8 @@ public class TimeoutHandler<K> { @Setter private long maxWaitMs; - private Set<K> mapTimeout = new HashSet<>(); - private Map<K, Long> mapTimer = new HashMap<>(); + private final Set<K> mapTimeout = new HashSet<>(); + private final Map<K, Long> mapTimer = new HashMap<>(); public long getDuration(K id) { mapTimer.putIfAbsent(id, getEpochMilli()); @@ -61,6 +61,18 @@ public class TimeoutHandler<K> { mapTimer.remove(id); } + /** + * Remove elements that are not present in set. + * + * @param set the elements that should be present + */ + public void removeIfNotPresent(final Set<K> set) { + var res = mapTimeout.stream().filter(el -> !set.contains(el)).toList(); + if (!res.isEmpty()) { + res.forEach(this::remove); + } + } + public void setTimeout(K id) { mapTimeout.add(id); } |