Skip to main content

InterSystems IRIS for Health™ Upgrade Checklist and Change Notes (2021.1.2)

This document is meant to help you assess the impact of upgrading to the InterSystems IRIS for Health 2021.1.2 maintenance release. It contains the upgrade checklist items since the last extended maintance (EM) release, 2020.1.0. It also lists the changes since 2021.1.0, grouped by category.

InterSystems News, Alerts, and Advisories

From time to time, InterSystems publishes items of immediate importance to users of our software. These include alerts, mission-critical issues, important updates, fixes, and release announcements. You can obtain the most current list at https://www.intersystems.com/support-learning/support/product-news-alerts/Opens in a new tab. InterSystems recommends that you check this list periodically to obtain the latest information on these issues.

Upgrade Checklist (Developers)

DP-12437+PLUS: IRISNative and Gateway Changes

NOTE: This item may require a change to code, configuration, or operation.

Category: Language Bindings - Native
Platforms: All
Version: 2021.1.0

This release contains the following changes to the language bindings IRISNative API and to the gateway:

  • Changes to Native SDKs and IRISList :

    • If the underlying value is the empty string, getObject returns an empty string or zero-length byte array. If the underlying value is UNDEFINED, getObject returns a null.
    • For numeric types, if the underlying value is an empty string, get returns a 0 value.
    • getObject returns a byte array for type 1 (ASCII).
    If you use this feature, you will have to refactor and recompile your code. These changes have the following consequences:
    • Empty string is not converted to $char(0) and back as it was done in previous releases. Empty string is left as empty string. Note that this is different from the SQL semantics for empty strings.
    • An attempt to use empty string or empty byte[] as a subscript generates a <SUBSCRIPT> error.
    • No changes in setting null. set(null,) and set ("",) both result in empty string on the server.
    • Getting undefined value will result in null.
    • Getting any numeric (int, double) value from "" returns 0. For methods and functions, the return value is null.
    • getByte from "" returns empty byte[0] , getString from "" results in empty string.
    • GetObject from type 1 results in byte[0] in both the IRIS and IRISList classes.
    • GetDateTime from empty string returns null, where in previous releases it was throwing an exception.
    • getIRISList returns a valid object of length 0 for values 02 01, and returns a null object for 01.
    • Iterator returns an empty string if subscript is not found, where in previous releases a null was returned.
  • Projection of byte array in method arguments — In previous releases, byte arrays were projected as strings, but in this release they are projected as a proxy object. You can convert the proxy object to a %GlobalBinaryStream object (first in 2020.3).
  • Parameter order in IRISNative iris function and iris procedure change — In the previous version, there was a difference in the order of the parameters between the documentation and the implementation. In this release, the implementation has been updated to match the documentation (first in 2020.3). The parameter order is as follows:

    iris.function(functionName,routineName,*args)

    iris.procedure(procedureName,routineName,*args)

    Where the implementation had the routineName parameter before the functionName parameter and the procedureName parameter. If you have coded these methods to the previous order, you must update the code. See function() and procedure() for details.

DP-12771: Configuration API changes

NOTE: This item may require a change to code, configuration, or operation.

Category: Tools
Platforms: All
Version: 2021.1.0

If you are using the %Net.Remote.Object gateway APIs to configure Object gateways, you must now use the Config.Gateways APIs. The properties associated with the old values LineRecallEntries and LineRecallBuffer in the Config.config class have been removed. If you were setting these properties via the Config.Config APIs, you will now need to update the "history" property rather than these.

DP-13503+PLUS: ICM can be used only with InterSystems API Manager (IAM) 1.5 and later

NOTE: This item may require a change to code, configuration, or operation.

Category: Cloud
Platforms: All
Version: 2021.1.0

With this change, ICM can only be used with the InterSystems API Manager (IAM) version 1.5 or later.

If you were using the Rancher or Weave Scope monitoring solutions with a previous ICM version, with this version you need to deploy these manually or use generic ICM commands.

The parameters in CPF have changed from the beta version. This change only impacts beta users of ICM.

Replace:

[Startup]
  EnableECP=1

with:

[Actions]
ModifyService:Name=%service_ecp,Enabled=1

Replace:

 [Startup]
  EnableIAM=1

with:

[Actions]
ModifyApplication:Name=/api/iam,Enabled=1
ModifyUser:Name=IAM,Enabled=1

DP-13572: JAR file change

NOTE: This item may require a change to code, configuration, or operation.

Category: Gateways - Java
Platforms: All
Version: 2021.1.0

If your Java application has dependencies on the Gateway JAR, you must change them to be dependent on the JDBC JAR.

DP-13931: Minor write daemon changes

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: UNIX®
Version: 2021.1.0

These are minor changes unlikely to impact code. In the %SYS.ProcessQuery, $SYSTEM.Process, SYS.Process classes, the property Routine has the value "AUXWD" rather than "SWRTDMN" for the auxiliary write daemons. For the property JobType, which is documented as taking a value from %syPidtab.inc, the definition in that include file is renamed from $$$SLWDTYPE to $$$AUXWDTYPE, and the numeric value is unchanged. In UNIX® systems, process names are changed from SWD1, SWD2, ... to AUXWD1, AUXWD2,...

DP-13935: Return value change for OneWay EnsLib.HTTP.GenericService

NOTE: This item may require a change to code, configuration, or operation.

Category: Interoperability
Platforms: All
Version: 2021.1.0

Before this change, for any custom code that subclassed EnsLib.HTTP.GenericService and had enabled OneWay, an "HTTP/1.1 200 OK" would be returned to the caller. This is now corrected to ensure returning an "HTTP/1.1 202 Accepted" to the caller.

DP-13977+PLUS: Decimal type changes

NOTE: This item may require a change to code, configuration, or operation.

Category: Gateways
Platforms: All
Version: 2021.1.0

In this release, $decimal is mapped to Decimal . NET and BigDecimal in Java and the scale is preserved. In previous versions, decimal was mapped to other types and scale was lost.

in ADO.Net, if a decimal value was set as proxy by a previous version, it will not be accessible by a simple get in this and later versions.

In Java, if BigDecimal is set using a generic conversion to byte array, a simple get cannot decode it in this and later versions.

DP-14007: SELECT with INTO clause changes when SQLCODE'=0

NOTE: This item may require a change to code, configuration, or operation.

Category: SQL
Platforms: All
Version: 2021.1.0

This release contains a change to the behavior of an embedded SELECT statement with an INTO clause. If the execution of the SELECT statement results in SQLCODE=100, or in the case of a FETCH that results in SQLCODE=100, any INTO variables in the statement will be set to null (""). The variable will be set to "" when SQLCODE=100 or SQLCODE<0 is returned.

DP-20597: ISCAgent now started automatically

NOTE: This item may require a change to code, configuration, or operation.

Category: Cloud
Platforms: All
Version: 2021.1.0

ISCAgent is now started automatically and is started on port 2188 by default in containers. You can disable ISCAgent with "--ISCAgent false". You can control the port used with the new syntax "--ISCAgentPort <port>" instead of the previous syntax "--before /home/irisowner/irissys/startISCAgent.sh <port>".

DP-20621: ^JCONVERT changes

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: All
Version: 2021.1.0

^JCONVERT now creates and processes common journal files in the enhanced format, which supports long strings. It has a new prompt to control whether common journal files are created in the enhanced format or in the previous format. If you need to create common journal files that can be read by ^%JREAD or ^JCONVERT from a previous version, you must specify that you do not want the enhanced format.

DP-20650: %CSP.Page changes impact viewing web page from Studio

NOTE: This item may require a change to code, configuration, or operation.

Category: IDEs
Platforms: All
Version: 2021.1.0

Classes that extend %CSP.Page, override the CSPURL or LOCATION parameters, and explicitly URL encode these parameters may be directed to the wrong web page when viewing the web page from Studio. This is not the case for any system classes, and the URL encoding these parameters is not a documented feature. This can be corrected by not explicitly URL encoding these parameters.

DP-275329: Task termination change

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: All
Version: 2021.1.0

In previous releases, tasks that were terminated by shutdown were marked as suspended. With this change, they are not marked as suspended by default. If you want tasks terminated by shutdown to be marked as suspended, set the new SuspendTerminated property.

DP-400051: Production export includes custom base schemas

NOTE: This item may require a change to code, configuration, or operation.

Category: Interoperability
Platforms: All
Version: 2021.1.0

The Interoperability Production Code Export will now include custom base schemas if appropriate. The query EnumerateVDocSchemas now also returns the Base value.

DP-401894: Improve storage efficiency by performing kills in ascending order

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: All
Version: 2021.1.0

This change increases the storage efficiency of the database following a KILL command — especially when purging large quantities of data from a database in ascending order. In the past programmers sometimes did KILLs in descending order when doing large purges of data. To improve storage efficiency, you should change such programs to do kills in ascending order as doing kills in ascending order will now almost always result in better efficiency and better performance. There should be less need to run the GCOMPACT utility to improve storage efficiency following large purges of data.

This change does cause a 128 byte increase in the shared memory allocation per global buffer. If you are using the 8k default buffer size, this is a 1.5% increase.

DP-401903: Update of the Japanese language model

NOTE: This item may require a change to code, configuration, or operation.

Category: NLP
Platforms: All
Version: 2021.1.0

For Japanese text, parentheses () and their content may get indexed differently from previous versions, depending on the use of Katakana and number of characters within. While doing so is not strictly required, users are recommended to reindex their NLP domains with Japanese text to ensure uniformity of the output.

DP-402073: Must recompile cubes to see detail listings

NOTE: This item may require a change to code, configuration, or operation.

Category: Business Intelligence
Platforms: All
Version: 2021.1.0

As part of a change to improve MDX query performance, this change stores certain cube-related data in a different location. This change requires that you recompile all cube classes that were created on a version prior to this change. If you do not recompile these classes, detail listings on those cubes will return no results.

DP-402085: OAuth — change to AddOct method

NOTE: This item may require a change to code, configuration, or operation.

Category: Object Library
Platforms: All
Version: 2021.1.0

The rarely used method %OAuth2.JWKS.AddOct() no longer base64url decodes client secrets. If you make use of this method but still need to base64url decode the secrets they pass in, you should base64url decode it before calling the method.

DP-402912: Fix problem where errors within ZWRITE command are not raised to caller's error trap

NOTE: This item may require a change to code, configuration, or operation.

Category: ObjectScript
Platforms: All
Version: 2021.1.1

This change fixes a problem where errors within ZWRITE command are not raised to caller's error trap.

Now ZWRITE throws some errors that were ignored before, but they are serious show-stopper errors that should not happen in a normal environment.

DP-403547: OAuth server now returns 401 for invalid credentials instead of 200

NOTE: This item may require a change to code, configuration, or operation.

Category: Security
Platforms: All
Version: 2021.1.0

Prior to this change, InterSystems IRIS returned a status of 200 whether or not the user login to authorize OAuth was successful. If the login wasn't successful, the login page was displayed again with status of 200. If the login was successful, the permissions page was displayed with status of 200.

InterSystems IRIS now returns a status of 401 when the user login was unsuccessful. Customers working with OAuth, especially those who implement custom OAuth login pages, should be aware of this change.

DP-404204: Upgrading containers and file ownership changes

NOTE: This item may require a change to code, configuration, or operation.

Category: Cloud
Platforms: Cloud
Version: 2021.1.1

The volume mounted for durable %SYS must now be writeable by user 51773 (irisowner), because cloning into that directory now happens as irisowner instead of root. When it isn't writeable, startup will fail. The cloud distribution now uses a non-root install, not a traditional installation. All files are now owned by 51773:51773 (aka irisowner:irisowner). The installation directory has not changed (still /usr/irissys). 

Before upgrading, users (excluding those using ICM or IKO) MUST chown their durable %SYS directory ($ISC_DATA_DIRECTORY) so that all files are owned by irisowner, for example:

chown -R 51773:51773 $ISC_DATA_DIRECTORY

This will most likely need to be done as root. IKO and ICM perform this ownership change automatically. 

For locked down images, the installation directory ($ISC_PACKAGE_INSTALLDIR) has changed from /home/irisowner/IRIS to /usr/irissys.

Upgrades with IRIS-lockeddown and IRISHealth-lockeddown between versions pre- and post- this change are not supported and will not succeed.

DP-404238: Limit use of PasswordHash to initial configuration

NOTE: This item may require a change to code, configuration, or operation.

Category: Cloud
Platforms: Cloud
Version: 2021.1.1

PasswordHash makes it easy to change system-wide passwords during the initial system configuration. The password change is effective before the instance is initialized. In previous releases, you could also use this feature to make system-wide password changes once the system was in use and no longer had the initial passwords. With this change, PasswordHash can only be used during the initial system configuration and cannot be used later to change passwords.

Specifically, PasswordHash will only be processed if the existing hash matches a known, fixed value used to set the initial password.

DP-404256: CSP pages not backed up by internal routine versioning

NOTE: This item may require a change to code, configuration, or operation.

Category: System
Platforms: All
Version: 2021.1.0

This is a change to an undocumented feature, routine versioning, that some customers may be using. If you are using routine versioning, with this change CSP pages will not be backed up to the ^rBACKUP global.

DP-404334: Quote $ZF() shell commands on Windows

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: Windows
Version: 2021.1.1

Windows shell commands must be enclosed in quotes if there are quoted arguments along with a quoted command path. Those quotes will now be added by $ZF(-1), $ZF(-2), and $ZF(-100,"SHELL").

DP-405034: %Net.SMTP checks server identities by default

NOTE: This item may require a change to code, configuration, or operation.

Category: Object Library
Platforms: All
Version: 2021.1.1

This change fixes a bug where the SSLCheckServerIdentity property in %Net.SMTP defaulted to false, but was documented as defaulting to true. The property now defaults to true and is in alignment with documentation. This means that, when connecting to an SSL/TLS secured web server, %Net.SMTP will check that the certificate server name matches the DNS name used to connect to the server and fail if they don't match. This is the behavior specified in RFC 2818 section 3.1.

As a result, when connecting to an SSL/TLS secured web server, the default behavior of %Net.SMTP will now be to fail if the certificate server name does not match the DNS name used to connect to the server.

This change is unlikely to cause compatibility issues, but it is possible that when using %Net.SMTP to send messages you might have issues connecting to an SSL/TLS enabled server. If this happens, and you understand the security trade-offs, you can set SSLCheckServerIdentity to 0 to restore the previous behavior.

DP-407501: 32-bit processes and external language servers

NOTE: This item may require a change to code, configuration, or operation.

Category: Gateways - .NET
Platforms: All
Version: 2021.1.1

External language servers that do not have "Exec 32" checked will change from executing as a 32-bit process to executing as a 64-bit process when started from the Management Portal. This will only affect you if you are loading external assemblies compiled for x86 and did not check the Exec 32 box of the server definition.

DP-10720: Remove unused environment variables

NOTE: This item may require a change to code, configuration, or operation.

Category: SQL
Platforms: All
Version: 2021.1.0

Some environment variables that were not used by SQL or the class compiler have been removed. These were not used by the product, but if you have referenced them, you should remove them from your application. As of this change, the following variables are no longer defined:

envRoutineSizeGet
envUseOldJavaGeneratorGet
envUseJavaGenerator1Get
envUseJavaGenerator2Get
envUseJavaGenerator3Get
envUseSortGet
envTimeChangedGet
The following variables are still defined but return an error if you try to update the setting:
envDefaultOHandleClassNameGet
envDefaultSerialStateClassNameGet
envDefaultStorageClassNameGet

DP-10835: New version of XEP

NOTE: This item may require a change to code, configuration, or operation.

Category: Language Bindings - Native
Platforms: All
Version: 2021.1.0

This change provides a new version of XEP support, which includes enhanced indexing and a new underlying client/server communication method. Consequently, you cannot use an XEP from a previous version of the product with this version as the server and you cannot use this version' XEP with a previous version as the server. In addition, there may be some minor code changes that you need to make to any code that called the previous version of XEP support. See XEP Requirements and Configuration for details. For example, there is the following change:

XEP updateObject() method — the updateObject() method will now throw an exception if the object to be updated does not exist in the extent of the class. If your application depends on updateObject reverting to insert when the object does not exist then you will need to update the application to catch the exception and properly invoke the store() method to insert a new object.

DP-10957: System defaults setting now checks values when specified

NOTE: This item may require a change to code, configuration, or operation.

Category: Interoperability
Platforms: All
Version: 2021.1.0

In previous releases, invalid values in the default system settings would not be checked until the values were applied in a production. This change ensures that system default settings are valid when specified. If you have invalid system default settings that were saved by a previous release, saving them in this release removes the values. Settings are validated by calling the IsValid() method of the appropriate class. If no IsValid() method is defined, then no validation is performed.

DP-11014+PLUS: Remove ability to connect to Caché from .NET Provider or ODBC

NOTE: This item may require a change to code, configuration, or operation.

Category: ODBC
Platforms: All
Version: 2021.1.0

In order to enable new features, neither the .NET Provider nor ODBC supports connections to Caché instances in this release. The .NET Provider can only connect to InterSystems IRIS instances version 2019.1 and later.

DP-11192: Error checking on timeout settings

NOTE: This item may require a change to code, configuration, or operation.

Category: Interoperability
Platforms: All
Version: 2021.1.0

This release adds error checking to the timeout settings in the production configuration page. If the requested timeout interval exceeds 1 hour, the page treats it as an error and does not allow the setting. Since it is extremely unlikely that you would want to delay the instance shutdown for an hour, this is most likely an error. However, if you really need such an extended time to wait for the production component to stop, you can still set shutdown to be longer than an hour using a script that calls an Ens.Director method.

DP-11269: Changes to TuneTable and TuneSchema defaults

NOTE: This item may require a change to code, configuration, or operation.

