Bugfixes for December 2018
[so.git] / bpmn / MSOCommonBPMN / src / main / java / org / onap / so / bpmn / servicedecomposition / tasks / ExecuteBuildingBlockRainyDay.java
index 70d523e..6c2df13 100644 (file)
@@ -31,24 +31,35 @@ import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
 import org.onap.so.db.catalog.beans.macro.RainyDayHandlerStatus;
 import org.onap.so.db.catalog.client.CatalogDbClient;
+import org.onap.so.db.request.beans.InfraActiveRequests;
+import org.onap.so.db.request.client.RequestsDbClient;
 import org.onap.so.logger.MsoLogger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Component;
 
 @Component
 public class ExecuteBuildingBlockRainyDay {
        
        private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, ExecuteBuildingBlockRainyDay.class);
+       public static final String HANDLING_CODE = "handlingCode";
        
        @Autowired
        private CatalogDbClient catalogDbClient;
+       @Autowired
+       private RequestsDbClient requestDbclient;
        private static final String ASTERISK = "*";
+       
+       @Autowired
+    private Environment environment;
+       protected String retryDurationPath = "mso.rainyDay.retryDurationMultiplier";
 
        public void setRetryTimer(DelegateExecution execution) {
                try {
+                       int retryDurationMult = Integer.parseInt(this.environment.getProperty(retryDurationPath));
                        int retryCount = (int) execution.getVariable("retryCount");
-                       int retryTimeToWait = (int) Math.pow(5, retryCount);
-                       String RetryDuration = "PT" + retryTimeToWait + "M";
+                       int retryTimeToWait = (int) Math.pow(retryDurationMult, retryCount) * 10;
+                       String RetryDuration = "PT" + retryTimeToWait + "S";
                        execution.setVariable("RetryDuration", RetryDuration);
                } catch (Exception e) {
                        msoLogger.error(e);
@@ -56,61 +67,93 @@ public class ExecuteBuildingBlockRainyDay {
                }
        }
        
-       public void queryRainyDayTable(DelegateExecution execution) {
+       public void queryRainyDayTable(DelegateExecution execution, boolean primaryPolicy) {
                try {
                        ExecuteBuildingBlock ebb = (ExecuteBuildingBlock) execution.getVariable("buildingBlock");
                        String bbName = ebb.getBuildingBlock().getBpmnFlowName();
                        GeneralBuildingBlock gBBInput = (GeneralBuildingBlock) execution.getVariable("gBBInput");
+                       String requestId = (String) execution.getVariable("mso-request-id");
                        Map<ResourceKey, String> lookupKeyMap = (Map<ResourceKey, String>) execution.getVariable("lookupKeyMap");
                        String serviceType = ASTERISK;
-                       try {
-                               serviceType = gBBInput.getCustomer().getServiceSubscription().getServiceInstances().get(0).getModelInfoServiceInstance().getServiceType();
-                       } catch (Exception ex) {
-                               // keep default serviceType value
-                       }
-                       String vnfType = ASTERISK;
-                       try {
-                               for(GenericVnf vnf : gBBInput.getCustomer().getServiceSubscription().getServiceInstances().get(0).getVnfs()) {
-                                       if(vnf.getVnfId().equalsIgnoreCase(lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID))) {
-                                               vnfType = vnf.getVnfType();
+                       boolean aLaCarte = (boolean) execution.getVariable("aLaCarte");
+                       boolean suppressRollback = (boolean) execution.getVariable("suppressRollback");
+                       String handlingCode = "";
+                       if(suppressRollback){
+                               handlingCode = "Abort";
+                       }else{
+                               try {
+                                       serviceType = gBBInput.getCustomer().getServiceSubscription().getServiceInstances().get(0).getModelInfoServiceInstance().getServiceType();
+                               } catch (Exception ex) {
+                                       // keep default serviceType value
+                               }
+                               String vnfType = ASTERISK;
+                               try {
+                                       for(GenericVnf vnf : gBBInput.getCustomer().getServiceSubscription().getServiceInstances().get(0).getVnfs()) {
+                                               if(vnf.getVnfId().equalsIgnoreCase(lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID))) {
+                                                       vnfType = vnf.getVnfType();
+                                               }
                                        }
+                               } catch (Exception ex) {
+                                       // keep default vnfType value
                                }
-                       } catch (Exception ex) {
-                               // keep default vnfType value
-                       }
-                       WorkflowException workflowException = (WorkflowException) execution.getVariable("WorkflowException");
-                       String errorCode = ASTERISK;
-                       try {
-                               errorCode = "" + workflowException.getErrorCode();
-                       } catch (Exception ex) {
-                               // keep default errorCode value
-                       }
-                       String workStep = ASTERISK;
-                       try {
-                               workStep = workflowException.getWorkStep();
-                       } catch (Exception ex) {
-                               // keep default workStep value
-                       }
-                       //Extract error data to be returned to WorkflowAction
-                       execution.setVariable("WorkflowExceptionErrorMessage", workflowException.getErrorMessage());
-                       RainyDayHandlerStatus rainyDayHandlerStatus;
-                       String handlingCode = "";
-                       rainyDayHandlerStatus = catalogDbClient.getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(bbName,serviceType,vnfType,errorCode,workStep);
-                       if(rainyDayHandlerStatus==null){
-                               rainyDayHandlerStatus = catalogDbClient.getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(bbName,ASTERISK,ASTERISK,ASTERISK,ASTERISK);
+                               WorkflowException workflowException = (WorkflowException) execution.getVariable("WorkflowException");
+                               String errorCode = ASTERISK;
+                               try {
+                                       errorCode = "" + workflowException.getErrorCode();
+                               } catch (Exception ex) {
+                                       // keep default errorCode value
+                               }
+                               String workStep = ASTERISK;
+                               try {
+                                       workStep = workflowException.getWorkStep();
+                               } catch (Exception ex) {
+                                       // keep default workStep value
+                               }
+                               //Extract error data to be returned to WorkflowAction
+                               execution.setVariable("WorkflowExceptionErrorMessage", workflowException.getErrorMessage());
+                               RainyDayHandlerStatus rainyDayHandlerStatus;
+                               rainyDayHandlerStatus = catalogDbClient.getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(bbName,serviceType,vnfType,errorCode,workStep);
                                if(rainyDayHandlerStatus==null){
-                                       handlingCode = "Abort";
+                                       rainyDayHandlerStatus = catalogDbClient.getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(bbName,ASTERISK,ASTERISK,ASTERISK,ASTERISK);
+                                       if(rainyDayHandlerStatus==null){
+                                               handlingCode = "Abort";
+                                       }else{
+                                               if(primaryPolicy){
+                                                       handlingCode = rainyDayHandlerStatus.getPolicy();
+                                               }else{
+                                                       handlingCode = rainyDayHandlerStatus.getSecondaryPolicy();
+                                               }
+                                       }
                                }else{
-                                       handlingCode = rainyDayHandlerStatus.getPolicy();
+                                       if(primaryPolicy){
+                                               handlingCode = rainyDayHandlerStatus.getPolicy();
+                                       }else{
+                                               handlingCode = rainyDayHandlerStatus.getSecondaryPolicy();
+                                       }
+                               }
+                               if(!primaryPolicy){
+                                       try{
+                                               InfraActiveRequests request = requestDbclient.getInfraActiveRequestbyRequestId(requestId);
+                                               request.setRetryStatusMessage("Retries have been exhausted.");
+                                               requestDbclient.updateInfraActiveRequests(request);
+                                       } catch(Exception ex){
+                                               msoLogger.debug(ex.toString());
+                                               msoLogger.error("Failed to update Request Db Infra Active Requests with Retry Status");
+                                       }
+                               }
+                               if(handlingCode.equals("RollbackToAssigned")&&!aLaCarte){
+                                       handlingCode = "Rollback";
                                }
-                       }else{
-                               handlingCode = rainyDayHandlerStatus.getPolicy();
                        }
                        msoLogger.debug("RainyDayHandler Status Code is: " + handlingCode);
-                       execution.setVariable("handlingCode", handlingCode);
+                       execution.setVariable(HANDLING_CODE, handlingCode);
                } catch (Exception e) {
-                       msoLogger.debug("RainyDayHandler Status Code is: Abort");
-                       execution.setVariable("handlingCode", "Abort");
+                       msoLogger.error("Failed to determine RainyDayHandler Status. Seting handlingCode = Abort");
+                       execution.setVariable(HANDLING_CODE, "Abort");
                }
        }
+       
+       public void setHandlingStatusSuccess(DelegateExecution execution){
+               execution.setVariable(HANDLING_CODE, "Success");
+       }
 }