summaryrefslogtreecommitdiffstats
path: root/runtime-acm/src/main/java/org/onap/policy
diff options
context:
space:
mode:
Diffstat (limited to 'runtime-acm/src/main/java/org/onap/policy')
-rw-r--r--runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionAcHandler.java2
-rw-r--r--runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandler.java15
-rw-r--r--runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionParticipantHandler.java3
-rw-r--r--runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScanner.java69
-rw-r--r--runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/TimeoutHandler.java18
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);
}