Category: SQL
Platforms: All
Version: 2021.1.0

With this change, the second argument of $SYSTEM.SQL.TuneTable and $SYSTEM.SQL.TuneSchema (update) now has a default=1.

Before this change, the default was 0 for update. Calling $SYSTEM.SQL.TuneTable(tablename) and $SYSTEM.SQL.TuneSchema(schemaname) without specifying a value for the second argument will result in a change of behavior from previous versions.

DP-11323: Make PEX callback methods abstract

NOTE: This item may require a change to code, configuration, or operation.

Category: Interoperability
Platforms: All
Version: 2021.1.0

The PEX class hierarchy has changes to reduce errors when users overload methods rather than override them. With this change, all methods that should be overridden by user code are marked as abstract. If you define a subclass and do not override these methods, you will get a compile error. Before this change, the compilation would succeed but the user callback code would not execute correct because the default code would be called instead. The documentation stated that these methods were abstract and needed to be overridden but this was not enforced by the code.

DP-11351: %Persistent IDENTIFIEDBY parameter marked as Deprecated

NOTE: This item may require a change to code, configuration, or operation.

Category: Object Storage
Platforms: All
Version: 2021.1.0

The %Library.Persistent IDENTIFIEDBY parameter is deprecated. If you have used IDENTIFIEDBY to define relationships, you should replace it with a parent/child relationship.

DP-11557: XML VDoc character escape changes

NOTE: This item may require a change to code, configuration, or operation.

Category: Interoperability
Platforms: All
Version: 2021.1.0

In XML VDoc, when you use setValueAt() to set the value at a node, you can specify a value that consists of mixed content (that is, a value that consists of a mix of element and text nodes). This change ensures that if a < (left-angle) character appears without a closing XML /> or </, then the < is treated as normal text and is XML escaped (replaced by <).

Before this change, this would have been treated as mixed content and would have caused an error. If you have code to handle this expected error, you should examine this case.

See Using Mixed Content When Setting Paths.

DP-11573: SQL Import/Export wizard now restricts file extensions

NOTE: This item may require a change to code, configuration, or operation.

Category: SQL
Platforms: All
Version: 2021.1.0

With this change, the SQL Import/Export wizard ([System Explorer] -> [SQL] -> [Wizards] -> [Data Import/Export]) will only allow the user to import from or export to files on the server with an allowed extension. Allowed extensions are: .txt, .csv. Previously any file on the system could be used. When importing from or exporting to a file on the client system, filenames are not restricted.

DP-11630: Eliminate on unload behavior from svgWidgetProvider and lock down behavior of RemoveFile() call

NOTE: This item may require a change to code, configuration, or operation.

Category: CSP
Platforms: All
Version: 2021.1.0

As of Chrome 80 synchronous HTTP events will no longer be honored as part of page exit processing. Previously this widget made use of such events to perform implicit server-side clean up of temporary files created during the PDF generation process. This feature is no longer supported.

All temp files used by this widget reside in the instanceHome/mgr/Temp directory, which is cleaned up periodically by normal maintenance processes. Applications that do not wish the temp files to linger until regular clean-up may explicitly remove individual files with the RemoveFile() method supplied by this widget. Note however, that RemoveFile() will only remove temp files created by this widget during the current CSP session and is not a generic utility.

DP-11796: PEX library changes

NOTE: This item may require a change to code, configuration, or operation.

Category: Interoperability
Platforms: All
Version: 2021.1.0

With this change, we use a different serialization library and we no longer use the jackson library. Consequently, your production settings should point to the intersystems-utils-3.1.0.jar provided and not to the jackson library. If your code references the jackson library, you must update it or install the jackson library.

DP-11827: 32-bit ODBC driver removed on UNIX®

NOTE: This item may require a change to code, configuration, or operation.

Category: ODBC
Platforms: UNIX®
Version: 2021.1.0

With this change release, the 32-bit ODBC drivers libirisodbcu35.so and odbcgatewayu.so have been removed on UNIX® systems. If you have used these drivers, you should use the 64-bit equivalents libirisodbcur6435.so and odbcgatewayur64.so.

If you are switching over to the 64-bit unixODBC client driver (libirisodbcu6435.so), you should also make sure you are using the 64-bit unixODBC driver manager and that your applications are built against 64-bit unixODBC. If your app or driver manager is 32-bit and is trying to use the 64-bit driver, this could cause unexpected problems. This change only impacts the 32-bit ODBC drivers built against the unixODBC driver manager. The 32-bit iODBC-based drivers are still included in the installation.

DP-11838: No longer modify existing CSP.ini for external web server

NOTE: This item may require a change to code, configuration, or operation.

Category: Web Gateway
Platforms: All
Version: 2021.1.0

Before this change, in environments where a third party web server is running remotely, the Web Gateway installer tried to modify some settings in CSP.ini which could result in unwanted changes in terms of service accessibility. A review of the configuration after each upgrade was always recommended.

With this change, the Web Gateway installer will not modify an existing CSP.ini in any way.

DP-11979: Web sockets with SharedConnection=1 can now time out

NOTE: This item may require a change to code, configuration, or operation.

Category: Web Gateway
Platforms: All
Version: 2021.1.0

In previous releases, a web socket connection with SharedConnection=1 would never time out. With this change, this connection will time out if it is inactive for the CSP session timeout.

DP-11994+PLUS: API Cleanup

NOTE: This item may require a change to code, configuration, or operation.

Category: JDBC
Platforms: All
Version: 2021.1.0

Typically, developers use the standard JDBC APIs, which are unchanged in this release, but some proprietary public classes and methods have moved or become more restricted in access permissions. These accessible proprietary classes and methods may have been used by customers in their applications, and will need to be updated.

For example, if your code is accessing directly the members of the ConnectionParameters class, you must update your code and use the getter and setter methods.

DP-12017: SELECT with INTO clause changes

NOTE: This item may require a change to code, configuration, or operation.

Category: SQL
Platforms: All
Version: 2021.1.0

This change modifies the behavior of an embedded SELECT statement with an INTO clause. If the execution of the SELECT statement results in SQLCODE=100, or in the case of a FETCH that results in SQLCODE=100, any INTO variables in the statement will be set to null ("") if they are defined. If the INTO variable was undefined prior to the execution of the SELECT, and the SELECT does not set the variable (or any previous FETCH does not set the variable for cursor selects), the variable will remain undefined. If the variable was defined prior to the SELECT, or the SQL SELECT or FETCH sets the variable, the variable will be set to "" when SQLCODE=100 or SQLCODE<0 is returned.

This change might result in some applications requiring updating in order to avoid application errors, or incorrect results returned.

DP-12116: Contents tab of Message Viewer now limits output for XML-enabled objects

NOTE: This item may require a change to code, configuration, or operation.

Category: Interoperability
Platforms: All
Version: 2021.1.0

To improve efficiency in displaying XML-enabled objects, large XML objects may not be fully serialized in the message viewer Contents tab. To see the fully serialized value, you must now use the Full Contents link.

An XML comment will be displayed if the contents are truncated.

DP-12215: GLOSTAT changes

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: All
Version: 2021.1.0

As part of a project to improve the performance of counters, certain GLOSTAT statistics have been changed:

  • %SYS.ProcessQuery property 'DataBlockWrites' and the equivalent $zu(67,38,pid) now counts any database block queued for writing by this process, whereas it previously counted only blocks internally typed as data blocks. This more accurately reflects the write load induced by this process than before (without adding the unnecessary complication of an additional statistic).
  • The undocumented $zu(190,6,0) and $zu(190,6,7) functions to zero system statistics are removed and now throw <FUNCTION>.
  • The iris stat -p32 columns formerly labelled 'rfcnt' and 'bfhit' are now labelled 'phyrd' and 'wdqbk' and they reflect, for the process in that row, the number of database reads and database blocks queued for writing respectively.

DP-12268: Changes for the arbiter container with ISCAgent using nondefault port

NOTE: This item may require a change to code, configuration, or operation.

Category: Cloud
Platforms: All
Version: 2021.1.0

The arbiter is an independent system hosting ISCAgent for mirror members. By default, ISCAgent uses port 2188. Before this change, to specify a nondefault port, you used syntax like the following:

$IRISSYS/startISCAgent.sh 2000
With this change, you must instead use -p as follows:
$IRISSYS/startISCAgent.sh -p 2000
Using arguments other than -p will be ignored and the container will run with port 2188.

DP-12307: Asynchronous I/O for database writes on Linux and UNIX®

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: UNIX®
Version: 2021.1.0

With this change, the product on Linux uses asynchronous I/O for writes to database files, as it always has on all UNIX® and Windows platforms. This is coupled with automatic use of direct I/O instead of buffered I/O. This change optimizes the disk I/O characteristics for database files, allowing higher scaling on busy systems without compromising application responsiveness. Of course, synchronization still occurs at key points to guarantee data integrity.

This change may require attention in certain configurations as file system buffering may have allowed the product to perform acceptably with an under-configured database cache in previous versions. Check that database cache is sized appropriately on your system.

Additionally, the product on Linux and all UNIX® platforms now uses asynchronous I/O for writing to the write image journal to provide optimal I/O characteristics. This change, however, requires no special attention.

For details, see Buffered I/O vs. Direct I/O.

DP-12412+DP-13124: Better handling of X12 documents

NOTE: This item may require a change to code, configuration, or operation.

Category: Interoperability
Platforms: All
Version: 2021.1.0

There are several changes in how X12 documents are handled:

  • Change handling poorly formatted documents — improved handling of certain poorly formatted documents means that the issues with these documents are logged in the Event Log and then handled by sending an appropriate Reply document, rather than these documents resulting in the service failing and documents not being deleted. If you are relying on service failures to identify flaws in the X12 document, you should look at the Reply document instead.
  • Validation change — this change now includes code values in validations that were previously ignored. If you are using validation with the flags r, u, or t, then some errors that would have been missed in previous versions will now be caught. This change also adds a new segment, CTX-11, to the validation style schema for HIPAA_5010:999. This does not impact any code for setting the CTX-5() segment, but does mean that if a user has code for getting values from the CTX segments, and the document they are inspecting has a Business Unit Identifier, then that CTX segment will have to be accessed using path 2000().2100().CTX-11 instead of the 2000().2100().CTX-5() which is used for Segment Context. This makes no difference in either setting or getting values using the new style schema.
  • Change in allowed order of segments — this change allows segments to be in any order permitted by the standard rather than requiring them to be in the specific order as listed in the standard. This allows valid documents to pass validation where in previous releases, they would have failed. This change should not require any change in your code unless you were using the wrong property path to get the value from some segment to work around this incorrect behavior; in that case you need to switch to using the correct property paths.

DP-12524: Change default of SKIPMESSAGEHISTORY in Ens.BusinessProcess to true

NOTE: This item may require a change to code, configuration, or operation.

Category: Interoperability
Platforms: All
Version: 2021.1.0

With this change, if custom business process code accesses the internal %MessagesSent or %MessagesReceived array, then the class parameter SKIPMESSAGEHISTORY needs to be overwritten and set to 0.

This MessagesSent and MessagesReceived logging information is separate from the Ens.MessageHeader objects that are created for the requests sent and responses received by a business process. The Ens.MessageHeader objects are not controlled by the SKIPMESSAGEHISTORY parameter.

DP-12548: Modify string handling in Java Native and IRISList

NOTE: This item may require a change to code, configuration, or operation.

Category: Language Bindings - Native
Platforms: All
Version: 2021.1.0

This change modifies how the Java Native API handles strings in method and function calls, get() methods, and IRISList.

  • An empty string will not be converted to $c(0) and back. Empty string will be empty string.
  • An attempt to use empty string or empty byte[] as subscript will generate <SUBSCRIPT> error.
  • No changes in setting null. set(null,) and set ("",) both will be resulted in empty string on server.
  • Getting undefined value will result in null.
  • get any numeric (int, double) value from "" return 0. It will return null for Methods/Functions/
  • getByte from "" return empty byte[0], getString from "" will result in empty string.
  • getObject from type 1 will result in byte[0] in both - IRIS and IRISList.
  • getDateTime from empty string will return null, before it was throwing an exception.
  • getIRISList will return a valid object of length==0 for values 02 01, null object for 01.
  • Iterator will return empty string if subscript is not found, before null was returned.

DP-12559: Activity monitoring changes

NOTE: This item may require a change to code, configuration, or operation.

Category: Interoperability
Platforms: All
Version: 2021.1.0

The activity monitoring pages now distinguish between days based on the combination of UTC and local time. This means when querying the Ens_Activity_Data.Days table for a specific TimeSlotUTC or TimeSlot, it is necessary to check if there are 2 rows per unique TimeSlotUTC or TimeSlot: One row when TimeSlot is different from TimeSlotUTC and one row when TimeSlot is the same as TimeSlotUTC. The actual value is the sum of these two rows.

DP-12577: Memory usage changes for global and routine buffers

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: UNIX®,macOS
Version: 2021.1.0

This change improves performance on newly installed systems where the database cache size has not been configured. Under most circumstances, you should carefully configure cache sizes and plan your memory management for optimal system performance. Configuring cache sizes is especially important for live production systems, systems with heavy loads, and systems with multiple instances.

