INC-177877 · Issue 661178
Write lock check added to avoid thread contention
Resolved in Pega Version 8.5.5
After updating the Pega platform and NBA Designer, a significant drop in performance for multilevel strategies was observed. Investigation showed that invoking a sub strategy containing external input intermittently caused a thread contention issue related to write lock. This was traced to overzealous write locking of a component where only a read lock for the thread was required, and has been resolved by adding a verification check to determine whether a write lock is necessary for a given operation before acquiring it.
INC-178938 · Issue 661497
Exception handling added for ClipboardPropertyCollection
Resolved in Pega Version 8.5.5
After upgrading from Pega v7.3 to 8.5, validating the existing strategy logic generated the error "ClipboardPropertyCollection is not a supported ILType". This was traced to the special Pega expression type PropertyCollection not being supported by IL, and has been resolved by adding logic that will throw a more appropriate exception (instead of the generic PRRuntimeException) so the event can be caught by the existing fallback logic.
INC-179879 · Issue 663006
Localization added to DelegateDescription
Resolved in Pega Version 8.5.5
Localization was not working correctly for the description of a delegated rule due to pyDelegeteDescription being defined with a non-localized Property value. This has been resolved by localizing the property value for pyDelegeteDescription.
INC-181401 · Issue 665934
Added handling for MS SQL datestamp format
Resolved in Pega Version 8.5.5
When using an Microsoft SQL Server, the browse operation was failing with an SQL error for the pyIHSummary dataset. Investigation showed there were some datasets that generated SQL statements with a date timestamp format that SQL was not able to handle implicitly, affecting browsing but not functionality. This has been resolved.
INC-182137 · Issue 662489
Multistage Prediction Logic improved
Resolved in Pega Version 8.5.5
When Predictions with Response wait time configured were executed as part of make decision, each decision that came out of the strategy caused a pxDR call to fetch the relevant model execution results and process them to stage the default outcome results for models. This has been improved by modifying the system to process the existing records rather than reading data again from pxDR.
INC-183201 · Issue 664960
Resolved error during save of a Predictive Model
Resolved in Pega Version 8.5.5
Attempting to save a predictive model in Prediction Studio resulted in the error ".pyModelProcess.pyShapes(Setmodelcontrolgroup).pyMOName: Cannot generate the component ID from the provided input. Enter at least one alphabetic character." This was traced to previous work done around defining a control group using a property reference, and has been resolved.
INC-183431 · Issue 665160
Strategy execution queries tuned
Resolved in Pega Version 8.5.5
During NBA strategy execution, interaction history summaries were queried multiple times for a single strategy execution. To improve this function, the isChanged query will now be executed once after system startup if there are no changes instead of being executed every time the Aggregates DataSet BBK is executed. If the same Aggregates query is made multiple times as part of a Strategy in a REST request (i.e. likely multiple ADM models in a MakeDecision call), only one Aggregates BBK call will be made.
INC-168368 · Issue 657028
DateTime validation works correctly after importing invalid data
Resolved in Pega Version 8.5.5
After creating DecisionData (Dev studio) and adding a DateTime property to the form, importing records with invalid DateTime values failed with a validation error on the screen and the message "Error while converting format for data type DateTime property name Test_date_format with value scvf" was logged. Attempting to proceed by correcting the DateTime property and uploading worked, but any subsequent imports in the same session silently allowed invalid inputs to be passed without any validation errors and then showed blank date fields. This has been corrected.
INC-203994 · Issue 698853
DSS added to handle merges with lower versions of Postgres
Resolved in Pega Version 8.7.1
After update, executing the batch campaign with volume constraint resulted in the second data flow DF_Wait failing with error message "ERROR: number of columns (1844) exceeds limit (1664)". This was due to the database set’s change (in 8.5) to use the database layer’s merge statement. Prior to that, the logic used "deletes and inserts". Depending on the version of Postsgres, the generated SQL statement for a merge statement is different. The “INSERT … ON CONFLICT … UPDATE” syntax is generated for Postgres 9.5+ AND when there is a PK constraint defined for the DB table. Otherwise, the complex UPSERT statement (old syntax) is generated, as was the case in this issue. This is a known issue in the Postgres server software where it mis-interprets the number of columns involved. i.e., it mistakenly counts the number of columns twice. As a result, the actual maximum columns allowed is only half of the official limit (1664). The same UPSERT statement does not cause the “exceeds limit” exception if there are 832 or fewer columns in the statement. To resolve this, an option has been provided to select between the “original logic” (deletes and inserts) and the “merge statements” logic by way of the DSS “decision/datasets/db/useMergeStatementForUpdates”. Setting “true” will use the merge statement logic, and setting “false” will use deletes and inserts. When the DSS is not defined, the default is "true" and the system will use merge statements in the form preferred by Postgres 9.5+.
INC-
196961 · Issue 693473
Iteration method updated for SetRequiredSkillsCountColumn
Resolved in Pega Version 8.7.1
After update, database utilization spiked and did not drop. Investigation traced this to the use of Local.totalCount in pzSetRequiredSkillsCountColumn, which caused the iteration loop to run more times than necessary. This has been resolved by replacing Local.totalCount with Local.iterationsCount in the iteration.