From 163fe0a86c55877695bed9b685d41759a087daf2 Mon Sep 17 00:00:00 2001 From: jhh Date: Tue, 1 Dec 2020 16:38:35 -0600 Subject: block status operations until controllers ready manual port of https://gerrit.onap.org/r/c/policy/drools-pdp/+/111665 Issue-ID: POLICY-2901 Signed-off-by: jhh Change-Id: Ib8c265228385901fc7e65cefabd612e990c20f2f Signed-off-by: jhh --- .../feature/config/feature-lifecycle.properties | 5 ++- .../onap/policy/drools/lifecycle/LifecycleFsm.java | 43 ++++++++++++++++++---- .../drools/lifecycle/LifecycleStateRunning.java | 10 +++-- 3 files changed, 46 insertions(+), 12 deletions(-) (limited to 'feature-lifecycle/src/main') diff --git a/feature-lifecycle/src/main/feature/config/feature-lifecycle.properties b/feature-lifecycle/src/main/feature/config/feature-lifecycle.properties index 076da1f9..b495664d 100644 --- a/feature-lifecycle/src/main/feature/config/feature-lifecycle.properties +++ b/feature-lifecycle/src/main/feature/config/feature-lifecycle.properties @@ -1,7 +1,7 @@ # ============LICENSE_START======================================================= # ONAP # ================================================================================ -# Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. +# Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved. # ================================================================================ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -18,6 +18,9 @@ lifecycle.pdp.group=${envd:POLICY_PDP_PAP_GROUP:defaultGroup} +# Mandatory policy types that this PDP-D must support at a minimum +lifecycle.pdp.policytypes=${envd:POLICY_PDP_PAP_POLICYTYPES} + dmaap.source.topics=POLICY-PDP-PAP dmaap.sink.topics=POLICY-PDP-PAP diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java index ac76883f..de256e21 100644 --- a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java +++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java @@ -23,10 +23,12 @@ package org.onap.policy.drools.lifecycle; import com.fasterxml.jackson.annotation.JsonIgnore; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Properties; +import java.util.Set; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -78,6 +80,7 @@ public class LifecycleFsm implements Startable { protected static final String CONFIGURATION_PROPERTIES_NAME = "feature-lifecycle"; protected static final String GROUP_NAME = "lifecycle.pdp.group"; + protected static final String MANDATORY_POLICY_TYPES = "lifecycle.pdp.policytypes"; protected static final String DEFAULT_PDP_GROUP = "defaultGroup"; protected static final long MIN_STATUS_INTERVAL_SECONDS = 5L; protected static final String PDP_MESSAGE_NAME = "messageName"; @@ -129,6 +132,9 @@ public class LifecycleFsm implements Startable { @Setter protected String subgroup; + @Getter + protected Set mandatoryPolicyTypes = new HashSet<>(); + @Getter protected final Map policyTypesMap = new HashMap<>(); @@ -147,6 +153,16 @@ public class LifecycleFsm implements Startable { this.policyTypesMap.put( POLICY_TYPE_DROOLS_NATIVE_RULES, new PolicyTypeNativeArtifactController(this, POLICY_TYPE_DROOLS_NATIVE_RULES)); + + String commaSeparatedPolicyTypes = this.properties.getProperty(MANDATORY_POLICY_TYPES); + if (!StringUtils.isBlank(commaSeparatedPolicyTypes)) { + for (String mpt: commaSeparatedPolicyTypes.split("\\s*,\\s*")) { + this.mandatoryPolicyTypes.add(mpt); + } + } + + logger.info("The mandatory Policy Types are {}. Compliance is {}", + this.mandatoryPolicyTypes, this.isMandatoryPolicyTypesCompliant()); } @JsonIgnore @@ -167,6 +183,7 @@ public class LifecycleFsm implements Startable { return state.state(); } + /* ** FSM events - entry points of events into the FSM ** */ @Override @@ -187,12 +204,12 @@ public class LifecycleFsm implements Startable { for (ToscaPolicyTypeIdentifier id : controller.getPolicyTypes()) { if (isToscaPolicyType(id.getName())) { - PolicyTypeDroolsController ptDroolsController = (PolicyTypeDroolsController) policyTypesMap.get(id); - if (ptDroolsController == null) { + PolicyTypeDroolsController ptDc = (PolicyTypeDroolsController) policyTypesMap.get(id); //NOSONAR + if (ptDc == null) { policyTypesMap.put(id, new PolicyTypeDroolsController(this, id, controller)); logger.info("policy-type {} added", id); } else { - ptDroolsController.add(controller); + ptDc.add(controller); } } } @@ -331,10 +348,6 @@ public class LifecycleFsm implements Startable { return stopTimers() && startTimers(); } - protected PolicyTypeController getController(ToscaPolicyTypeIdentifier policyType) { - return policyTypesMap.get(policyType); - } - protected List getDeployablePoliciesAction(@NonNull List policies) { List deployPolicies = new ArrayList<>(policies); deployPolicies.removeAll(policiesMap.values()); @@ -365,6 +378,22 @@ public class LifecycleFsm implements Startable { return (this.scheduler.submit( () -> state.updatePolicies(toscaPolicies)) != null); } + protected PolicyTypeController getController(ToscaPolicyTypeIdentifier policyType) { + return policyTypesMap.get(policyType); + } + + /** + * Do I support the mandatory policy types?. + */ + protected boolean isMandatoryPolicyTypesCompliant() { + return getCurrentPolicyTypes().containsAll(getMandatoryPolicyTypes()); + } + + protected Set getCurrentPolicyTypes() { + return getPolicyTypesMap().keySet().stream() + .map(ToscaPolicyTypeIdentifier::getName).collect(Collectors.toSet()); + } + /* ** Action Helpers ** */ private boolean startIo() { diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStateRunning.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStateRunning.java index f762bff0..42790fc6 100644 --- a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStateRunning.java +++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStateRunning.java @@ -79,11 +79,13 @@ public abstract class LifecycleStateRunning extends LifecycleStateDefault { @Override public boolean status() { synchronized (fsm) { - if (fsm.getPolicyTypesMap().isEmpty()) { - return true; - } else { - return fsm.statusAction(); + if (!fsm.isMandatoryPolicyTypesCompliant()) { + logger.info("Not all expected policy types are registered yet, current={}, expected={}", + fsm.getCurrentPolicyTypes(), fsm.getMandatoryPolicyTypes()); + return false; } + + return fsm.statusAction(); } } -- cgit 1.2.3-korg