From 319e008dae673c08706cb41f3da81bf338476035 Mon Sep 17 00:00:00 2001 From: jhh Date: Wed, 25 Mar 2020 19:37:20 -0500 Subject: native policy use engine for top-down processing This will ensure proper invocation of all feature hooks. Issue-ID: POLICY-2388 Signed-off-by: jhh Change-Id: I8d1666bb5e9526faa588e4f613674e080181d4ba Signed-off-by: jhh --- .../features/PolicyControllerFeatureApi.java | 29 +++++++++++++-- .../internal/AggregatedPolicyController.java | 42 ++++++++++++---------- 2 files changed, 50 insertions(+), 21 deletions(-) (limited to 'policy-management') diff --git a/policy-management/src/main/java/org/onap/policy/drools/features/PolicyControllerFeatureApi.java b/policy-management/src/main/java/org/onap/policy/drools/features/PolicyControllerFeatureApi.java index 9c6ac223..49287786 100644 --- a/policy-management/src/main/java/org/onap/policy/drools/features/PolicyControllerFeatureApi.java +++ b/policy-management/src/main/java/org/onap/policy/drools/features/PolicyControllerFeatureApi.java @@ -1,8 +1,8 @@ /* * ============LICENSE_START======================================================= - * policy-management + * ONAP * ================================================================================ - * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-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. @@ -23,6 +23,7 @@ package org.onap.policy.drools.features; import java.util.Properties; import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure; import org.onap.policy.common.utils.services.OrderedService; +import org.onap.policy.drools.protocol.configuration.DroolsConfiguration; import org.onap.policy.drools.system.PolicyController; public interface PolicyControllerFeatureApi extends OrderedService { @@ -83,7 +84,7 @@ public interface PolicyControllerFeatureApi extends OrderedService { * * @return true if this feature intercepts and takes ownership * of the operation preventing the invocation of - * lower priority features. False, otherwise.. + * lower priority features. False, otherwise. */ default boolean beforeStop(PolicyController controller) { return false; @@ -100,6 +101,28 @@ public interface PolicyControllerFeatureApi extends OrderedService { return false; } + /** + * intercept before the Policy Controller is patched. + * + * @return true if this feature intercepts and takes ownership + * of the operation preventing the invocation of + * lower priority features. False, otherwise. + */ + default boolean beforePatch(PolicyController controller, DroolsConfiguration configuration) { + return false; + } + + /** + * intercept after the Policy Controller is patched. + * + * @return true if this feature intercepts and takes ownership + * of the operation preventing the invocation of + * lower priority features. False, otherwise. + */ + default boolean afterPatch(PolicyController controller, boolean success) { + return false; + } + /** * intercept before the Policy Controller is locked. * diff --git a/policy-management/src/main/java/org/onap/policy/drools/system/internal/AggregatedPolicyController.java b/policy-management/src/main/java/org/onap/policy/drools/system/internal/AggregatedPolicyController.java index 5685ff6e..b80f4c86 100644 --- a/policy-management/src/main/java/org/onap/policy/drools/system/internal/AggregatedPolicyController.java +++ b/policy-management/src/main/java/org/onap/policy/drools/system/internal/AggregatedPolicyController.java @@ -215,7 +215,6 @@ public class AggregatedPolicyController implements PolicyController, TopicListen */ @Override public boolean updateDrools(DroolsConfiguration newDroolsConfiguration) { - DroolsConfiguration oldDroolsConfiguration = new DroolsConfiguration(this.droolsController.getArtifactId(), this.droolsController.getGroupId(), this.droolsController.getVersion()); @@ -227,46 +226,53 @@ public class AggregatedPolicyController implements PolicyController, TopicListen return true; } + if (FeatureApiUtils.apply(getProviders(), + feature -> feature.beforePatch(this, newDroolsConfiguration), + (feature, ex) -> logger.error("{}: feature {} before-patch failure because of {}", this, + feature.getClass().getName(), ex.getMessage(), ex))) { + return true; + } + if (droolsController.isBrained() && (newDroolsConfiguration.getArtifactId() == null || DroolsControllerConstants.NO_ARTIFACT_ID.equals(newDroolsConfiguration.getArtifactId()))) { + // detach maven artifact DroolsControllerConstants.getFactory().destroy(this.droolsController); } + boolean success = true; try { - /* Drools Controller created, update initialization properties for restarts */ - this.properties.setProperty(DroolsPropertyConstants.RULES_GROUPID, newDroolsConfiguration.getGroupId()); this.properties.setProperty(DroolsPropertyConstants.RULES_ARTIFACTID, newDroolsConfiguration.getArtifactId()); this.properties.setProperty(DroolsPropertyConstants.RULES_VERSION, newDroolsConfiguration.getVersion()); - getPersistenceManager().storeController(name, this.properties); this.initDrools(this.properties); - /* set drools controller to current locked status */ - - if (this.isLocked()) { - this.droolsController.lock(); + if (isLocked()) { + droolsController.lock(); } else { - this.droolsController.unlock(); + droolsController.unlock(); } - /* set drools controller to current alive status */ - - if (this.isAlive()) { - this.droolsController.start(); + if (isAlive()) { + droolsController.start(); } else { - this.droolsController.stop(); + droolsController.stop(); } - - } catch (IllegalArgumentException e) { + } catch (RuntimeException e) { logger.error("{}: cannot update-drools because of {}", this, e.getMessage(), e); - return false; + success = false; } - return true; + boolean finalSuccess = success; + FeatureApiUtils.apply(getProviders(), + feature -> feature.afterPatch(this, finalSuccess), + (feature, ex) -> logger.error("{}: feature {} after-patch failure because of {}", this, + feature.getClass().getName(), ex.getMessage(), ex)); + + return finalSuccess; } /** -- cgit 1.2.3-korg