aboutsummaryrefslogtreecommitdiffstats
path: root/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStateRunning.java
diff options
context:
space:
mode:
Diffstat (limited to 'feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStateRunning.java')
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStateRunning.java48
1 files changed, 43 insertions, 5 deletions
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 916d155e..405dbeba 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
@@ -21,13 +21,16 @@
package org.onap.policy.drools.lifecycle;
import java.util.List;
+import java.util.function.BiFunction;
import lombok.NonNull;
+import org.onap.policy.drools.system.PolicyController;
import org.onap.policy.models.pdp.concepts.PdpResponseDetails;
import org.onap.policy.models.pdp.concepts.PdpStateChange;
import org.onap.policy.models.pdp.concepts.PdpUpdate;
import org.onap.policy.models.pdp.enums.PdpResponseStatus;
import org.onap.policy.models.pdp.enums.PdpState;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -38,9 +41,13 @@ public abstract class LifecycleStateRunning extends LifecycleStateDefault {
private static final Logger logger = LoggerFactory.getLogger(LifecycleState.class);
- protected abstract boolean stateChangeToPassive(PdpStateChange change);
+ protected abstract boolean stateChangeToPassive(@NonNull PdpStateChange change);
- protected abstract boolean stateChangeToActive(PdpStateChange change);
+ protected abstract boolean stateChangeToActive(@NonNull PdpStateChange change);
+
+ protected abstract boolean deployPolicy(@NonNull PolicyController controller, @NonNull ToscaPolicy policy);
+
+ protected abstract boolean undeployPolicy(@NonNull PolicyController controller, @NonNull ToscaPolicy policy);
protected LifecycleStateRunning(LifecycleFsm manager) {
super(manager);
@@ -104,7 +111,8 @@ public abstract class LifecycleStateRunning extends LifecycleStateDefault {
@Override
public boolean update(@NonNull PdpUpdate update) {
synchronized (fsm) {
- if (!fsm.setStatusIntervalAction(update.getPdpHeartbeatIntervalMs() / 1000)) {
+ if (update.getPdpHeartbeatIntervalMs() != null
+ && !fsm.setStatusIntervalAction(update.getPdpHeartbeatIntervalMs() / 1000)) {
fsm.statusAction(response(update.getRequestId(), PdpResponseStatus.FAIL,
"invalid interval: " + update.getPdpHeartbeatIntervalMs() + " seconds"));
return false;
@@ -122,8 +130,38 @@ public abstract class LifecycleStateRunning extends LifecycleStateDefault {
}
protected boolean updatePolicies(List<ToscaPolicy> policies) {
- // TODO
- return true;
+ if (policies == null) {
+ return true;
+ }
+
+ boolean success = deployPolicies(policies);
+ return undeployPolicies(policies) && success;
+ }
+
+ protected boolean deployPolicies(List<ToscaPolicy> policies) {
+ return syncPolicies(fsm.getDeployablePoliciesAction(policies), this::deployPolicy);
+ }
+
+ protected boolean undeployPolicies(List<ToscaPolicy> policies) {
+ return syncPolicies(fsm.getUndeployablePoliciesAction(policies), this::undeployPolicy);
+ }
+
+ protected boolean syncPolicies(List<ToscaPolicy> policies,
+ BiFunction<PolicyController, ToscaPolicy, Boolean> sync) {
+ boolean success = true;
+ for (ToscaPolicy policy : policies) {
+ ToscaPolicyTypeIdentifier policyType = policy.getTypeIdentifier();
+ PolicyController controller = fsm.getController(policyType);
+ if (controller == null) {
+ logger.warn("no controller found for {}", policyType);
+ success = false;
+ continue;
+ }
+
+ success = sync.apply(controller, policy) && success;
+ }
+
+ return success;
}
private void invalidStateChange(PdpStateChange change) {