diff options
author | jhh <jorge.hernandez-herrero@att.com> | 2020-02-05 16:33:53 -0600 |
---|---|---|
committer | jhh <jorge.hernandez-herrero@att.com> | 2020-02-05 16:33:53 -0600 |
commit | 1a36afd3037837508cf23e4e476fddcf531dc918 (patch) | |
tree | 6b0e1a87ff2ca612970f0fbd51c6b3358d3d02bb /feature-lifecycle/src/main/java/org | |
parent | a24aa1615648b0698bb662f64915e8ba2d520e03 (diff) |
lifecycle routing policy types to controllers.
Issue-ID: POLICY-2356
Signed-off-by: jhh <jorge.hernandez-herrero@att.com>
Change-Id: I49585507542f41a75e4c7bde2c7be343e19038f3
Diffstat (limited to 'feature-lifecycle/src/main/java/org')
8 files changed, 239 insertions, 37 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 d43357a8..b37d0149 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 @@ -30,6 +30,7 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import lombok.AccessLevel; import lombok.Getter; import lombok.NonNull; import lombok.Setter; @@ -46,6 +47,7 @@ import org.onap.policy.common.gson.annotation.GsonJsonIgnore; import org.onap.policy.common.utils.coder.StandardCoderObject; import org.onap.policy.common.utils.network.NetworkUtil; import org.onap.policy.drools.persistence.SystemPersistenceConstants; +import org.onap.policy.drools.policies.DomainMaker; import org.onap.policy.drools.system.PolicyController; import org.onap.policy.models.pdp.concepts.PdpResponseDetails; import org.onap.policy.models.pdp.concepts.PdpStateChange; @@ -65,6 +67,8 @@ import org.slf4j.LoggerFactory; */ public class LifecycleFsm implements Startable { + private static final Logger logger = LoggerFactory.getLogger(LifecycleFsm.class); + protected static final String CONFIGURATION_PROPERTIES_NAME = "feature-lifecycle"; protected static final String GROUP_NAME = "lifecycle.pdp.group"; protected static final String DEFAULT_PDP_GROUP = "defaultGroup"; @@ -72,10 +76,17 @@ public class LifecycleFsm implements Startable { protected static final long MIN_STATUS_INTERVAL_SECONDS = 5L; protected static final String PDP_MESSAGE_NAME = "messageName"; - private static final Logger logger = LoggerFactory.getLogger(LifecycleFsm.class); + protected static final ToscaPolicyTypeIdentifier POLICY_TYPE_DROOLS_NATIVE_RULES = + new ToscaPolicyTypeIdentifier("onap.policies.native.Drools", "1.0.0"); + + protected static final ToscaPolicyTypeIdentifier POLICY_TYPE_DROOLS_CONTROLLER = + new ToscaPolicyTypeIdentifier("onap.policies.drools.Controller", "1.0.0"); protected final Properties properties; + @Getter(AccessLevel.PACKAGE) + protected final DomainMaker domainMaker = new DomainMaker(); + protected TopicSource source; protected TopicSinkClient client; @@ -110,7 +121,7 @@ public class LifecycleFsm implements Startable { protected String subgroup; @Getter - protected final Map<ToscaPolicyTypeIdentifier, PolicyController> policyTypesMap = new HashMap<>(); + protected final Map<ToscaPolicyTypeIdentifier, PolicyTypeController> policyTypesMap = new HashMap<>(); protected final Map<ToscaPolicyIdentifier, ToscaPolicy> policiesMap = new HashMap<>(); @@ -120,6 +131,13 @@ public class LifecycleFsm implements Startable { public LifecycleFsm() { this.properties = SystemPersistenceConstants.getManager().getProperties(CONFIGURATION_PROPERTIES_NAME); this.group = this.properties.getProperty(GROUP_NAME, DEFAULT_PDP_GROUP); + + this.policyTypesMap.put( + POLICY_TYPE_DROOLS_CONTROLLER, + new PolicyTypeNativeController(this, POLICY_TYPE_DROOLS_CONTROLLER)); + this.policyTypesMap.put( + POLICY_TYPE_DROOLS_NATIVE_RULES, + new PolicyTypeRulesController(this, POLICY_TYPE_DROOLS_NATIVE_RULES)); } @Override @@ -149,7 +167,7 @@ public class LifecycleFsm implements Startable { logger.info("lifecycle event: start controller: {}", controller.getName()); for (ToscaPolicyTypeIdentifier id : controller.getPolicyTypes()) { if (isToscaPolicyType(id.getName())) { - policyTypesMap.put(id, controller); + policyTypesMap.put(id, new PolicyTypeDroolsController(this, id, controller)); } } } @@ -263,7 +281,7 @@ public class LifecycleFsm implements Startable { return stopTimers() && startTimers(); } - protected PolicyController getController(ToscaPolicyTypeIdentifier policyType) { + protected PolicyTypeController getController(ToscaPolicyTypeIdentifier policyType) { return policyTypesMap.get(policyType); } diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStateActive.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStateActive.java index 5e779b7f..80d0bc7e 100644 --- a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStateActive.java +++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStateActive.java @@ -2,7 +2,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. * Modifications Copyright (C) 2019 Bell Canada. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -24,21 +24,16 @@ package org.onap.policy.drools.lifecycle; import java.util.Collections; import lombok.NonNull; import lombok.ToString; -import org.onap.policy.drools.system.PolicyController; import org.onap.policy.models.pdp.concepts.PdpStateChange; 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.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Lifecycle Active State. */ @ToString public class LifecycleStateActive extends LifecycleStateRunning { - private static final Logger logger = LoggerFactory.getLogger(LifecycleStateActive.class); - protected LifecycleStateActive(LifecycleFsm manager) { super(manager); } @@ -61,10 +56,8 @@ public class LifecycleStateActive extends LifecycleStateRunning { } @Override - protected boolean deployPolicy(@NonNull PolicyController controller, @NonNull ToscaPolicy policy) { - logger.info("{}: deploy {} into {}", this, policy.getIdentifier(), controller.getName()); - - if (!controller.offer(policy)) { + protected boolean deployPolicy(@NonNull PolicyTypeController controller, @NonNull ToscaPolicy policy) { + if (!controller.deploy(policy)) { return false; } @@ -73,14 +66,8 @@ public class LifecycleStateActive extends LifecycleStateRunning { } @Override - protected boolean undeployPolicy(@NonNull PolicyController controller, @NonNull ToscaPolicy policy) { - logger.info("{}: undeploy {} from {}", this, policy.getIdentifier(), controller.getName()); - - if (!controller.getDrools().delete(policy)) { - logger.warn("Policy {}:{}:{}:{} was not deployed.", - policy.getType(), policy.getTypeVersion(), policy.getName(), policy.getVersion()); - } - + protected boolean undeployPolicy(@NonNull PolicyTypeController controller, @NonNull ToscaPolicy policy) { + controller.undeploy(policy); fsm.undeployedPolicyAction(policy); return true; } diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStatePassive.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStatePassive.java index b88a200c..8bbdbe92 100644 --- a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStatePassive.java +++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStatePassive.java @@ -22,21 +22,16 @@ package org.onap.policy.drools.lifecycle; import lombok.NonNull; import lombok.ToString; -import org.onap.policy.drools.system.PolicyController; import org.onap.policy.models.pdp.concepts.PdpStateChange; 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.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Lifecycle Passive State. */ @ToString public class LifecycleStatePassive extends LifecycleStateRunning { - private static final Logger logger = LoggerFactory.getLogger(LifecycleStatePassive.class); - protected LifecycleStatePassive(LifecycleFsm manager) { super(manager); } @@ -59,15 +54,13 @@ public class LifecycleStatePassive extends LifecycleStateRunning { } @Override - protected boolean deployPolicy(@NonNull PolicyController controller, @NonNull ToscaPolicy policy) { - logger.info("{}: deploy {} to {}", this, policy.getIdentifier(), controller.getName()); + protected boolean deployPolicy(@NonNull PolicyTypeController controller, @NonNull ToscaPolicy policy) { fsm.deployedPolicyAction(policy); return true; } @Override - protected boolean undeployPolicy(@NonNull PolicyController controller, @NonNull ToscaPolicy policy) { - logger.info("{}: undeploy {} from {}", this, policy.getIdentifier(), controller.getName()); + protected boolean undeployPolicy(@NonNull PolicyTypeController controller, @NonNull ToscaPolicy policy) { fsm.undeployedPolicyAction(policy); return true; } 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 e9ad9ffc..f762bff0 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 @@ -24,7 +24,6 @@ package org.onap.policy.drools.lifecycle; import java.util.List; import java.util.function.BiPredicate; 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; @@ -50,9 +49,9 @@ public abstract class LifecycleStateRunning extends LifecycleStateDefault { protected abstract boolean stateChangeToActive(@NonNull PdpStateChange change); - protected abstract boolean deployPolicy(@NonNull PolicyController controller, @NonNull ToscaPolicy policy); + protected abstract boolean deployPolicy(@NonNull PolicyTypeController controller, @NonNull ToscaPolicy policy); - protected abstract boolean undeployPolicy(@NonNull PolicyController controller, @NonNull ToscaPolicy policy); + protected abstract boolean undeployPolicy(@NonNull PolicyTypeController controller, @NonNull ToscaPolicy policy); @Override public boolean start() { @@ -143,7 +142,7 @@ public abstract class LifecycleStateRunning extends LifecycleStateDefault { // running but are not present in this list. This will include // policies that are overridden by a different version. Second, // we will deploy those policies that are not installed but - // resent in this list. + // included in this list. boolean success = undeployPolicies(policies); return deployPolicies(policies) && success; @@ -158,11 +157,11 @@ public abstract class LifecycleStateRunning extends LifecycleStateDefault { } protected boolean syncPolicies(List<ToscaPolicy> policies, - BiPredicate<PolicyController, ToscaPolicy> sync) { + BiPredicate<PolicyTypeController, ToscaPolicy> sync) { boolean success = true; for (ToscaPolicy policy : policies) { ToscaPolicyTypeIdentifier policyType = policy.getTypeIdentifier(); - PolicyController controller = fsm.getController(policyType); + PolicyTypeController controller = fsm.getController(policyType); if (controller == null) { logger.warn("no controller found for {}", policyType); success = false; diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeController.java new file mode 100644 index 00000000..a61088dc --- /dev/null +++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeController.java @@ -0,0 +1,46 @@ +/* + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 2017-2019 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.drools.lifecycle; + +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier; + +/** + * Policy Type Controller. + */ + +public interface PolicyTypeController { + + /** + * Get Policy Type. + */ + ToscaPolicyTypeIdentifier getPolicyType(); + + /** + * Deploy a Tosca Policy. + */ + boolean deploy(ToscaPolicy policy); + + /** + * Undeploy a Tosca Policy. + */ + boolean undeploy(ToscaPolicy policy); +} diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsController.java new file mode 100644 index 00000000..f5ceafbe --- /dev/null +++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsController.java @@ -0,0 +1,60 @@ +/* + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.drools.lifecycle; + +import lombok.Getter; + +import org.onap.policy.drools.system.PolicyController; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier; + +/** + * Policy Type Drools Controller that delegates to a corresponding + * PolicyController that supports this policy type. + */ + +@Getter +public class PolicyTypeDroolsController implements PolicyTypeController { + + protected final PolicyController controller; + protected final ToscaPolicyTypeIdentifier policyType; + protected final LifecycleFsm fsm; + + /** + * Creates a Policy Type Drools Controller. + */ + public PolicyTypeDroolsController( + LifecycleFsm fsm, ToscaPolicyTypeIdentifier policyType, PolicyController controller) { + this.policyType = policyType; + this.controller = controller; + this.fsm = fsm; + } + + @Override + public boolean deploy(ToscaPolicy policy) { + return fsm.getDomainMaker().isConformant(policy) && this.controller.offer(policy); + } + + @Override + public boolean undeploy(ToscaPolicy policy) { + return controller.getDrools().delete(policy); + } +} diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeController.java new file mode 100644 index 00000000..87128e43 --- /dev/null +++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeController.java @@ -0,0 +1,49 @@ +/* + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.drools.lifecycle; + +import lombok.Getter; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier; + +@Getter +public class PolicyTypeNativeController implements PolicyTypeController { + + protected final ToscaPolicyTypeIdentifier policyType; + protected final LifecycleFsm fsm; + + public PolicyTypeNativeController(LifecycleFsm fsm, ToscaPolicyTypeIdentifier policyType) { + this.policyType = policyType; + this.fsm = fsm; + } + + @Override + public boolean deploy(ToscaPolicy policy) { + // TODO + return fsm.getDomainMaker().isConformant(policy); + } + + @Override + public boolean undeploy(ToscaPolicy policy) { + // TODO + return true; + } +} diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeRulesController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeRulesController.java new file mode 100644 index 00000000..7dd0d7ae --- /dev/null +++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeRulesController.java @@ -0,0 +1,50 @@ +/* + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.drools.lifecycle; + +import lombok.Getter; + +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier; + +@Getter +public class PolicyTypeRulesController implements PolicyTypeController { + + protected final ToscaPolicyTypeIdentifier policyType; + protected final LifecycleFsm fsm; + + public PolicyTypeRulesController(LifecycleFsm fsm, ToscaPolicyTypeIdentifier policyType) { + this.policyType = policyType; + this.fsm = fsm; + } + + @Override + public boolean deploy(ToscaPolicy policy) { + // TODO + return fsm.getDomainMaker().isConformant(policy); + } + + @Override + public boolean undeploy(ToscaPolicy policy) { + // TODO + return true; + } +} |