Duplicate Environment parameter in Parameter Configuration
search cancel

Duplicate Environment parameter in Parameter Configuration

book

Article ID: 384037

calendar_today

Updated On:

Products

CA Release Automation - DataManagement Server (Nolio) CA Release Automation - Release Operations Center (Nolio)

Issue/Introduction

In Parameter Configuration there are some duplicate entries for some environment parameters.

Example :
forceFullDeployment appears 2 times for Shared Component TESTJY :

One with True value and one with False value. It is confusing and we could not know which value is used by the process.

Environment

Release Automation 6.8, 6.9

Cause

This problem occurs when 2 or more process are published with different revision of a Shared Component.
Example :

  • Shared Components TESTJY has different revisions :

  • forceFullDeployment is an environment parameter of Shared Components TESTJY. It is used in an action defined in TESTJY

  • Process1 is using an action of TESTJY and has been published with revision 3.0 of TESTJY

  • Process3 is using an action of TESTJY and has been published with revision 4.0 of TESTJY

  • In Parameter Configuration there is a duplicate entry for forceFullDeployment.
    One entry is for revision 3.0 (used by process Process1) and one entry is for revision 4.0 (used by process Process3)

The problem is that UI does not display the Shared component revisions for environment parameters.

Resolution

Starting on 6.8, there was a change on the UI about parameter section, now you can manage individual parameters regardless of the revision/app it belong to, in previous version this section didn't show so many lines. What is happening here is not a 'duplicated' problem, those parameters belong to different revisions, the problem here is that this Parameter section is not showing to which revision/components they belong to, causing this confusion. Currently, this is a limitation the product has.

This will be improved in a next big cumulative update for version 6.8 and 6.9

As workaround following SQL Queries could be used to find the shared components versions, process name and parameter values :

 

Microsoft SQL Server

DROP TABLE basic_parameter_tmp
SELECT DESIGN_ID, MAX(CONTAINER_ID) MAX_CONTAINER_ID INTO basic_parameter_tmp FROM basic_parameter WHERE name='forceFullDeployment' and DESIGN_ID IS NOT NULL GROUP BY name, DESIGN_ID

DROP TABLE rc_param_val_container_tmp
SELECT MAX(c.rc_value) MAX_ID, e.ENV_ID, c.design_id INTO rc_param_val_container_tmp FROM rc_env_param_containers e INNER JOIN rc_param_val_container c ON e.id=c.id GROUP BY e.ENV_ID, c.design_id

SELECT e.name 'Environment Name', 
c.COMPONENT_NAME 'Shared Component Name', c.VERSION 'Shared Component Version', 
p.PROCESS_NAME 'Process Name', b.name 'Environment Parameter Name',
pv.value_string 'Parameter Value', 
a.ARCHITECTURE_NAME 'Architecture Name', appl.APP_NAME 'Application Name'
FROM basic_parameter b
INNER JOIN basic_parameter_tmp btmp ON b.DESIGN_ID=btmp.DESIGN_ID 
INNER JOIN server_flow s ON s.flow=btmp.MAX_CONTAINER_ID
INNER JOIN process_container p ON p.ID=s.PROCESS_ID -- and p.ROOT_PARAM_FOLDER_ID is NOT NULL and p.PARENT_CATEGORY_ID IS NULL
INNER JOIN process_in_env pe ON p.ID=pe.PROCESS_ID
INNER JOIN environments e ON pe.ENVIRONMENT_ID=e.ID
INNER JOIN parameter_value v ON v.CONTAINER_ID=s.flow AND v.parameter=b.ID
INNER JOIN architectures a ON a.ID=p.ARCHITECTURE_ID
INNER JOIN applications appl ON a.APP_ID=appl.ID
INNER JOIN basic_parameter b2 ON b.DESIGN_ID=b2.ID AND b2.DESIGN_ID IS NULL
INNER JOIN components c ON c.ID=b2.CONTAINER_ID
LEFT OUTER JOIN rc_param_val_container_tmp t ON t.ENV_ID=e.ID AND t.design_id=b.DESIGN_ID
LEFT OUTER JOIN rc_param_values pv ON t.MAX_ID=pv.ID
WHERE b.name='forceFullDeployment' and b.DESIGN_ID IS NOT NULL
ORDER BY e.name, p.PROCESS_NAME

 

Replace forceFullDeployment by the name of environment parameter (there are 2 replacements to do).

Example :

In example below, P14 is using Shared Component TESTJY5 version 1.0. And value for Param_TESTJY5 is nolio_test
P15 is using Shared Component TESTJY5 version 2.0. And value for Param_TESTJY5 is NULL

 

MYSQL

DROP TABLE basic_parameter_tmp ;
CREATE TEMPORARY TABLE basic_parameter_tmp (SELECT DESIGN_ID, MAX(CONTAINER_ID) MAX_CONTAINER_ID FROM basic_parameter WHERE name='forceFullDeployment' and DESIGN_ID IS NOT NULL GROUP BY name, DESIGN_ID) ;