However, when users initially evaluate the product, they typically run it without configuring the database cache size. The new behavior in allocating memory on systems where cache size has not been configured is:

  • When database cache (global buffers) is unspecified in the configuration, the instance auto-selects 25% of total physical memory for database cache. Previously, the calculation used 12.5% with an upper limit of 1GB (so effectively a flat 1GB for most systems). There is now no upper limit imposed. Additionally, this changes the calculation on Windows systems to be based on physical memory rather than "available" memory so that the behavior is consistent across restarts (and also consistent with Linux and UNIX® platforms).

    While this may result in a large allocation, if the instance isn't used to load a large amount of data, then most of this memory is not touched and, in most operating system environments, will not occupy physical memory. If the operating system has enough large pages available for this memory allocation, InterSystems IRIS will use them, and thus will occupy physical memory. In this case, however, that large page memory is known to be available. Control over use of large pages is available via the memlock configuration parameter.

  • On startup, if database cache is unspecified, a message "Global buffer setting requires attention. Auto-selected 25% of total memory." will be emitted.
  • Leaving routine cache (routine buffers) unspecified in the configuration no longer means a minimal amount routine cache (36MB) but instead is taken as 10% of the amount of global buffers with a minimum of 80MB and maximum of 1020MB. (More precisely, it's the number of global buffers multiplied by 8KB multiplie by 10%, so the simple 10% applies as long as only 8KB-size global buffers are used). This applies regardless of whether the database cache was configured or auto-selected as described above. In this way, most systems may be able to select only database cache size and leave routine cache size unaltered.
  • See Memory Management and Scaling for InterSystems IRIS for more information about memory management.

    DP-12603: Corrections to datetime functions to disallow invalid input

    NOTE: This item may require a change to code, configuration, or operation.

    Category: SQL
    Platforms: All
    Version: 2021.1.0

    Before this change, some invalid inputs to datetime functions would not cause an error but would return a value. Now these errors are caught and returned as errors. If your code does not handle errors in these functions, you should add error handling.

    DP-12609: Changes to creating interoperability namespace with %Installer

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Interoperability
    Platforms: All
    Version: 2021.1.0

    Before this change, if you used the %Installer.Installer class to make an interoperability production enabled namespace, it would set the node to a fixed portal URL. It now sets it to the empty string, which is the typically desired behavior. If you wish to set the node to a fixed portal URL, you can do this with the following:

    Set ^%SYS("Ensemble","InstalledNamespace",tNSUpper)=""
    

    DP-12631: JDBCGatewayPort change

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Cloud
    Platforms: All
    Version: 2021.1.0

    If you were overriding the JDBCGatewayPort parameter using the JSON field "JDBCGatewayPort", you should delete that parameter and instead override the parameter directly in the custom CPF file (pointed to by "UserCPF"). For example:

    [Gateways]
    %JDBC Server=JDBC,127.0.0.1,53773
    

    DP-12694: RecordMap error handling changes

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Interoperability
    Platforms: All
    Version: 2021.1.0

    The error detection for the RecordMap service is now stricter with the ParseOnly flag selected. Before this change, errors would be ignored with ParseOnly even if the AlertOnError flag was enabled. With this change, if the AlertOnError flag is enabled and a record fails validation, then an alert is sent even if ParseOnly is selected.

    This change also corrects the situation when previously no batch would be sent if the FatalErrors setting was equal to ParseOnly and the last record failed to save and there was at least one good record in the batch.

    DP-12727: X12 schema changes

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Interoperability
    Platforms: All
    Version: 2021.1.0

    This release includes additional keyfields in X12 schemas. In some places, unnecessary schemas or incorrect loops have been removed. If your code relies on the existence of these incorrect elements of the schema, you must revise it.

    DP-12747: SSLCC_Protocol parameter changes for TLS 1.3

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Web Gateway
    Platforms: All
    Version: 2021.1.0

    To allow for TLS 1.3, there are changes to the way you access the SSLCC_Protocol parameter. If you are using an external script or the Web Gateway registry methods (particularly %CSP.Mgr.GatewayMgr.GetServerParams or %CSP.Mgr.GatewayMgr.SetServerParams) to read/write the SSLCC_Protocol parameter in CSP.ini, you must adapt your code to use the SSLCC_Protocol_Min and SSLCC_Protocol_Max parameters instead.

    DP-12762: Newly supported connection pooling for JDBC

    NOTE: This item may require a change to code, configuration, or operation.

    Category: JDBC
    Platforms: All
    Version: 2021.1.0

    Before this change, connection pooling was not a supported feature. This change a major revision to the connection pooling code and API, and this feature is now fully supported. If your code called the previous unsupported version, you should update it to ensure that it reflects the revised implementation.

    DP-12897: Method signature changes in OAuth2.Server.Session

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Security
    Platforms: All
    Version: 2021.1.0

    This change includes a change to the signatures of the GetUser() and Login() methods of the OAuth2.Server.Session class. If you have manually subclassed this class and overloaded these methods, you should be aware that the system may attempt to pass them one additional (string) parameter when dispatching to user code from the core methods GetUser and Login (respectively) of OAuth2/Server/Auth

    DP-12945: .NET version change

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Interoperability
    Platforms: All
    Version: 2021.1.0

    The Interoperability .NET Gateway now supports Core 2.1 version and the default value is now 4.5 instead of 2.0. If your application is dependent on the default value and needs the 2.0 version, you must explicitly specify it.

    DP-13043: Remove support for H2OSA provider

    NOTE: This item may require a change to code, configuration, or operation.

    Category: IntegratedML
    Platforms: All
    Version: 2021.1.0

    The H2OSA provider is no longer supported. If you have used it with a previous release, you must switch to a different provider.

    DP-13047: Support FIPS mode for libcrypto.so.1.1 in Red Hat Linux 8.2

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Kernel
    Platforms: Linux
    Version: 2021.1.0

    On Red Hat Linux, you can only use libcrypto.so.1.1 FIPS mode on Red Hat Linux version 8.2 and later. You cannot use this mode on earlier versions.

    DP-13055: %ETN could change null subscript setting

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Kernel
    Platforms: All
    Version: 2021.1.0

    In this release, the $ZREFERENCE variable, which contains the last global referenced, can have a different value after running %ETN error trap utility than it had in the same context in previous releases. If your code is parsing the $ZREFERENCE value to determine where the error information was written, you must modify your code to determine this information using the return value from LOG^%ETN or BACK^%ETN, which is a $LIST of the first two subscripts in the ^ERRORS global.

    DP-13063: Change default superserver port

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Cloud
    Platforms: All
    Version: 2021.1.0

    In this and future releases, the default SuperServer port is 1972. If this port is not available, then the default port will be 51773 or the next free port after this. This change was first in release 2020.3. In releases before 2020.3, the default SuperServer port was 51773.

    If you are upgrading a system using the InterSystems Cloud Manager (ICM) and relied upon 51773, you may need to add the following override to your JSON defaults:

    "SuperServerPort": "51773"
    

    Note:If you are upgrading an instance of an earlier release with full installation kits on a server platform, this change does not impact you. The SuperServer port from the instance is preserved through the upgrade.

    DP-13164: Change to IRISCallableStatement.getBytes(String)

    NOTE: This item may require a change to code, configuration, or operation.

    Category: JDBC
    Platforms: All
    Version: 2021.1.0

    To improve consistency between IRISCallableStatement.getBytes(String) and IRISCallableStatement.getBytes(Int), the behavior has changes. If you are calling IRISCallableStatement.getBytes(parameterName) and depend on the details of the previous behavior, you should replace the method call with a call to outputParameterList.getByteArray(parameters.getListOffset(parameterName)).

    DP-13182: Sites using Nginx must rebuild and reconfigure

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Web Gateway
    Platforms: UNIX®
    Version: 2021.1.0

    If you use Nginx with the Web Gateway you must follow these steps to rebuild Nginx. If you do not use Nginx with the Web Gateway, you can ignore this issue.

    If you are using Nginx with the default dynamic modules configuration (using CSPx.so and CSPxSys.so), note that we are now deprecating this configuration. The dynamic modules configuration will still function as before, but if you use the Web Gateway with Nginx you should rebuild and reconfigure Nginx to work with the Network Service Daemon (NSD) build of the Web Gateway instead. The NSD now supports WebSockets when used with Nginx, you can now migrate to the NSD even if you have a WebSocket application.

    If you are already using Nginx with the NSD, you must still rebuild Nginx and edit its configuration to apply this change.

    The steps you must follow are different if you are already using NSD or if you are migrating from dynamic module configuration.

    If you are already using NSD:

    1. Install an updated version of the Web Gateway.
    2. Rebuild Nginx using the updated version of ngx_http_csp_module.c. See Nginx Web Servers for instructions on how to do this.
    3. Add the CSPNSD_pass directive to the Nginx configuration file to indicate the hostname/IP and port where the NSD is listening. For example, if your configuration file contains:

      location /csp {
          CSP On;
      }
      
      and the NSD is listening at 127.0.0.1:7038 (the default), then change the configuration block to:
      location /csp {
          CSP On;
          CSPNSD_pass 127.0.0.1:7038;
      } 
      
    4. Start up Nginx and the NSD.

    If you are migrating to using Nginx with NSD from using Nginx with dynamic modules (CSPx.so, CSPxSys.so):

    1. Install an updated version of the Web Gateway.
    2. Rebuild Nginx using ngx_http_csp_module.c instead of ngx_http_csp_module_sa.c. See Nginx Web Servers for instructions on how to do this.
    3. Remove the CSPModulePath directive from the Nginx configuration.
    4. Add the CSPNSD_pass directive to the Nginx configuration file to indicate the hostname/IP and port where the NSD is listening. For example, if your configuration file contains:

      location /csp {
          CSP On;
      }
      
      and the NSD is listening at 127.0.0.1:7038 (the default), then change the configuration block to:
      location /csp {
          CSP On;
          CSPNSD_pass 127.0.0.1:7038;
      } 
      
    5. Start up Nginx and the NSD. See Using the Network Service Daemon (NSD) and Using the NSD on UNIX, Linux, macOS for more information on how to manage the NSD.

    This change also adds a few additional Nginx configuration directives that you should be aware of when migrating, and you should review whether their default values are acceptable for your workloads. If the default values are not acceptable, then specify your own value in the proper location{} block in the Nginx configuration file. These directives are:

    • CSPNSD_response_headers_maxsize -- The maximum size of the HTTP headers in a response. An error is returned to the web client if a response header exceeds this size.
      • Syntax: CSPNSD_response_headers_maxsize size;
      • Default value: 8k
      • Context: location, if in location
    • CSPNSD_connect_timeout -- Timeout for connecting to the NSD when a request is received from the web client.
      • Syntax: CSPNSD_connect_timeout time;
      • Default value: 300s
      • Context: location, if in location
    • CSPNSD_send_timeout -- Timeout for a single send operation to the NSD when sending a request. The timeout is set only between two successive write operations, not for the transmission of the whole request.
      • Syntax: CSPNSD_send_timeout time;
      • Default value: 300s
      • Context: location, if in location
    • CSPNSD_read_timeout -- Timeout for a single read operation from the NSD when reading a response. The timeout is set only between two successive read operations, ot for the transmission of the whole response.
      • Syntax: CSPNSD_read_timeout time;
      • Default value: 300s
      • Context: location, if in location

    An example configuration that uses all the new directives is the following:

    location /csp {
        CSP On;
        CSPNSD_pass 127.0.0.1:7038;
        CSPNSD_response_headers_maxsize 8k;
        CSPNSD_connect_timeout 300s;
        CSPNSD_send_timeout 300s;
        CSPNSD_read_timeout 300s;
    }
    

    DP-13195: Remove extern symbol zfedll from include files

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Kernel
    Platforms: UNIX®
    Version: 2021.1.0

    There may be an unexpected incompatibility with any DLL that contains a source file that includes any of the following 4 statements:

    #include iris-cdzf.h
    #include iris-callin.h
    #include cdzf.h
    #include callin.h
    
    Including any of these #include files formerly defined a extern symbol with the name zfedll. The purpose of this symbol is not documented and it is assumed that no other code in the DLL will reference this symbol. The extern symbol zfedll is no longer defined and any DLL that makes an unauthorized reference to the zfedll symbol will now get a link-time error reporting that the symbol is not defined.

    DP-13358: Re-implement UNIX XDEVshm

    NOTE: This item may require a change to code, configuration, or operation.

    Category: xDBC
    Platforms: UNIX®
    Version: 2021.1.0

    In order to fix problems in the previous implementation, the UNIX XDEVshm code has been rewritten. Although the basic functionality is unchanged, there may be minor changes in behavior. Consequently, if you use XDEVshm on the UNIX platform, you should test your code to ensure that it is not sensitive to these minor changes.

    DP-13459: Studio now uses web server configuration from client registry

    NOTE: This item may require a change to code, configuration, or operation.

    Category: IDEs
    Platforms: All
    Version: 2021.1.0

    In previous releases, Studio ignored the web server configuration from the client registry and always queried the server for this information. With this change, Studio first queries the client registry for WebServerAddress, WebServerPort and WebServerInstanceName. If these are not defined in the client registry, Studio will query the server.

    However, if these are defined in the client registry but have incorrect values, you must correct them for Studio to function correctly.

    DP-13501: Enforce valid cube name in cube compile

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Business Intelligence
    Platforms: All
    Version: 2021.1.0

    Before this change, cube names that violated the documented rules could be successfully compiled though they may have caused other errors. With this change, these invalid cube names cause a compile error and must be corrected to successfully compile the cube.

    DP-13514: Replace legacy terminology

    NOTE: This item may require a change to code, configuration, or operation.

    Category: NLP
    Platforms: All
    Version: 2021.1.0

    This release adopts new terminology replacing master/slave with head/tail and BlackLists with SkipLists. In most cases, existing API calls will continue to work though you can update to the new terminology, but, if your code is explicitly checking for specific names in column heads or class reference entries or if you are using the Web Service projections of the %iKnow query APIs, you will need to adjust your code to account for these changes.

    DP-13552: Handle string values in $SYSTEM.Event.Wait()

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Kernel
    Platforms: All
    Version: 2021.1.0

    In previous releases, a $SYSTEM.Event.Wait() with a string value would cause no timeout. With this change, the string is converted to an integer and that is used as the timeout value. If the string is a nonnumeric string, it is treated as a zero timeout.

    DP-13698: Changes to TCP TLS in FIPSMode

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Kernel
    Platforms: All
    Version: 2021.1.0

    When FIPS mode is enabled, TCP TLS will use operating system's libraries and the TLS1.1 and earlier protocols won't be supported. This change should not impact existing code but, if your existing TCP TLS code uses FIPSMode, you should test it to ensure that there are no subtle behavior changes.

    DP-13700: $SYSTEM.SQL not using SQLCODE in some contexts

    NOTE: This item may require a change to code, configuration, or operation.

    Category: SQL
    Platforms: All
    Version: 2021.1.0

    The error information formerly provided in SQLCODE from $SYSTEM.SQL.Statement ClearAll(), ClearRelation(), ClearSchema(), ClearStatement(), FreezeAll(), FreezeSchema(), FreezeRelation(), FreezeStatement(), UnfreezeAll(), UnfreezeSchema(), UnfreezeRelation(), and UnfreezeStatement() is now included in the return status. The error information provided by SQLCODE from $SYSTEM.SQL FreezePlans() and ClearStatistics() can be found in the Errors parameter. SQLCODE has been removed from the PublicList in these contexts.

    DP-13734: Handle gateway timeout correctly

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Web Gateway
    Platforms: All
    Version: 2021.1.0

    When the Gateway times out, the associated InterSystems IRIS processes should terminate. In some cases, this would not happen and the processes would continue. With this change, these processes are terminated correctly. If your application depends on this behavior to continue past this timeout, you should adapt your code to handle this situation.

    DP-13783: ZEN: Very large integers now serialized as JSON strings

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Compatibility Features
    Platforms: All
    Version: 2021.1.0

    To avoid problems with languages such as JavaScript that cannot use double precision floating point numbers to store integers and cannot handle a value greater than 2^53-1, these values are now serialized as JSON quoted strings. The behavior with values less than 2^53 is unchanged.

    DP-13850: Map selectability changes for mapped tables

    NOTE: This item may require a change to code, configuration, or operation.

    Category: SQL
    Platforms: All
    Version: 2021.1.0

    Before this change, if you set map selectability for a table definition that was mapped into another namespace, the map selectability setting was changed for the table definition in all namespaces. With this change, you only set the map selectivity for a single namespace.

    DP-13874: Return HTTP error codes for redirects to custom error pages

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Web Gateway
    Platforms: All
    Version: 2021.1.0

    This changes the status code returned when Web Gateway redirects to a custom error page. If your web application expects HTTP status 200 for these custom error redirections, you need to update it to handle 5xx codes.

    DP-13937: Remove truncation to 150 characters on INFORMATION.SCHEMA.STATEMENTS:Statement column

    NOTE: This item may require a change to code, configuration, or operation.

    Category: SQL
    Platforms: All
    Version: 2021.1.0

    In previous releases, an ORDER BY STATEMENT on INFORMATION.SCHEMA.STATEMENTS:Statement column was automatically truncated to 150 characters. This automatic truncation has been removed to allow you to use more characters. However, in some cases having no truncation can cause a subscript error. To avoid this you should explicitly specify a truncation that will catch significant data, but will not be unlimited.

    DP-14014: Must recompile cubes that invoke UPDATEFACTSTEMP

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Business Intelligence
    Platforms: All
    Version: 2021.1.0

    If you have any cubes that invoke the UPDATEFACTSTEMP task, you must recompile them before the next build or background synchronization.

    DP-20560: Deprecate the 'l' flag and /lock qualifier in class compilation

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Object Compiler
    Platforms: All
    Version: 2021.1.0

    With this change, the class compiler always uses a lock when compiling or loading to ensure that the operation is not interrupted by other events; consequently, the 'l' flag and the /lock qualifier are deprecated and will be ignored. This change should not impact any existing user code or procedures other than by avoiding errors in the operation.

    DP-20566: Improve error handling in relationship queries

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Object Compiler
    Platforms: All
    Version: 2021.1.0

    This release improves the class compiler error handling of SQL relationship queries. Some errors that were not reported are now reported; consequently applications may behave differently when compiled or executed. But these new error messages can identify errors in relationship queries that should be fixed to achieve the intended results.

    DP-9922+PLUS: IRISNative and Gateway Changes

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Language Bindings - Object
    Platforms: All
    Version: 2021.1.0

    This release contains the following changes to the language bindings IRISNative API and to the gateways:

    • Access to the IRISReference class — you now have to use the accessor methods getValue() and setValue() to access the value. Previously, you could access the value directly
    • Object returned as IRISList — if a user method returns an object of IRISList, the InterSystems IRIS side now gets a $list literal. Previously, the InterSystems IRIS side would get a proxy object of %Net.Remote.Object. If your code is expecting an object of %Net.Remote.Object, you need to change it. There were significant problems including inefficiency with the previous behavior.
    • Private classes — in this release you cannot access private Java or .NET classes using public properties or methods. You must change the private classes to be public in Java or .NET if you want to continue using those properties and methods. This change fixes some errors and inconsistencies accessing private classes with public properties or methods.
    • %Net.Remote.Object property name change — in this release the %Net.Remote.Object internal Gateway property is renamed to %gateway. This is an internal property and should not be used, but if your code accesses it, you should change it to use the new name.
    • Empty strings — in this release, the language bindings map an empty string in the external language to an empty string in InterSystems IRIS. In previous releases, these were mapped to $c(0).

    DPP-847: Removal of deprecated Java Business Hosts -- use PEX instead

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Interoperability
    Platforms: All
    Version: 2021.1.0

    This change removes Java Business Hosts, a feature that was deprecated in release 2019.3. PEX replaces the Java Business Hosts feature. For information on migrating existing Java Business Hosts productions to use PEX, see the community article Migrate from Java Business Host to PEX. For a description of PEX, see PEX: Developing Productions with Java and .NET.

    FHIR-CUSTOM-METADATA-2020: FHIR users with custom metadata require a 2021.1 ad hoc before upgrading

    NOTE: This item may require a change to code, configuration, or operation.

    Category: FHIR
    Platforms: All
    Version: 2021.1.0

    Beginning in IRIS for Health 2020.1, if you wanted to use custom FHIR search parameters, you had to define a custom metadata set. In this version, defining FHIR metadata, including custom search parameters, has been migrated to FHIR packages. When you upgrade from an earlier version, the upgrade will remove any custom metadata sets, and configure the FHIR endpoint with the base FHIR package, either STU3 or R4, depending on what was in use before the upgrade. If you defined a custom metadata set in IRIS for Health 2020.1, 2020.2, or 2020.3 (even if you did not yet create custom search parameters), you must obtain a 2021.1 ad hoc with fix IF-2303 before performing an upgrade to IRIS for Health 2021.1. You should not upgrade to IRIS for Health 2020.4. If you are in this situation:

    1. Before performing your upgrade, contact the WRC and obtain the 2021.1 ad hoc for IF-2303.
    2. Upgrade your system to IRIS for Health 2021.1 according to the upgrade instructions, but do not run the post-upgrade method UpgradeFHIR().
    3. Apply the ad hoc to your upgraded system.
    4. Run the post-upgrade method and other steps described in Upgrading InterSystems IRIS for Health.
    5. If you have any custom search parameters, after you upgrade you must manually migrate them to a FHIR package and apply them to the endpoint before they can be used:

      1. Using the files that you used to originally create the custom metadata set, follow the instructions in Applying Packages to an Endpoint to apply packages to the endpoint.
      2. Re-index the endpoint as described in Re-indexing an Endpoint.
    Important: If you upgrade a 2020.1, 2020.2, or 2020.3 instance to 2020.4 or 2021.1 without this fix in place, FHIR endpoints with custom metadata will become unreachable when you run the UpgradeFHIR() method as a post-upgrade step.

    FHIR-ENDPOINTS-2020: Must manually upgrade FHIR endpoints

    NOTE: This item may require a change to code, configuration, or operation.

    Category: FHIR
    Platforms: All
    Version: 2021.1.0

    You must manually upgrade your existing FHIR endpoints after the installation process. For details on the manual upgrade, see Upgrading Pre-2020.4 FHIR Endpoints in the InterSystems IRIS for Health Installation Guide.

    FHIR-STU-2020: FHIR STU3 data transformations replace legacy transformations

    NOTE: This item may require a change to code, configuration, or operation.

    Category: FHIR
    Platforms: All
    Version: 2021.1.0

    New classes and methods have been introduced to transform SDA to FHIR and vice-versa. The transformation class and methods introduced in 2019.1 are now deprecated; you must modify any custom code that called these methods to use the new transformation classes and methods. For more information, see Upgrading Legacy Transformations.

    MAK5205: Changes to when SQL statement indexes are Removed

    NOTE: This item may require a change to code, configuration, or operation.

    Category: SQL.Query Processing
    Platforms: All
    Version: 2021.1.0

    Previously when all routines/classes that contained a SQL statement were removed, the statement index entry was also removed. This meant that all lightweight SQL statistics were also removed when the routine/class that contained the SQL statement was removed. It is often very useful to have access to this historic information and in addition if the statement was frozen it was not removed, so this change modifies the behavior to always keep the SQL statement index entry (and lightweight SQL statistics) when the containing routine/class is deleted.

    A new button has also been added to SQL statement index page in the system management portal called 'Clean stale' which will run a task to remove all statement index entries that are not frozen where the containing routine/class is no longer present or no longer contains this SQL statement.

    This change does not impact how your code is executed, but in order to remove the index entries, you have to use the Management Portal.

    SDK048: SQL Import/Export wizard now restricts file extensions

    NOTE: This item may require a change to code, configuration, or operation.

    Category: SQL
    Platforms: All
    Version: 2021.1.0

    With this change, the SQL Import/Export wizard ([System Explorer] -> [SQL] -> [Wizards] -> [Data Import/Export]) will only allow the user to import from or export to files on the server with an allowed extension. Allowed extensions are: .txt, .csv. Previously any file on the system could be used. When importing from or exporting to a file on the client system, filenames are not restricted.

    SGM031: Support SameSite for CSP session and user cookies

    NOTE: This item may require a change to code, configuration, or operation.

    Category: CSP
    Platforms: All
    Version: 2021.1.0

    When a server sets an HTTP(S) cookie, it can include an attribute called SameSite that affects the scope in which the cookie is sent. The options are as follows:

    • None - Send cookie with cross-site requests.
    • Lax - Send cookie with safe, top-level cross-site navigation.
    • Strict - Do not send cookie with cross-site requests.

    Recent updates to browser security have changed handling of third-party cookies. These updates use the SameSite attribute to reduce the risk of cross-site request forgery (CSRF) attacks, unauthorized access to data, and other possible security issues. Chrome (starting with v.84) enforces stricter rules for SameSite behavior, and these rules can cause issues with existing websites and web applications. These issues may include login problems, the login page being displayed repeatedly, and page elements not displaying properly.

    Before this change, it was not possible to modify the SameSite attribute, and web applications running on these versions may have such issues. This change allows you specify default values for the SameSite attribute, which will thereby prevent third-party cookie issues form arising.

    With this change, the product will explicitly set SameSite both for CSP session cookies and any cookie set via the %CSP.Response.SetCookie() method.

      Two new fields have been added for customizing web applications:
    • Session Cookie Scope
    • User Cookie Scope
    • These fields are displayed in Management Portal's Edit Web Application window, alongside "Use Cookie for Session" and "Session Cookie Path."

      Session Cookie Scope controls the default SameSite value for session cookies associated with the given web application. User Cookie Scope controls the default SameSite value for user-defined cookies created with %CSP.Response.SetCookie(). Session Cookie Scope and User Cookie Scope can be set to None, Lax, or Strict. System web applications and new or upgraded user applications default to Strict for both new fields.

      The %CSP.Response.SetCookie() method also accepts SameSite as an argument, which overrides the default value. You can use this new argument to exercise more fine-grained control over your cookies.

      You should configure grouped applications to use the same Session Cookie Scope setting. Additionally, if you are using "SameSite=None", the web application needs to support secure (HTTPS) connections.

      TRW1706: Collation changes that can impact query processing

      NOTE: This item may require a change to code, configuration, or operation.

      Category: SQL.Query Processing
      Platforms: All
      Version: 2021.1.0

      Concatenations of expressions that are coercible to a common collation (for example, string constants or parameters concatenated with commonly collated fields) will now be collated as the common collation. This change could lead to conditions that previously evaluated to false for certain values now evaluate to true. For example, the following condition will evaluate to true:

      ' ' || field LIKE 'A'

      where field has a value 'a'. It is unlikely that any code is dependent on having a false value for this condition.

      Upgrade Checklist (Administrators)

      DP-13887: FIPS mode must match operating system FIPS mode

      NOTE: This item may require a change to code, configuration, or operation.

      Category: Security
      Platforms: All
      Version: 2021.1.0

      If you attempt to start InterSystems IRIS in FIPS mode, the operating system must support FIPS mode and have been booted with FIPS mode enabled. Otherwise, InterSystems IRIS will not start and you must either enable FIPS mode in the operating system or not enable it in InterSystems IRIS.

      DP-13951: New metrics in %Monitor.Process

      NOTE: This item may require a change to code, configuration, or operation.

      Category: Monitoring
      Platforms: All
      Version: 2021.1.0

      This change adds new metrics from %Monitor.Process, and the counter index numbers have changed. The new metrics are MONBLKWAIT, MONBLKWAKE, MONMEMALLOC, and MONMEMFREE.

      DP-401580: New External Language Servers page replaces gateway pages

      NOTE: This item may require a change to code, configuration, or operation.

      Category: Management Portal
      Platforms: All
      Version: 2021.1.0

      In the management portal, the new External Language Servers page replaces the following pages:

      • Object Gateways
      • JDBC Gateways
      • XSLT Gateways

      To access the new page, click System Administration > Configuration > Connectivity > External Language Servers. For details on the new page, see Managing External Server Connections.

      DP-403425: Installer leaves duplicate ODBC driver

      NOTE: This item may require a change to code, configuration, or operation.

      Category: Installation
      Platforms: Windows
      Version: 2021.1.0

      To allow both Caché and InterSystems IRIS to both exist on a system, the installer should not remove the Caché ODBC driver. On Windows, a new InterSystems IRIS install may result in a duplicate entry for "IRIS ODBC Driver" in add/remove programs applet. You can safely uninstall the older "IRIS ODBC Driver".

      DP-404283: Changes to enabling %ZEN.Dialog classes

      NOTE: This item may require a change to code, configuration, or operation.

      Category: Security
      Platforms: All
      Version: 2021.1.1

      In this release, %ZEN.Dialog.* classes cannot be run in web applications unless the web application is enabled for analytics, the namespace is enabled for interoperability productions, or it is explicitly enabled for the web application. To explicitly enable %ZEN.Dialog.* classes, enter the following:

      Set ^SYS("Security","CSP","AllowPrefix",application-name,"%ZEN.Dialog.")=1

      Also, with this change, any web application that is enabled for analytics or interoperability will have %ZEN.Dialog.* classes enabled by default.

      DP-407254: Update interaction between delegated and password authentication

      NOTE: This item may require a change to code, configuration, or operation.

      Category: System
      Platforms: All
      Version: 2021.1.1

      This fixes an issue with authentication ordering when delegated and password authentication are enabled. If your user authentication includes both delegated authentication and password authentication, you can choose either to call or not call ZAUTHENTICATE for password users. Typically, ZAUTHENTICATE is only used for delegated users and not for password users.

      But if you want your ZAUTHENTICATE routine to also be called for password users, you should check the <b>Always try Delegated Authentication</b> in the <b>System Administration > Security > System Security > Authentication/Web Sessions Options</b> page in the Management Portal or by using the ^SECURITY utility (System Parameter Setup, Edit authentication options).

      The default for <b>Always try Delegated Authentication</b> is No and ZAUTHENTICATE is not called for password users.

      MIRMONTASK-2021: Removal of Mirror Monitor Launch Task

      NOTE: This item may require a change to code, configuration, or operation.

      Category: Management Portal
      Platforms: All
      Version: 2021.1.0

      In the Task Manager, the Mirror Monitor Launch Task task has been removed. This task is applicable only for HealthShare installations and is not needed for InterSystems IRIS for Health.

      TLS-2021: Removal of TLS 1.3

      NOTE: This item may require a change to code, configuration, or operation.

      Category: Security
      Platforms: All
      Version: 2021.1.0

      InterSystems IRIS 2020.2 through 2020.4 contained the new TLS 1.3 security libraries. On some platforms, we discovered that there were conflicts with older versions of the libraries installed by the operating system or other applications. Consequently, we have removed TLS 1.3 from this release. We will include TLS 1.3 support in a future release in a way that will not conflict with older versions of the library that are installed on the system.

      DP-11245: Passwords now use SHA-2 hashes

      NOTE: This item may require a change to code, configuration, or operation.

      Category: Security
      Platforms: All
      Version: 2021.1.0

      With this change, the product uses SHA-2 hashes for passwords instead of SHA-1; consequently, you cannot export a user with an SHA-2 password hash and import it into an earlier version of the product that does not use SHA-2 hashes for passwords. You can import a user with an SHA-1 password hash into this release or any release that supports SHA-2 hashes.

      DP-11381: Remove _PUBLIC ownership from generated listing tables

      NOTE: This item may require a change to code, configuration, or operation.

      Category: Business Intelligence
      Platforms: All
      Version: 2021.1.0

      Listing tables are now generated so that they require explicitly assigned SELECT privileges.

      For field list listings in a given cube, this will mean users must have SELECT privileges on both the source table for the cube and the generated <cube class>.Listing table for that cube.

      For custom listings, SELECT privileges of user tables might be required to run the custom listing. If the custom listing uses the special $$$RESTRICT token, SELECT privileges on the <cube class>.Listing table will also be required.

      DP-12141: Cannot use old versions of cvendian and cvencrypt

      NOTE: This item may require a change to code, configuration, or operation.

      Category: Security
      Platforms: All
      Version: 2021.1.0

      The maximum length of encryption ID is now increased from 63 to 64, and the encryption ID should not contain wide characters.

      As a result, you cannot use cvendian and cvencrypt utilities from previous versions on encrypted databases. Use the versions of cvendian and cvencrypt provided with this release.

      DP-12790: Restore default superserver port number to 1972

      NOTE: This item may require a change to code, configuration, or operation.

      Category: Installation
      Platforms: UNIX®
      Version: 2021.1.0

      In this and future releases, the default SuperServer port is 1972. If this port is not available, then the default port will be 51773 or the next free port after this. In previous releases, the default SuperServer port was 51773.

      Note: If you are upgrading an instance of an earlier release with full installation kits on a server platform, this change does not impact you. The SuperServer port from the instance is preserved through the upgrade.

      Business Intelligence

      DP-402897: Fix warning exporting widgets to Excel by exporting pivot table as CSV

      Category: Business Intelligence
      Platforms: All
      Version: 2021.1.1

      This change fixes a problem where exporting pivot tables from Analyzer/Pivot Widgets as XLS and then opening in Excel, they throw a security warning.

      To avoid this warning and improve integration with other data visualization tools, XLS export is replaced with CSV export.

      DP-404426: Fixes inherited cubes that do not show sourceClass list in Architect

      Category: Business Intelligence
      Platforms: All
      Version: 2021.1.1

      If a cube (abstract or not) using ^DeepSee.Overrides for setting a source class with the explicit setting sourceClass="" is then inherited, the Architect was showing the inherited content of the cube but was not able to populate the source class tree on the left pane.

      This change makes the sourceClass override aply during any cube model load wthin the Architect if the sourceClass is null.

      DP-404982: Solves a problem where %FixBuildErrors can report that errors are fixed, when they are not

      Category: Business Intelligence
      Platforms: All
      Version: 2021.1.1

      When a cube has an OnProcessFact method, %DeepSee.Utils:%FixBuildErrors can handle reference errors improperly. It reports success and deletes ^DeepSee.BuildErrors whether or not the record is fixed. This change fixes the problem.

      DP-405378: Correct subquery queryKey bookkeeping in compound cubes

      Category: Business Intelligence
      Platforms: All
      Version: 2021.1.1

      This change corrects a problem where a crossjoin containing an ordering function in the second (inner) term might lose track of the correct order of compound cube results.

      DP-405956: Fixes errors in Mini-Analyzer and Analyzer drag and drop and enabling filters

      Category: Business Intelligence
      Platforms: All
      Version: 2021.1.1

      In some cases, dragging and dropping in the Mini-Analyzer caused JavaScript errors and in other cases enabling and disabling filters would not work in the Analyzer and Mini-Analyzer. This change corrects those problems.

      DP-406477: Fix problem where compile fails if parent cube has no named FactNums attribute

      Category: Business Intelligence
      Platforms: All
      Version: 2021.1.1

      In versions with selective build enabled by default, cubes created in Architect will normally have the namedFactNums attribute set to true (and factNumber attributes with default values for appropriate model elements. However, cubes imported from an older version and compiled in Studio or Terminal may not have any such attributes (and may compile and build successfully despite this).

      This leads to a problem when child cubes are newly created in Architect on version with selective build, and inherit from parent cubes created on an older version. These child cubes have namedFactNums = "true" by default*, but as the parent cube's model elements have no factNumber, the child cube will fail to compile.

      It's possible to work around this either by manually resolving the discrepancy in Studio or by opening the parent cube in Architect and saving it there, which enables selective build for the cube and adds namedFactNums and factNumber to the cube class.

      This change fixes the problem.

      DP-407899: Correct handling of !NO MEMBER in MDX filters

      Category: Business Intelligence
      Platforms: All
      Version: 2021.1.1

      In version 2021.1, MDX queries return no results if they include a filter clause that excludes (using %NOT) a member that does not exist in the level being filtered on. For example, the following query returns no results when there is no &[] member in the [HOMED].[H1].[ZIP] level:

      SELECT NON EMPTY [HomeD].[H1].[ZIP].Members ON 1 FROM [PATIENTS] %FILTER [HOMED].[H1].[ZIP].&[<null>].%NOT
      
      The problem is the same whether the member is &[<null>] or some other member (for example &[test]) that does not exist in the level. %NOT works as expected when the member exists - this query returns correct results:

      SELECT NON EMPTY [HomeD].[H1].[ZIP].Members ON 1 FROM [PATIENTS] %FILTER [HOMED].[H1].[ZIP].&[32006].%NOT

      It is more common to filter on members that do exist, of course, but filtering on members that do not exist should work correctly, as the set of members in a level can change over time and should be able to do so without breaking existing pivots. In particular, a customer may well wish to exclude null values without knowing whether their data will contain any at a given time.

      The problem occurs in version 2021.1. It does not occur in version 2019.1.0 or in Ensemble 2018.1.2.

      Cloud

      DP-404204: Upgrading containers and file ownership changes

      NOTE: This item may require a change to code, configuration, or operation.

      Category: Cloud
      Platforms: Cloud
      Version: 2021.1.1

      The volume mounted for durable %SYS must now be writeable by user 51773 (irisowner), because cloning into that directory now happens as irisowner instead of root. When it isn't writeable, startup will fail. The cloud distribution now uses a non-root install, not a traditional installation. All files are now owned by 51773:51773 (aka irisowner:irisowner). The installation directory has not changed (still /usr/irissys). 

      Before upgrading, users (excluding those using ICM or IKO) MUST chown their durable %SYS directory ($ISC_DATA_DIRECTORY) so that all files are owned by irisowner, for example:

      chown -R 51773:51773 $ISC_DATA_DIRECTORY
      

      This will most likely need to be done as root. IKO and ICM perform this ownership change automatically. 

      For locked down images, the installation directory ($ISC_PACKAGE_INSTALLDIR) has changed from /home/irisowner/IRIS to /usr/irissys.

      Upgrades with IRIS-lockeddown and IRISHealth-lockeddown between versions pre- and post- this change are not supported and will not succeed.

      DP-404238: Limit use of PasswordHash to initial configuration

      NOTE: This item may require a change to code, configuration, or operation.

      Category: Cloud
      Platforms: Cloud
      Version: 2021.1.1

      PasswordHash makes it easy to change system-wide passwords during the initial system configuration. The password change is effective before the instance is initialized. In previous releases, you could also use this feature to make system-wide password changes once the system was in use and no longer had the initial passwords. With this change, PasswordHash can only be used during the initial system configuration and cannot be used later to change passwords.

      Specifically, PasswordHash will only be processed if the existing hash matches a known, fixed value used to set the initial password.

      DP-405632: Update host configuration for Ubuntu 20.04

      Category: Cloud
      Platforms: UNIX®
      Version: 2021.1.1

      Changes between Ubuntu 18.04 and 20.04 may potentially cause network issues. This change deals with this two of these changes:

      1. On some configurations, "iptables" and "iptables-save" have moved from /sbin to /usr/sbin.

        This may have been causing issues reaching the outside network; we now check both locations.

      2. resolv.conf now includes option "trust-ad" by default.

        This may have been causing Weave Net to crash (see [https://github.com/weaveworks/weave/issues/3868]); we now remove this option.

      Compatibility Features

      DP-402030: Fix CMQL queries fail on first execute after conversion to InterSystems IRIS

      Category: Compatibility Features
      Platforms: All
      Version: 2021.1.1

      Fixes a problem where if a CMQL query has been executed on a Caché instance, and then the instance is converted to InterSystems IRIS, the query will fail on the first execute on the converted instance, but will run afterwards.

      DP-402536: Fix an error where Caché Migration Feature stream properties would be set to null

      Category: Compatibility Features
      Platforms: All
      Version: 2021.1.1

      This change fixes a problem that would cause stream properties to be set to null when the value is assigned using the IRISActiveX library. The problem only affects properties using the Caché Migration Feature stream types (such as %Library.GlobalCharacterStream) and only when the property is explicitly set.

      DP-403621: Support NodeJS version 14

      Category: Compatibility Features
      Platforms: All
      Version: 2021.1.1

      This change adds the headers and build scripts to support building the legacy node.js binding for node version 14.x.x.

      DP-403622: SDK205Support NodeJS version 16

      Category: Compatibility Features
      Platforms: All
      Version: 2021.1.1

      This change adds the headers and build scripts to support building the legacy node.js binding for node version 16.x.x.

      DP-404220: Fix old Node.js support methods without a return value

      Category: Compatibility Features
      Platforms: All
      Version: 2021.1.1

      This change updates the old NodeJS binding to be able to call ObjectScript methods that do not return a value. Previously, attempting to call such a method would result in a <COMMAND> error when run via the API connectivity, or a <SYNTAX> error when run using TCP connectivity.

      Now invoking a method that does not return a value will result in undefined being returned to the javascript code.

      Note: If a client without this change connects to a server with this change using TCP, any method call that should return undefined will actually return an empty string (''). If you have a newer client connecting to an older server, then you will still get a <COMMAND> error (that is the same behavior as before this change.)

      DP-404837: Prevent crashes in legacy Node.js template interface

      Category: Compatibility Features
      Platforms: All
      Version: 2021.1.1

      This change corrects defects in the legacy Node.js binding that could cause crashes when using the class template interface.

      This change corrects two problems.

      1. When using the class template interface to invoke a method or a class method that returns an object value, and the first argument to the method was longer than 256 bytes, there would be a buffer overflow that could cause memory corruption and potentially a crash. This problem has been corrected.

      2. When caling IrisClass() to generate a class template, if the connection is using TCP connectivity the class metadata retrieved from the server via GetClass^%SYS.nodejsServer) could be corrupted, which could result in a crash.

      CSP Server

      DP-402100: %CSP.WebSocket:OpenServer() should quit 0 for a non-existent WebSocketID

      Category: CSP Server
      Platforms: All
      Version: 2021.1.1

      This change updates the %CSP.WebSocket:OpenServer() method to return an error status if no data is found for a given WebSocket ID. Previously, this method would return $$$OK even though it failed to find and open the web socket.

      DP-404562: Adds unique error codes to %CSP.WebSocket

      Category: CSP Server
      Platforms: All
      Version: 2021.1.1

      This change replaces generic error usage in the %CSP.WebSocket class with new error codes. WebSocket behavior is unchanged otherwise.

      DP-406217: Allow CSP pages to specify exact redirect URL

      Category: CSP Server
      Platforms: All
      Version: 2021.1.1

      Typically when performing a browser-side redirect using %response.Redirect, the target URL will be transformed to an absolute URL before being sent to the client. The system may also add or modify the CSPToken, CSPCHD, and other URL parameters if the target URL is a CSP/ZEN page

      This change introduces a new property: %response.UseExactRedirect. If this is set to 1, then the server will not perform these transformations; the URL specified in %response.Redirect will be used exactly as specified by the user. This only affects the current request, and does not affect redirects using %response.ServerSideRedirect. The default is 0.

      Note that RFC 2616 initially defined the Location header to require an absolute URI (see section 14.30), but this was later relaxed by RFC 7231 (see Section 7.1.2, and Appendix B). Setting %response.UseExactRedirect=1 will allow a CSP Application to redirect to a relative URL. This generally should not be relevant because by default we will translate the URL to the equivalent absolute URL, but may be helpful in some unusual cases.

      DP-408957: Ignore cache clearing errors during CSP compile

      Category: CSP Server
      Platforms: All
      Version: 2021.1.1

      This change corrects the following error that occurs sometimes when compiling a CSP page in Studio.

      Compilation started on 10/19/2021 16:36:55 with qualifiers 'k'
      Compiling file /csp/user/menu.csp
      Compiling class csp.menu
      Compiling routine csp.menu.1
      Detected 2 errors during compilation in 0.046s.
      ERROR #7913: Unable to complete client request
        > ERROR #6084: Unknown errors detected, but no error code reported
      

      Data Reporting

      DP-405725: Zen Reports do not output duplicate ID for table elements

      Category: Data Reporting
      Platforms: All
      Version: 2021.1.1

      This change corrects a bug that could result in an error when including certain display components directly in a table, if the component defines an ID attribute. In these cases Zen Reports would produce XSLFO with elements with duplicate ID's, which would result in an error from FOP like:

      SEVERE: Exception
      org.apache.fop.apps.FOPException: org.apache.fop.fo.ValidationException: Property ID "line" (found on "fo:table") previously used; ID values must be unique within a document! (See position 1861:-1)
      

      DP-407946: Execute queries using %ExecuteAsynch when preparing for printing/exporting

      Category: Data Reporting
      Platforms: All
      Version: 2021.1.1

      When exporting pivotTable results, the %DeepSee.UI.MDXExcel and %DeepSee.UI.MDXPDF pages now use the multithreaded %ExecuteAsynch by default to execute the queries in the background. This can be suppressed with a URL parameter ASYNC=0 when opening the page, which will default to the prior behavior. Omission of this parameter will produce the new default behavior.

      Gateways - .NET

      DP-407501: 32-bit processes and external language servers

      NOTE: This item may require a change to code, configuration, or operation.

      Category: Gateways - .NET
      Platforms: All
      Version: 2021.1.1

      External language servers that do not have "Exec 32" checked will change from executing as a 32-bit process to executing as a 64-bit process when started from the Management Portal. This will only affect you if you are loading external assemblies compiled for x86 and did not check the Exec 32 box of the server definition.

      Gateways - Java

      DP-402388: Fixes problem where Business Operation cannot connect to Java Gateway

      Category: Gateways - Java
      Platforms:
      Version: 2021.1.1

      EnsLib.JavaGateway.Service::ConnectGateway is deprecated but unfortunately, in the process, the pDebug As %Boolean 3rd parameter was removed This change restores the old method signature to EnsLib.JavaGateway.Service::ConnectGateway() in order to fix the backward incompatibility.

      DP-407804: Correct Java ClassPath when directory contains spaces

      Category: Gateways - Java
      Platforms: All
      Version: 2021.1.1

      This changes fixes a condition where the Java Gateway could fail to start if there are spaces in the classpath directory.

      Gateways - JDBC

      DP-407653: Correct IRISConnect.isValid handling of read timeouts

      Category: Gateways - JDBC
      Platforms: All
      Version: 2021.1.1

      IRISConnect.isValid(readTimeout) is a public API that returns true if the connection is active, and false if it is disconnected. The API sets the read timeout for the socket to a duration in seconds and sends a ping message for the server to respond to.

      The problem with the code is that if the read does timeout, it does not mean the connection is dead, just that it hasn't responded, and the exception code should reset the read timeout of the socket back to the jdbc default value (either network timeout that was set or infinite). Another problem in this case is that there is a pending request for query results that has been requested from the server, but has not been read. For example, in one case the query was artificially delayed by 20 seconds, and the read timeout is resetting how long we wait for a query timeout (which is controlled on the server side, not the client), and the client gives up with a read timeout consuming the response to the query (even before the ping is attempted).

      This change adds a check to return true if we are processing a query read-ahead, otherwise to ping the connection with the timeout requested in isValid().

      DP-408799: Correct JDBC gateway query code generation to close cursor

      Category: Gateways - JDBC
      Platforms: All
      Version: 2021.1.1

      A customer reported a problem where they have a class query of type %SQLQuery projected as a procedure.  The SQL query in this class query is against a linked table, through the JDBC gateway.  They are calling the cached query using:

         set rs = ##class(%ResultSet).%New()
      
       

      When the UCQ oref was destructed, the SQL Close call was not made because i%CursorState was not defined, so the process did not realize an SQL cursor statement had been executed.  When the SQL Close did not occur, _%JDBCGateway.removeStatement(i%hstmt)_ was not called, which means the statement was not removed from the Java process and memory in the Java process would continue to build up.   This change allows the UCQ's %Destruct method to close the SQL cursor.

      Gateways - ODBC

      DP-404515: Use correct data length for SQLGetData SQL_C_WCHAR bufsize 0

      Category: Gateways - ODBC
      Platforms: All
      Version: 2021.1.1

      Fixes a bug where calling SQLGetData twice, the first time with buffer length 0, caused the second call to return an incorrect data length for wide-char (SQL_C_WCHAR) queries.

      IDEs

      DP-404634: Allows users to drill down into OREF's when debugging in VSCode

      Category: IDEs
      Platforms: All
      Version: 2021.1.1

      See https://github.com/intersystems-community/vscode-objectscript/issues/272.

      DP-405497: Fixes input Japanese being garbled when running method with parameters in debug launch mode

      Category: IDEs
      Platforms: All
      Version: 2021.1.1

      See https://github.com/intersystems-community/vscode-objectscript/issues/570.

      DP-405539: Fixes problem where launch of class method not accepting path with Windows drive

      Category: IDEs
      Platforms: Windows
      Version: 2021.1.1

      See https://github.com/intersystems-community/vscode-objectscript/issues/654.

      DP-405736: Fix Uncomment Line off-by-one error in Studio

      Category: IDEs
      Platforms: All
      Version: 2021.1.1

      This change fixes a bug wherein Studio's Edit > Advanced > Uncomment Line and Uncomment Block commands would fail to uncomment the last selected line.

      DP-407521: Fix Studio so that it follows HTTPS configuration setting

      Category: IDEs
      Platforms: All
      Version: 2021.1.1

      SDK112 (DPP-388) updated Studio to use the web server configuration defined in the client registry, when applicable. However, it did not check whether HTTPS was enabled but instead always used "http" in these cases. This could prevent features such as Studio's Tools > Add-Ins > SOAP Wizard from connecting to the server, if HTTPS was required and the client registry was in use. With this devchange, Studio now selects "https" or "http" for the URL based on the client's HTTPS setting.

      DP-409553: Fix document auto-import when using %Studio.SourceControl.ISC

      Category: IDEs
      Platforms: All
      Version: 2021.1.1

      This change addresses two vscode-objectscript GitHub issues related to the source control hooks' auto-import feature.

      Open a document under server side source control in VS Code. Edit this document which asks to checkout the document, select 'yes' and save/compile it. Under a separate source control tool you can see the file associated with this document is now checked out and modified. Revert this file in the separate source control tool.

      In VS Code there is no indication the file on disk associated with this document was changed. In Studio the timestamp check it performs on a regular basis and when the document gets focus will trigger a source control call that detects the associated file is modified and if the document is not modified in Studio will cause the document to be reloaded from the file automatically and the view inside Studio will be refreshed. Additionally if the file in Studio was modified you will be prompted if you wish to revert your edits back to the version of the file on disk.

      This change corrects the behavior of VS Code to recognize that the file is no long writeable.

      Installation

      CRE-3678: Installation changes for IntegratedML

      Category: Installation
      Platforms: All
      Version: 2021.1.1

      With this change, there are installation kits that include the IntegratedML libraries and other kits that do not. For the kits that do include these libraries, note that IntegratedML is not installed by default, but is rather part of the Custom installation.

      If you are using IntegratedML and you upgrade, be sure to select the appropriate kit and also to use the Custom installation option.

      DP-412668: New ISCAgent standalone installer

      Category: Installation
      Platforms: Windows
      Version: 2021.1.1

      This change provides a new ISCAgent installer for Windows. Functionality will be the same as current ISCAgent installer except for the following changes:

      • It will accept normal Windows Installer command line options for logging, unattended and silent install, similar to what InterSystems IRIS installer is using. For example, to run silent install one would use command "ISCAgent_<version>.exe /qn".
      • It will install VC++ redistributables in both full UI and unattended install.
      • Dialogs will have the same look as InterSystems IRIS installer dialogs.

      IntegratedML

      DP-410849: Gateways section for Ubuntu disables usesharedmem

      Category: IntegratedML
      Platforms: Ubuntu
      Version: 2021.1.1

      For initial installations, the usesharedmemory CPF flag is disabled for Ubuntu 20.04, which has a shared memory problem. If the system is an upgrade, no change is made to this setting.

      Interoperability

      DP-402935: Corrects framed TCP adapter not functioning with single end framing character

      Category: Interoperability
      Platforms: All
      Version: 2021.1.1

      The inability to process 'framed' messages terminated using a single terminating character by the EnsLib.TCP.Framed.PassthroughService and EnsLib.TCP.Framed.PassthroughOperation, which use EnsLib.TCP.FramedCommon via EnsLib.TCP.FramedInboundAdapter and  EnsLib.TCP.FramedOutboundAdapter has been corrected.

      DP-406031: Fix Java Gateway hang

      Category: Interoperability
      Platforms: All
      Version: 2021.1.1

      This change fixes a Java Gateway hang by normalizing the Y0 response message structure

      Y0 response message structure before this change (protocol<=61):

      • piece #1: server protocol number

      • piece #2: server protocol number

      • piece #3: boolean flag indicates if server supports shared memory or not. Only present if client has requested shared memory.

      Y0 response message structure with this change (protocol>=63):

      • piece #1: server protocol number

      • piece #2: server protocol number

      • piece #3: boolean flag indicates if server supports shared memory or not. This piece is always present even if client didn't request shared memory.

      • piece #4: External Language Server name under which the running server is defined.

      DP-410350: Avoid Possible loss of one attribute on setting another attribute in XMLVDoc

      Category: Interoperability
      Platforms: All
      Version: 2021.1.1

      In an XML VDoc element, if 10 or more attributes had been set, and one attribute's value was then set to another value, then, on output, one of the other attributes would not be included.  This change fixes that problem so that no attributes are lost when another one is set, even if there are a large number of attributes.

      JDBC

      DP-407658: Pass timeout as argument to socket.connect()

      Category: JDBC
      Platforms: All
      Version: 2021.1.1

      socket.connect(SocketAddress) does not use the timeout set inside the socket object, but in turn calls socket.connect(SocketAddress, 0) with an infinite timeout. This change passes the timeout as an argument to connect(SA, timeout).

      Kernel

      DP-402510: Fix problem where background debugging loops when reading from the null device

      Category: Kernel
      Platforms: UNIX®
      Version: 2021.1.1

      If a background process is changed to foreground with ^%PMODE and attempts to read from its principal device which is the default null device, the process could loop. This change fixes this problem that was discovered developing a debugging utility.

      DP-403205: Fix two-argument $GET() of array that returns wrong value if Undefined(2) is set

      Category: Kernel
      Platforms: All
      Version: 2021.1.1

      If a process has set $SYSTEM.Process.Undefined(2), a two-argument $GET() on VAR(SUB) where SUB is undefined would return a null string instead of the expected second argument of $GET(). This change fixes the problem.

      DP-403473: Do not use Windows short path names

      Category: Kernel
      Platforms: Windows
      Version: 2021.1.1

      The %File method NormalizeFilenameWithSpaces() is used to apply quotes to a file name that contains spaces, so it can be passed as an argument to a shell command. In some cases on Windows, it would convert the name to a Windows short file name instead of adding quotes. This did not always result in a valid file reference. The Windows short file names are no longer necessary, so the method now always returns the original name and adds quotes if it contains spaces.

      DP-403566: Fix compilation error that could cause core dumps

      Category: Kernel
      Platforms: All
      Version: 2021.1.2

      Change DP-403184, in fixing a compilation error, introduced a different compilation error which could cause mismatches between compiled and interpreted expressions with Undefined = 2 and could cause core dumps. This change fixes the new error.

      DP-403623: Fixes <BREAK> error and inconsistent behavior, sometimes resulting in a core

      Category: Kernel
      Platforms: All
      Version: 2021.1.1

      If there is an uncaught <COMMAND> error because $XECUTE() quits without returning a value, a GOTO command at the error prompt had unpredictable results. This change corrects the problem.

      DP-404235: Restrict users permitted to perform clone and merge operations

      Category: Kernel
      Platforms: All
      Version: 2021.1.1

      Two issues were identified with the clone and merge operations:

      1) Clone and merge can be invoked by the InterSystems IRIS stop/start user. We now protect against this by verifying that the current userID corresponds to root or the InterSystems IRIS owner

      2) Clone and merge were being run as root. These operations are now being run with the current userID and groupID

      While addressing these issues, a third was found:

      3) Values for userID and groupID were being overwritten during a restart. Assignment of these variables now occurs only once, in code common to both start and restart.

      DP-404334: Quote $ZF() shell commands on Windows

      NOTE: This item may require a change to code, configuration, or operation.

      Category: Kernel
      Platforms: Windows
      Version: 2021.1.1

      Windows shell commands must be enclosed in quotes if there are quoted arguments along with a quoted command path. Those quotes will now be added by $ZF(-1), $ZF(-2), and $ZF(-100,"SHELL").

      DP-404683: Allows messages greater than 32KB to be passed through $system.Event.Signal/WaitMsg

      Category: Kernel
      Platforms: All
      Version: 2021.1.1

      The 2 argument version of $system.Event.Signal() and the corresponding $system.Event.WaitMsg() were previously limited to 16K Unicode characters or 32K 8-bit characters. This would result in a <STORE> error and caused problems with the debugger when trying to inspect objects that exceeded this.

      This limit has been removed and it is now possible to pass strings as large as InterSystems IRIS will allow (3.8M characters currently). Any values that exceed 32KB are now allocated on the Shared Memory Heap (SMH); note that passing large values this way can increase the amount of overall GMHEAP that needs to be allocated.

      Usage Notes

      Obviously, heavy use of $system.Event.Signal() / $system.Event.WaitMsg() with large message bodies could deplete the available SMH and cause <STORE> errors. InterSystems recommends that any application that expects to have any more than a few large messages "outstanding" (that is a queue depth greater than 1) should rather use another medium for storing the message bodies such as globals -- Productions do not use the 2-argument version of $system.Event.Signal() and thus won't be susceptible to any additional use of the SMH.

      However, for the debugger, although it can pass large messages, it works in a request/response way. There typically will not be more than one potentially large message pending (per session).

      DP-405614: Scan ALTPID for speed and scalability of JOBs, sessions, and threads entering instance

      Category: Kernel
      Platforms: All
      Version: 2021.1.1

      The time to enter InterSystems IRIS is improved, particularly for very large systems with many thousands of active jobs.  This applies to the JOB command as well as normal session startup, or callin threads.  This also reduces contention between multiple jobs entering at the same time so the total system-wide throughput of the JOB command or session startup is increased.

      DP-406339: Fixes Java Gateway fail caused by edge-case problem in $zobjexport(16)

      Category: Kernel
      Platforms: All
      Version: 2021.1.1

      When $zobjexport(16) had a byte array of exactly 32727 bytes, it would encounter an error that could cause the Java Gateway to fail. This change corrects the problem.

      DP-406491: Make VariableList Query re-entrant

      Category: Kernel
      Platforms: All
      Version: 2021.1.1

      The underlying code that implemented the VariableList query of %SYS.ProcessQuery was not re-entrant. If the query was interrupted by a JOBEXAM from another process the original query would not be complete. It is now safe and will give correct results if interrupted.

      A new method is added to %SYS.ProcessQuery to get the variable list directly without running a query.

      Set numvars=##class(%SYS.ProcessQuery).GetVariableList(InternalStack,.varArray)
      

      numvars is the total number of variables returned.
      varArray is the number of nodes (subscripts) returned.
      varArray(1) is the first node, varArray(2) is the second, and so on.

      Each node is:
      $ListBuild($ListBuild(varname,$Data(varname)), $ListBuild(varname,$Data(varname)), ...)

      The names are not sorted, except private variables follow public variables. Private variable names are prefixed with a tilde character (~). Because only defined variables are listed, the $Data value is always non-zero.

      DP-406788: Fix problem where two application servers held exclusive lock during ECP recovery

      Category: Kernel
      Platforms: All
      Version: 2021.1.1

      Fix missing locks to be uploaded to data server during ECP recovery. This problem started since version 2020.1 which expanded network buffer for lock requests.

      DP-406859: Fix tcpaccept() method to handle timout correctly on Windows platform

      Category: Kernel
      Platforms: Windows
      Version: 2021.1.1

      Under some circumstances, netcp tcpaccept() method was not handling the time interval correctly and was waiting longer than specified. This change corrects the problem.

      DP-407260: Stop logging messages for normal operation.

      Category: Kernel
      Platforms: All
      Version: 2021.1.1

      This change eliminated logging some messages that indicated the system was operating correctly.

      DP-408034: Allow range ABC.* to work in DataMove

      Category: Kernel
      Platforms: All
      Version: 2021.1.1

      This change allows range such as ABC.* to work in DataMove

      DP-408829: Integrity check must not read global blocks into global buffers

      Category: Kernel
      Platforms: All
      Version: 2021.1.1

      Prior to this correction, under extremely rare circumstances, integrity check run on an active system could cause a global reference or update in another process running concurrently to get unexpected results. This problem has existed since at least Caché 2011.1, though it's never been reported in the field.

      Note that a side effect of this correction is that integrity check no longer loads pointer blocks into the database cache as it checks them, whereas it generally did in the past (but almost never loaded data blocks into the buffer pool).  Therefore integrity check may do a few percent more reads, and may have somewhat less of an impact on other jobs running on the system.

      DP-412701: Update OpenSSL source codes from version 1.0.2zb to 1.0.2zd.

      Category: Kernel
      Platforms: All
      Version: 2021.1.2

      Update OpenSSL source code from version 1.0.2zb to 1.0.2zd. In addition to being used in the kernel, the OpenSSL library is used in the Apache-based private web server for any https connections, in the ODBC client for TLS-based connectivity, and in the PKI service.

      Licensing

      DP-403498: Add license DisplayName for international characters

      Category: Licensing
      Platforms: Windows
      Version: 2021.1.1

      Use DisplayName from [License] section, if it exists, in place of Customer Name for displays of license key. This will be encoded in the file as UTF-8, and then converted to InterSystems IRIS strings where necessary. The DisplayName will be used for all Portal licensing pages, and will appear in command line startup where we print "licensed for use exclusively by". For command line startup we use the original UTF8 string, so the terminal must be able to display this properly.

      genkey is modified to accept an optional /DisplayName argument (similar to /LicenseID).

      Note that DisplayName will be limited to 128 bytes (not characters). Also, even though the DisplayName is in the [License] section it is NOT protected by the checksum in the key. This is to maintain compatibility of keys with previous versions (both the InterSystems IRIS kernel and License Manager). However, you should not modify this string, as it will make InterSystems IRIS think it is a different key, even though the significant aspects of the key are the same.

      Removed MachineID from Portal License Key page as part of this change, as it has not been used in a long time.

      DP-405634: Fix handling of DisplayName in license comparison

      Category: Licensing
      Platforms: All
      Version: 2021.1.1

      Even with a properly loaded and activated license, a warning message was displayed in the License Key portal page: "The license key in MGR will not take effect until it is activated or the system is restarted." The change fixes the problem.

      Object Compiler

      DP-405405: Correct %Save when parent ID is reference to multi-property ID

      Category: Object Compiler
      Platforms: All
      Version: 2021.1.1

      A problem has been corrected when a class has a parent-child relationship and the parent class has an IDKey index on a property that is a reference to a persistent class and the referenced class has an IDKey index on two or more properties.  

      This change corrects issues with %SaveData, %ComposeOid, %DeleteData, %ExistsId, %PhysicalAddress, %LockId, and %OnDetermineClass.

      DP-406105: Prevent UNDEFINED error due to conflict with UCQ and re-entry class compile

      Category: Object Compiler
      Platforms: All
      Version: 2021.1.1

      Using the %Studio.Project:InstallFromGbl function it was possible to get an UNDEFINED error looking for qstruct("deleteextent") if the class compiler was called due to UCQ while installing a package.

      Object Library

      DP-403980: Remove IRIS.TempNodes<$job> global when process exits

      Category: Object Library
      Platforms: All
      Version: 2021.1.1

      Remove entries for globals like IRIS.TempNodes<$job> when a process exits so these do not clutter lists of globals such as in %GD.

      DP-405034: %Net.SMTP checks server identities by default

      NOTE: This item may require a change to code, configuration, or operation.

      Category: Object Library
      Platforms: All
      Version: 2021.1.1

      This change fixes a bug where the SSLCheckServerIdentity property in %Net.SMTP defaulted to false, but was documented as defaulting to true. The property now defaults to true and is in alignment with documentation. This means that, when connecting to an SSL/TLS secured web server, %Net.SMTP will check that the certificate server name matches the DNS name used to connect to the server and fail if they don't match. This is the behavior specified in RFC 2818 section 3.1.

      As a result, when connecting to an SSL/TLS secured web server, the default behavior of %Net.SMTP will now be to fail if the certificate server name does not match the DNS name used to connect to the server.

      This change is unlikely to cause compatibility issues, but it is possible that when using %Net.SMTP to send messages you might have issues connecting to an SSL/TLS enabled server. If this happens, and you understand the security trade-offs, you can set SSLCheckServerIdentity to 0 to restore the previous behavior.

      DP-405062: Reduce number of WQM workers we start until they are needed

      Category: Object Library
      Platforms: All
      Version: 2021.1.1

      Reduce the number of worker jobs we create in a WQM category so they are only started when needed rather than starting the 'MaxActiveWorkers' number immediately on the first use of a work queue within this category.

      DP-406986: Increase partition memory used by WQM daemon process to the same as WQM worker jobs

      Category: Object Library
      Platforms: All
      Version: 2021.1.1

      Increase partition memory used by WQM daemon process to the same as WQM worker jobs. Previously it was using the system default partition limit but all WQM worker/daemon jobs should be consistent in their partition memory limit.

      DP-407307: Reduce CPU use of WQM daemon process and allow it to go idle more quickly

      Category: Object Library
      Platforms: All
      Version: 2021.1.1

      The WQM daemon process which manages the worker jobs was consuming too much CPU on systems with very large process tables. This has been corrected.

      Also the WQM daemon will poll the workers every 0.1 second when the WQM is active but when inactive it will slow down to a 1 second poll rate. This transition to inactive was 2 minutes from the last time it was active. This has been changed to 1 minute from the last active time. It can also become inactive in less than 1 minute if there are no WQM groups in existence.

      DP-407332: The %SYS.Task.ResourceCleanup task should run all mirror members and not just the primary

      Category: Object Library
      Platforms: All
      Version: 2021.1.1

      The ResourceCleanup task which is run by the task manager was set to run only on mirror primary systems but there are resources that need cleaning on none-primary systems so we have updated this to run on all systems.

      DP-407848: Allow removing a class when ^oddDEF does not exist

      Category: Object Library
      Platforms: All
      Version: 2021.1.1

      Support deleting a class when internal components have got out of sync.

      DP-408482: Fix "minExclusive" and "maxExclusive" that were not correctly created from xsd

      Category: Object Library
      Platforms: All
      Version: 2021.1.1

      If a schema has exclusive maxes and mins, then %XML.Util.SchemaReader converts these to inclusive MAXVAL and MINVAL fields. However, this conversion assumed whole-number precision, which is incorrect if fractionDigits is specified. With this change, the SchemaReader checks for fractionDigits and computes maxes and mins that match that degree of precision. If fractionDigits is unspecified, it uses whole-number precision.

      DP-408594: Correct cookie sharing across subdomains in %Net.HttpRequest

      Category: Object Library
      Platforms: All
      Version: 2021.1.1

      The cookie sharing code between subdomains in %Net.HttpRequest was not compliant with RFC6265. Specifically when doing to sub.mydomain.com if a cookie is set by the server with a 'domain=mydomain.com' this cookie was not being sent to the server when a subsequent request was made to my domain.com.

      Also refreshed the list of root public domains from publicsuffix.org as the data was out of date.

      DP-409587: When calling OutputToDevice on a global stream with a specific length set 'AtEnd' property correctly

      Category: Object Library
      Platforms: All
      Version: 2021.1.1

      When using %Stream.GlobalBinary, %Stream.GlobalCharacter, %Stream.TmpCharacter, %Stream.TmpBinary and calling 'OutputToDevice' passing in a specific length to output if the length exactly matches the size of the stream we were not setting the AtEnd property to true so a loop such as:

      While 'stream.AtEnd {
        Set sc=stream.OutputToDevice(100)
      }
      

      Could end up looping forever if the stream was exactly 100 characters long.

      Object Storage

      DP-404353: Correct %OnAddToSaveSet callcount parameter callback on %Save of persistent object

      Category: Object Storage
      Platforms: All
      Version: 2021.1.1

      After a previous change the %OnAddToSaveSet 'callcount' parameter which should report the number of times this callback was called for this class was always being passed in as '1' even for cases where the callback was being called multiple times. If the user was using this parameter to decide if we should call %AddToSaveSet on the current instance this failure could result in <FRAMESTACK> errors.

      ObjectScript

      DP-402912: Fix problem where errors within ZWRITE command are not raised to caller's error trap

      NOTE: This item may require a change to code, configuration, or operation.

      Category: ObjectScript
      Platforms: All
      Version: 2021.1.1

      This change fixes a problem where errors within ZWRITE command are not raised to caller's error trap.

      Now ZWRITE throws some errors that were ignored before, but they are serious show-stopper errors that should not happen in a normal environment.

      DP-403184: Fixes cores and errors when compiler optimizes expressions

      Category: ObjectScript
      Platforms: All
      Version: 2021.1.1

      The ObjectScript compiler can optimize expressions like $SELECT(1:23) to the constant 23. But in some situations that optimization could result in incorrect object code leading to access violations or errors. This change corrects the problem.

      DP-403374: Fixes complex expression that could generate bad code (#10)

      Category: ObjectScript
      Platforms: All
      Version: 2021.1.1

      In the ObjectScript code $DATA(^global)=expr where expr is a complex expression that the compiler knows will evaluate to zero, it may generate invalid object code that will result in an access violation. This change corrects the problem.

      DP-403666: Fix legacy NodeJS to properly handle exceptions thrown in user code

      Category: ObjectScript
      Platforms: All
      Version: 2021.1.1

      This change ensures that the legacy Node.js binding will properly handle exceptions thrown by user code. Previously, exceptions that were not of the type %Exception.SystemException would result in inconsistent behavior, including a '' response, a <MAXSTRING> error, or a crash. 

      Currently the server reports errors by sending the numerical code associated with the ObjectScript error to the client as a single byte. The client client has logic to reconstruct the error string, which is then reported to the application. 

      Now, if user code throws any exception other than a SystemException, the client will report a <THROW> error, with the associated message "The application encountered an unexpected exception.". This change also ensures that the server will not return an error code greater than 255. A SystemException should not use a value this high, but if one is encountered, the server will send the error code 255 to the client, which will be interpreted as a <SYNTAX> error. 

      Note: This change only affects connections using TCP. Connections using the callin API do not report unhandled exceptions correctly. Applications using the callin interface should not directly invoke code that could raise an exception.

      DP-404003: Fix <SYSTEM> error after compiling complex expression

      Category: ObjectScript
      Platforms: All
      Version: 2021.1.1

      When a complex boolean expression containing $Select() is optimized by the routine compiler, invalid object code could result in a <SYSTEM> error. This change corrects the problem.

      DP-404209: Fixes Equals optimization that could be wrong

      Category: ObjectScript
      Platforms: All
      Version: 2021.1.1

      When the ObjectScript compiler optimizes a complex Equals comparison involving $Select() in which it knows what the result of each side will be, it could produce an incorrect result. This change corrects the problem.

      DP-404552: Fix compiler optimization of $Extract() with $Select()

      Category: ObjectScript
      Platforms: All
      Version: 2021.1.1

      If the third argument of $Extract() is a $Select() that can be optimized to a numeric constant, bad object code could be compiled, producing unpredictable results. This change fixes the problem.

      DP-405828: Fix $Data(^global) optimization

      Category: ObjectScript
      Platforms: All
      Version: 2021.1.1

      When $Data(^global) is followed by a $Select expression that the compiler can optimize to a constant, the compiler could generate invalid object code causing an error or access violation. This change corrects the problem.

      DP-406903: Fix variable=$SELECT() optimization problem

      Category: ObjectScript
      Platforms: All
      Version: 2021.1.1

      The specific syntax in a routine, but not in an Xecute,

        Set local=$Select(1:$Select(0:expression,1:expression2))
      

      or

      Set local=$Select(1:-$Select(0:expression1,1:expression3))
      

      could be compiled into incorrect object code under certain conditions. This change fixes the problem. These conditions include:

      • If the expression2 can be optimized by the compiler to a numeric constant between 0 and 255 inclusive.

      • If the expression3 can be optimized by the compiler to a numeric constant between -255 and 0 inclusive.

      • If the 0 condition for expression1 is an expression which the compiler knows will evaluate to 0.

      Security

      DP-402305: Deleting OAuth 2.0 clients now deletes the access tokens issued to those clients

      Category: Security
      Platforms: All
      Version: 2021.1.1

      Deleting an OAuth 2.0 client configuration or client description now deletes all access tokens issued to that client. Since deleting an OAuth 2.0 server configuration deletes all client descriptions on that server, deleting a server configuration now also deletes all access tokens issued by that server.

      DP-403670: Allow setting Dispatch Class for Web Application using ^SECURITY

      Category: Security
      Platforms: All
      Version: 2021.1.1

      This change modifies the ^SECURITY routine to allow users to configure the Dispatch Class for a Web Application.

      When using a Dispatch Class many of the Web Application settings are no longer relevant. Users will not be prompted for these settings when a Dispatch class is specified. This matches the behavior in the Management Portal.

      DP-404140: Support configurable Diffie Hellman key sizes

      Category: Security
      Platforms: All
      Version: 2021.1.1

      This change adds a configuration item to the server-side SSL configurations specifying the minimum size of Diffie Hellman keys.

      DP-404283: Changes to enabling %ZEN.Dialog classes

      NOTE: This item may require a change to code, configuration, or operation.

      Category: Security
      Platforms: All
      Version: 2021.1.1

      In this release, %ZEN.Dialog.* classes cannot be run in web applications unless the web application is enabled for analytics, the namespace is enabled for interoperability productions, or it is explicitly enabled for the web application. To explicitly enable %ZEN.Dialog.* classes, enter the following:

      Set ^SYS("Security","CSP","AllowPrefix",application-name,"%ZEN.Dialog.")=1

      Also, with this change, any web application that is enabled for analytics or interoperability will have %ZEN.Dialog.* classes enabled by default.

      DP-404341: OAuth2 Introspection response should use 'token_type' claim, not 'token_type_hint'

      Category: Security
      Platforms: All
      Version: 2021.1.1

      a previous change modified the OAuth2 server Introspection endpoint to accept the standard "token_type_hint" parameter instead of the "token_type" parameter, but it also incorrectly modified the response to include a claim named "token_type_hint" This should be "token_type".

      See [RFC 7662|https://tools.ietf.org/html/rfc7662], sections "2.1 - Introspection Request" and "2.2 - Introspection Response".

      DP-404857: Use correct defaults for OAuth2 client JWT algorithms

      Category: Security
      Platforms: All
      Version: 2021.1.1

      This change corrects the default values for the OAuth2 client IDToken and Userinfo algorithms.

      Previously the IDToken, Userinfo and Access Token algorithms would default to using the corresponding value in the Server's JWT settings page, if the client value was "". Note that these values cannot be set to "" in the Management Portal, but they can be configured manually, or via dynamic registration from a third-party OAuth2 client. A previous fix changed this logic to instead default to the server values if the client value was "none".

      Neither behavior is correct. The IDToken and Userinfo algorithm settings are defined in the Open ID Connect Dynamic Registration specification https://openid.net/specs/openid-connect-registration-1_0.html.

      See the definition for:

      userinfo_signed_response_alg
      userinfo_encrypted_response_alg
      userinfo_encrypted_response_enc
      id_token_encrypted_response_alg
      id_token_encrypted_response_enc
      

      The specification defines what the value of these fields should be if omitted by the client ("none" in most cases.) The specification does not allow for the server to substitute another value arbitrarily.

      This change modifies the logic to not apply the Server JWT settings to the IDToken or Userinfo algorithms. They will still apply to the Access Token algorithms. These settings are not part of the OpenID Connect standard.

      Note that the Request algorithm settings (from the client JWT settings page) are defined in the OpenID connect spec, but they were never overridden by the server settings, so the logic relating to them is unchanged.

      DP-405517: Preserve CSPCHD token in OAuth2 redirects

      Category: Security
      Platforms: All
      Version: 2021.1.1

      This change corrects a problem that would prevent OAuth2 applications using Authorization Code or Implicit authorization flow from interfacing correctly with CSP applications when cookies are disabled. When cookies are disabled the CSP session token is included in the CSPCHD URL parameter. Previously, this would be removed when redirecting back to the application after successful authorization, which resulted in the session being lost. This has been corrected. Now OAuth2.Response uses the %response.UseExactRedirect flag to prevent any translation of the specified redirect URL.

      In order for the redirect to work, the application should call ..Link() on the redirect URL when calling GetAuthorizationCodeEndpoint() or GetImplicitEndpoint():

       set url=##class(%SYS.OAuth2.Authorization).GetAuthorizationCodeEndpoint("MyApp", scope, ..Link(myRedirectURI),,,.sc) 
      

      This will ensure that the CSPCHD token is included in the URI. This is only necessary if this is a CSP/ZEN application and cookies are disabled.

      DP-406140: Ensure CSV Export button appears when switched on in Widget Settings

      Category: Security
      Platforms: All
      Version: 2021.1.1

      When you go into a dashboard, and go to Widget Settings for a pivot table widget, there are switches for Excel Export and CSV Export. When both switches are on, the export button appears with Excel, CSV, and CSV with Headers options. With just the Excel switch on, the export button appears and exports to Excel as before. However, when just the CSV switch is on, no button appears. This change corrects the problem.

      DP-409573: Do not use CSP sessions for OAuth2 Client pages

      Category: Security
      Platforms: All
      Version: 2021.1.1

      This change corrects the OAuth2.Response and OAuth2.JWTServer CSP pages to not use persistent CSP sessions. These pages are served via the /csp/sys/oauth2/ application on OAuth2 Client systems.

      DP-411575: Update Apache httpd to 2.4.52

      Category: Security
      Platforms: All
      Version: 2021.1.1

      This change updates Apache httpd used as private web server to version 2.4.52.

      DP-411748: Fix 32-bit ODBC driver crashes on Windows Server 2022

      Category: Security
      Platforms: Windows
      Version: 2021.1.1

      This change fixes a problem in which irisconnect would crash if the user attempted to test an SSL connection without defining the SSL/TLS configuration in the registry or SSLdef.ini. Now irisconnect gracefully reports an error if the configuration is not found.

      Sharding

      DP-405684: Fix %SYSTEM.Sharding.GetOption to correctly recognize MasterNamespace argument

      Category: Sharding
      Platforms: All
      Version: 2021.1.1

      This change fixes a problem in which the $SYSTEM.Sharding method GetOption(), if executed in a namespace other than the one specified in its MasterNamespace argument, failed to set $NAMESPACE to the specified namespace, causing it to return incorrect results.

      DP-406362: Generate correct shard-local global names for sharded classes when USEEXTENTSET=0

      Category: Sharding
      Platforms: All
      Version: 2021.1.1

      This change fixes a problem in which some sharded classes had shard-local global names which did not correctly map to the shard-local databases. This resulted in data being incorrectly stored in the master database rather than in shard-local databases, causing queries to return incorrect results (each row was returned as many times as the shard count).

      DP-406794: Fix method used for Management Portal sharded table data distribution query

      Category: Sharding
      Platforms: All
      Version: 2021.1.1

      This change fixes the %SQL.Manager.Catalog method ShardTableDataDistributionExecute, to cause it to return correct per-shard row counts for sharded tables.

      DP-407540: Allow specifying master namespace in %SYSTEM.Cluster Attach methods

      Category: Sharding
      Platforms: All
      Version: 2021.1.1

      This change fixes a problem in which specifying the master namespace, rather than the cluster namespace, in the cluster URL passed to a %SYSTEM.Cluster AttachAsXXXNode method resulted in the error "ERROR #9600: $SYSTEM.Cluster methods cannot be used on cluster that has been modified using $SYSTEM.Sharding API". With this change, when specifying a cluster URL for node 1 of a sharded cluster, it is permitted to specify the master namespace (default "IRISDM") as an alternative to specifying the cluster namespace (default "IRISCLUSTER").

      This fixes an issue found using the Management Portal. However, note that while that issue relates to attaching drasync node to a cluster using Management Portal, the problem, as well as this fix, applies to direct use of the %SYSTEM.Cluster API, as well as to indirect use via Management Portal, and applies to all node types, not just mirrored, drasync nodes.

      SQL

      DP-402424: Fixes problem where the results of TuneTable execution on Management Portal aren't displayed correctly

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      Depending on the number of records, Selectivity and Extentsize of running TuneTable on Management Portal did not appear correctly. This change corrects the problem.

      DP-402500: Fix incorrect purge of UCQ for embedded SQL

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      This change fixes a problem where any UCQ (universal cached query) for embedded SQL in any namespace was purged unexpectedly when the system task 'Update SQL query statistics' was executed the first time in a day. These are now only be purged if the caller was removed and the caller is no longer in the routine buffer cache.

      DP-403030: Fix problem where last line of statement could be incorrectly read as a comment

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      This change fixes a problem executing SQL statements with comments with "--" prefix

      If a query statement run in a client contains comments such as in this example:

      ---GROUP BY Patient HAVING COUNT(ID) BETWEEN 4 and 6

      or any other text preceded by the "--" characters, the query won't return any results and the client never gets a response from the server.

      DP-403832: Fixes error during UCQ execution might be masked by post UCQ <UNDEFINED>

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      In UCQ ensure we do not mask an error running query itself with an UNDEFINED error because the variables we are expecting to copy into the users SQL values are not defined.

      DP-405479: Support for cross-site unique identifiers in FM2Class

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      This change is version 2.41 of FM2Class.

      There is a new setting, which you can define directly in the global for now, to define the datatype class for the IEN:

      set ^%SYS("sql","fm2class","IENType")=“XX.AAA"
      

      This class name can be anything you want.  If this class name is not defined, the default %Library.String is used. For example, you could choose a name something like PackageName.IENType.  Use whatever package name you want, and just make sure it does not collide with any existing classes. If the class does not exist, FM2Class will create it for you (which is what should happen the first time you run FM2Class with this version of the mapper). So there is nothing to do other than define this global to the name of the class you want to use.   Then run FM2Class like you normally would.   Here is an example of the data returned (in Display or ODBC mode, Logical mode returns the on-disk IEN value).

        
      [SQL]SQL:Hosp1>>select ien, SPOUSES_EMPLOYERS_STATE from Hosp1.patient_2 where SPOUSES_EMPLOYERS_STATE is not null
      13. select ien, SPOUSES_EMPLOYERS_STATE from Hosp1.patient_2 where SPOUSES_EMPLOYERS_STATE is not null
       
      IEN SPOUSES_EMPLOYERS_STATE
      20 36
      210 36
      312 26
      357 11
      380 11
      426 36
      428 36
      743 24
       
      8 Rows(s) Affected
      statement prepare time(s)/globals/cmds/disk: 0.0500s/35,128/173,001/2ms
                execute time(s)/globals/cmds/disk: 0.0008s/1,787/11,655/0ms
                                cached query class: %sqlcq.Hosp1.cls17
      ---------------------------------------------------------------------------
      [SQL]SQL:Hosp1>>set selectmode odbc
       
      selectmode = odbc
      [SQL]SQL:Hosp1>>select ien, SPOUSES_EMPLOYERS_STATE from Hosp1.patient_2 where SPOUSES_EMPLOYERS_STATE is not null
      14. select ien, SPOUSES_EMPLOYERS_STATE from Hosp1.patient_2 where SPOUSES_EMPLOYERS_STATE is not null
       
      IEN SPOUSES_EMPLOYERS_STATE
      20|664 36|664
      210|664 36|664
      312|664 26|664
      357|664 11|664
      380|664 11|664
      426|664 36|664
      428|664 36|664
      743|664 24|664
       
      8 Rows(s) Affected
      statement prepare time(s)/globals/cmds/disk: 0.0001s/4/137/0ms
                execute time(s)/globals/cmds/disk: 0.0014s/1,787/14,342/0ms
                                cached query class: %sqlcq.Hosp1.cls17
      

      DP-405703: Fix fastInsert to support DSTIME

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      A problem has been corrected where a class defined to use DSTIME was not properly setting the ^OBJ.DSTIME global when an INSERT was performed over xDBC and the fastInsert feature was used.

      DP-405825: Correct lock issues on cached queries and statement index

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      This change fixes a rare issue with the various APIs in %SYS.SQLSRV for Statement Index IUD and in Prepare of the dynamic statement cached query lookup/creation.

      When using the WQM and the Sharding mechanism, there are times when an <EXTERNAL INTERRUPT> error is sent to shards to stop processing the query (typically because we have received all of the rows required for the table already). Depending on the query, this <EXTERNAL INTERRUPT> can happen multiple times. The <EXTERNAL INTERRUPT> error caused problems when the interrupt occurred after the LOCK, but before the set of gotlock.  When gotlock not TRUE, the global never got unlocked in the API.

      This change ensures the global is unlocked in the no-error case and in the error case.

      DP-405835: Disable external interrupt errors around sharding query construction logic

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      In the code run on a shard system to build the shard local query, this change disables getting EXTERNAL INTERRUPT errors so we can ensure the query is always built.

      DP-405944: Fix collation for %PARALLEL on a numeric column that could cause a rows to be skipped

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      When splitting a global into chunks to process in parallel we detect if the last node is a numeric value we added one to it to avoid $double rounding errors. This can cause problems with numeric values because although 1.1]]0.1 is true "1.1"]]"0.1" is false. The reason being that "0.5" is not a canonical number due to the leading '0' character where as "1.1" is a canonical number so for example:

      set a("0.1")="string zero point one"
      set a(0.1)="numeric zero point one"
      set a("1.1")="string one point one"
      
      zw a
      a(.1)="numeric zero point one"
      a(1.1)="string one point one"
      a("0.1")="string zero point one"
      

      The result of this is if the last range in a parallel query was a string value with a leading '0' which can be converted into a number between 0 and 1 e.g. "0.1" when we added 1 to this to ensure we do not get $double rounding problems we created a string value "1.1" which collates before the end of the global i.e. "0.1". This means rows from a query are not processed when the query is run in parallel. This change fixes the problem.

      DP-406231: Apply conditions in shfls() for override plan

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      Fixed a rare bug for a query in which GROUP BY <g> is used, no aggregates are used, there are some ungrouped fields <sf> that appear in the SELECT-list or the HAVING clause, there are WHERE conditions on the <sf> fields (and possibly also on the <g> fields), and there is a map that has the <g> fields as leading subscripts, and has all the <sf> fields as later subscripts.  Prior to this change, WHERE conditions on the <sf> fields were not applied, possibly resulting in incorrect extra output rows.

      Note that while the SQL Standard does not allow non-grouped fields to be used (unaggregated) in the SELECT or HAVING clause, this bug is possible even for SQL Standard queries, for example, if the <g> fields functionally determine all the <sf> fields, that is. if the <g> fields constitute a UNIQUE key.  In that case the SQL Standard query:

      SELECT <g>,<sf> FROM t WHERE cond(<sf>) GROUP BY <g>,<sf>

      would be internally converted to the query:

      SELECT <g>,<sf> FROM t WHERE cond(<sf>) GROUP BY <g>

      and the bug could occur.

      DP-406409: Correct handling of <EXTERNAL INTERRUPT> errors in SQL runtime logic

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      A problem has been corrected where an SQL statement that was interrupted by a "Cancel" via xDBC, SMP, or via $SYSTEM.Util.SendInterrupt(PID) did not always properly release locks and/or end transactions.

      Two new SQLCODE values have been introduced by this change:
      SQLCODE=-457, SQL statement execution interrupted
      SQLCODE=-458, Server request interrupted

      Prior to this change, in the xDBC Server, the same SQLCODE was used for an <ALARM> (timeout), -450, as for an <EXTERNAL INTERRUPT> (A Cancel). Now -450 is used for Timeout, and -458 for Cancel.

      This change also corrects a problem where the server process would not always terminate if the server process was Terminated with a <RESJOB> error.

      DP-406534: Correct fastSelect <UNDEFINED> error in Prepare when all fields come from index subscripts

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      The problem is exposed as an <UNDEFINED>output+66^%qaqcct error during Prepare of a SELECT statement via xDBC.

      The problem was fastSelect was used for a case where it should not have been.  The query plan simply loops on index subscripts and outputs the row, there is no going back to the master map and no map data field retrieval. This change corrects the problem.

      DP-406629: Fix 'opg' set-looping code-generation for IN

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      Fixed a bug when GROUP BY and aggregates are used, when the plan loops over subscripts with the GROUP BY fields, and the plan also loops on a subsequent subscript that has an IN condition (or an equivalent OR condition).  Such a query would incorrectly return 0 rows.

      DP-407157: Analysis of query grouping accounts for shard key collation

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      Queries containing GROUP BY on sharded tables with non-integer shard keys could perform redundant re-grouping of results from each shard. This change corrects that behavior.

      DP-407232: Correct hash for %XSQL.DSI.TempTable and %XSQL.DSL.Cursor CQ implementations

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      A problem has been corrected where the hash used for a %XSQL.DSI.TempTable or %XSQL.DSI.Cursor cached query implementation was not defined with the same hash as it was looked up upon Prepare. For example, suppose a call is made to:

      set oref=
      ##class(%XSQL.DSI.TempTable).%Prepare("CREATE PRIVATE TEMPORARY TABLE...")
      
      The first call created a cached query for the implementation of the private temporary table. A second call to %Prepare with the same table definition would fail to find the cached implementation because of a hash mismatch between when the PTT was defined and when it was looked up.

      This type of private temporary table is used for statement-level triggers and caused a new cached implementation of the PTT to be generated for every insert/update/delete executed on the table (if there is a statement-level trigger defined for the event). This led to degraded performance and bloat of the size of the statement caches.

      DP-407319: Prevent <UNDEFINED> error by not applying special distinct aggregate processing

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      This change prevents an <UNDEFINED> error caused by applying special distinct aggregate processing when group matches the shard key ("gruplup").

      DP-407368: Correct endian ordering issue checking routine header signature against stack information

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      On big endian systems it was possible we would fail to build a universal cached query correctly as we thought another process had already modified the UCQ. This would be reported as errors such as:

      ERROR #5821: Cannot instantiate query: 'SQLCODE = -400'
      

      We have corrected the check and also added %msg to this error message so make debugging similar issues in future simpler.

      DP-407384: Fix case where query optimizer is incorrectly using the normal selectivity

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      This change corrects the behavior of prmIncOutlier and checks the parameter code includes outlier behavior.

      DP-407453: Fix a caching problem for a DISTINCT query with a SELECT DISTINCT view in FROM

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      This change fixes a caching problem that causes some UNION ALL queries to run slowly. This problem impacted Runtime Plan Choice (RTPC) query optimization.

      DP-407554: Handle DISTINCT BY() in sharding query correctly

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      In some cases when the sharding key and gruplup matched, the DISTINCT BY clause would not be handled correctly and extra rows could be returned. This change corrects the problem.

      DP-407796: Correct <PARAMETER> error with some embedded SQL UCQ executions

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      A problem has been corrected where the execution of an embedded SQL statement that included a host variable that is a property object reference. A problem with the code generation of the Universal Cached Query was putting too many arguments in the call to the %New() method of the UCQ.

      DP-408028: Escalate roles to post remote event

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      Posting events from shard worker nodes to the system that initiated the query requires the API escalate privileges to avoid getting PROTECT errors such as:

      <PROTECT>postRemoteEvent+31^%SYS.WorkQueueMgr 
      

      DP-408257: Fix race condition in SQL parallel union processing

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      When running SQL 'union %parallel' or 'union all %parallel' it was possible in rare cases to get an error that 'Worker job with IPQ exited unexpectedly' due to a race condition in the parallel logic. This is corrected now.

      DP-408385: Correct procedure privilege check for schema level privileges on 404 check

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      A problem has been corrected where a call to an SQL procedure from xDBC might not work correctly if the user received the EXECUTE privilege on the procedure through a schema-level privilege.

      DP-408513: Cleanup invalid cached query classes

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      Make code which builds cached query classes more resilient to existing invalid classes.

      DP-408527: Collect light weight SQL stats on read-write mirror members

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      This change collects light weight SQL stats on read-write mirror members.

      DP-409182: Kill iDj fast i%var variables in SQL Close

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      When SQL uses fast i%var variables in cached query definitions, there were property values used by the SQL statement that were not killed in SQL CLOSE.  Most of the time this is okay, but a customer reported an error with their application because they had some {iDj} variables defined in SQL Storage that held an oref, and the expectation was this oref would be destructed when the SQL statement closed.  Any {iDj} map variables that are code generated using i%vars in the cached query are now killed during close.

      DP-409582: Correct %XSQL.DSI.Cursor implementation

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      The %XSQL.DSI.Cursor implementation was broken by a previous change, this change fixes this so queries generated by %XSQL.DSI.Cursor now act as normal cached queries.

      DP-409838: FM2Class v2.42 - Improve performance of WipeClass

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      This is version 2.42 of FM2Class.

      This change improved the performance of FM2Class for the WipeClass function.  This is the code called to clean up the class definition when re-mapping a class and using the RetainClass=1 option.

      DP-409848: Fix Logic with Phrases in iFind

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      This change fixes previously erroneous logic related to iFind positional search (and as a result, iFind co-occurrence search) which caused the results of all positional search terms OR'd together in a node, except for the last term, to be ignored. For example, in a table with the following records in its MyText field (which has any non-minimal iFind index on it):

      ||MyText||
      |The quick brown fox jumped over the lazy dog|
      |Colorless green ideas sleep furiously|
      

      The following query:

      SELECT MyText FROM MyTable WHERE %ID %FIND search_index(MyTextIdx, '"lazy dog" OR "green ideas"')
      

      would only return the second row, and would not include results that contained the "lazy dog" positional search term. Following this change, all positional terms in an OR node are accounted for. This change also makes a minor update to prevent unnecessary checks of positional search strings that only contain the first word in a positional search term.

      DP-411896: Fix query reconstruction and condition evaluation for queries with FOR SOME %ELEMENT

      Category: SQL
      Platforms: All
      Version: 2021.1.2

      Before this change, a query compilation issue could occur if a query included the WHERE FOR SOME %ELEMENT (%Key=? AND %VALUE =?) clause.

      DP-412145: Purge of UCQ queries was not taking out a lock

      Category: SQL
      Platforms: All
      Version: 2021.1.1

      There was a bug in the logic that scans for universal cached queries that no longer have a 'parent' routine and that can be thus purged. This bug resulted in purging the query without taking out a lock on the query (thus enabling another process from building a query with the same name at the same time, resulting in an inconsistent state of the universal cached queries). This change corrects the problem.

      SQL Dialects

      DP-406019: Fix TQSL error handling leading and trailing {...} braces

      Category: SQL Dialects
      Platforms: All
      Version: 2021.1.1

      When preparing the SQL text, this change removes any leading/trailing {...} braces and white space. The TSQL parser does not handle the braces.

      DP-406039: Implement bit operator &, |, and ^ for SQL context in TSQL

      Category: SQL Dialects
      Platforms: All
      Version: 2021.1.1

      A problem has been corrected where the TSQL bit operators &, |, and ^ were not working properly in a TSQL SQL statement.  They were working in procedures context, but not SQL context.

      DP-406274: Correct argument in procedure that causes Error #5001 Invalid Argument name in TSQL

      Category: SQL Dialects
      Platforms: All
      Version: 2021.1.1

      A problem has been corrected in InterSystems IRIS TSQL support when calling a procedure with positioned parameter and omitting one of the parameter values.  For example:

      exec my_proc 114209,'a',,'R1'

      System

      DP-405455: Restore open flags for Windows async I/O

      Category: System
      Platforms: Windows
      Version: 2021.1.1

      This change reverses the negative performance impact of a previous change on async I/O on certain Windows systems. It appears that the effects of that change are noticeable on spinning drives although it may be related to certain versions of Windows. Aynch I/O is used to write incremental backup output files, databases and the wij, by mirroring and by the prefetch code.

      DP-405710: Don't consider the journal dmn waiting for a mirror buffers as hung

      Category: System
      Platforms: All
      Version: 2021.1.1

      This change avoids a case where the backup mirror member could force down the primary if the primary is stuck waiting on the backup while sending journal data.

      DP-406111: Convert ^CacheMsg to ^IRIS.Msg during Caché to InterSystems IRIS conversion

      Category: System
      Platforms: All
      Version: 2021.1.1

      The correct namespace was not being set before the conversion of the global. The code now sets the implied namespace to the database being converted, and then set it back to %SYS after done.

      DP-406818: Correct reading of terminal script files with Japanese characters

      Category: System
      Platforms: All
      Version: 2021.1.1

      Terminal script files that contained Japanese characters, or any Unicode characters encoded with UTF8 or otherwise, were not read correctly. The encoded characters are now presented correctly, as bytes, as input to InterSystems IRIS where they can be processed by, for example, $ZCVT(input,"I","UTF8").

      DP-406855: Remove unnecessary test from new password hash algorithm

      Category: System
      Platforms: All
      Version: 2021.1.1

      An unnecessary test in the code which rehashes the password could cause LDAP users to be unable to login after an upgrade to 2021.1. This change removed the test.

      DP-407254: Update interaction between delegated and password authentication

      NOTE: This item may require a change to code, configuration, or operation.

      Category: System
      Platforms: All
      Version: 2021.1.1

      This fixes an issue with authentication ordering when delegated and password authentication are enabled. If your user authentication includes both delegated authentication and password authentication, you can choose either to call or not call ZAUTHENTICATE for password users. Typically, ZAUTHENTICATE is only used for delegated users and not for password users.

      But if you want your ZAUTHENTICATE routine to also be called for password users, you should check the <b>Always try Delegated Authentication</b> in the <b>System Administration > Security > System Security > Authentication/Web Sessions Options</b> page in the Management Portal or by using the ^SECURITY utility (System Parameter Setup, Edit authentication options).

      The default for <b>Always try Delegated Authentication</b> is No and ZAUTHENTICATE is not called for password users.

      DP-407609: Correct DataMove issues

      Category: System
      Platforms: All
      Version: 2021.1.1

      This change fixes the following issues:

      1. Setting the MB per minute rate to a very low value (say 1mb) would allow the DataMove to run with no limit set. This was due to the value being rounded to 0, where 0=unlimited.

      2. Owner and group on the datamoveworkdb IRIS.DAT was not being set. This change sets to the same value of the MGR database. Previously this could cause a PROTECT error.

      3. If data being moved contained a "|" in the subscript, a <SYNTAX> error would occur during the activate phase. This was due to a line of code using $p(node,"|",3) rather than $p(node,"|",3,*) which truncated the subscript after the "|".

      4. If the system was forced down or crashed while a DataMove was running, the new DataMove mappings would be lost when the DataMove was later activated after the system restarted. This change preserves the mappings on a restart.

      DP-408045: Better error message for DataMove unexpected error

      Category: System
      Platforms: All
      Version: 2021.1.1

      This change added more detail to an error which reports unexpected errors.

      DP-408050: Fix undefined error when specifying maxmbpermin in DataMove

      Category: System
      Platforms: All
      Version: 2021.1.1

      This change fixes an undefined error when specifying the MaxMBPerMin property when calling the DataMove.API:Create() method.

      DP-408426: Eliminate an unnecessary error about journal switch

      Category: System
      Platforms: All
      Version: 2021.1.1

      It's unnecessary for ^JRNSWTCH or %SYS.Journal.System:RollToNextFile() to fail when journal switch is in progress.

      DP-408580: Allow DataMove to work with globals with characters greater than $c(122) and less than or equal to $c(255)

      Category: System
      Platforms: All
      Version: 2021.1.1

      This change updated the $$globnext^NSPMAP function to support valid characters in global names up to $c(255). The DataMove.Data:Generate() method now allows for global name to start with characters up to $c(255)

      DP-408674: Fix DataMove range error on 8-bit system

      Category: System
      Platforms: All
      Version: 2021.1.1

      ENU8 and ENUW collations differ for the list of valid characters for global names. This change updated the code to use $zname(char,3) to get the list of valid characters in the loaded collation, and to use this list to generate the next valid global name.

      DP-408747: Fix HealthShare Security Domain Functionality

      Category: System
      Platforms: All
      Version: 2021.1.1

      This change is to handle the required HealthShare Security Domain Functionality.

      DP-408751: Remove DataMove error tests which are not errors

      Category: System
      Platforms: All
      Version: 2021.1.1

      DataMove tries to set some O/S permissions on the work database. If it can't (possibly because it is running with lower permissions), it should log a message and continue running successfully. It wasn't clearing the error status after logging the message so the DataMove would stop. It now clears the error status and continue without stopping.

      DP-408869: Fix %Library.GlobalEdit:GetGlobalSizeBySubscript() and KillRange() for Begin ranges like X("A")*NEXT:X("C")

      Category: System
      Platforms: All
      Version: 2021.1.1

      Ranges similar to X("A")*NEXT:X("C") were sometimes including data under the ^X("A") node. What it should do is start looking at data after all the ^A("A") nodes, for example, ^A("B") and later. With this change it performs a $query() and gets the next subscript at this level (for example ^A("B"), and changes the start range to this. This updated range is then used to calculate the size. DataMove uses this method, and the end result was that it could see MBToCopy values higher than what was actually copied. This also would cause the estimated time to finish to be longer than what the copy actually took.

      For example:

      %SYS>F i=1:1:1200 s ^A("A",i)=$j(i,30)
      s x=##Class(%GlobalEdit).GetGlobalSizeBySubscript($zu(12),"A(""A"""_$c(1)_"*NEXT)","A(""C"")",.s)
      

      Before the change, the behavior would be:

      %SYS>zw s
      s=.06
      s("Blocks",1)=1
      s("Blocks",2)=6
      s("Blocks","BigStrings")=0
      s("Blocks","Total")=7
      s("MB",1)="0.01"
      s("MB",2)="0.05"
      s("MB","BigStrings")="0.00"
      s("MB","Total")=.06
      

      After the change, the behavior would be:

      %SYS>zw s
      s=0
      s("Blocks",1)=0
      s("Blocks",2)=0
      s("Blocks",3)=0
      s("Blocks","BigStrings")=0
      s("Blocks","Total")=0
      s("MB",1)="0.00"
      s("MB",2)="0.00"
      s("MB",3)="0.00"
      s("MB","BigStrings")="0.00"
      s("MB","Total")=0
      

      And with the following:

      %SYS>F i=1:1:1200 s ^A("A",i)=$j(i,30)
      s x=##Class(%GlobalEdit).KillRange($zu(12),"A(""A"""_$c(1)_"*NEXT)","A(""C"")")
      

      Before the change, all nodes under ^A("A") would be deleted. After the change, all the nodes would continue to exist.

      DP-408945: Increase timeout for starting DataMove processes

      Category: System
      Platforms: All
      Version: 2021.1.1

      On busy systems, the job command can actually fail within the timeout period. When the job command fails, the entire DataMove is halted.

      This change updated the code to change the timeout to 60 seconds, and to log retries if the job fails. (up to five retries before we fail)

      The change also updated the code to calculate the JRNMB field to properly calculate the amount of journal left to apply for each range when journal file compression is on.

      DP-408983: Fix DataMove undefined when changing rate

      Category: System
      Platforms: All
      Version: 2021.1.1

      DataMove could get an undefined error if the max rate is changed after the copy is done, but before changes are activated. this change eliminates the undefined error in this case.

      DP-409045: Update DataMove metrics more often

      Category: System
      Platforms: All
      Version: 2021.1.1

      DataMove metrics should be updated every 5 seconds or so. There was a problem where creating new DataMove processes pre-empted the update of the metrics fields causing them to skip updating the fields. Normally this is not a problem, but when there are a lot of moves (hundreds) where the amount of data being moved is low (a few mb) new processes were being created almost continuously, causing the updates to be skipped for potentially long periods of time. This change updated the algorithm so that the update of the metrics is done before determining to start another copy process.

      DP-409094: Update mappings for DataMove on Japanese systems

      Category: System
      Platforms: All
      Version: 2021.1.1

      Japanese locales have no identifier characters in the range $c(128)-$c(255). This change updated the global mapping for DataMove to provide an endpoint character of $c(255) when calling $$globnext^NSPMAP("%z"). This now returns "%z"_$c(255) as the ending range.

      DP-409618: Check DataMove stop flag more often

      Category: System
      Platforms: All
      Version: 2021.1.1

      To improve responsiveness this change checks the DataMove stop flag more frequently.

      DP-409970: Fixed a bug in DataMove for Japanese systems

      Category: System
      Platforms: All
      Version: 2021.1.1

      This change enables DataMove to work with Japanese systems and other systems that have data containing characters above $CHAR(128).

      DP-410409: Recalculate DataMove blocks copied on a crash

      Category: System
      Platforms: All
      Version: 2021.1.1

      This change improves the reporting of the number of blocks copied if DataMove is interrupted.

      DP-410429: Corrects a DataMove issue in the Japanese locale

      Category: System
      Platforms: All
      Version: 2021.1.1

      This change corrects an error in DataMove that could occur when working with data in the Japanese locale

      DP-410605: Fix User security record being corrupted

      Category: System
      Platforms: All
      Version: 2021.1.1

      When a process calls $SYSTEM.Security.Login() to log in as another user, if an error occurs in the span of a couple of lines of the method, the original user record can be overwritten by the new user record. This would cause the original user to no longer be able to log in.

      This was seen when a stored procedure which as one of its tasks uses $SYSTEM.Security.Login() to change itself to the _SYSTEM user to do some "system stuff". It just so happened that the connection had a timeout set, and an <ALARM> error was generated at just the wrong spot in the code when the user credentials were getting changed. Normally an error could never happen in this section of the code during normal operation, but when an alarm is set by the server code, an asynchronous error could occur causing the failure.

      This change prevents the old user record from being overwritten by the new user record in the case of an error.

      Note that the window here is very small and unlikely to occur.

      DP-410986: Fix memory leak caused by LDAP searching with pages

      Category: System
      Platforms: All
      Version: 2021.1.1

      Calling ##Class(%SYS.LDAP).GetNextPages() could cause a memory leak when searching. This problem could be seen using the LDAP interoperability Business Operations. This change corrects the problem.

      Terminal

      DP-407082: Increase terminal window size to make all output visible

      Category: Terminal
      Platforms: All
      Version: 2021.1.1

      Output to the top line or right-most column of the terminal window could be overlaid by the menu bar or scroll bar. This change makes the window slightly larger so all the output is visible.

      Tools

      DP-403494: Correct JavaExe() result when JAVA_HOME contains spaces

      Category: Tools
      Platforms: Windows
      Version: 2021.1.1

      On Windows, if the JAVA_HOME environment variable is a path name with spaces, $System.Util.JavaExe() could return an invalid path. This change corrects the problem.

      DP-405779: SystemPerformance - new section "irisstat -R" containing a single snapshot of routine buffers

      Category: Tools
      Platforms: All
      Version: 2021.1.1

      SystemPerformance reports on all platforms will now include a new section named "irisstat -R".  This section contains a single sample of the irisstat command using the -R1 flag, which dumps routine buffers.

      DP-407065: GetInternalStackLevel of %SYS.ProcessQuery returns NEW levels

      Category: Tools
      Platforms: All
      Version: 2021.1.1

      A second by-reference argument is added to the GetInternalStackLevel method of %SYS.ProcessQuery: GetInternalStackLevel(stack, newlevels)

      When there are NEW commands in a routine, each NEW command creates a new internal stack level without increasing $STACK. GetInternalStackLevel returns the highest internal stack level for the given $STACK. If there are other internal levels created by NEW commands within the given $STACK, they are returned in the newlevels argument as a $LIST of values. There may be different variables defined at each of those levels and the same variable may have different values at each level.

      DP-407279: Handle recursion of $Compile() that could cause a segfault

      Category: Tools
      Platforms: All
      Version: 2021.1.1

      There could be an address exception if a Source Control class has a method that causes recursion into the class loader/compiler. This change corrects the problem.

      Web Gateway

      DP-402068: Revamp management of thread life cycles

      Category: Web Gateway
      Platforms: All
      Version: 2021.1.1

      Fix random crashes that would sometimes occur when connections to InterSystems IRIS were closed down or when web server worker processes were closed down.

      DP-403826: Fix memory leak when Web Gateway fails to log in to CSP server

      Category: Web Gateway
      Platforms: All
      Version: 2021.1.1

      This change fixes a memory leak that occurs when the Web Gateway fails to log in to the CSP server, causing high memory usage if many login failures occur.

      DP-404812: Do not delete httpd.pid if ##class(Config.Startup).StopWebServer() can't stop the httpd process

      Category: Web Gateway
      Platforms: All
      Version: 2021.1.1

      Fixes the handling of a case where Config.Startup:StopWebServer() would delete the httpd.pid file but fail to stop the Private Web Server process. This could occur if, for example, the instance user has the %All role, but the OS-level user who logged in does not have permission to stop the process. The process would then continue running until killed manually at the OS level, since the instance needs the httpd.pid file to find and kill the process during shutdown. Now, if the process fails to terminate, the httpd.pid file is left in place so that InterSystems IRIS can still find and clean up the old process later.

      DP-405020: Prevent configuring invalid CSP server names and application paths

      Category: Web Gateway
      Platforms: All
      Version: 2021.1.1

      In the Server Access and Application Access configuration pages, it was possible to add a CSP server or application name containing special words or characters that would corrupt the Web Gateway configuration. For example, the name "system" is reserved by the Web Gateway, and creating a CSP server named "system" led to corruption of the configuration. The Web Gateway now validates CSP server and application names and rejects those containing reserved words or characters.

      Work Queue Manager

      DP-409791: In WQM detect workers that do not run any commands as inactive

      Category: Work Queue Manager
      Platforms: All
      Version: 2021.1.1

      The work queue manager keeps track of if worker jobs are active or not so it can detect deadlock situations and automatically start additional workers. This logic did not work in the case of a worker jobs that has done callout and this callout logic was sitting idle. This change corrects the problem.

      For Additional Help

      If you need assistance with evaluating how upgrading to this maintenance release will affect your applications, systems, or related plans, please contact the InterSystems Worldwide Support Center:

      • Phone:  +1.617.621.0700
      • Fax:  +1.617.734.9391
      • Email:  support@intersystems.com

      Current release notes (and complete product documentation) can be found online at https://docs.intersystems.com.

      FeedbackOpens in a new tab