summaryrefslogtreecommitdiffstats
path: root/controlloop/common/eventmanager/src/main
diff options
context:
space:
mode:
authorliamfallon <liam.fallon@ericsson.com>2018-02-08 21:54:16 +0000
committerliamfallon <liam.fallon@ericsson.com>2018-02-08 22:23:54 +0000
commitd536517dd5d45abeb037eb3900759771d97b2418 (patch)
tree38c5dda6db8e1ef7846d97b456664b05259e6039 /controlloop/common/eventmanager/src/main
parent5343982363a2221cdf9bd28fdb1f6547c04745f6 (diff)
JUint/Technical Debt for eventmanager
Unit test expanded for SO POJOs, technical debt removed in eventmanager. Change-Id: I7045f5af88fd2c15019befe29a0b4fcd69801c49 Signed-off-by: liamfallon <liam.fallon@ericsson.com> Issue-ID: POLICY-455 Signed-off-by: liamfallon <liam.fallon@ericsson.com>
Diffstat (limited to 'controlloop/common/eventmanager/src/main')
-rw-r--r--controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/ControlLoopException.java5
-rw-r--r--controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/ControlLoopLogger.java8
-rw-r--r--controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/ControlLoopPublisher.java5
-rw-r--r--controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java407
-rw-r--r--controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager.java702
-rw-r--r--controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/OperationsHistoryDbEntry.java102
-rw-r--r--controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/impl/ControlLoopLoggerStdOutImpl.java5
-rw-r--r--controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/impl/ControlLoopPublisherJUnitImpl.java8
-rw-r--r--controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/processor/ControlLoopProcessor.java136
-rw-r--r--controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/PolicyEngine.java2
-rw-r--r--controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/PolicyEngineListener.java2
-rw-r--r--controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/impl/PolicyEngineJUnitImpl.java37
12 files changed, 742 insertions, 677 deletions
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/ControlLoopException.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/ControlLoopException.java
index e828150a0..3f19fdcaf 100644
--- a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/ControlLoopException.java
+++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/ControlLoopException.java
@@ -21,10 +21,6 @@
package org.onap.policy.controlloop;
public class ControlLoopException extends Exception {
-
- /**
- *
- */
private static final long serialVersionUID = 6400725747325923701L;
public ControlLoopException() {
@@ -47,5 +43,4 @@ public class ControlLoopException extends Exception {
public ControlLoopException(Throwable cause) {
super(cause);
}
-
}
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/ControlLoopLogger.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/ControlLoopLogger.java
index bb23983ce..437920cfb 100644
--- a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/ControlLoopLogger.java
+++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/ControlLoopLogger.java
@@ -25,7 +25,6 @@ import java.lang.reflect.Constructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
public interface ControlLoopLogger {
public void info(String... parameters);
@@ -35,21 +34,16 @@ public interface ControlLoopLogger {
public void metrics(Object obj);
public static class Factory {
-
private static final Logger logger = LoggerFactory.getLogger(Factory.class);
-
public ControlLoopLogger buildLogger(String className) throws ControlLoopException {
-
try {
Constructor<?> constr = Class.forName(className).getConstructor();
return (ControlLoopLogger) constr.newInstance();
} catch (Exception e) {
logger.error("buildLogger threw: ", e);
- throw new ControlLoopException("Cannot load class " + className);
+ throw new ControlLoopException("Cannot load class " + className + " as a control loop logger");
}
}
-
}
-
}
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/ControlLoopPublisher.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/ControlLoopPublisher.java
index 9272e2887..3d31c413b 100644
--- a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/ControlLoopPublisher.java
+++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/ControlLoopPublisher.java
@@ -39,11 +39,8 @@ public interface ControlLoopPublisher {
return (ControlLoopPublisher) constr.newInstance();
} catch (Exception e) {
logger.error("ControlLoopPublisher.buildLogger threw: ", e);
- throw new ControlLoopException("Cannot load class " + className);
+ throw new ControlLoopException("Cannot load class " + className + " as a control loop publisher");
}
}
-
}
-
-
}
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java
index 2b296616d..1d1451461 100644
--- a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java
+++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java
@@ -52,16 +52,20 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ControlLoopEventManager implements LockCallback, Serializable {
-
- /**
- *
- */
+ private static final String VM_NAME = "VM_NAME";
+ private static final String VNF_NAME = "VNF_NAME";
+ private static final String GENERIC_VNF_VNF_ID = "generic-vnf.vnf-id";
+ private static final String GENERIC_VNF_VNF_NAME = "generic-vnf.vnf-name";
+ private static final String VSERVER_VSERVER_NAME = "vserver.vserver-name";
+ private static final String GENERIC_VNF_IS_CLOSED_LOOP_DISABLED = "generic-vnf.is-closed-loop-disabled";
+ private static final String VSERVER_IS_CLOSED_LOOP_DISABLED = "vserver.is-closed-loop-disabled";
+
private static final Logger logger = LoggerFactory.getLogger(ControlLoopEventManager.class);
-
+
private static final long serialVersionUID = -1216568161322872641L;
public final String closedLoopControlName;
public final UUID requestID;
-
+
private String controlLoopResult;
private transient ControlLoopProcessor processor = null;
private VirtualControlLoopEvent onset;
@@ -79,28 +83,28 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
private static String aaiHostURL;
private static String aaiUser;
private static String aaiPassword;
-
+
private static Collection<String> requiredAAIKeys = new ArrayList<>();
static {
requiredAAIKeys.add("AICVServerSelfLink");
requiredAAIKeys.add("AICIdentity");
requiredAAIKeys.add("is_closed_loop_disabled");
- requiredAAIKeys.add("VM_NAME");
+ requiredAAIKeys.add(VM_NAME);
}
public ControlLoopEventManager(String closedLoopControlName, UUID requestID) {
this.closedLoopControlName = closedLoopControlName;
this.requestID = requestID;
}
-
+
public String getControlLoopResult() {
return controlLoopResult;
}
-
+
public void setControlLoopResult(String controlLoopResult) {
this.controlLoopResult = controlLoopResult;
}
-
+
public Integer getNumOnsets() {
return numOnsets;
}
@@ -124,20 +128,20 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
public void setActivated(boolean isActivated) {
this.isActivated = isActivated;
}
-
- public VirtualControlLoopEvent getOnsetEvent() {
+
+ public VirtualControlLoopEvent getOnsetEvent() {
return this.onset;
}
-
+
public VirtualControlLoopEvent getAbatementEvent() {
return this.abatement;
}
-
+
public ControlLoopProcessor getProcessor() {
return this.processor;
}
- public VirtualControlLoopNotification activate(VirtualControlLoopEvent event) {
+ public VirtualControlLoopNotification activate(VirtualControlLoopEvent event) {
VirtualControlLoopNotification notification = new VirtualControlLoopNotification(event);
try {
//
@@ -150,7 +154,7 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
// Syntax check the event
//
checkEventSyntax(event);
-
+
//
// At this point we are good to go with this event
//
@@ -163,16 +167,14 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
//
this.isActivated = true;
} catch (ControlLoopException e) {
- logger.error("{}: activate threw: ",this, e);
+ logger.error("{}: activate by event threw: ", this, e);
notification.setNotification(ControlLoopNotificationType.REJECTED);
notification.setMessage(e.getMessage());
}
return notification;
}
-
-
-
- public VirtualControlLoopNotification activate(String yamlSpecification, VirtualControlLoopEvent event) {
+
+ public VirtualControlLoopNotification activate(String yamlSpecification, VirtualControlLoopEvent event) {
VirtualControlLoopNotification notification = new VirtualControlLoopNotification(event);
try {
//
@@ -185,27 +187,39 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
// Syntax check the event
//
checkEventSyntax(event);
-
+
//
// Check the YAML
//
if (yamlSpecification == null || yamlSpecification.length() < 1) {
throw new ControlLoopException("yaml specification is null or 0 length");
}
- String decodedYaml = null;
- try {
- decodedYaml = URLDecoder.decode(yamlSpecification, "UTF-8");
- if (decodedYaml != null && decodedYaml.length() > 0) {
- yamlSpecification = decodedYaml;
- }
- } catch (UnsupportedEncodingException e) {
- logger.error("{}: activate threw: ",this, e);
+ } catch (ControlLoopException e) {
+ logger.error("{}: activate by YAML specification and event threw: ",this, e);
+ notification.setNotification(ControlLoopNotificationType.REJECTED);
+ notification.setMessage(e.getMessage());
+ return notification;
+ }
+
+ String decodedYaml = null;
+ try {
+ decodedYaml = URLDecoder.decode(yamlSpecification, "UTF-8");
+ if (decodedYaml != null && decodedYaml.length() > 0) {
+ yamlSpecification = decodedYaml;
}
+ } catch (UnsupportedEncodingException e) {
+ logger.error("{}: YAML decode in activate by YAML specification and event threw: ", this, e);
+ notification.setNotification(ControlLoopNotificationType.REJECTED);
+ notification.setMessage(e.getMessage());
+ return notification;
+ }
+
+ try {
//
// Parse the YAML specification
//
this.processor = new ControlLoopProcessor(yamlSpecification);
-
+
//
// At this point we are good to go with this event
//
@@ -220,18 +234,18 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
//
this.isActivated = true;
} catch (ControlLoopException e) {
- logger.error("{}: activate threw: ",this, e);
+ logger.error("{}: activate by YAML specification and event threw: ",this, e);
notification.setNotification(ControlLoopNotificationType.REJECTED);
notification.setMessage(e.getMessage());
}
return notification;
}
-
- public VirtualControlLoopNotification isControlLoopFinal() throws ControlLoopException {
+
+ public VirtualControlLoopNotification isControlLoopFinal() throws ControlLoopException {
//
// Check if they activated us
//
- if (this.isActivated == false) {
+ if (!this.isActivated) {
throw new ControlLoopException("ControlLoopEventManager MUST be activated first.");
}
//
@@ -266,10 +280,12 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
//
return null;
}
-
+
switch (result) {
case FINAL_FAILURE_EXCEPTION:
+ notification.setNotification(ControlLoopNotificationType.FINAL_FAILURE);
notification.setMessage("Exception in processing closed loop");
+ break;
case FINAL_FAILURE:
case FINAL_FAILURE_RETRIES:
case FINAL_FAILURE_TIMEOUT:
@@ -291,12 +307,12 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
notification.getHistory().addAll(this.controlLoopHistory);
return notification;
}
-
- public ControlLoopOperationManager processControlLoop() throws ControlLoopException, AAIException {
+
+ public ControlLoopOperationManager processControlLoop() throws ControlLoopException, AAIException {
//
// Check if they activated us
//
- if (this.isActivated == false) {
+ if (!this.isActivated) {
throw new ControlLoopException("ControlLoopEventManager MUST be activated first.");
}
//
@@ -343,7 +359,7 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
//
return this.currentOperation;
}
-
+
public void finishOperation(ControlLoopOperationManager operation) throws ControlLoopException {
//
// Verify we have a current operation
@@ -377,8 +393,8 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
}
throw new ControlLoopException("No operation to finish.");
}
-
- public synchronized LockResult<GuardResult, TargetLock> lockCurrentOperation() throws ControlLoopException {
+
+ public synchronized LockResult<GuardResult, TargetLock> lockCurrentOperation() throws ControlLoopException {
//
// Sanity check
//
@@ -393,16 +409,16 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
// TODO: Make sure the current lock is for the same target.
// Currently, it should be. But in the future it may not.
//
- return new LockResult<GuardResult, TargetLock>(GuardResult.LOCK_ACQUIRED, this.targetLock);
+ return new LockResult<>(GuardResult.LOCK_ACQUIRED, this.targetLock);
} else {
//
// Ask the Guard
//
LockResult<GuardResult, TargetLock> lockResult = PolicyGuard.lockTarget(
- this.currentOperation.policy.getTarget().getType(),
- this.currentOperation.getTargetEntity(),
- this.onset.getRequestID(),
- this);
+ this.currentOperation.policy.getTarget().getType(),
+ this.currentOperation.getTargetEntity(),
+ this.onset.getRequestID(),
+ this);
//
// Was it acquired?
//
@@ -415,19 +431,19 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
return lockResult;
}
}
-
+
public synchronized TargetLock unlockCurrentOperation() {
if (this.targetLock == null) {
return null;
}
- if (PolicyGuard.unlockTarget(this.targetLock) == true) {
+ if (PolicyGuard.unlockTarget(this.targetLock)) {
TargetLock returnLock = this.targetLock;
this.targetLock = null;
return returnLock;
}
return null;
}
-
+
public enum NEW_EVENT_STATUS {
FIRST_ONSET,
SUBSEQUENT_ONSET,
@@ -436,8 +452,8 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
SYNTAX_ERROR
;
}
-
- public NEW_EVENT_STATUS onNewEvent(VirtualControlLoopEvent event) throws AAIException {
+
+ public NEW_EVENT_STATUS onNewEvent(VirtualControlLoopEvent event) throws AAIException {
try {
this.checkEventSyntax(event);
if (event.getClosedLoopEventStatus() == ControlLoopEventStatus.ONSET) {
@@ -445,11 +461,11 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
// Check if this is our original ONSET
//
if (event.equals(this.onset)) {
- //
- // Query A&AI if needed
- //
- queryAai(event);
-
+ //
+ // Query A&AI if needed
+ //
+ queryAai(event);
+
//
// DO NOT retract it
//
@@ -460,7 +476,8 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
//
this.numOnsets++;
return NEW_EVENT_STATUS.SUBSEQUENT_ONSET;
- } else if (event.getClosedLoopEventStatus() == ControlLoopEventStatus.ABATED) {
+ }
+ else if (event.getClosedLoopEventStatus() == ControlLoopEventStatus.ABATED) {
//
// Have we already got an abatement?
//
@@ -477,7 +494,8 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
//
//
return NEW_EVENT_STATUS.FIRST_ABATEMENT;
- } else {
+ }
+ else {
//
// Keep track that we received another
//
@@ -487,15 +505,14 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
//
return NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT;
}
- } else {
- return NEW_EVENT_STATUS.SYNTAX_ERROR;
}
- } catch (ControlLoopException e) {
+ }
+ catch (ControlLoopException e) {
logger.error("{}: onNewEvent threw: ",this, e);
- return NEW_EVENT_STATUS.SYNTAX_ERROR;
}
+ return NEW_EVENT_STATUS.SYNTAX_ERROR;
}
-
+
public VirtualControlLoopNotification setControlLoopTimedOut() {
this.controlLoopTimedOut = FinalResult.FINAL_FAILURE_TIMEOUT;
VirtualControlLoopNotification notification = new VirtualControlLoopNotification(this.onset);
@@ -504,12 +521,12 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
notification.getHistory().addAll(this.controlLoopHistory);
return notification;
}
-
+
public boolean isControlLoopTimedOut() {
return (this.controlLoopTimedOut == FinalResult.FINAL_FAILURE_TIMEOUT);
}
-
- public int getControlLoopTimeout(Integer defaultTimeout) {
+
+ public int getControlLoopTimeout(Integer defaultTimeout) {
if (this.processor != null && this.processor.getControlLoop() != null) {
return this.processor.getControlLoop().getTimeout();
}
@@ -518,7 +535,7 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
}
return 0;
}
-
+
public AAIGETVnfResponse getVnfResponse() {
return vnfResponse;
}
@@ -526,7 +543,7 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
public AAIGETVserverResponse getVserverResponse() {
return vserverResponse;
}
-
+
public void checkEventSyntax(VirtualControlLoopEvent event) throws ControlLoopException {
if (event.getClosedLoopEventStatus() == null ||
(event.getClosedLoopEventStatus() != ControlLoopEventStatus.ONSET &&
@@ -544,162 +561,144 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
}
if (event.getTarget() == null || event.getTarget().length() < 1) {
throw new ControlLoopException("No target field");
- } else if (! "VM_NAME".equalsIgnoreCase(event.getTarget()) &&
- ! "VNF_NAME".equalsIgnoreCase(event.getTarget()) &&
- ! "vserver.vserver-name".equalsIgnoreCase(event.getTarget()) &&
- ! "generic-vnf.vnf-id".equalsIgnoreCase(event.getTarget()) &&
- ! "generic-vnf.vnf-name".equalsIgnoreCase(event.getTarget()) ) {
+ } else if (! VM_NAME.equalsIgnoreCase(event.getTarget()) &&
+ ! VNF_NAME.equalsIgnoreCase(event.getTarget()) &&
+ ! VSERVER_VSERVER_NAME.equalsIgnoreCase(event.getTarget()) &&
+ ! GENERIC_VNF_VNF_ID.equalsIgnoreCase(event.getTarget()) &&
+ ! GENERIC_VNF_VNF_NAME.equalsIgnoreCase(event.getTarget()) ) {
throw new ControlLoopException("target field invalid - expecting VM_NAME or VNF_NAME");
}
if (event.getAAI() == null) {
- throw new ControlLoopException("AAI is null");
- }
- if (event.getAAI().get("generic-vnf.vnf-id") == null && event.getAAI().get("vserver.vserver-name") == null &&
- event.getAAI().get("generic-vnf.vnf-name") == null) {
- throw new ControlLoopException("generic-vnf.vnf-id or generic-vnf.vnf-name or vserver.vserver-name information missing");
- }
- }
-
+ throw new ControlLoopException("AAI is null");
+ }
+ if (event.getAAI().get(GENERIC_VNF_VNF_ID) == null && event.getAAI().get(VSERVER_VSERVER_NAME) == null &&
+ event.getAAI().get(GENERIC_VNF_VNF_NAME) == null) {
+ throw new ControlLoopException("generic-vnf.vnf-id or generic-vnf.vnf-name or vserver.vserver-name information missing");
+ }
+ }
+
public void queryAai(VirtualControlLoopEvent event) throws AAIException {
- if (event.getAAI().get("vserver.is-closed-loop-disabled") == null &&
- event.getAAI().get("generic-vnf.is-closed-loop-disabled") == null) {
- try {
- if (event.getAAI().get("generic-vnf.vnf-id") != null) {
- vnfResponse = getAAIVnfInfo(event);
- if (vnfResponse == null) {
- throw new AAIException("AAI Response is null (query by vnf-id)");
- }
- if (vnfResponse.getRequestError() != null) {
- throw new AAIException("AAI Responded with a request error (query by vnf-id)");
- }
- if (isClosedLoopDisabled(vnfResponse) == true) {
- throw new AAIException("is-closed-loop-disabled is set to true");
- }
- } else if (event.getAAI().get("generic-vnf.vnf-name") != null) {
- vnfResponse = getAAIVnfInfo(event);
- if (vnfResponse == null) {
- throw new AAIException("AAI Response is null (query by vnf-name)");
- }
- if (vnfResponse.getRequestError() != null) {
- throw new AAIException("AAI Responded with a request error (query by vnf-name)");
- }
- if (isClosedLoopDisabled(vnfResponse) == true) {
- throw new AAIException("is-closed-loop-disabled is set to true");
- }
- } else if (event.getAAI().get("vserver.vserver-name") != null) {
- vserverResponse = getAAIVserverInfo(event);
- if (vserverResponse == null) {
- throw new AAIException("AAI Response is null (query by vserver-name)");
- }
- if (vserverResponse.getRequestError() != null) {
- throw new AAIException("AAI responded with a request error (query by vserver-name)");
- }
- if (isClosedLoopDisabled(vserverResponse) == true) {
- throw new AAIException("is-closed-loop-disabled is set to true");
- }
- }
- } catch (Exception e) {
- logger.error("Exception from getAAIInfo: ", e);
- throw new AAIException("Exception from getAAIInfo: " + e.toString());
+ if ((event.getAAI().get(VSERVER_IS_CLOSED_LOOP_DISABLED) != null || event.getAAI().get(GENERIC_VNF_IS_CLOSED_LOOP_DISABLED) != null) && isClosedLoopDisabled(event)) {
+ throw new AAIException("is-closed-loop-disabled is set to true on VServer or VNF");
+ }
+
+ try {
+ if (event.getAAI().get(GENERIC_VNF_VNF_ID) != null || event.getAAI().get(GENERIC_VNF_VNF_NAME) != null) {
+ vnfResponse = getAAIVnfInfo(event);
+ processVNFResponse(vnfResponse, event.getAAI().get(GENERIC_VNF_VNF_ID) != null);
+ }
+ else if (event.getAAI().get(VSERVER_VSERVER_NAME) != null) {
+ vserverResponse = getAAIVserverInfo(event);
+ processVServerResponse(vserverResponse);
}
- } else if (isClosedLoopDisabled(event)) {
- throw new AAIException("is-closed-loop-disabled is set to true");
- }
- }
-
- public static boolean isClosedLoopDisabled(AAIGETVnfResponse aaiResponse) {
- if (aaiResponse != null && aaiResponse.getIsClosedLoopDisabled() != null) {
- String value = aaiResponse.getIsClosedLoopDisabled();
- if ("true".equalsIgnoreCase(value) || "T".equalsIgnoreCase(value) ||
- "yes".equalsIgnoreCase(value) || "Y".equalsIgnoreCase(value)) {
- return true;
- }
- }
-
- return false;
- }
-
- public static boolean isClosedLoopDisabled(AAIGETVserverResponse aaiResponse) {
- if (aaiResponse != null && aaiResponse.getIsClosedLoopDisabled() != null) {
- String value = aaiResponse.getIsClosedLoopDisabled();
- if ("true".equalsIgnoreCase(value) || "T".equalsIgnoreCase(value) ||
- "yes".equalsIgnoreCase(value) || "Y".equalsIgnoreCase(value)) {
- return true;
- }
- }
-
- return false;
- }
-
+ } catch (Exception e) {
+ logger.error("Exception from queryAai: ", e);
+ throw new AAIException("Exception from queryAai: " + e.toString());
+ }
+ }
+
+ private static void processVNFResponse(AAIGETVnfResponse aaiResponse, boolean queryByVNFID) throws AAIException {
+ String queryTypeString = (queryByVNFID ? "vnf-id" : "vnf-name");
+
+ if (aaiResponse == null) {
+ throw new AAIException("AAI Response is null (query by " + queryTypeString + ")");
+ }
+ if (aaiResponse.getRequestError() != null) {
+ throw new AAIException("AAI Responded with a request error (query by " + queryTypeString + ")");
+ }
+
+ if (aaiResponse.getIsClosedLoopDisabled() != null) {
+ String value = aaiResponse.getIsClosedLoopDisabled();
+ if ("true".equalsIgnoreCase(value) || "T".equalsIgnoreCase(value) ||
+ "yes".equalsIgnoreCase(value) || "Y".equalsIgnoreCase(value)) {
+ throw new AAIException("is-closed-loop-disabled is set to true (query by " + queryTypeString + ")");
+ }
+ }
+ }
+
+ private static void processVServerResponse(AAIGETVserverResponse aaiResponse) throws AAIException {
+ if (aaiResponse == null) {
+ throw new AAIException("AAI Response is null (query by vserver-name)");
+ }
+ if (aaiResponse.getRequestError() != null) {
+ throw new AAIException("AAI responded with a request error (query by vserver-name)");
+ }
+
+ if (aaiResponse.getIsClosedLoopDisabled() != null) {
+ String value = aaiResponse.getIsClosedLoopDisabled();
+ if ("true".equalsIgnoreCase(value) || "T".equalsIgnoreCase(value) ||
+ "yes".equalsIgnoreCase(value) || "Y".equalsIgnoreCase(value)) {
+ throw new AAIException("is-closed-loop-disabled is set to true (query by vserver-name)");
+ }
+ }
+ }
+
public static boolean isClosedLoopDisabled(VirtualControlLoopEvent event) {
- if ("true".equalsIgnoreCase(event.getAAI().get("vserver.is-closed-loop-disabled")) ||
- "T".equalsIgnoreCase(event.getAAI().get("vserver.is-closed-loop-disabled")) ||
- "yes".equalsIgnoreCase(event.getAAI().get("vserver.is-closed-loop-disabled")) ||
- "Y".equalsIgnoreCase(event.getAAI().get("vserver.is-closed-loop-disabled"))) {
+ if ("true".equalsIgnoreCase(event.getAAI().get(VSERVER_IS_CLOSED_LOOP_DISABLED)) ||
+ "T".equalsIgnoreCase(event.getAAI().get(VSERVER_IS_CLOSED_LOOP_DISABLED)) ||
+ "yes".equalsIgnoreCase(event.getAAI().get(VSERVER_IS_CLOSED_LOOP_DISABLED)) ||
+ "Y".equalsIgnoreCase(event.getAAI().get(VSERVER_IS_CLOSED_LOOP_DISABLED))) {
return true;
}
- else if ("true".equalsIgnoreCase(event.getAAI().get("generic-vnf.is-closed-loop-disabled")) ||
- "T".equalsIgnoreCase(event.getAAI().get("generic-vnf.is-closed-loop-disabled")) ||
- "yes".equalsIgnoreCase(event.getAAI().get("generic-vnf.is-closed-loop-disabled")) ||
- "Y".equalsIgnoreCase(event.getAAI().get("generic-vnf.is-closed-loop-disabled"))) {
- return true;
- }
- return false;
+ return ("true".equalsIgnoreCase(event.getAAI().get(GENERIC_VNF_IS_CLOSED_LOOP_DISABLED)) ||
+ "T".equalsIgnoreCase(event.getAAI().get(GENERIC_VNF_IS_CLOSED_LOOP_DISABLED)) ||
+ "yes".equalsIgnoreCase(event.getAAI().get(GENERIC_VNF_IS_CLOSED_LOOP_DISABLED)) ||
+ "Y".equalsIgnoreCase(event.getAAI().get(GENERIC_VNF_IS_CLOSED_LOOP_DISABLED)));
}
-
+
public static AAIGETVserverResponse getAAIVserverInfo(VirtualControlLoopEvent event) throws ControlLoopException {
UUID requestID = event.getRequestID();
AAIGETVserverResponse response = null;
- String vserverName = event.getAAI().get("vserver.vserver-name");
+ String vserverName = event.getAAI().get(VSERVER_VSERVER_NAME);
try {
- if (vserverName != null) {
- aaiHostURL = PolicyEngine.manager.getEnvironmentProperty("aai.url");
- aaiUser = PolicyEngine.manager.getEnvironmentProperty("aai.username");
- aaiPassword = PolicyEngine.manager.getEnvironmentProperty("aai.password");
- String aaiGetQueryByVserver = "/aai/v11/nodes/vservers?vserver-name=";
- String url = aaiHostURL + aaiGetQueryByVserver;
- logger.info("url: " + url);
- response = new AAIManager(new RESTManager()).getQueryByVserverName(url, aaiUser, aaiPassword, requestID, vserverName);
- }
- } catch (Exception e) {
- logger.error("getAAIVserverInfo exception: ", e);
- throw new ControlLoopException("Exception in getAAIVserverInfo: ", e);
- }
-
+ if (vserverName != null) {
+ aaiHostURL = PolicyEngine.manager.getEnvironmentProperty("aai.url");
+ aaiUser = PolicyEngine.manager.getEnvironmentProperty("aai.username");
+ aaiPassword = PolicyEngine.manager.getEnvironmentProperty("aai.password");
+ String aaiGetQueryByVserver = "/aai/v11/nodes/vservers?vserver-name=";
+ String url = aaiHostURL + aaiGetQueryByVserver;
+ logger.info("AAI Host URL by VServer: {}", url);
+ response = new AAIManager(new RESTManager()).getQueryByVserverName(url, aaiUser, aaiPassword, requestID, vserverName);
+ }
+ } catch (Exception e) {
+ logger.error("getAAIVserverInfo exception: ", e);
+ throw new ControlLoopException("Exception in getAAIVserverInfo: ", e);
+ }
+
return response;
}
-
+
public static AAIGETVnfResponse getAAIVnfInfo(VirtualControlLoopEvent event) throws ControlLoopException {
UUID requestID = event.getRequestID();
AAIGETVnfResponse response = null;
- String vnfName = event.getAAI().get("generic-vnf.vnf-name");
- String vnfID = event.getAAI().get("generic-vnf.vnf-id");
-
+ String vnfName = event.getAAI().get(GENERIC_VNF_VNF_NAME);
+ String vnfID = event.getAAI().get(GENERIC_VNF_VNF_ID);
+
aaiHostURL = PolicyEngine.manager.getEnvironmentProperty("aai.url");
- aaiUser = PolicyEngine.manager.getEnvironmentProperty("aai.username");
- aaiPassword = PolicyEngine.manager.getEnvironmentProperty("aai.password");
-
+ aaiUser = PolicyEngine.manager.getEnvironmentProperty("aai.username");
+ aaiPassword = PolicyEngine.manager.getEnvironmentProperty("aai.password");
+
try {
- if (vnfName != null) {
- String aaiGetQueryByVnfName = "/aai/v11/network/generic-vnfs/generic-vnf?vnf-name=";
- String url = aaiHostURL + aaiGetQueryByVnfName;
- logger.info("url: " + url);
- response = new AAIManager(new RESTManager()).getQueryByVnfName(url, aaiUser, aaiPassword, requestID, vnfName);
- } else if (vnfID != null) {
- String aaiGetQueryByVnfID = "/aai/v11/network/generic-vnfs/generic-vnf/";
- String url = aaiHostURL + aaiGetQueryByVnfID;
- logger.info("url: " + url);
- response = new AAIManager(new RESTManager()).getQueryByVnfID(url, aaiUser, aaiPassword, requestID, vnfID);
- }
- } catch (Exception e) {
- logger.error("getAAIVnfInfo exception: ", e);
- throw new ControlLoopException("Exception in getAAIVnfInfo: ", e);
- }
-
+ if (vnfName != null) {
+ String aaiGetQueryByVnfName = "/aai/v11/network/generic-vnfs/generic-vnf?vnf-name=";
+ String url = aaiHostURL + aaiGetQueryByVnfName;
+ logger.info("AAI Host URL by VNF name: {}", url);
+ response = new AAIManager(new RESTManager()).getQueryByVnfName(url, aaiUser, aaiPassword, requestID, vnfName);
+ } else if (vnfID != null) {
+ String aaiGetQueryByVnfID = "/aai/v11/network/generic-vnfs/generic-vnf/";
+ String url = aaiHostURL + aaiGetQueryByVnfID;
+ logger.info("AAI Host URL by VNF ID: {}", url);
+ response = new AAIManager(new RESTManager()).getQueryByVnfID(url, aaiUser, aaiPassword, requestID, vnfID);
+ }
+ } catch (Exception e) {
+ logger.error("getAAIVnfInfo exception: ", e);
+ throw new ControlLoopException("Exception in getAAIVnfInfo: ", e);
+ }
+
return response;
}
-
+
@Override
public boolean isActive() {
// TODO
@@ -719,5 +718,5 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
+ numAbatements + ", isActivated="
+ isActivated + ", currentOperation=" + currentOperation + ", targetLock=" + targetLock + "]";
}
-
+
}
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager.java
index 47275c6da..ba2df3358 100644
--- a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager.java
+++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager.java
@@ -25,6 +25,7 @@ import java.sql.Timestamp;
import java.time.Instant;
import java.util.AbstractMap;
import java.util.LinkedList;
+import java.util.List;
import java.util.Properties;
import javax.persistence.EntityManager;
@@ -53,13 +54,13 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ControlLoopOperationManager implements Serializable {
-
- /**
- *
- */
private static final long serialVersionUID = -3773199283624595410L;
private static final Logger logger = LoggerFactory.getLogger(ControlLoopOperationManager.class);
+ private static final String VSERVER_VSERVER_NAME = "vserver.vserver-name";
+ private static final String GENERIC_VNF_VNF_NAME = "generic-vnf.vnf-name";
+ private static final String GENERIC_VNF_VNF_ID = "generic-vnf.vnf-id";
+
@Override
public String toString() {
return "ControlLoopOperationManager [onset=" + (onset != null ? onset.getRequestID() : "null") + ", policy="
@@ -73,7 +74,6 @@ public class ControlLoopOperationManager implements Serializable {
// These properties are not changeable, but accessible
// for Drools Rule statements.
//
- //public final ATTControlLoopEvent onset;
public final ControlLoopEvent onset;
public final transient Policy policy;
@@ -82,7 +82,7 @@ public class ControlLoopOperationManager implements Serializable {
//
private int attempts = 0;
private transient Operation currentOperation = null;
- private LinkedList<Operation> operationHistory = new LinkedList<Operation>();
+ private LinkedList<Operation> operationHistory = new LinkedList<>();
private PolicyResult policyResult = null;
private ControlLoopEventManager eventManager = null;
private String targetEntity;
@@ -96,20 +96,20 @@ public class ControlLoopOperationManager implements Serializable {
}
public String getTargetEntity() {
- return this.targetEntity;
+ return this.targetEntity;
}
//
// Internal class used for tracking
//
private class Operation {
- public ControlLoopOperation operation = new ControlLoopOperation();
- public PolicyResult policyResult = null;
- public int attempt = 0;
+ private ControlLoopOperation clOperation = new ControlLoopOperation();
+ private PolicyResult policyResult = null;
+ private int attempt = 0;
@Override
public String toString() {
- return "Operation [attempt=" + attempt + ", policyResult=" + policyResult + ", operation=" + operation
+ return "Operation [attempt=" + attempt + ", policyResult=" + policyResult + ", operation=" + clOperation
+ "]";
}
}
@@ -129,79 +129,75 @@ public class ControlLoopOperationManager implements Serializable {
}
public String getTarget(Policy policy) throws ControlLoopException, AAIException {
- if (policy.getTarget() != null) {
- if (policy.getTarget().getType() != null) {
- switch(policy.getTarget().getType()) {
- case PNF:
- break;
- case VM:
- case VNF:
- VirtualControlLoopEvent virtualOnset = (VirtualControlLoopEvent) this.onset;
- if (this.onset.getTarget().equalsIgnoreCase("vserver.vserver-name")) {
- return virtualOnset.getAAI().get("vserver.vserver-name");
- }
- else if (this.onset.getTarget().equalsIgnoreCase("generic-vnf.vnf-id")) {
- return virtualOnset.getAAI().get("generic-vnf.vnf-id");
- }
- else if (this.onset.getTarget().equalsIgnoreCase("generic-vnf.vnf-name")) {
- /*
- * If the onset is enriched with the vnf-id,
- * we don't need an A&AI response
- */
- if (virtualOnset.getAAI().containsKey("generic-vnf.vnf-id")) {
- return virtualOnset.getAAI().get("generic-vnf.vnf-id");
- }
-
- /*
- * If the vnf-name was retrieved from the onset then the vnf-id
- * must be obtained from the event manager's A&AI GET query
- */
- String vnfId = this.eventManager.getVnfResponse().getVnfID();
- if (vnfId == null) {
- throw new AAIException("No vnf-id found");
- }
- return vnfId;
- }
- break;
- default:
- throw new ControlLoopException("The target type is not supported");
- }
- }
- else {
- throw new ControlLoopException("The target type is null");
- }
- }
- else {
- throw new ControlLoopException("The target is null");
- }
- throw new ControlLoopException("Target does not match target type");
- }
-
+ if (policy.getTarget() == null) {
+ throw new ControlLoopException("The target is null");
+ }
+
+ if (policy.getTarget().getType() == null) {
+ throw new ControlLoopException("The target type is null");
+ }
+
+ switch(policy.getTarget().getType()) {
+ case PNF:
+ throw new ControlLoopException("PNF target is not supported");
+ case VM:
+ case VNF:
+ VirtualControlLoopEvent virtualOnset = (VirtualControlLoopEvent) this.onset;
+ if (this.onset.getTarget().equalsIgnoreCase(VSERVER_VSERVER_NAME)) {
+ return virtualOnset.getAAI().get(VSERVER_VSERVER_NAME);
+ }
+ else if (this.onset.getTarget().equalsIgnoreCase(GENERIC_VNF_VNF_ID)) {
+ return virtualOnset.getAAI().get(GENERIC_VNF_VNF_ID);
+ }
+ else if (this.onset.getTarget().equalsIgnoreCase(GENERIC_VNF_VNF_NAME)) {
+ /*
+ * If the onset is enriched with the vnf-id,
+ * we don't need an A&AI response
+ */
+ if (virtualOnset.getAAI().containsKey(GENERIC_VNF_VNF_ID)) {
+ return virtualOnset.getAAI().get(GENERIC_VNF_VNF_ID);
+ }
+
+ /*
+ * If the vnf-name was retrieved from the onset then the vnf-id
+ * must be obtained from the event manager's A&AI GET query
+ */
+ String vnfId = this.eventManager.getVnfResponse().getVnfID();
+ if (vnfId == null) {
+ throw new AAIException("No vnf-id found");
+ }
+ return vnfId;
+ }
+ throw new ControlLoopException("Target does not match target type");
+ default:
+ throw new ControlLoopException("The target type is not supported");
+ }
+ }
+
public ControlLoopOperationManager(ControlLoopEvent onset, Policy policy, ControlLoopEventManager em) throws ControlLoopException, AAIException {
this.onset = onset;
this.policy = policy;
this.guardApprovalStatus = "NONE";
this.eventManager = em;
this.targetEntity = getTarget(policy);
-
+
//
// Let's make a sanity check
//
switch (policy.getActor()) {
case "APPC":
- if ("ModifyConfig".equalsIgnoreCase(policy.getRecipe())) {
- /*
- * The target vnf-id may not be the same as the source vnf-id
- * specified in the yaml, the target vnf-id is retrieved by
- * a named query to A&AI.
- */
- String targetVnf = AppcLcmActorServiceProvider.vnfNamedQuery(
- policy.getTarget().getResourceID(), this.targetEntity);
- this.targetEntity = targetVnf;
- }
+ if ("ModifyConfig".equalsIgnoreCase(policy.getRecipe())) {
+ /*
+ * The target vnf-id may not be the same as the source vnf-id
+ * specified in the yaml, the target vnf-id is retrieved by
+ * a named query to A&AI.
+ */
+ String targetVnf = AppcLcmActorServiceProvider.vnfNamedQuery( policy.getTarget().getResourceID(), this.targetEntity);
+ this.targetEntity = targetVnf;
+ }
break;
case "SO":
- break;
+ break;
case "VFC":
break;
default:
@@ -209,85 +205,46 @@ public class ControlLoopOperationManager implements Serializable {
}
}
- public Object startOperation(/*VirtualControlLoopEvent*/ControlLoopEvent onset) throws AAIException {
- //
- // They shouldn't call us if we currently running something
- //
- if (this.currentOperation != null) {
- //
- // what do we do if we are already running an operation?
- //
- return null;
- }
- //
- // Check if we have maxed out on retries
- //
- if (this.policy.getRetry() == null || this.policy.getRetry() < 1) {
- //
- // No retries are allowed, so check have we even made
- // one attempt to execute the operation?
- //
- if (this.attempts >= 1) {
- //
- // We have, let's ensure our PolicyResult is set
- //
- if (this.policyResult == null) {
- this.policyResult = PolicyResult.FAILURE_RETRIES;
- }
- //
- //
- //
- return null;
- }
- } else {
- //
- // Have we maxed out on retries?
- //
- if (this.attempts > this.policy.getRetry()) {
- if (this.policyResult == null) {
- this.policyResult = PolicyResult.FAILURE_RETRIES;
- }
- return null;
- }
- }
+ public Object startOperation(/*VirtualControlLoopEvent*/ControlLoopEvent onset) throws ControlLoopException{
+ verifyOperatonCanRun();
+
//
// Setup
//
this.policyResult = null;
Operation operation = new Operation();
operation.attempt = ++this.attempts;
- operation.operation.setActor(this.policy.getActor());
- operation.operation.setOperation(this.policy.getRecipe());
- operation.operation.setTarget(this.policy.getTarget().toString());
- operation.operation.setSubRequestId(Integer.toString(operation.attempt));
+ operation.clOperation.setActor(this.policy.getActor());
+ operation.clOperation.setOperation(this.policy.getRecipe());
+ operation.clOperation.setTarget(this.policy.getTarget().toString());
+ operation.clOperation.setSubRequestId(Integer.toString(operation.attempt));
//
// Now determine which actor we need to construct a request for
//
switch (policy.getActor()) {
case "APPC":
- /*
- * If the recipe is ModifyConfig, a legacy APPC
- * request is constructed. Otherwise an LCMRequest
- * is constructed.
- */
+ /*
+ * If the recipe is ModifyConfig, a legacy APPC
+ * request is constructed. Otherwise an LCMRequest
+ * is constructed.
+ */
this.currentOperation = operation;
- if ("ModifyConfig".equalsIgnoreCase(policy.getRecipe())) {
-
- this.operationRequest = APPCActorServiceProvider.constructRequest((VirtualControlLoopEvent) onset,
- operation.operation, this.policy, this.targetEntity);
- }
- else {
- this.operationRequest = AppcLcmActorServiceProvider.constructRequest((VirtualControlLoopEvent) onset,
- operation.operation, this.policy, this.targetEntity);
- }
+ if ("ModifyConfig".equalsIgnoreCase(policy.getRecipe())) {
+ this.operationRequest = APPCActorServiceProvider.constructRequest((VirtualControlLoopEvent) onset,
+ operation.clOperation, this.policy, this.targetEntity);
+ }
+ else {
+ this.operationRequest = AppcLcmActorServiceProvider.constructRequest((VirtualControlLoopEvent) onset,
+ operation.clOperation, this.policy, this.targetEntity);
+ }
//
// Save the operation
//
-
+
return operationRequest;
case "SO":
- SOActorServiceProvider SOAsp = new SOActorServiceProvider();
- this.operationRequest = SOAsp.constructRequest((VirtualControlLoopEvent)onset, operation.operation, this.policy);
+ SOActorServiceProvider soActorSP = new SOActorServiceProvider();
+ this.operationRequest = soActorSP.constructRequest((VirtualControlLoopEvent)onset, operation.clOperation, this.policy);
// Save the operation
this.currentOperation = operation;
@@ -298,182 +255,224 @@ public class ControlLoopOperationManager implements Serializable {
return operationRequest;
case "VFC":
- this.operationRequest = VFCActorServiceProvider.constructRequest((VirtualControlLoopEvent) onset, operation.operation, this.policy, this.eventManager.getVnfResponse());
- this.currentOperation = operation;
- if (this.operationRequest == null) {
- this.policyResult = PolicyResult.FAILURE;
- }
- return operationRequest;
-
+ this.operationRequest = VFCActorServiceProvider.constructRequest((VirtualControlLoopEvent) onset, operation.clOperation, this.policy, this.eventManager.getVnfResponse());
+ this.currentOperation = operation;
+ if (this.operationRequest == null) {
+ this.policyResult = PolicyResult.FAILURE;
+ }
+ return operationRequest;
+ default:
+ throw new ControlLoopException("invalid actor " + policy.getActor() + " on policy");
}
- return null;
}
- public PolicyResult onResponse(Object response) {
+ public PolicyResult onResponse(Object response) {
//
// Which response is it?
//
if (response instanceof Response) {
//
- // Cast it
+ // Cast APPC response and handle it
//
- Response appcResponse = (Response) response;
+ return onResponse((Response) response);
+ }
+ else if (response instanceof LCMResponseWrapper) {
//
- // Determine which subrequestID (ie. attempt)
+ // Cast LCM response and handle it
//
- Integer operationAttempt = null;
- try {
- operationAttempt = Integer.parseInt(appcResponse.getCommonHeader().getSubRequestID());
- } catch (NumberFormatException e) {
- //
- // We cannot tell what happened if this doesn't exist
- //
- this.completeOperation(operationAttempt, "Policy was unable to parse APP-C SubRequestID (it was null).", PolicyResult.FAILURE_EXCEPTION);
- return PolicyResult.FAILURE_EXCEPTION;
- }
+ return onResponse((LCMResponseWrapper) response);
+ }
+ else if (response instanceof SOResponseWrapper) {
//
- // Sanity check the response message
+ // Cast SO response and handle it
//
- if (appcResponse.getStatus() == null) {
- //
- // We cannot tell what happened if this doesn't exist
- //
- this.completeOperation(operationAttempt, "Policy was unable to parse APP-C response status field (it was null).", PolicyResult.FAILURE_EXCEPTION);
- return PolicyResult.FAILURE_EXCEPTION;
+ return onResponse((SOResponseWrapper) response);
+ }
+ else if (response instanceof VFCResponse) {
+ //
+ // Cast VFC response and handle it
+ //
+ return onResponse((VFCResponse) response);
+ }
+ else {
+ return null;
+ }
+ }
+
+ /**
+ * This method handles operation responses from APPC
+ * @param appcResponse the APPC response
+ * @return The result of the response handling
+ */
+ private PolicyResult onResponse(Response appcResponse) {
+ //
+ // Determine which subrequestID (ie. attempt)
+ //
+ Integer operationAttempt = null;
+ try {
+ operationAttempt = Integer.parseInt(appcResponse.getCommonHeader().getSubRequestID());
+ } catch (NumberFormatException e) {
+ //
+ // We cannot tell what happened if this doesn't exist
+ //
+ this.completeOperation(operationAttempt, "Policy was unable to parse APP-C SubRequestID (it was null).", PolicyResult.FAILURE_EXCEPTION);
+ return PolicyResult.FAILURE_EXCEPTION;
+ }
+ //
+ // Sanity check the response message
+ //
+ if (appcResponse.getStatus() == null) {
+ //
+ // We cannot tell what happened if this doesn't exist
+ //
+ this.completeOperation(operationAttempt, "Policy was unable to parse APP-C response status field (it was null).", PolicyResult.FAILURE_EXCEPTION);
+ return PolicyResult.FAILURE_EXCEPTION;
+ }
+ //
+ // Get the Response Code
+ //
+ ResponseCode code = ResponseCode.toResponseCode(appcResponse.getStatus().getCode());
+ if (code == null) {
+ //
+ // We are unaware of this code
+ //
+ this.completeOperation(operationAttempt, "Policy was unable to parse APP-C response status code field.", PolicyResult.FAILURE_EXCEPTION);
+ return PolicyResult.FAILURE_EXCEPTION;
+ }
+ //
+ // Ok, let's figure out what APP-C's response is
+ //
+ switch (code) {
+ case ACCEPT:
+ //
+ // This is good, they got our original message and
+ // acknowledged it.
+ //
+ // Is there any need to track this?
+ //
+ return null;
+ case ERROR:
+ case REJECT:
+ //
+ // We'll consider these two codes as exceptions
+ //
+ this.completeOperation(operationAttempt, appcResponse.getStatus().getDescription(), PolicyResult.FAILURE_EXCEPTION);
+ if (this.policyResult != null && this.policyResult.equals(PolicyResult.FAILURE_TIMEOUT)) {
+ return null;
}
+ return PolicyResult.FAILURE_EXCEPTION;
+ case SUCCESS:
//
- // Get the Response Code
//
- ResponseCode code = ResponseCode.toResponseCode(appcResponse.getStatus().getCode());
- if (code == null) {
- //
- // We are unaware of this code
- //
- this.completeOperation(operationAttempt, "Policy was unable to parse APP-C response status code field.", PolicyResult.FAILURE_EXCEPTION);
- return PolicyResult.FAILURE_EXCEPTION;
+ //
+ this.completeOperation(operationAttempt, appcResponse.getStatus().getDescription(), PolicyResult.SUCCESS);
+ if (this.policyResult != null && this.policyResult.equals(PolicyResult.FAILURE_TIMEOUT)) {
+ return null;
}
+ return PolicyResult.SUCCESS;
+ case FAILURE:
//
- // Ok, let's figure out what APP-C's response is
//
- switch (code) {
- case ACCEPT:
- //
- // This is good, they got our original message and
- // acknowledged it.
- //
- // Is there any need to track this?
- //
+ //
+ this.completeOperation(operationAttempt, appcResponse.getStatus().getDescription(), PolicyResult.FAILURE);
+ if (this.policyResult != null && this.policyResult.equals(PolicyResult.FAILURE_TIMEOUT)) {
return null;
- case ERROR:
- case REJECT:
- //
- // We'll consider these two codes as exceptions
- //
- this.completeOperation(operationAttempt, appcResponse.getStatus().getDescription(), PolicyResult.FAILURE_EXCEPTION);
- if (this.policyResult != null && this.policyResult.equals(PolicyResult.FAILURE_TIMEOUT)) {
- return null;
- }
- return PolicyResult.FAILURE_EXCEPTION;
- case SUCCESS:
- //
- //
- //
- this.completeOperation(operationAttempt, appcResponse.getStatus().getDescription(), PolicyResult.SUCCESS);
- if (this.policyResult != null && this.policyResult.equals(PolicyResult.FAILURE_TIMEOUT)) {
- return null;
- }
- return PolicyResult.SUCCESS;
- case FAILURE:
- //
- //
- //
- this.completeOperation(operationAttempt, appcResponse.getStatus().getDescription(), PolicyResult.FAILURE);
- if (this.policyResult != null && this.policyResult.equals(PolicyResult.FAILURE_TIMEOUT)) {
- return null;
- }
- return PolicyResult.FAILURE;
}
+ return PolicyResult.FAILURE;
+ default:
+ return null;
+ }
+ }
+
+ /**
+ * This method handles operation responses from LCM
+ * @param dmaapResponse the LCM response
+ * @return The result of the response handling
+ */
+ private PolicyResult onResponse(LCMResponseWrapper dmaapResponse) {
+ /*
+ * Parse out the operation attempt using the subrequestid
+ */
+ Integer operationAttempt = AppcLcmActorServiceProvider.parseOperationAttempt(dmaapResponse.getBody().getCommonHeader().getSubRequestId());
+ if (operationAttempt == null) {
+ this.completeOperation(operationAttempt, "Policy was unable to parse APP-C SubRequestID (it was null).", PolicyResult.FAILURE_EXCEPTION);
}
- else if (response instanceof LCMResponseWrapper) {
-
- LCMResponseWrapper dmaapResponse = (LCMResponseWrapper) response;
-
- /*
- * Parse out the operation attempt using the subrequestid
- */
- Integer operationAttempt = AppcLcmActorServiceProvider.parseOperationAttempt(dmaapResponse.getBody().getCommonHeader().getSubRequestId());
- if (operationAttempt == null) {
- this.completeOperation(operationAttempt, "Policy was unable to parse APP-C SubRequestID (it was null).", PolicyResult.FAILURE_EXCEPTION);
- }
-
- /*
- * Process the APPCLCM response to see what PolicyResult
- * should be returned
- */
- AbstractMap.SimpleEntry<PolicyResult, String> result = AppcLcmActorServiceProvider.processResponse(dmaapResponse);
-
- if (result.getKey() != null) {
- this.completeOperation(operationAttempt, result.getValue(), result.getKey());
- if (PolicyResult.FAILURE_TIMEOUT.equals(this.policyResult)) {
- return null;
- }
- return result.getKey();
- }
- return null;
- } else if (response instanceof SOResponseWrapper) {
- SOResponseWrapper msoResponse = (SOResponseWrapper) response;
-
- switch (msoResponse.getSoResponse().getHttpResponseCode()) {
- case 200:
- case 202:
- //
- // Consider it as success
- //
- this.completeOperation(this.attempts, msoResponse.getSoResponse().getHttpResponseCode() + " Success", PolicyResult.SUCCESS);
- if (this.policyResult != null && this.policyResult.equals(PolicyResult.FAILURE_TIMEOUT)) {
- return null;
- }
- return PolicyResult.SUCCESS;
- default:
- //
- // Consider it as failure
- //
- this.completeOperation(this.attempts, msoResponse.getSoResponse().getHttpResponseCode() + " Failed", PolicyResult.FAILURE);
- if (this.policyResult != null && this.policyResult.equals(PolicyResult.FAILURE_TIMEOUT)) {
- return null;
- }
- return PolicyResult.FAILURE;
- }
- } else if (response instanceof VFCResponse) {
- VFCResponse vfcResponse = (VFCResponse) response;
+ /*
+ * Process the APPCLCM response to see what PolicyResult
+ * should be returned
+ */
+ AbstractMap.SimpleEntry<PolicyResult, String> result = AppcLcmActorServiceProvider.processResponse(dmaapResponse);
- if (vfcResponse.getResponseDescriptor().getStatus().equalsIgnoreCase("finished")) {
- //
- // Consider it as success
- //
- this.completeOperation(this.attempts, " Success", PolicyResult.SUCCESS);
- if (this.policyResult != null && this.policyResult.equals(PolicyResult.FAILURE_TIMEOUT)) {
- return null;
- }
- return PolicyResult.SUCCESS;
- } else {
- //
- // Consider it as failure
- //
- this.completeOperation(this.attempts, " Failed", PolicyResult.FAILURE);
- if (this.policyResult != null && this.policyResult.equals(PolicyResult.FAILURE_TIMEOUT)) {
- return null;
- }
- // increment operation attempts for retries
- this.attempts += 1;
- return PolicyResult.FAILURE;
+ if (result.getKey() != null) {
+ this.completeOperation(operationAttempt, result.getValue(), result.getKey());
+ if (PolicyResult.FAILURE_TIMEOUT.equals(this.policyResult)) {
+ return null;
}
+ return result.getKey();
}
return null;
}
+
+ /**
+ * This method handles operation responses from SO
+ * @param msoResponse the SO response
+ * @return The result of the response handling
+ */
+ private PolicyResult onResponse(SOResponseWrapper msoResponse) {
+ switch (msoResponse.getSoResponse().getHttpResponseCode()) {
+ case 200:
+ case 202:
+ //
+ // Consider it as success
+ //
+ this.completeOperation(this.attempts, msoResponse.getSoResponse().getHttpResponseCode() + " Success", PolicyResult.SUCCESS);
+ if (this.policyResult != null && this.policyResult.equals(PolicyResult.FAILURE_TIMEOUT)) {
+ return null;
+ }
+ return PolicyResult.SUCCESS;
+ default:
+ //
+ // Consider it as failure
+ //
+ this.completeOperation(this.attempts, msoResponse.getSoResponse().getHttpResponseCode() + " Failed", PolicyResult.FAILURE);
+ if (this.policyResult != null && this.policyResult.equals(PolicyResult.FAILURE_TIMEOUT)) {
+ return null;
+ }
+ return PolicyResult.FAILURE;
+ }
+ }
+
+ /**
+ * This method handles operation responses from VFC
+ * @param vfcResponse the VFC response
+ * @return The result of the response handling
+ */
+ private PolicyResult onResponse(VFCResponse vfcResponse) {
+ if (vfcResponse.getResponseDescriptor().getStatus().equalsIgnoreCase("finished")) {
+ //
+ // Consider it as success
+ //
+ this.completeOperation(this.attempts, " Success", PolicyResult.SUCCESS);
+ if (this.policyResult != null && this.policyResult.equals(PolicyResult.FAILURE_TIMEOUT)) {
+ return null;
+ }
+ return PolicyResult.SUCCESS;
+ } else {
+ //
+ // Consider it as failure
+ //
+ this.completeOperation(this.attempts, " Failed", PolicyResult.FAILURE);
+ if (this.policyResult != null && this.policyResult.equals(PolicyResult.FAILURE_TIMEOUT)) {
+ return null;
+ }
+ // increment operation attempts for retries
+ this.attempts += 1;
+ return PolicyResult.FAILURE;
+ }
+ }
- public Integer getOperationTimeout() {
+ public Integer getOperationTimeout() {
//
// Sanity check
//
@@ -485,7 +484,7 @@ public class ControlLoopOperationManager implements Serializable {
return this.policy.getTimeout();
}
- public String getOperationTimeoutString(int defaultTimeout) {
+ public String getOperationTimeoutString(int defaultTimeout) {
Integer to = this.getOperationTimeout();
if (to == null || to == 0) {
return Integer.toString(defaultTimeout) + "s";
@@ -497,67 +496,67 @@ public class ControlLoopOperationManager implements Serializable {
return this.policyResult;
}
- public String getOperationMessage() {
- if (this.currentOperation != null && this.currentOperation.operation != null) {
- return this.currentOperation.operation.toMessage();
+ public String getOperationMessage() {
+ if (this.currentOperation != null && this.currentOperation.clOperation != null) {
+ return this.currentOperation.clOperation.toMessage();
}
if (!this.operationHistory.isEmpty()) {
- return this.operationHistory.getLast().operation.toMessage();
+ return this.operationHistory.getLast().clOperation.toMessage();
}
return null;
}
- public String getOperationMessage(String guardResult) {
- if (this.currentOperation != null && this.currentOperation.operation != null) {
- return this.currentOperation.operation.toMessage()+ ", Guard result: " + guardResult;
+ public String getOperationMessage(String guardResult) {
+ if (this.currentOperation != null && this.currentOperation.clOperation != null) {
+ return this.currentOperation.clOperation.toMessage()+ ", Guard result: " + guardResult;
}
-
+
if (!this.operationHistory.isEmpty()) {
- return this.operationHistory.getLast().operation.toMessage() + ", Guard result: " + guardResult;
+ return this.operationHistory.getLast().clOperation.toMessage() + ", Guard result: " + guardResult;
}
return null;
}
- public String getOperationHistory() {
- if (this.currentOperation != null && this.currentOperation.operation != null) {
- return this.currentOperation.operation.toHistory();
+ public String getOperationHistory() {
+ if (this.currentOperation != null && this.currentOperation.clOperation != null) {
+ return this.currentOperation.clOperation.toHistory();
}
-
+
if (!this.operationHistory.isEmpty()) {
- return this.operationHistory.getLast().operation.toHistory();
+ return this.operationHistory.getLast().clOperation.toHistory();
}
return null;
}
- public LinkedList<ControlLoopOperation> getHistory() {
- LinkedList<ControlLoopOperation> history = new LinkedList<ControlLoopOperation>();
+ public List<ControlLoopOperation> getHistory() {
+ LinkedList<ControlLoopOperation> history = new LinkedList<>();
for (Operation op : this.operationHistory) {
- history.add(new ControlLoopOperation(op.operation));
+ history.add(new ControlLoopOperation(op.clOperation));
}
return history;
}
- public void setOperationHasTimedOut() {
+ public void setOperationHasTimedOut() {
//
//
//
this.completeOperation(this.attempts, "Operation timed out", PolicyResult.FAILURE_TIMEOUT);
}
- public void setOperationHasGuardDeny() {
+ public void setOperationHasGuardDeny() {
//
//
//
this.completeOperation(this.attempts, "Operation denied by Guard", PolicyResult.FAILURE_GUARD);
}
-
+
public void setOperationHasException(String message) {
this.completeOperation(this.attempts, message, PolicyResult.FAILURE_EXCEPTION);
}
- public boolean isOperationComplete() {
+ public boolean isOperationComplete() {
//
// Is there currently a result?
//
@@ -609,6 +608,56 @@ public class ControlLoopOperationManager implements Serializable {
return (this.currentOperation != null);
}
+ /**
+ * This method verifies that the operation manager may run an operation.
+ * @return True if the operation can run, false otherwise
+ * @throws ControlLoopException if the operation cannot run
+ */
+ private void verifyOperatonCanRun() throws ControlLoopException {
+ //
+ // They shouldn't call us if we currently running something
+ //
+ if (this.currentOperation != null) {
+ //
+ // what do we do if we are already running an operation?
+ //
+ throw new ControlLoopException("current operation is not null (an operation is already running)");
+ }
+ //
+ // Check if we have maxed out on retries
+ //
+ if (this.policy.getRetry() == null || this.policy.getRetry() < 1) {
+ //
+ // No retries are allowed, so check have we even made
+ // one attempt to execute the operation?
+ //
+ if (this.attempts >= 1) {
+ //
+ // We have, let's ensure our PolicyResult is set
+ //
+ if (this.policyResult == null) {
+ this.policyResult = PolicyResult.FAILURE_RETRIES;
+ }
+ //
+ //
+ //
+ throw new ControlLoopException("current operation failed and retries are not allowed");
+ }
+ } else {
+ //
+ // Have we maxed out on retries?
+ //
+ if (this.attempts > this.policy.getRetry()) {
+ if (this.policyResult == null) {
+ this.policyResult = PolicyResult.FAILURE_RETRIES;
+ }
+ throw new ControlLoopException("current oepration has failed after " + this.attempts + " retries");
+ }
+ }
+
+ return;
+ }
+
private boolean isRetriesMaxedOut() {
if (policy.getRetry() == null || policy.getRetry() == 0) {
//
@@ -620,7 +669,7 @@ public class ControlLoopOperationManager implements Serializable {
return (this.attempts > policy.getRetry());
}
- private void storeOperationInDataBase(){
+ private void storeOperationInDataBase(){
// Only store in DB if enabled
boolean guardEnabled = "false".equalsIgnoreCase(PolicyEngine.manager.getEnvironmentProperty("guard.disabled"));
if( !guardEnabled ){
@@ -638,18 +687,18 @@ public class ControlLoopOperationManager implements Serializable {
props.put(Util.ECLIPSE_LINK_KEY_PASS, PolicyEngine.manager.getEnvironmentProperty(Util.ONAP_KEY_PASS));
props.put(PersistenceUnitProperties.CLASSLOADER, ControlLoopOperationManager.class.getClassLoader());
}
-
-
- String OpsHistPU = System.getProperty("OperationsHistoryPU");
- if(OpsHistPU == null || !OpsHistPU.equals("TestOperationsHistoryPU")){
- OpsHistPU = "OperationsHistoryPU";
+
+
+ String opsHistPU = System.getProperty("OperationsHistoryPU");
+ if(opsHistPU == null || !opsHistPU.equals("TestOperationsHistoryPU")){
+ opsHistPU = "OperationsHistoryPU";
}
else{
props.clear();
}
EntityManager em;
try{
- em = Persistence.createEntityManagerFactory(OpsHistPU, props).createEntityManager();
+ em = Persistence.createEntityManagerFactory(opsHistPU, props).createEntityManager();
}catch(Exception e){
logger.error("storeOperationInDataBase threw: ", e);
return;
@@ -657,27 +706,24 @@ public class ControlLoopOperationManager implements Serializable {
OperationsHistoryDbEntry newEntry = new OperationsHistoryDbEntry();
- newEntry.closedLoopName = this.onset.getClosedLoopControlName();
- newEntry.requestId = this.onset.getRequestID().toString();
- newEntry.actor = this.currentOperation.operation.getActor();
- newEntry.operation = this.currentOperation.operation.getOperation();
- newEntry.target = this.targetEntity;
- newEntry.starttime = Timestamp.from(this.currentOperation.operation.getStart());
- newEntry.subrequestId = this.currentOperation.operation.getSubRequestId();
- newEntry.endtime = new Timestamp(this.currentOperation.operation.getEnd().toEpochMilli());
- newEntry.message = this.currentOperation.operation.getMessage();
- newEntry.outcome = this.currentOperation.operation.getOutcome();
+ newEntry.setClosedLoopName(this.onset.getClosedLoopControlName());
+ newEntry.setRequestId(this.onset.getRequestID().toString());
+ newEntry.setActor(this.currentOperation.clOperation.getActor());
+ newEntry.setOperation(this.currentOperation.clOperation.getOperation());
+ newEntry.setTarget(this.targetEntity);
+ newEntry.setStarttime(Timestamp.from(this.currentOperation.clOperation.getStart()));
+ newEntry.setSubrequestId(this.currentOperation.clOperation.getSubRequestId());
+ newEntry.setEndtime(new Timestamp(this.currentOperation.clOperation.getEnd().toEpochMilli()));
+ newEntry.setMessage(this.currentOperation.clOperation.getMessage());
+ newEntry.setOutcome(this.currentOperation.clOperation.getOutcome());
em.getTransaction().begin();
em.persist(newEntry);
em.getTransaction().commit();
em.close();
-
}
-
-
private void completeOperation(Integer attempt, String message, PolicyResult result) {
if (attempt == null) {
logger.debug("attempt cannot be null (i.e. subRequestID)");
@@ -685,9 +731,9 @@ public class ControlLoopOperationManager implements Serializable {
}
if (this.currentOperation != null) {
if (this.currentOperation.attempt == attempt.intValue()) {
- this.currentOperation.operation.setEnd(Instant.now());
- this.currentOperation.operation.setMessage(message);
- this.currentOperation.operation.setOutcome(result.toString());
+ this.currentOperation.clOperation.setEnd(Instant.now());
+ this.currentOperation.clOperation.setMessage(message);
+ this.currentOperation.clOperation.setOutcome(result.toString());
this.currentOperation.policyResult = result;
//
// Save it in history
@@ -708,9 +754,9 @@ public class ControlLoopOperationManager implements Serializable {
}
for (Operation op : this.operationHistory) {
if (op.attempt == attempt.intValue()) {
- op.operation.setEnd(Instant.now());
- op.operation.setMessage(message);
- op.operation.setOutcome(result.toString());
+ op.clOperation.setEnd(Instant.now());
+ op.clOperation.setMessage(message);
+ op.clOperation.setOutcome(result.toString());
op.policyResult = result;
return;
}
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/OperationsHistoryDbEntry.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/OperationsHistoryDbEntry.java
index 82775053e..30273d377 100644
--- a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/OperationsHistoryDbEntry.java
+++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/OperationsHistoryDbEntry.java
@@ -29,14 +29,9 @@ import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
-
@Entity
@Table(name="operationshistory10")
-public class OperationsHistoryDbEntry implements Serializable{
-
- /**
- *
- */
+public class OperationsHistoryDbEntry implements Serializable {
private static final long serialVersionUID = 1L;
@Id@GeneratedValue
@@ -44,26 +39,83 @@ public class OperationsHistoryDbEntry implements Serializable{
public long rowid;
@Column(name="CLNAME")
- public String closedLoopName;
-
- public String requestId;
-
- public String actor;
-
- public String operation;
-
- public String target;
+ private String closedLoopName;
- public Timestamp starttime;
-
- public Timestamp endtime;
-
- public String subrequestId;
-
- public String outcome;
-
- public String message;
-
+ private String requestId;
+ private String actor;
+ private String operation;
+ private String target;
+ private Timestamp starttime;
+ private Timestamp endtime;
+ private String subrequestId;
+ private String outcome;
+ private String message;
+ public long getRowid() {
+ return rowid;
+ }
+ public void setRowid(long rowid) {
+ this.rowid = rowid;
+ }
+ public String getClosedLoopName() {
+ return closedLoopName;
+ }
+ public void setClosedLoopName(String closedLoopName) {
+ this.closedLoopName = closedLoopName;
+ }
+ public String getRequestId() {
+ return requestId;
+ }
+ public void setRequestId(String requestId) {
+ this.requestId = requestId;
+ }
+ public String getActor() {
+ return actor;
+ }
+ public void setActor(String actor) {
+ this.actor = actor;
+ }
+ public String getOperation() {
+ return operation;
+ }
+ public void setOperation(String operation) {
+ this.operation = operation;
+ }
+ public String getTarget() {
+ return target;
+ }
+ public void setTarget(String target) {
+ this.target = target;
+ }
+ public Timestamp getStarttime() {
+ return starttime;
+ }
+ public void setStarttime(Timestamp starttime) {
+ this.starttime = starttime;
+ }
+ public Timestamp getEndtime() {
+ return endtime;
+ }
+ public void setEndtime(Timestamp endtime) {
+ this.endtime = endtime;
+ }
+ public String getSubrequestId() {
+ return subrequestId;
+ }
+ public void setSubrequestId(String subrequestId) {
+ this.subrequestId = subrequestId;
+ }
+ public String getOutcome() {
+ return outcome;
+ }
+ public void setOutcome(String outcome) {
+ this.outcome = outcome;
+ }
+ public String getMessage() {
+ return message;
+ }
+ public void setMessage(String message) {
+ this.message = message;
+ }
}
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/impl/ControlLoopLoggerStdOutImpl.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/impl/ControlLoopLoggerStdOutImpl.java
index acf7f1d22..33042a915 100644
--- a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/impl/ControlLoopLoggerStdOutImpl.java
+++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/impl/ControlLoopLoggerStdOutImpl.java
@@ -24,10 +24,6 @@ package org.onap.policy.controlloop.impl;
import org.onap.policy.controlloop.ControlLoopLogger;
public class ControlLoopLoggerStdOutImpl implements ControlLoopLogger {
-
- public ControlLoopLoggerStdOutImpl() {
- }
-
@Override
public void info(String... parameters) {
StringBuilder builder = new StringBuilder();
@@ -47,5 +43,4 @@ public class ControlLoopLoggerStdOutImpl implements ControlLoopLogger {
public void metrics(Object obj) {
this.info(obj.toString());
}
-
}
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/impl/ControlLoopPublisherJUnitImpl.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/impl/ControlLoopPublisherJUnitImpl.java
index 37721a9a1..eb50ac36e 100644
--- a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/impl/ControlLoopPublisherJUnitImpl.java
+++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/impl/ControlLoopPublisherJUnitImpl.java
@@ -23,14 +23,8 @@ package org.onap.policy.controlloop.impl;
import org.onap.policy.controlloop.ControlLoopPublisher;
public class ControlLoopPublisherJUnitImpl implements ControlLoopPublisher {
-
- public ControlLoopPublisherJUnitImpl() {
-
- }
-
@Override
public void publish(Object object) {
-
+ throw new UnsupportedOperationException("publish() method is not implemented on " + this.getClass().getCanonicalName());
}
-
}
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/processor/ControlLoopProcessor.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/processor/ControlLoopProcessor.java
index f2c565d9a..451244392 100644
--- a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/processor/ControlLoopProcessor.java
+++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/processor/ControlLoopProcessor.java
@@ -31,80 +31,76 @@ import org.yaml.snakeyaml.constructor.CustomClassLoaderConstructor;
public class ControlLoopProcessor {
- private final String yaml;
- private final ControlLoopPolicy policy;
- private String currentPolicy = null;
+ private final String yaml;
+ private final ControlLoopPolicy policy;
+ private String currentNestedPolicyID = null;
- public ControlLoopProcessor(String yaml) throws ControlLoopException {
- this.yaml = yaml;
- try {
- final Yaml y = new Yaml(new CustomClassLoaderConstructor(ControlLoopPolicy.class,
- ControlLoopPolicy.class.getClassLoader()));
- final Object obj = y.load(this.yaml);
- if (obj instanceof ControlLoopPolicy) {
- this.policy = (ControlLoopPolicy) obj;
- this.currentPolicy = this.policy.getControlLoop().getTrigger_policy();
- } else {
- this.policy = null;
- throw new ControlLoopException("Unable to parse yaml into ControlLoopPolicy object");
- }
- } catch (final Exception e) {
- //
- // Most likely this is a YAML Exception
- //
- throw new ControlLoopException(e);
- }
- }
+ public ControlLoopProcessor(String yaml) throws ControlLoopException {
+ this.yaml = yaml;
+ try {
+ final Yaml y = new Yaml(new CustomClassLoaderConstructor(ControlLoopPolicy.class, ControlLoopPolicy.class.getClassLoader()));
+ final Object obj = y.load(this.yaml);
- public ControlLoop getControlLoop() {
- return this.policy.getControlLoop();
- }
+ this.policy = (ControlLoopPolicy) obj;
+ this.currentNestedPolicyID = this.policy.getControlLoop().getTrigger_policy();
+ } catch (final Exception e) {
+ //
+ // Most likely this is a YAML Exception
+ //
+ throw new ControlLoopException(e);
+ }
+ }
- public FinalResult checkIsCurrentPolicyFinal() {
- return FinalResult.toResult(this.currentPolicy);
- }
+ public ControlLoop getControlLoop() {
+ return this.policy.getControlLoop();
+ }
- public Policy getCurrentPolicy() {
- for (final Policy policy : this.policy.getPolicies()) {
- if (policy.getId().equals(this.currentPolicy)) {
- return policy;
- }
- }
- return null;
- }
+ public FinalResult checkIsCurrentPolicyFinal() {
+ return FinalResult.toResult(this.currentNestedPolicyID);
+ }
- public void nextPolicyForResult(PolicyResult result) throws ControlLoopException {
- final Policy policy = this.getCurrentPolicy();
- try {
- if (this.policy == null) {
- throw new ControlLoopException("There is no current policy to determine where to go to.");
- }
- switch (result) {
- case SUCCESS:
- this.currentPolicy = policy.getSuccess();
- break;
- case FAILURE:
- this.currentPolicy = policy.getFailure();
- break;
- case FAILURE_TIMEOUT:
- this.currentPolicy = policy.getFailure_timeout();
- break;
- case FAILURE_RETRIES:
- this.currentPolicy = policy.getFailure_retries();
- break;
- case FAILURE_EXCEPTION:
- this.currentPolicy = policy.getFailure_exception();
- break;
- case FAILURE_GUARD:
- this.currentPolicy = policy.getFailure_guard();
- break;
- default:
- throw new ControlLoopException("Bad policy result given: " + result);
- }
- } catch (final ControlLoopException e) {
- this.currentPolicy = FinalResult.FINAL_FAILURE_EXCEPTION.toString();
- throw e;
- }
- }
+ public Policy getCurrentPolicy() throws ControlLoopException {
+ if (this.policy == null || this.policy.getPolicies() == null) {
+ throw new ControlLoopException("There are no policies defined.");
+ }
+ for (final Policy nestedPolicy : this.policy.getPolicies()) {
+ if (nestedPolicy.getId().equals(this.currentNestedPolicyID)) {
+ return nestedPolicy;
+ }
+ }
+ return null;
+ }
+
+ public void nextPolicyForResult(PolicyResult result) throws ControlLoopException {
+ final Policy currentPolicy = this.getCurrentPolicy();
+ try {
+ if (currentPolicy == null) {
+ throw new ControlLoopException("There is no current policy to determine where to go to.");
+ }
+ switch (result) {
+ case SUCCESS:
+ this.currentNestedPolicyID = currentPolicy.getSuccess();
+ break;
+ case FAILURE:
+ this.currentNestedPolicyID = currentPolicy.getFailure();
+ break;
+ case FAILURE_TIMEOUT:
+ this.currentNestedPolicyID = currentPolicy.getFailure_timeout();
+ break;
+ case FAILURE_RETRIES:
+ this.currentNestedPolicyID = currentPolicy.getFailure_retries();
+ break;
+ case FAILURE_EXCEPTION:
+ this.currentNestedPolicyID = currentPolicy.getFailure_exception();
+ break;
+ case FAILURE_GUARD:
+ this.currentNestedPolicyID = currentPolicy.getFailure_guard();
+ break;
+ }
+ } catch (final ControlLoopException e) {
+ this.currentNestedPolicyID = FinalResult.FINAL_FAILURE_EXCEPTION.toString();
+ throw e;
+ }
+ }
}
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/PolicyEngine.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/PolicyEngine.java
index 07a273cc7..7acaf370d 100644
--- a/controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/PolicyEngine.java
+++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/PolicyEngine.java
@@ -20,7 +20,5 @@
package org.onap.policy.drools;
public interface PolicyEngine {
-
public boolean deliver(String busType, String topic, Object obj);
-
}
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/PolicyEngineListener.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/PolicyEngineListener.java
index 216f819ca..5bd5d8d2c 100644
--- a/controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/PolicyEngineListener.java
+++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/PolicyEngineListener.java
@@ -21,7 +21,6 @@
package org.onap.policy.drools;
public interface PolicyEngineListener {
-
/**
* Any class that implements this interface will
* be notified of a new event on the queue in the
@@ -31,5 +30,4 @@ public interface PolicyEngineListener {
* the event
*/
public void newEventNotification(String topic);
-
}
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/impl/PolicyEngineJUnitImpl.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/impl/PolicyEngineJUnitImpl.java
index 36feaaf93..e94657fee 100644
--- a/controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/impl/PolicyEngineJUnitImpl.java
+++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/impl/PolicyEngineJUnitImpl.java
@@ -40,50 +40,51 @@ import org.onap.policy.drools.PolicyEngineListener;
public class PolicyEngineJUnitImpl implements PolicyEngine {
private static final Logger logger = LoggerFactory.getLogger(PolicyEngineJUnitImpl.class);
- private Map<String, Map<String, Queue<Object>>> busMap = new HashMap<String, Map<String, Queue<Object>>>();
+ private Map<String, Map<String, Queue<Object>>> busMap = new HashMap<>();
private List<PolicyEngineListener> listeners = new ArrayList<>();
-
+
/**
* Adds all objects that implement PolicyEngineListener
- * to the notification list when an event occurs
- *
+ * to the notification list when an event occurs
+ *
* @param listener an object that is interest in knowing
* about events published to the PolicyEngine
*/
public void addListener(PolicyEngineListener listener) {
- listeners.add(listener);
+ listeners.add(listener);
}
-
+
/**
* Notifies all listeners about a new event
* @param topic the topic in which the notification
* was sent to
*/
public void notifyListeners(String topic) {
- for (PolicyEngineListener listener: listeners) {
- listener.newEventNotification(topic);
- }
+ for (PolicyEngineListener listener: listeners) {
+ listener.newEventNotification(topic);
+ }
}
-
+
@Override
public boolean deliver(String busType, String topic, Object obj) {
if (obj instanceof ControlLoopNotification) {
ControlLoopNotification notification = (ControlLoopNotification) obj;
- //logger.debug("Notification: " + notification.notification + " " + (notification.message == null ? "" : notification.message) + " " + notification.history);
- logger.debug(Serialization.gsonPretty.toJson(notification));
+ if (logger.isDebugEnabled()) {
+ logger.debug(Serialization.gsonPretty.toJson(notification));
+ }
}
if (obj instanceof Request) {
Request request = (Request) obj;
logger.debug("Request: {} subrequest {}", request.getAction(), request.getCommonHeader().getSubRequestID());
}
else if (obj instanceof LCMRequestWrapper) {
- LCMRequestWrapper dmaapRequest = (LCMRequestWrapper) obj;
- logger.debug("Request: {} subrequest {}", dmaapRequest.getBody().getAction(), dmaapRequest.getBody().getCommonHeader().getSubRequestId());
+ LCMRequestWrapper dmaapRequest = (LCMRequestWrapper) obj;
+ logger.debug("Request: {} subrequest {}", dmaapRequest.getBody().getAction(), dmaapRequest.getBody().getCommonHeader().getSubRequestId());
}
//
// Does the bus exist?
//
- if (busMap.containsKey(busType) == false) {
+ if (!busMap.containsKey(busType)) {
logger.debug("creating new bus type {}", busType);
//
// Create the bus
@@ -97,7 +98,7 @@ public class PolicyEngineJUnitImpl implements PolicyEngine {
//
// Does the topic exist?
//
- if (topicMap.containsKey(topic) == false) {
+ if (!topicMap.containsKey(topic)) {
logger.debug("creating new topic {}", topic);
//
// Create the topic
@@ -112,8 +113,8 @@ public class PolicyEngineJUnitImpl implements PolicyEngine {
notifyListeners(topic);
return res;
}
-
- public Object subscribe(String busType, String topic) {
+
+ public Object subscribe(String busType, String topic) {
//
// Does the bus exist?
//