summaryrefslogtreecommitdiffstats
path: root/feature-lifecycle/src/main/java
diff options
context:
space:
mode:
authorjhh <jorge.hernandez-herrero@att.com>2020-02-05 16:33:53 -0600
committerjhh <jorge.hernandez-herrero@att.com>2020-02-05 16:33:53 -0600
commit1a36afd3037837508cf23e4e476fddcf531dc918 (patch)
tree6b0e1a87ff2ca612970f0fbd51c6b3358d3d02bb /feature-lifecycle/src/main/java
parenta24aa1615648b0698bb662f64915e8ba2d520e03 (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')
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java26
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStateActive.java23
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStatePassive.java11
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStateRunning.java11
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeController.java46
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsController.java60
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeController.java49
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeRulesController.java50
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;
+ }
+}