aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPamela Dragosh <pdragosh@research.att.com>2018-09-12 19:54:09 +0000
committerGerrit Code Review <gerrit@onap.org>2018-09-12 19:54:09 +0000
commit3ccc3d9ecd4bcd8960a2da6ecbdc7f3ac806fc67 (patch)
tree80e469a5b7ab7ed32e4b276c79ecf1c4a945955a
parent26ad7026f09a43bc60ee18c4b74e977f9f59db9f (diff)
parentcce09d08ead0c7cf152b2e63374a18e04b280b61 (diff)
Merge "Fix soft stop and start of engine"
-rw-r--r--core/core-engine/src/main/java/org/onap/policy/apex/core/engine/engine/impl/ApexEngineImpl.java7
-rw-r--r--services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexActivator.java1
-rw-r--r--services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexEngineServiceHandler.java1
-rw-r--r--services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/EngineService.java15
-rw-r--r--services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineServiceImpl.java236
-rw-r--r--services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineWorker.java56
-rw-r--r--testsuites/integration/integration-uservice-test/src/test/java/org/onap/policy/apex/apps/uservice/test/context/EventAlbumContextTest.java5
7 files changed, 203 insertions, 118 deletions
diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/engine/impl/ApexEngineImpl.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/engine/impl/ApexEngineImpl.java
index 3349b609f..3497ed660 100644
--- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/engine/impl/ApexEngineImpl.java
+++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/engine/impl/ApexEngineImpl.java
@@ -247,8 +247,11 @@ public class ApexEngineImpl implements ApexEngine {
// Clear everything
stateMachineHandler = null;
engineStats.clean();
- internalContext.clear();
- internalContext = null;
+
+ if (internalContext != null) {
+ internalContext.clear();
+ internalContext = null;
+ }
}
/*
diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexActivator.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexActivator.java
index 20af31496..aa82e1c95 100644
--- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexActivator.java
+++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexActivator.java
@@ -102,7 +102,6 @@ public class ApexActivator {
.getTextFileAsString(apexParameters.getEngineServiceParameters().getPolicyModelFileName());
apexEngineService.updateModel(apexParameters.getEngineServiceParameters().getEngineKey(),
policyModelString, true);
- apexEngineService.startAll();
}
// Producer parameters specify what event marshalers to handle events leaving Apex are
diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexEngineServiceHandler.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexEngineServiceHandler.java
index ad7af9449..516ea4f2a 100644
--- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexEngineServiceHandler.java
+++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexEngineServiceHandler.java
@@ -83,6 +83,7 @@ public class ApexEngineServiceHandler {
// Shut down each engine instance
if (apexEngineService != null) {
apexEngineService.stop();
+ apexEngineService.clear();
}
}
}
diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/EngineService.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/EngineService.java
index d64313527..1af0c9d1c 100644
--- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/EngineService.java
+++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/EngineService.java
@@ -138,6 +138,21 @@ public interface EngineService {
void stop(AxArtifactKey engineKey) throws ApexException;
/**
+ * This method clears and uninitializes all Apex engines in the engine service.
+ *
+ * @throws ApexException on clear errors
+ */
+ void clear() throws ApexException;
+
+ /**
+ * This method clears and uninitializes an Apex engine in the engine service.
+ *
+ * @param engineKey The key of the Apex engine to clear
+ * @throws ApexException on clear errors
+ */
+ void clear(AxArtifactKey engineKey) throws ApexException;
+
+ /**
* This method checks if all Apex engines in the engine service are started.
*
* <p>Note: an engine can be both not stopped and not started, for example, when it is starting or
diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineServiceImpl.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineServiceImpl.java
index d5cb05507..04fb8e389 100644
--- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineServiceImpl.java
+++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineServiceImpl.java
@@ -50,9 +50,9 @@ import org.slf4j.ext.XLogger;
import org.slf4j.ext.XLoggerFactory;
/**
- * The Class EngineServiceImpl controls a thread pool that runs a set of Apex engine workers, each
- * of which is running on an identical Apex model. This class handles the management of the engine
- * worker instances, their threads, and event forwarding to and from the engine workers.
+ * The Class EngineServiceImpl controls a thread pool that runs a set of Apex engine workers, each of which is running
+ * on an identical Apex model. This class handles the management of the engine worker instances, their threads, and
+ * event forwarding to and from the engine workers.
*
* @author Sajeevan Achuthan (sajeevan.achuthan@ericsson.com)
* @author Liam Fallon (liam.fallon@ericsson.com)
@@ -72,8 +72,8 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
private AxArtifactKey engineServiceKey = null;
// The Apex engine workers this engine service is handling
- private final Map<AxArtifactKey, EngineService> engineWorkerMap =
- Collections.synchronizedMap(new LinkedHashMap<AxArtifactKey, EngineService>());
+ private final Map<AxArtifactKey, EngineService> engineWorkerMap = Collections
+ .synchronizedMap(new LinkedHashMap<AxArtifactKey, EngineService>());
// Event queue for events being sent into the Apex engines, it used by all engines within a
// group.
@@ -87,8 +87,8 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
private long periodicEventPeriod;
/**
- * This constructor instantiates engine workers and adds them to the set of engine workers to be
- * managed. The constructor is private to prevent subclassing.
+ * This constructor instantiates engine workers and adds them to the set of engine workers to be managed. The
+ * constructor is private to prevent subclassing.
*
* @param engineServiceKey the engine service key
* @param incomingThreadCount the thread count, the number of engine workers to start
@@ -96,7 +96,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
* @throws ApexException on worker instantiation errors
*/
private EngineServiceImpl(final AxArtifactKey engineServiceKey, final int incomingThreadCount,
- final long periodicEventPeriod) throws ApexException {
+ final long periodicEventPeriod) throws ApexException {
LOGGER.entry(engineServiceKey, incomingThreadCount);
this.engineServiceKey = engineServiceKey;
@@ -110,8 +110,8 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
// Start engine workers
for (int engineCounter = 0; engineCounter < threadCount; engineCounter++) {
- final AxArtifactKey engineWorkerKey =
- new AxArtifactKey(engineServiceKey.getName() + '-' + engineCounter, engineServiceKey.getVersion());
+ final AxArtifactKey engineWorkerKey = new AxArtifactKey(engineServiceKey.getName() + '-' + engineCounter,
+ engineServiceKey.getVersion());
engineWorkerMap.put(engineWorkerKey, new EngineWorker(engineWorkerKey, queue, atFactory));
LOGGER.info("Created apex engine {} .", engineWorkerKey.getId());
}
@@ -121,8 +121,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
}
/**
- * Create an Apex Engine Service instance. This method is deprecated and will be removed in the
- * next version.
+ * Create an Apex Engine Service instance. This method is deprecated and will be removed in the next version.
*
* @param engineServiceKey the engine service key
* @param threadCount the thread count, the number of engine workers to start
@@ -132,7 +131,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
*/
@Deprecated
public static EngineServiceImpl create(final AxArtifactKey engineServiceKey, final int threadCount)
- throws ApexException {
+ throws ApexException {
// Check if the Apex model specified is sane
if (engineServiceKey == null) {
LOGGER.warn("engine service key is null");
@@ -144,9 +143,8 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/**
* Create an Apex Engine Service instance. This method does not load the policy so
* {@link #updateModel(AxArtifactKey, AxPolicyModel, boolean)} or
- * {@link #updateModel(AxArtifactKey, AxPolicyModel, boolean)} must be used to load a model.
- * This method does not start the Engine Service so {@link #start(AxArtifactKey)} or
- * {@link #startAll()} must be used.
+ * {@link #updateModel(AxArtifactKey, AxPolicyModel, boolean)} must be used to load a model. This method does not
+ * start the Engine Service so {@link #start(AxArtifactKey)} or {@link #startAll()} must be used.
*
* @param config the configuration for this Apex Engine Service.
* @return the Engine Service instance
@@ -177,8 +175,8 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see com.ericsson.apex.service.engine.runtime.EngineService#registerActionListener(java.lang.
- * String, com.ericsson.apex.service.engine.runtime.ApexEventListener)
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#registerActionListener(java.lang. String,
+ * org.onap.policy.apex.service.engine.runtime.ApexEventListener)
*/
@Override
public void registerActionListener(final String listenerName, final ApexEventListener apexEventListener) {
@@ -197,9 +195,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see
- * com.ericsson.apex.service.engine.runtime.EngineService#deregisterActionListener(java.lang.
- * String)
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#deregisterActionListener(java.lang. String)
*/
@Override
public void deregisterActionListener(final String listenerName) {
@@ -218,7 +214,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see com.ericsson.apex.service.engine.runtime.EngineService#getEngineServiceEventInterface()
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#getEngineServiceEventInterface()
*/
@Override
public EngineServiceEventInterface getEngineServiceEventInterface() {
@@ -228,7 +224,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see com.ericsson.apex.service.engine.runtime.EngineService#getKey()
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#getKey()
*/
@Override
public AxArtifactKey getKey() {
@@ -238,7 +234,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see com.ericsson.apex.service.engine.runtime.EngineService#getInfo()
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#getInfo()
*/
@Override
public Collection<AxArtifactKey> getEngineKeys() {
@@ -248,7 +244,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see com.ericsson.apex.service.engine.runtime.EngineService#getApexModelKey()
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#getApexModelKey()
*/
@Override
public AxArtifactKey getApexModelKey() {
@@ -262,19 +258,18 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see
- * com.ericsson.apex.service.engine.runtime.EngineService#updateModel(com.ericsson.apex.model.
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#updateModel(org.onap.policy.apex.model.
* basicmodel.concepts.AxArtifactKey, java.lang.String, boolean)
*/
@Override
public void updateModel(final AxArtifactKey incomingEngineServiceKey, final String apexModelString,
- final boolean forceFlag) throws ApexException {
+ final boolean forceFlag) throws ApexException {
// Check if the Apex model specified is sane
if (apexModelString == null || apexModelString.trim().length() == 0) {
- LOGGER.warn(
- "model for updating on engine service with key " + incomingEngineServiceKey.getId() + " is empty");
- throw new ApexException(
- "model for updating on engine service with key " + incomingEngineServiceKey.getId() + " is empty");
+ LOGGER.warn("model for updating on engine service with key " + incomingEngineServiceKey.getId()
+ + " is empty");
+ throw new ApexException("model for updating on engine service with key " + incomingEngineServiceKey.getId()
+ + " is empty");
}
// Read the Apex model into memory using the Apex Model Reader
@@ -285,7 +280,8 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
} catch (final ApexModelException e) {
LOGGER.error("failed to unmarshal the apex model on engine service " + incomingEngineServiceKey.getId(), e);
throw new ApexException(
- "failed to unmarshal the apex model on engine service " + incomingEngineServiceKey.getId(), e);
+ "failed to unmarshal the apex model on engine service " + incomingEngineServiceKey.getId(),
+ e);
}
if (apexPolicyModel == null) {
@@ -302,30 +298,28 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see
- * com.ericsson.apex.service.engine.runtime.EngineService#updateModel(com.ericsson.apex.model.
- * basicmodel.concepts.AxArtifactKey,
- * com.ericsson.apex.model.policymodel.concepts.AxPolicyModel, boolean)
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#updateModel(org.onap.policy.apex.model.
+ * basicmodel.concepts.AxArtifactKey, org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel, boolean)
*/
@Override
public void updateModel(final AxArtifactKey incomingEngineServiceKey, final AxPolicyModel apexModel,
- final boolean forceFlag) throws ApexException {
+ final boolean forceFlag) throws ApexException {
LOGGER.entry(incomingEngineServiceKey);
// Check if the Apex model specified is sane
if (apexModel == null) {
- LOGGER.warn(
- "model for updating on engine service with key " + incomingEngineServiceKey.getId() + " is null");
- throw new ApexException(
- "model for updating on engine service with key " + incomingEngineServiceKey.getId() + " is null");
+ LOGGER.warn("model for updating on engine service with key " + incomingEngineServiceKey.getId()
+ + " is null");
+ throw new ApexException("model for updating on engine service with key " + incomingEngineServiceKey.getId()
+ + " is null");
}
// Check if the key on the update request is correct
if (!this.engineServiceKey.equals(incomingEngineServiceKey)) {
LOGGER.warn("engine service key " + incomingEngineServiceKey.getId() + " does not match the key"
- + engineServiceKey.getId() + " of this engine service");
+ + engineServiceKey.getId() + " of this engine service");
throw new ApexException("engine service key " + incomingEngineServiceKey.getId() + " does not match the key"
- + engineServiceKey.getId() + " of this engine service");
+ + engineServiceKey.getId() + " of this engine service");
}
// Check model compatibility
@@ -335,20 +329,18 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
if (!currentModel.getKey().isCompatible(apexModel.getKey())) {
if (forceFlag) {
LOGGER.warn("apex model update forced, supplied model with key \"" + apexModel.getKey().getId()
- + "\" is not a compatible model update from the existing engine model with key \""
- + currentModel.getKey().getId() + "\"");
+ + "\" is not a compatible model update from the existing engine model with key \""
+ + currentModel.getKey().getId() + "\"");
} else {
- throw new ContextException(
- "apex model update failed, supplied model with key \"" + apexModel.getKey().getId()
+ throw new ContextException("apex model update failed, supplied model with key \""
+ + apexModel.getKey().getId()
+ "\" is not a compatible model update from the existing engine model with key \""
+ currentModel.getKey().getId() + "\"");
}
}
}
- final boolean wasstopped = isStopped();
-
- if (!wasstopped) {
+ if (!isStopped()) {
// Stop all engines on this engine service
stop();
final long stoptime = System.currentTimeMillis();
@@ -356,19 +348,19 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
ThreadUtilities.sleep(ENGINE_SERVICE_STOP_START_WAIT_INTERVAL);
}
// Check if all engines are stopped
- final StringBuilder notStoppedEngineIDBuilder = new StringBuilder();
+ final StringBuilder notStoppedEngineIdBuilder = new StringBuilder();
for (final Entry<AxArtifactKey, EngineService> engineWorkerEntry : engineWorkerMap.entrySet()) {
if (engineWorkerEntry.getValue().getState() != AxEngineState.STOPPED) {
- notStoppedEngineIDBuilder.append(engineWorkerEntry.getKey().getId());
- notStoppedEngineIDBuilder.append('(');
- notStoppedEngineIDBuilder.append(engineWorkerEntry.getValue().getState());
- notStoppedEngineIDBuilder.append(") ");
+ notStoppedEngineIdBuilder.append(engineWorkerEntry.getKey().getId());
+ notStoppedEngineIdBuilder.append('(');
+ notStoppedEngineIdBuilder.append(engineWorkerEntry.getValue().getState());
+ notStoppedEngineIdBuilder.append(") ");
}
}
- if (notStoppedEngineIDBuilder.length() > 0) {
+ if (notStoppedEngineIdBuilder.length() > 0) {
final String errorString = "cannot update model on engine service with key "
- + incomingEngineServiceKey.getId() + ", engines not stopped after " + MAX_STOP_WAIT_TIME
- + "ms are: " + notStoppedEngineIDBuilder.toString().trim();
+ + incomingEngineServiceKey.getId() + ", engines not stopped after " + MAX_STOP_WAIT_TIME
+ + "ms are: " + notStoppedEngineIdBuilder.toString().trim();
LOGGER.warn(errorString);
throw new ApexException(errorString);
}
@@ -380,32 +372,30 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
engineWorkerEntry.getValue().updateModel(engineWorkerEntry.getKey(), apexModel, forceFlag);
}
- if (!wasstopped) {
- // start all engines on this engine service if it was not stopped before the update
- startAll();
- final long starttime = System.currentTimeMillis();
- while (!isStarted() && System.currentTimeMillis() - starttime < MAX_START_WAIT_TIME) {
- ThreadUtilities.sleep(ENGINE_SERVICE_STOP_START_WAIT_INTERVAL);
- }
- // Check if all engines are running
- final StringBuilder notRunningEngineIDBuilder = new StringBuilder();
- for (final Entry<AxArtifactKey, EngineService> engineWorkerEntry : engineWorkerMap.entrySet()) {
- if (engineWorkerEntry.getValue().getState() != AxEngineState.READY
- && engineWorkerEntry.getValue().getState() != AxEngineState.EXECUTING) {
- notRunningEngineIDBuilder.append(engineWorkerEntry.getKey().getId());
- notRunningEngineIDBuilder.append('(');
- notRunningEngineIDBuilder.append(engineWorkerEntry.getValue().getState());
- notRunningEngineIDBuilder.append(") ");
- }
- }
- if (notRunningEngineIDBuilder.length() > 0) {
- final String errorString = "engine start error on model update on engine service with key "
- + incomingEngineServiceKey.getId() + ", engines not running are: "
- + notRunningEngineIDBuilder.toString().trim();
- LOGGER.warn(errorString);
- throw new ApexException(errorString);
+ // start all engines on this engine service if it was not stopped before the update
+ startAll();
+ final long starttime = System.currentTimeMillis();
+ while (!isStarted() && System.currentTimeMillis() - starttime < MAX_START_WAIT_TIME) {
+ ThreadUtilities.sleep(ENGINE_SERVICE_STOP_START_WAIT_INTERVAL);
+ }
+ // Check if all engines are running
+ final StringBuilder notRunningEngineIdBuilder = new StringBuilder();
+ for (final Entry<AxArtifactKey, EngineService> engineWorkerEntry : engineWorkerMap.entrySet()) {
+ if (engineWorkerEntry.getValue().getState() != AxEngineState.READY
+ && engineWorkerEntry.getValue().getState() != AxEngineState.EXECUTING) {
+ notRunningEngineIdBuilder.append(engineWorkerEntry.getKey().getId());
+ notRunningEngineIdBuilder.append('(');
+ notRunningEngineIdBuilder.append(engineWorkerEntry.getValue().getState());
+ notRunningEngineIdBuilder.append(") ");
}
}
+ if (notRunningEngineIdBuilder.length() > 0) {
+ final String errorString = "engine start error on model update on engine service with key "
+ + incomingEngineServiceKey.getId() + ", engines not running are: "
+ + notRunningEngineIdBuilder.toString().trim();
+ LOGGER.warn(errorString);
+ throw new ApexException(errorString);
+ }
LOGGER.exit();
}
@@ -413,7 +403,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see com.ericsson.apex.service.engine.runtime.EngineService#getState()
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#getState()
*/
@Override
public AxEngineState getState() {
@@ -430,7 +420,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see com.ericsson.apex.service.engine.runtime.EngineService#startAll()
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#startAll()
*/
@Override
public void startAll() throws ApexException {
@@ -447,8 +437,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see
- * com.ericsson.apex.service.engine.runtime.EngineService#start(com.ericsson.apex.core.model.
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#start(org.onap.policy.apex.core.model.
* concepts.AxArtifactKey)
*/
@Override
@@ -470,7 +459,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see com.ericsson.apex.service.engine.runtime.EngineService#stop()
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#stop()
*/
@Override
public void stop() throws ApexException {
@@ -489,8 +478,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see
- * com.ericsson.apex.service.engine.runtime.EngineService#stop(com.ericsson.apex.core.model.
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#stop(org.onap.policy.apex.core.model.
* concepts.AxArtifactKey)
*/
@Override
@@ -509,6 +497,49 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
LOGGER.exit(engineKey);
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#clear()
+ */
+ @Override
+ public void clear() throws ApexException {
+ LOGGER.entry();
+
+ // Stop each engine
+ for (final EngineService engine : engineWorkerMap.values()) {
+ if (engine.getState() == AxEngineState.STOPPED) {
+ engine.clear();
+ }
+ }
+
+ LOGGER.exit();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#clear(org.onap.policy.apex.core.model.
+ * concepts.AxArtifactKey)
+ */
+ @Override
+ public void clear(final AxArtifactKey engineKey) throws ApexException {
+ LOGGER.entry(engineKey);
+
+ // Check if we have this key on our map
+ if (!engineWorkerMap.containsKey(engineKey)) {
+ LOGGER.warn("engine with key " + engineKey.getId() + " not found in engine service");
+ throw new ApexException("engine with key " + engineKey.getId() + " not found in engine service");
+ }
+
+ // Clear the engine
+ if (engineWorkerMap.get(engineKey).getState() == AxEngineState.STOPPED) {
+ engineWorkerMap.get(engineKey).stop(engineKey);
+ }
+
+ LOGGER.exit(engineKey);
+ }
+
/**
* Check all engines are started.
*
@@ -528,8 +559,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see
- * com.ericsson.apex.service.engine.runtime.EngineService#isStarted(com.ericsson.apex.model.
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#isStarted(org.onap.policy.apex.model.
* basicmodel.concepts.AxArtifactKey)
*/
@Override
@@ -560,8 +590,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see
- * com.ericsson.apex.service.engine.runtime.EngineService#isStopped(com.ericsson.apex.model.
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#isStopped(org.onap.policy.apex.model.
* basicmodel.concepts.AxArtifactKey)
*/
@Override
@@ -576,16 +605,16 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see com.ericsson.apex.service.engine.runtime.EngineService#startPeriodicEvents(long)
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#startPeriodicEvents(long)
*/
@Override
public void startPeriodicEvents(final long period) throws ApexException {
// Check if periodic events are already started
if (periodicEventGenerator != null) {
LOGGER.warn("Peiodic event geneation already running on engine " + engineServiceKey.getId() + ", "
- + periodicEventGenerator.toString());
+ + periodicEventGenerator.toString());
throw new ApexException("Peiodic event geneation already running on engine " + engineServiceKey.getId()
- + ", " + periodicEventGenerator.toString());
+ + ", " + periodicEventGenerator.toString());
}
// Set up periodic event execution, its a Java Timer/TimerTask
@@ -599,7 +628,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see com.ericsson.apex.service.engine.runtime.EngineService#stopPeriodicEvents()
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#stopPeriodicEvents()
*/
@Override
public void stopPeriodicEvents() throws ApexException {
@@ -617,8 +646,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see
- * com.ericsson.apex.service.engine.runtime.EngineService#getStatus(com.ericsson.apex.core.model
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#getStatus(org.onap.policy.apex.core.model
* .concepts.AxArtifactKey)
*/
@Override
@@ -636,8 +664,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see
- * com.ericsson.apex.service.engine.runtime.EngineService#getRuntimeInfo(com.ericsson.apex.core.
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#getRuntimeInfo(org.onap.policy.apex.core.
* model.concepts.AxArtifactKey)
*/
@Override
@@ -655,8 +682,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
/*
* (non-Javadoc)
*
- * @see
- * com.ericsson.apex.service.engine.runtime.EngineServiceEventInterface#sendEvent(com.ericsson.
+ * @see org.onap.policy.apex.service.engine.runtime.EngineServiceEventInterface#sendEvent(org.onap.policy.
* apex.service.engine.event.ApexEvent)
*/
@Override
@@ -664,7 +690,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven
// Check if we have this key on our map
if (getState() == AxEngineState.STOPPED) {
LOGGER.warn("event " + event.getName() + " not processed, no engines on engine service "
- + engineServiceKey.getId() + " are running");
+ + engineServiceKey.getId() + " are running");
return;
}
diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineWorker.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineWorker.java
index be294aae7..b9a405b44 100644
--- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineWorker.java
+++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineWorker.java
@@ -20,6 +20,11 @@
package org.onap.policy.apex.service.engine.runtime.impl;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParser;
+
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Arrays;
@@ -55,11 +60,6 @@ import org.onap.policy.apex.service.engine.runtime.EngineServiceEventInterface;
import org.slf4j.ext.XLogger;
import org.slf4j.ext.XLoggerFactory;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParser;
-
/**
* The Class EngineWorker encapsulates a core {@link ApexEngine} instance, which runs policies
* defined in the {@link org.onap.policy.apex.model.basicmodel.concepts.AxModelAxModel}. Each policy
@@ -283,6 +283,7 @@ final class EngineWorker implements EngineService {
}
// Update the Apex model in the Apex engine
+ engine.clear();
engine.updateModel(apexModel);
LOGGER.debug("engine model {} added to the engine-{}", apexModel.getKey().getId(), engineWorkerKey);
@@ -394,9 +395,54 @@ final class EngineWorker implements EngineService {
// Interrupt the thread that is handling events toward the engine
processorThread.interrupt();
+ processorThread = null;
// Stop the engine
engine.stop();
+
+ LOGGER.exit(engineKey);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.service.engine.runtime.EngineService#clear()
+ */
+ @Override
+ public void clear() throws ApexException {
+ clear(this.getKey());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.service.engine.runtime.EngineService#clear(org.onap.policy.apex.core.
+ * model. concepts.AxArtifactKey)
+ */
+ @Override
+ public void clear(final AxArtifactKey engineKey) throws ApexException {
+ // Check if the key on the start request is correct
+ if (!engineWorkerKey.equals(engineKey)) {
+ LOGGER.warn("engine key " + engineKey.getId() + " does not match the key" + engineWorkerKey.getId()
+ + " of this engine");
+ throw new ApexException("engine key " + engineKey.getId() + " does not match the key"
+ + engineWorkerKey.getId() + " of this engine");
+ }
+
+ if (engine == null) {
+ LOGGER.error("apex engine for engine key" + engineWorkerKey.getId() + " null");
+ throw new ApexException("apex engine for engine key" + engineWorkerKey.getId() + " null");
+ }
+
+ // Interrupt the worker to stop its thread
+ if (processorThread != null && !processorThread.isAlive()) {
+ LOGGER.warn("apex engine for engine key" + engineWorkerKey.getId() + " is not stopped with state "
+ + getState());
+ return;
+ }
+
+ // Clear the engine
engine.clear();
LOGGER.exit(engineKey);
diff --git a/testsuites/integration/integration-uservice-test/src/test/java/org/onap/policy/apex/apps/uservice/test/context/EventAlbumContextTest.java b/testsuites/integration/integration-uservice-test/src/test/java/org/onap/policy/apex/apps/uservice/test/context/EventAlbumContextTest.java
index d68576d16..aa7b56189 100644
--- a/testsuites/integration/integration-uservice-test/src/test/java/org/onap/policy/apex/apps/uservice/test/context/EventAlbumContextTest.java
+++ b/testsuites/integration/integration-uservice-test/src/test/java/org/onap/policy/apex/apps/uservice/test/context/EventAlbumContextTest.java
@@ -86,12 +86,8 @@ public class EventAlbumContextTest {
final String[] cliArgs = new String[] { "-c", tempCommandFile.getCanonicalPath(), "-l",
tempLogFile.getAbsolutePath(), "-o", tempModelFile.getAbsolutePath() };
- ModelService.clear();
-
new ApexCLIEditorMain(cliArgs);
- ModelService.clear();
-
final String[] args = new String[] { "-m", tempModelFile.getAbsolutePath(), "-c", configFile };
final ApexMain apexMain = new ApexMain(args);
@@ -111,7 +107,6 @@ public class EventAlbumContextTest {
// Shut down Apex
apexMain.shutdown();
- ParameterService.clear();
assertTrue("Test failed, the output event file was not created", outputEventFile.exists());
outputEventFile.delete();