From bc8c8286645f74753d175eee7ca62d989555c96c Mon Sep 17 00:00:00 2001 From: Kevin McKiou Date: Wed, 13 Dec 2017 15:26:59 -0600 Subject: Fix issues blocking election handler thread This bug tracks the AT&T bug 355533. The symptom was that drools pdps that were backing each other up were becoming stuck in a standby state. The cause was that the election handler thread was being hung by a call to PolicyEngine.manager.deactivate which shuts down the topic endpoints when the drools pdp operational state transitions to disabled. Related problems were that the election handler heartbeat was NOT blocked when the main thread was blocked and the IntegrityMonitor forward progress counter was NOT blocked from incrementing when the election handler thread was blocked. This prevented the correct failover of the drools pdp to another healthy one. This change fixes the two causes of the thread blockage, moves the election handler heartbeat to the main thread and adds an interface (AllSeemsWell) which is called when the election handler has stalled/resumed. The AllSeemsWell interface will block forward progress counter increments when ALLNOTWELL and will resume forward progress counter increments when ALLSEEMSWELL. In addition, it reduces the run time of the StandbyStateManagementTest from approximately 8 minutes to approximately 2 minutes. Since this changes classes also changed by POLICY-444, this change must be merged before POLICY-444 can be merged. Issue-ID: POLICY-501 Change-Id: I7b8180d11077ccf59b21b6484cb58b5522a3df8f Signed-off-by: Kevin McKiou --- .../policy/drools/statemanagement/DroolsPDPIntegrityMonitor.java | 5 +---- .../policy/drools/statemanagement/StateManagementFeature.java | 9 +++++++++ 2 files changed, 10 insertions(+), 4 deletions(-) (limited to 'feature-state-management/src/main/java') diff --git a/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/DroolsPDPIntegrityMonitor.java b/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/DroolsPDPIntegrityMonitor.java index f599e3dc..688631bb 100644 --- a/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/DroolsPDPIntegrityMonitor.java +++ b/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/DroolsPDPIntegrityMonitor.java @@ -20,11 +20,8 @@ package org.onap.policy.drools.statemanagement; -import org.onap.policy.drools.statemanagement.StateManagementProperties; - import java.util.ArrayList; import java.util.Properties; - import org.onap.policy.common.im.IntegrityMonitor; import org.onap.policy.common.im.IntegrityMonitorException; import org.onap.policy.drools.http.server.HttpServletServer; @@ -82,6 +79,7 @@ public class DroolsPDPIntegrityMonitor extends IntegrityMonitor logger.info(msg); } } + /** * Static initialization -- create Drools Integrity Monitor, and * an HTTP server to handle REST 'test' requests @@ -221,7 +219,6 @@ public class DroolsPDPIntegrityMonitor extends IntegrityMonitor testPort, e); throw e; } - logger.info("init: Exiting and returning DroolsPDPIntegrityMonitor"); return im; } diff --git a/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/StateManagementFeature.java b/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/StateManagementFeature.java index 66d806be..a34d4f98 100644 --- a/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/StateManagementFeature.java +++ b/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/StateManagementFeature.java @@ -24,6 +24,7 @@ import java.io.IOException; import java.util.Observer; import java.util.Properties; +import org.onap.policy.common.im.AllSeemsWellException; import org.onap.policy.common.im.StateManagement; import org.onap.policy.drools.core.PolicySessionFeatureAPI; import org.onap.policy.drools.features.PolicyEngineFeatureAPI; @@ -263,4 +264,12 @@ public class StateManagementFeature implements StateManagementFeatureAPI, logger.error("initializeProperties", e1); } } + + @Override + public void allSeemsWell(String key, Boolean asw, String msg) + throws IllegalArgumentException, AllSeemsWellException { + + droolsPdpIntegrityMonitor.allSeemsWell(key, asw, msg); + + } } -- cgit 1.2.3-korg