diff options
author | 2020-03-31 21:05:14 -0500 | |
---|---|---|
committer | 2020-04-01 10:59:29 -0500 | |
commit | ece155048af47ea83ff898c999aa5137dc99a988 (patch) | |
tree | 25af254f7cbbb42a99b9b98d5e6767c65aef563d /feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java | |
parent | 565b43c67c8964fe9e046435307e479921881566 (diff) |
Sync controller capabilities as controllers bounce
As native policies introduce temporality in policy types
supported as they are removed and added, the associated
policy types that can be honored at a a given time, may
need to adjust.
A significan portion of this review is dedicated to multi-policy
junits and telemetry instrumentation.
Issue-ID: POLICY-2459
Signed-off-by: jhh <jorge.hernandez-herrero@att.com>
Change-Id: I62bbc03411446849eaa55c9b1524220dc13c2cb0
Signed-off-by: jhh <jorge.hernandez-herrero@att.com>
Diffstat (limited to 'feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java')
-rw-r--r-- | feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java | 23 |
1 files changed, 15 insertions, 8 deletions
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 3ecb4b3a..ac76883f 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 @@ -31,6 +31,7 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; import lombok.Getter; import lombok.NonNull; import lombok.Setter; @@ -189,6 +190,7 @@ public class LifecycleFsm implements Startable { PolicyTypeDroolsController ptDroolsController = (PolicyTypeDroolsController) policyTypesMap.get(id); if (ptDroolsController == null) { policyTypesMap.put(id, new PolicyTypeDroolsController(this, id, controller)); + logger.info("policy-type {} added", id); } else { ptDroolsController.add(controller); } @@ -219,14 +221,19 @@ public class LifecycleFsm implements Startable { */ public synchronized void stop(@NonNull PolicyController controller) { logger.info("lifecycle event: stop controller: {}", controller.getName()); - for (ToscaPolicyTypeIdentifier id : controller.getPolicyTypes()) { - if (!policyTypesMap.containsKey(id)) { - continue; - } - PolicyTypeDroolsController ptDroolsController = (PolicyTypeDroolsController) policyTypesMap.get(id); - ptDroolsController.remove(controller); - if (ptDroolsController.controllers().isEmpty()) { - policyTypesMap.remove(id); + + List<PolicyTypeDroolsController> opControllers = + policyTypesMap.values().stream() + .filter(typeController -> typeController instanceof PolicyTypeDroolsController) + .map(typeController -> (PolicyTypeDroolsController) typeController) + .filter(opController -> opController.getControllers().containsKey(controller.getName())) + .collect(Collectors.toList()); + + for (PolicyTypeDroolsController opController : opControllers) { + opController.remove(controller); + if (opController.controllers().isEmpty()) { + policyTypesMap.remove(opController.getPolicyType()); + logger.info("policy-type {} removed", opController.getPolicyType()); } } } |