fixed for defect SO-70 - recipe lookup mechanism doesn't allow to define default... 01/6301/1
authoreyalholz <eyalh@amdocs.com>
Thu, 27 Jul 2017 17:37:54 +0000 (20:37 +0300)
committereyalholz <eyalh@amdocs.com>
Thu, 27 Jul 2017 18:12:22 +0000 (21:12 +0300)
Change-Id: I42dafa343e2e65c6e892c21de5f3f1131890b24e
Signed-off-by: eyalholz <eyalh@amdocs.com>
mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/ServiceInstances.java
mso-catalog-db/src/main/java/org/openecomp/mso/db/catalog/CatalogDatabase.java
packages/root-pack-extras/config-resources/mariadb/db-sql-scripts/bulkload-files/default/create_mso_db-default.sql

index 317859d..988d72c 100644 (file)
@@ -654,33 +654,35 @@ public class ServiceInstances {
         // SERVICE REQUEST
         // Construct the default service name
         // TODO need to make this a configurable property
-        String defaultServiceName = msoRequest.getRequestInfo().getSource() + "_DEFAULT";
+        String sourceDefaultServiceName = msoRequest.getRequestInfo().getSource() + "_DEFAULT";
+        String defaultService = "*";
 
         Service serviceRecord = null;
-        if(msoRequest.getALaCarteFlag()){
-            serviceRecord = db.getServiceByName(defaultServiceName);
-        }else{
-            serviceRecord = db.getServiceByVersionAndInvariantId(msoRequest.getModelInfo().getModelInvariantId(), msoRequest.getModelInfo().getModelVersion());
-        }
         int serviceId;
         ServiceRecipe recipe = null;
-        if(serviceRecord !=null){
-            serviceId = serviceRecord.getId();
-            recipe = db.getServiceRecipe(serviceId, action.name());
+
+        //if an aLaCarte flag was Not sent in the request, look first if there is a custom recipe for the specific model version
+        if(!msoRequest.getALaCarteFlag()){
+            serviceRecord = db.getServiceByVersionAndInvariantId(msoRequest.getModelInfo().getModelInvariantId(), msoRequest.getModelInfo().getModelVersion());
+            if(serviceRecord !=null){
+                serviceId = serviceRecord.getId();
+                recipe = db.getServiceRecipe(serviceId, action.name());
+            }
         }
-        //if an aLaCarte flag was sent in the request, throw an error if the recipe was not found
-        RequestParameters reqParam = msoRequest.getServiceInstancesRequest().getRequestDetails().getRequestParameters();
-        if(reqParam!=null && reqParam.isALaCarteSet() && recipe==null){
-            return null;
-        }else if (recipe == null) {  //aLaCarte wasn't sent, so we'll try the default
-            serviceRecord = db.getServiceByName(defaultServiceName);
-            serviceId = serviceRecord.getId();
-            recipe = db.getServiceRecipe(serviceId, action.name());
+
+        if (recipe == null) {
+            //find source(initiator) default recipe
+            recipe = db.getServiceRecipeByServiceNameAndAction(sourceDefaultServiceName, action.name());
+        }
+        if (recipe == null) {
+            //find default recipe
+            recipe = db.getServiceRecipeByServiceNameAndAction(defaultService, action.name());
         }
         if(recipe==null){
             return null;
         }
         return new RecipeLookupResult (recipe.getOrchestrationUri (), recipe.getRecipeTimeout ());
+
     }
 
 
@@ -787,27 +789,38 @@ public class ServiceInstances {
 
     private RecipeLookupResult getNetworkUri (CatalogDatabase db, MsoRequest msoRequest, Action action) throws Exception {
 
-        String defaultNetworkType = msoRequest.getRequestInfo().getSource() + "_DEFAULT";
+        String sourceDefaultNetworkType = msoRequest.getRequestInfo().getSource() + "_DEFAULT";
+        String defaultNetworkType = "*";
 
         String modelName = msoRequest.getModelInfo().getModelName();
         Recipe recipe = null;
-        if(msoRequest.getALaCarteFlag()){
-            recipe = db.getNetworkRecipe(defaultNetworkType, action.name());
-        }else{
+        //if an aLaCarte flag was Not sent in the request, look first if there is a custom recipe for the specific ModelCustomizationId
+        if(!msoRequest.getALaCarteFlag()){
+            String networkType = null;
+
             if(msoRequest.getModelInfo().getModelCustomizationId()!=null){
                 NetworkResource networkResource = db.getNetworkResourceByModelCustUuid(msoRequest.getModelInfo().getModelCustomizationId());
                 if(networkResource!=null){
-                    recipe = db.getNetworkRecipe(networkResource.getNetworkType(), action.name());
+                    networkType = networkResource.getNetworkType();
                 }else{
                     throw new ValidationException("no catalog entry found");
                 }
             }else{
                 //ok for version < 3
-                recipe = db.getNetworkRecipe(modelName, action.name());
-            }
-            if(recipe == null){
-                recipe = db.getNetworkRecipe(defaultNetworkType, action.name());
+                networkType = modelName;
             }
+
+            //find latest version Recipe for the given networkType and action
+            recipe = db.getNetworkRecipe(networkType, action.name());
+        }
+
+        if(recipe == null){
+            //find source(initiator) default recipe
+            recipe = db.getNetworkRecipe(sourceDefaultNetworkType, action.name());
+        }
+        if(recipe == null){
+            //find default recipe
+            recipe = db.getNetworkRecipe(defaultNetworkType, action.name());
         }
         if (recipe == null) {
             return null;
index fcdaff7..7ddaedc 100644 (file)
@@ -514,6 +514,19 @@ public class CatalogDatabase implements Closeable {
         return resultList.get (0);
     }
 
+    /**
+     * @param serviceName
+     * @param action
+     * @return ServiceRecipe object or null if none found. returns a newest version of Service recipe that matches a given serviceName, action and for the newest service version
+     */
+    public ServiceRecipe getServiceRecipeByServiceNameAndAction(String serviceName, String action) {
+        Service service = getServiceByName(serviceName);
+        if (service != null ){
+            return getServiceRecipe(service.getId(),action);
+        }
+        return null;
+    }
+
     public List<ServiceRecipe> getServiceRecipes (int serviceId) {
 
         StringBuilder hql = null;
index 2165041..34deb08 100644 (file)
@@ -84,8 +84,11 @@ INSERT INTO `VNF_COMPONENTS_RECIPE`
 UNLOCK TABLES;
 
 INSERT INTO service (id, SERVICE_NAME, VERSION_STR, DESCRIPTION, SERVICE_NAME_VERSION_ID) VALUES ('4', 'VID_DEFAULT', '1.0', 'Default service for VID to use for infra APIH orchestration', 'MANUAL_RECORD');
+INSERT INTO service (id, SERVICE_NAME, VERSION_STR, DESCRIPTION, SERVICE_NAME_VERSION_ID) VALUES ('5', '*', '1.0', 'Default service to use for infra APIH orchestration', 'MANUAL_RECORD');
 INSERT INTO service_recipe (SERVICE_ID, ACTION, VERSION_STR, DESCRIPTION, ORCHESTRATION_URI, RECIPE_TIMEOUT) VALUES ('4', 'createInstance', '1', 'VID_DEFAULT recipe to create service-instance if no custom BPMN flow is found', '/mso/async/services/CreateGenericALaCarteServiceInstance', '180');
 INSERT INTO service_recipe (SERVICE_ID, ACTION, VERSION_STR, DESCRIPTION, ORCHESTRATION_URI, RECIPE_TIMEOUT) VALUES ('4', 'deleteInstance', '1', 'VID_DEFAULT recipe to delete service-instance if no custom BPMN flow is found', '/mso/async/services/DeleteGenericALaCarteServiceInstance', '180');
+INSERT INTO service_recipe (SERVICE_ID, ACTION, VERSION_STR, DESCRIPTION, ORCHESTRATION_URI, RECIPE_TIMEOUT) VALUES ('5', 'createInstance', '1', 'DEFAULT recipe to create service-instance if no custom BPMN flow is found', '/mso/async/services/CreateGenericALaCarteServiceInstance', '180');
+INSERT INTO service_recipe (SERVICE_ID, ACTION, VERSION_STR, DESCRIPTION, ORCHESTRATION_URI, RECIPE_TIMEOUT) VALUES ('5', 'deleteInstance', '1', 'DEFAULT recipe to delete service-instance if no custom BPMN flow is found', '/mso/async/services/DeleteGenericALaCarteServiceInstance', '180');
 INSERT INTO vnf_recipe (VNF_TYPE, ACTION, VERSION_STR, DESCRIPTION, ORCHESTRATION_URI, RECIPE_TIMEOUT) VALUES ('VID_DEFAULT', 'createInstance', '1', 'VID_DEFAULT recipe to create VNF if no custom BPMN flow is found', '/mso/async/services/CreateVnfInfra', '180');
 INSERT INTO vnf_recipe (VNF_TYPE, ACTION, VERSION_STR, DESCRIPTION, ORCHESTRATION_URI, RECIPE_TIMEOUT) VALUES ('VID_DEFAULT', 'deleteInstance', '1', 'VID_DEFAULT recipe to delete VNF if no custom BPMN flow is found', '/mso/async/services/DeleteVnfInfra', '180');
 INSERT INTO vnf_components_recipe (VNF_TYPE, VNF_COMPONENT_TYPE, ACTION, VERSION, DESCRIPTION, ORCHESTRATION_URI, RECIPE_TIMEOUT, VF_MODULE_ID) VALUES (NULL, 'volumeGroup', 'createInstance', '1', 'VID_DEFAULT recipe to create volume-group if no custom BPMN flow is found', '/mso/async/services/CreateVfModuleVolumeInfraV1', '180', 'VID_DEFAULT');