DROP TABLE rc_param_val_container_tmp ;
CREATE TEMPORARY TABLE rc_param_val_container_tmp (SELECT MAX(c.rc_value) MAX_ID, e.ENV_ID, c.design_id FROM rc_env_param_containers e INNER JOIN rc_param_val_container c ON e.id=c.id GROUP BY e.ENV_ID, c.design_id) ;

SELECT e.name 'Environment Name', 
c.COMPONENT_NAME 'Shared Component Name', c.VERSION 'Shared Component Version', 
p.PROCESS_NAME 'Process Name', b.name 'Environment Parameter Name',
pv.value_string 'Parameter Value', 
a.ARCHITECTURE_NAME 'Architecture Name', appl.APP_NAME 'Application Name'
FROM basic_parameter b
INNER JOIN basic_parameter_tmp btmp ON b.DESIGN_ID=btmp.DESIGN_ID 
INNER JOIN server_flow s ON s.flow=btmp.MAX_CONTAINER_ID
INNER JOIN process_container p ON p.ID=s.PROCESS_ID -- and p.ROOT_PARAM_FOLDER_ID is NOT NULL and p.PARENT_CATEGORY_ID IS NULL
INNER JOIN process_in_env pe ON p.ID=pe.PROCESS_ID
INNER JOIN environments e ON pe.ENVIRONMENT_ID=e.ID
INNER JOIN parameter_value v ON v.CONTAINER_ID=s.flow AND v.parameter=b.ID
INNER JOIN architectures a ON a.ID=p.ARCHITECTURE_ID
INNER JOIN applications appl ON a.APP_ID=appl.ID
INNER JOIN basic_parameter b2 ON b.DESIGN_ID=b2.ID AND b2.DESIGN_ID IS NULL
INNER JOIN components c ON c.ID=b2.CONTAINER_ID
LEFT OUTER JOIN rc_param_val_container_tmp t ON t.ENV_ID=e.ID AND t.design_id=b.DESIGN_ID
LEFT OUTER JOIN rc_param_values pv ON t.MAX_ID=pv.ID
WHERE b.name='forceFullDeployment' and b.DESIGN_ID IS NOT NULL
ORDER BY e.name, p.PROCESS_NAME ;

 

Replace forceFullDeployment by the name of environment parameter


Oracle

TRUNCATE TABLE rc_param_val_container_tmp ;
DROP TABLE rc_param_val_container_tmp ;

CREATE GLOBAL TEMPORARY TABLE rc_param_val_container_tmp ON commit preserve rows AS SELECT MAX(c.rc_value) MAX_ID, e.ENV_ID, c.design_id FROM rc_env_param_containers e INNER JOIN rc_param_val_container c ON e.id=c.id GROUP BY e.ENV_ID, c.design_id ;


TRUNCATE TABLE basic_parameter_tmp ;
DROP TABLE basic_parameter_tmp ;

CREATE GLOBAL TEMPORARY TABLE basic_parameter_tmp ON commit preserve rows AS SELECT DESIGN_ID, MAX(CONTAINER_ID) MAX_CONTAINER_ID FROM basic_parameter WHERE name='forceFullDeployment' and DESIGN_ID IS NOT NULL GROUP BY name, DESIGN_ID ;


SELECT e.name 'Environment Name', 
c.COMPONENT_NAME 'Shared Component Name', c.VERSION 'Shared Component Version', 
p.PROCESS_NAME 'Process Name', b.name 'Environment Parameter Name',
pv.value_string 'Parameter Value', 
a.ARCHITECTURE_NAME 'Architecture Name', appl.APP_NAME 'Application Name'
FROM basic_parameter b
INNER JOIN basic_parameter_tmp btmp ON b.DESIGN_ID=btmp.DESIGN_ID 
INNER JOIN server_flow s ON s.flow=btmp.MAX_CONTAINER_ID
INNER JOIN process_container p ON p.ID=s.PROCESS_ID -- and p.ROOT_PARAM_FOLDER_ID is NOT NULL and p.PARENT_CATEGORY_ID IS NULL
INNER JOIN process_in_env pe ON p.ID=pe.PROCESS_ID
INNER JOIN environments e ON pe.ENVIRONMENT_ID=e.ID
INNER JOIN parameter_value v ON v.CONTAINER_ID=s.flow AND v.parameter=b.ID
INNER JOIN architectures a ON a.ID=p.ARCHITECTURE_ID
INNER JOIN applications appl ON a.APP_ID=appl.ID
INNER JOIN basic_parameter b2 ON b.DESIGN_ID=b2.ID AND b2.DESIGN_ID IS NULL
INNER JOIN components c ON c.ID=b2.CONTAINER_ID
LEFT OUTER JOIN rc_param_val_container_tmp t ON t.ENV_ID=e.ID AND t.design_id=b.DESIGN_ID
LEFT OUTER JOIN rc_param_values pv ON t.MAX_ID=pv.ID
WHERE b.name='forceFullDeployment' and b.DESIGN_ID IS NOT NULL
ORDER BY e.name, p.PROCESS_NAME ;

 

Replace forceFullDeployment by the name of environment parameter