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


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>

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.


Below is the script to fix the installs:

var install = new GlideMultipleUpdate('cmdb_sam_sw_install');
install.addQuery('inferred_suite_level', '0');
install.setValue('inferred_suite_product', '');
install.setValue('inference_calculated', 'false');


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