aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/main/java/org/onap/policy/pap/main/comm/PdpStatusMessageHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/main/java/org/onap/policy/pap/main/comm/PdpStatusMessageHandler.java')
-rw-r--r--main/src/main/java/org/onap/policy/pap/main/comm/PdpStatusMessageHandler.java48
1 files changed, 45 insertions, 3 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 2e9adda4..b692a2a5 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
@@ -23,9 +23,13 @@
package org.onap.policy.pap.main.comm;
import java.util.Arrays;
+import java.util.HashMap;
+import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.onap.policy.common.utils.services.Registry;
import org.onap.policy.models.base.PfModelException;
@@ -39,6 +43,8 @@ import org.onap.policy.models.pdp.concepts.PdpSubGroup;
import org.onap.policy.models.pdp.concepts.PdpUpdate;
import org.onap.policy.models.pdp.enums.PdpState;
import org.onap.policy.models.provider.PolicyModelsProvider;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
import org.onap.policy.pap.main.PapConstants;
import org.onap.policy.pap.main.PolicyPapException;
import org.onap.policy.pap.main.parameters.PdpParameters;
@@ -57,6 +63,21 @@ public class PdpStatusMessageHandler extends PdpMessageGenerator {
private final PdpParameters params;
/**
+ * List to store policies present in db.
+ */
+ List<ToscaPolicy> policies = new LinkedList<>();
+
+ /**
+ * List to store policies to be deployed (heartbeat).
+ */
+ Map<ToscaConceptIdentifier, ToscaPolicy> policiesToBeDeployed = new HashMap<>();
+
+ /**
+ * List to store policies to be undeployed (heartbeat).
+ */
+ List<ToscaConceptIdentifier> policiesToBeUndeployed = new LinkedList<>();
+
+ /**
* Constructs the object.
*
* @param params PDP parameters
@@ -129,6 +150,12 @@ public class PdpStatusMessageHandler extends PdpMessageGenerator {
Optional<PdpSubGroup> subGroup;
boolean pdpGroupFound = false;
subGroup = findPdpSubGroup(message, finalizedPdpGroup);
+
+ policies = getToscaPolicies(subGroup.get(), databaseProvider);
+ policiesToBeDeployed = policies.stream().collect(Collectors
+ .toMap(ToscaPolicy::getIdentifier, policy -> policy));
+ policiesToBeUndeployed = null;
+
if (subGroup.isPresent()) {
LOGGER.debug("Found pdpGroup - {}, going for registration of PDP - {}", finalizedPdpGroup, message);
if (!findPdpInstance(message, subGroup.get()).isPresent()) {
@@ -201,7 +228,19 @@ public class PdpStatusMessageHandler extends PdpMessageGenerator {
}
private void processPdpDetails(final PdpStatus message, final PdpSubGroup pdpSubGroup, final Pdp pdpInstance,
- final PdpGroup pdpGroup, final PolicyModelsProvider databaseProvider) throws PfModelException {
+ final PdpGroup pdpGroup, final PolicyModelsProvider databaseProvider)
+ throws PfModelException {
+ // all policies
+ policies = getToscaPolicies(pdpSubGroup, databaseProvider);
+
+ // all (-) policies that the PDP already has
+ policiesToBeDeployed.keySet().removeAll(message.getPolicies());
+
+ // policies that the PDP already has (-) all
+ policiesToBeUndeployed = message.getPolicies();
+ policiesToBeUndeployed.removeAll(policies.stream().map(ToscaPolicy::getIdentifier)
+ .collect(Collectors.toList()));
+
if (PdpState.TERMINATED.equals(message.getState())) {
processPdpTermination(pdpSubGroup, pdpInstance, pdpGroup, databaseProvider);
} else if (validatePdpDetails(message, pdpGroup, pdpSubGroup, pdpInstance)) {
@@ -280,9 +319,12 @@ public class PdpStatusMessageHandler extends PdpMessageGenerator {
}
private void sendPdpMessage(final String pdpGroupName, final PdpSubGroup subGroup, final String pdpInstanceId,
- final PdpState pdpState, final PolicyModelsProvider databaseProvider) throws PfModelException {
+ final PdpState pdpState, final PolicyModelsProvider databaseProvider)
+ throws PfModelException {
+ final List<ToscaPolicy> polsToBeDeployed = new LinkedList<>(policiesToBeDeployed.values());
final PdpUpdate pdpUpdatemessage =
- createPdpUpdateMessage(pdpGroupName, subGroup, pdpInstanceId, databaseProvider);
+ createPdpUpdateMessage(pdpGroupName, subGroup, pdpInstanceId, databaseProvider, policies,
+ polsToBeDeployed, policiesToBeUndeployed);
final PdpStateChange pdpStateChangeMessage =
createPdpStateChangeMessage(pdpGroupName, subGroup, pdpInstanceId, pdpState);
updateDeploymentStatus(pdpGroupName, subGroup.getPdpType(), pdpInstanceId, pdpStateChangeMessage.getState(),