Reconciliation fails in the suite engine if suites had been inferred for non-licensable installs


Description

Customers will experience reconciliation failure across products after the instance is upgraded from Madrid (or older) to New York (or later) releases when they have suite components configured for non-licensable products. Failure occurs when the Suite Engine consumes software installs whose inferred suite is populated but the inferred suite level is set to 0.  

We introduced a field called Inferred Suite Level on the software install table in NY which has a defaulted value of 0. If a customer has non-licensable suite components configured in software models and when they upgrade, from say Madrid to NY, the inferred suite is already set for those installs that were discovered before the upgrade. During the upgrade, the inferred suite level takes the default value for the existing installs which is 0.

From the logs, we can see below exceptions when reconciliation is run.

SAM:ReconciliationEngine: at sys_script_include.444d8294c32222006081face81d3aebf.script:478 (anonymous)
at sys_script_include.444d8294c32222006081face81d3aebf.script:47 (anonymous)
at sys_script_include.444d8294c32222006081face81d3aebf.script:270 (anonymous)
at sys_script_include.30bbdf9587f52300923aa75fe5cb0b97.script:251 (anonymous)
at sys_script_include.30bbdf9587f52300923aa75fe5cb0b97.script:229 (anonymous)
at sys_script_include.6761b0dd0b1232001a17650d37673a77.script:69 (anonymous)
at <refname>:3 (sampSoftwareLicenseReconciliation)
at <refname>:1
: no thrown error

TypeError: Cannot set property "ef31eb9d1b658054849721be6e4bcb03" of undefined to "1"

Script Include used :

"SAMPSuiteEngine" :
https://<instance name>.service-now.com/nav_to.do?uri=sys_script_include.do?sys_id=444d8294c32222006081face81d3aebf

Steps to Reproduce

Customer upgrading from Madrid (or London) to New York (or higher) releases and are having non-licensable suite components configured in their software models.

Workaround

Below is the script to fix the installs:

var install = new GlideMultipleUpdate('cmdb_sam_sw_install');
install.addNotNullQuery('inferred_suite');
install.addQuery('inferred_suite_level', '0');
install.addNullQuery('norm_product');
install.setValue('inferred_suite','');
install.setValue('inferred_suite_level','');
install.setValue('inferred_suite_product', '');
install.setValue('inference_calculated', 'false');
install.execute();

 

To see which installs the above script will update, apply the following criteria on the installs table

 

Once the script is executed and all installs are fixed, run reconciliation.


Related Problem: PRB1381108