Skip to main content

InterSystems IRIS® Change Notes (2022.2)

This document is meant to help you assess the impact of moving your code to the InterSystems IRIS 2022.2 continuous delivery (CD) release. It lists the incompatibilities since 2022.1. These incompatibilities may require changes to code, configuration, or operation.

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.

Cloud

DP-413048: Remove Linux capability checking from iris containers

Category: Cloud
Platforms: Linux
Version: 2022.2.0

This change removes the no-longer-necessary Linux capability checking from iris containers, to avoid incompatibilities with new versions of Docker.

This doesn't immediately affect ICM users because an older Docker version is set in Samples/defaults.json.

CPF

DP-416498: Allow CPF properties to be set to ""

Category: CPF
Platforms: All
Version: 2022.2.0

A bug has been fixed where in previous versions, when setting a CPF property to a null value, if there was a default value for the property, the default value would be used instead of setting it to null.

For example, when passing the Properties array to Config.Databases.Create:

set Properties("MountAtStartup")=""
the code would ignore this and set the property to its default (0).

Starting in 2022.1.1, we will actually set the property equal to the empty string. For required properties, this will throw an error similar to:

ERROR #5659: Property 'Config.Databases::MountAtStartup(1@Config.Databases,ID=)' required

If you encounter this issue after upgrading, simply remove the setting of the Properties array to "", or explicitly set it to the desired value as in the following example:

set Properties("MountAtStartup")=0

CSP Server

DP-416562: Correct WebSocket handling of low-level errors

Category: CSP Server
Platforms: All
Version: 2022.2.0

This fix corrects a bug in the error handling for web socket connections. If an error was encountered before the CSP server dispatched to the WebSocket class, then the error would be ignored. Now the CSP server will call the Error() method in the WebSocket class. Similarly, for authentication failures, the server will call Login(). Note that by default, Login() just calls Error(). 

The websocket will also now abort the connection if OnPreServer() returns an error. Previously errors were ignored.

DP-416563: Do not allow navigation to %-CSP pages from the /csp/sys/oauth2/ application

Category: CSP Server
Platforms: All
Version: 2022.2.0

This change modifies the default configuration to disallow access to %-CSP pages from the /csp/sys/oauth2/ application.

Gateways - .NET

DP-409705: Refresh .NET versions

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

This change refreshes the .NET Versions to align with the versions that are still in support by Microsoft. We have removed versions that are no longer in support by Microsoft (.NET Framework 2.0, 4.0 and 4.5, and .NET Core 1.0 and 2.1).

We have also added support for two versions: .NET Framework 3.5 and 4.6.2. 

This change also updates the assembly versions so they match the new versions we support.

The new assemblies will be under a different path, so projects that use the path to the dll location under the IRIS install location will need to update the path to correspond to the new versions. For example, a previous path would be:

<IRIS install location>\dev\dotnet\bin\v4.5\InterSystems.Data.IRISClient.dll

That location will no longer exist under the new installation, and should be changed to:

<IRIS install location>\dev\dotnet\bin\v4.6.2\InterSystems.Data.IRISClient.dll

In terms of compatibility between versions, the new 4.6.2 version is backwards compatible and the applications will run on systems that have any .NET Framework 4.x installed.

However, .NET Framework is not forwards-compatible, so if customers have applications that target .NET Framework 4.5, they cannot use one of our .NET Framework 4.6.2 libraries as a dependency. Their options are:

  • Change the target framework of their application to be at least 4.6.2. .NET Framework 4.5 has been out of support by Microsoft so this will also ensure users are using a supported language version.
  • Use the .NET Framework 3.5 version of our library. Users might lose access to certain features/functionality that was introduced in version 4.0.
  • Use old versions of our library that target 4.5. These will not contain the latest bug fixes or functionality, but users will not need to modify the dependencies of their applications.

IDEs

DP-416045: Correct Studio bug with View Web Page for a class that had a fully qualified LOCATION parameter

Category: IDEs
Platforms: All
Version: 2022.2.0

This change fixes a bug in which the View Web Page option did not work for a class whose LOCATION parameter is a full path with the scheme prepended (http:// or https://).

Interoperability

DP-412625: Interoperability XML virtual document schema correction when collapsing single child generation

Category: Interoperability
Platforms: All
Version: 2022.2.0

When a schema has a generation of single properties, the collapse mechanism could lead to the final child node not being represented properly in the schema. This is now corrected.

DP-412629: Improve XML Virtual Document support for 'any' element

Category: Interoperability
Platforms: All
Version: 2022.2.0

Before this change, when setting XML data to an 'any' element of an XML Virtual Document, the 'any' tag would be included in the output.

Also when using a sub-transform, the XML representation used to set to a target property of element type 'any' would not include the top level. This is also corrected. The correction is to the EnsLib.EDI.XML.Document SetSubDocument() method.  This method inserts the XML representation of pSubDocument into the target document at the path specified by pPropertyPath. The XML representation is the GetValueAt using "/1" as the property path except if the target Property Path where the sub document is to be set is of type "any" then the XML representation of pSubDocument retrieved  will be the full document including top element i.e. path "/"

DP-413564: Correct Interoperability Reply Code Action D triggering Alert On Error if retried

Category: Interoperability
Platforms: All
Version: 2022.2.0

The Interoperability Reply Code Action D would only trigger an Alert On Error if there had not been a prior action [R(etry)]. This is now corrected. If for example the Reply Code Action is E=RD and Alert On Error is enabled, then an alert will be sent for the Retry and also the Disabling if the failure timeout is reached.

DP-414056: Prevent end user naming of Interoperability Host Names with reserved leading underscore

Category: Interoperability
Platforms: All
Version: 2022.2.0

With this change, host names cannot start with an underscore (_) character. If a production includes hosts whose names have the leading underscore, there is a compilation error when you compile the production class.

DP-415945: Interoperability Java and DotNet Gateway services modifications for core api change

Category: Interoperability
Platforms: All
Version: 2022.2.0

The classes EnsLib.JavaGateway.Service and EnsLib.DotNetGateway.Service have a new exposed setting in the Production Configuration page of "External Language Server Name" (property %gatewayName).

The value of External Language Server Name is a name given in the Management Portal at System > Configuration > External Language Servers

For an EnsLib.JavaGateway.Service, it can be %Java Server or a custom Java type entry. (Note that when used with a SQL Business Service or Operation that uses JDBC, it is still a Java type entry and not JDBC type)

For an EnsLib.DotNetGateway.Service, it can be %DotNet Server or a custom .NET type.

  Once External Language Server Name is specified, it supersedes the settings in Server and Port and the associated gateway configuration settings such as classpath , heartbeat, use passphrase and JVM.

Note it is now not possible to start a gateway that uses a passphrase without using an External Language Server Name.   The superclass EnsLib.JavaGateway.Common used by Services and Operations that use the gateway now identifies if the associated Java Gateway specifies an External Language Server Name  and uses that value rather than the Server and port values to connect to the relevant proxy gateway. 

It is intended that there will be no need for EnsLib.JavaGateway.Service and EnsLib.DotNetGateway.Service items at a later date.

Journaling

DP-413465: Return meaningful error from ##class(%SYS.Journal.History).GetHeader()

Category: Journaling
Platforms: All
Version: 2022.2.0

In the case where the journal log contains no or bad version info, ##class(%SYS.Journal.History).GetHeader() (and its direct or indirect callers such as ##class(Journal.Restore).CheckJournalIntegrity()) now returns a meaningful error such as "Journal log <path> missing version", which is also compatible with the existing $System.Status facility. The old return value in this case, "0v", is obscure in meanings and incompatible with the existing $System.Status facility.

JSON

DP-410199: ##class(%DynamicAbstractObject).%FromJSON("") returns "" instead of an error

Category: JSON
Platforms: All
Version: 2022.2.0

A call on ##class(%DynamicAbstractObject).%FromJSON("") will return the empty string, "", instead of throwing an exception for "Premature end of data".   However, %FromJSON(arg) will still throw that error if (1) arg is a %Stream containing no additional characters; if (2) arg is a file name referencing a %File that contains no characters; or if (3) arg is an ObjectScript string containing only white space characters or is otherwise an incomplete JSON string.

Note:  a call on DynamicObject.%ToJSON() that does not signal an error will always return an ObjectScript string containing at least two characters, e.g., [] or {}.

Any code expecting %FromJSON("") to throw an error will need to be modified to special check for "" being passed as an argument to %FromJSON(arg).

Kernel

DP-410225: Add more fields for audit log entry in structured logging

Category: Kernel
Platforms: All
Version: 2022.2.0

Before this change, when the LOGDMN process scanned the audit log, it persisted only the following audit event fields to the log file: EventSource,EventType,GroupName,Namespace

With this change, the LOGDMN process 1) includes all the fields as seen in the details of ^SECURITY for an audit log record and 2) improves audit log scanning process to one pass for better performance.

Log entry parsing, parameter matching, and value extraction might break if your code relies on the previous behavior.

DP-413544: Change ZBREAK so %Destruct stepping is ON by default

Category: Kernel
Platforms: All
Version: 2022.2.0

When debug stepping is enabled and an object reference is closed, the debugger will now step into the %Destruct and %OnClose methods. Previously this stepping was disabled by default. This stepping may be turned off with the command ZBREAK /NOSTEP:DESTRUCT.

Monitoring

DP-413960: Limit PERFMON collection (index) numbers

Category: Monitoring
Platforms: All
Version: 2022.2.0

Limit all PERFMON collections to 64k. Before this change, use of collections >65535 would silently fail; now an error is returned.

Object Library

DP-410183: Fix XML generation when a class extends another class in a different XML namespace

Category: Object Library
Platforms: All
Version: 2022.2.0

This change corrects a problem with XML generation when a class extends a class in a different XML namespace. Specifically, if a class A in namespace N1 with ELEMENTQUALIFIED=0 extends a class B in namespace N2 also with ELEMENTQUALIFIED=0, and class B contains a property of type C in namespace N2, when you generate XML for an instance of class A, previously the element for Class C would be qualified with namespace N2, when it should in fact be unqualified.

For example:

Class dp.ActualType Extends dp.n1.BaseType
{
Parameter ELEMENTQUALIFIED = 0;
Parameter NAMESPACE = "urn:sdk-test/n2";
Parameter XMLNAME = "ActualType";
Property ActualProp As %String(MAXLEN = "", XMLNAME = "ActualProp") [ Required ];
}

Class dp.n1.BaseType Extends (%RegisteredObject, %XML.Adaptor)
{
Parameter ELEMENTQUALIFIED = 0;
Parameter NAMESPACE = "urn:sdk-test/n1";
Parameter XMLNAME = "BaseType";
Parameter XMLSEQUENCE = 1;
Property BaseProp As dp.n1.BasePropType(XMLNAME = "BaseProp") [ Required ];
}

Class dp.n1.BasePropType Extends (%RegisteredObject, %XML.Adaptor)
{
Parameter ELEMENTQUALIFIED = 0;
Parameter NAMESPACE = "urn:sdk-test/n1";
Parameter XMLNAME = "BasePropType";
Parameter XMLSEQUENCE = 1;
Property Tag As %String(MAXLEN = "", XMLNAME = "Tag") [ Required ];
}
Exporting an instance of ActualType previously would produce XML like:

<?xml version="1.0" encoding="UTF-8"?>
<s01:ActualType xmlns:s01="urn:sdk-test/n2">
	<s02:BaseProp xmlns:s02="urn:sdk-test/n1">
		<Tag></Tag>
	</s02:BaseProp>
	<ActualProp>myvalue</ActualProp>
</s01:ActualType>
But it should produce (note the namespace for the BaseProp element):
<?xml version="1.0" encoding="UTF-8"?>
<s01:ActualType xmlns:s01="urn:sdk-test/n2">
	<BaseProp xmlns:s02="urn:sdk-test/n1">
		<Tag></Tag>
	</BaseProp>
	<ActualProp>myvalue</ActualProp>
</s01:ActualType>

DP-412418: In %RoutineMgr:StudioOpenDialog query for /mapped=0 use the data database for globals not the routine database

Category: Object Library
Platforms: All
Version: 2022.2.0

The %RoutineMgr:StudioOpenDialog query, which is used by a large number of interfaces, turns patterns into lists of items in the IRIS system. One of the pattern extensions it supports is '.gbl' to reference globals. When you called this with for example '\*.gbl' and the qualifier /mapped=0 (which is normally the default) it would search for globals in the routine database but it should have been searching the default data database as well for globals as routines/classes are found from patterns like '\*.mac' or '\*.cls'.

With this change, the query will result in *.gbl finding globals in the data database for /mapped=0 where as before it would only find ones in the routine database. It is unlikely customers are relying on this behavior.

DP-412853: Add %FromJSONFile(); do not load files in %FromJSON()

Category: Object Library
Platforms: All
Version: 2022.2.0

Previously ##class(%DynamicAbstractObject).%FromJSON() would accept three types of inputs:

  • a stream object
  • a JSON formatted string
  • a filename on the server containing JSON
If the input was a string that could not be parsed as a JSON object or array, then the method tried to treat it as a filename. This is a security concern because naively written code could allow an attacker to load data from any JSON formatted file accessible on the server.

This has been fixed by creating a new method that expects an input string containing a filename:

ClassMethod %FromJSONFile(str) As %DynamicAbstractObject

The %FromJSON() method no longer loads a file. If the input is a stream, the method works as before.

ODBC

DP-409303: Convert TIME_STRUCT to POSIX

Category: ODBC
Platforms: All
Version: 2022.2.0

On insert TIME_STRUCT into POSIX field (1093), the ODBC driver will convert TIME_STRUCT to POSIX with default date 1-1-1900.

Platforms

DP-412390: Require minor OS version in installs on Red Hat and SUSE

Category: Platforms
Platforms: UNIX®
Version: 2022.2.0

Installation on Red Hat 7 x64 will require minor version 9 or above.

Installation on Red Hat 8 x64 and ARM64 will require minor version 2 or above.

Installation on SUSE 15 x64 will require minor version 3 or above.

PLATFORMS-CENTOS-7: Centos 7 no longer supported as a developer platform

Category: Platforms
Platforms: All
Version: 2022.2.0

In this release, Centos 7 is no longer supported as a developer platform.

PLATFORMS-CENTOS-8: Centos Stream 8 now supported as a developer platform

Category: Platforms
Platforms: All
Version: 2022.2.0

In this release, Centos Stream 8 is supported as a developer platform.

PLATFORMS-ICU-691: ICU 69.1 & Xerces 3.2

Category: Platforms
Platforms: All
Version: 2022.2.0

In this release, ICU has been updated to version 69.1. Also the current Xerces version is now 3.2.

PLATFORMS-POWERPC: PowerPC chip sets no longer supported

Category: Platforms
Platforms: AIX
Version: 2022.2.0

This release drops support for the older PowerPC chip sets. For IBM AIX, the product is now supported only on POWER Systems (POWER 7 and higher).

PLATFORMS-RH7: Remove RH7 support

Category: Platforms
Platforms: UNIX®
Version: 2022.2.0

This release removes support for Red Hat 7.x.

PLATFORMS-RH9: Add RH9 support

Category: Platforms
Platforms: UNIX®
Version: 2022.2.0

This release adds support for Red Hat 9.x.

PLATFORMS-UBUNTU-1804: Remove Ubuntu 18.04 support

Category: Platforms
Platforms: UNIX®
Version: 2022.2.0

This release removes support for Ubuntu 18.04.

PLATFORMS-UBUNTU-2204: Add Ubuntu 22.04 support

Category: Platforms
Platforms: UNIX®
Version: 2022.2.0

This release adds support for Ubuntu 22.04.

Security

DP-412937: Audit log improvements

Category: Security
Platforms: All
Version: 2022.2.0

The audit log has been corrected as follows, for better usability:

  • Background tasks started in the Portal are now audited with a TaskStart and TaskEnd audit record. Previously there was just a JobStart and JobEnd logged, but it did not specify what task was being run.
  • Started and stopping of %SYS.WorkQueue jobs are excluded from the audit log.
  • Starting and stopping of %Service_WebGateway jobs are excluded from the audit log.

DP-414613: SECURITY: Require new %Secure_Native Resource:USE for Native API calls

Category: Security
Platforms: All
Version: 2022.2.0

There is a new system Resource called %Service_Native.  The system-defined roles %Developer and %Manager have the USE permission on this resource by default.

%Service_Native controls whether the user can issue Native API calls via Java, .NET, Python, and Node.js.  In order to use the Native API, the user must have the %Service_Native:USE permission.

DP-414811: Add JWTAudience field to OAuth2 clients

Category: Security
Platforms: All
Version: 2022.2.0

This change adds the ability for an IRIS OAuth2 client to manually configure the value to use in the "aud" header when using the private_key_jwt and client_secret_jwt authentication methods, as well as for the JWT Authorization grant type. 

This can be done with the new JWTAudience property in the OAuth2.Client class. This can be configured via the "Audience" field in the OAuth2 Client Configuration page in the Management Portal.

For new OAuth2 client configurations, this will default to use the Authorization server's token endpoint. If it is not defined (e.g., for existing configurations) it will continue to use the Authorization server's issuer endpoint. 

NOTE: IRIS Authorization servers prior to DP-414485 require clients to use the issuer endpoint. This means that in order to for newly created IRIS OAuth2 clients running on a system with this change to authenticate with an IRIS OAuth2 Server without DP-414485, the user will need to manually configure the JWT Audience.

SQL

DP-406452: For READ UNCOMMITTED, build and run separate queries

Category: SQL
Platforms: All
Version: 2022.2.0

Improve the generated code for embedded SQL and %SQL.Statement dynamic SQL by building separate queries based on the partition's isolation mode. If the partition is in READ UNCOMMITTED, we can build parallel queries which can be a major performance improvement. We also do not need to generate runtime logic checking the isolation mode and then re-reading data for READ COMMITTED in the default READ UNCOMMITTED queries.

As part of this change, we added logic so we can find frozen plans for these queries if they were frozen before the partition isolation mode was added to the query.

The isolation mode is added with a SQL comment option that looks like this:

/*#OPTIONS { "IsolationLevel":0 } */

Two compatibility issues should be noted:

1) This change may cause queries to be run in parallel automatically based on the auto-parallel heuristics. If a query does not specify a strict ordering of results (no ORDER BY, for example) then SQL is allowed to return results in any order it wishes and in this case running a query in parallel will cause the order of results to be different on each run of the query. If the user needs the results in a specific order they should include an ORDER BY clause in the query or add the %NOPARALLEL keyword to the query.

2) For %SQL.Statement with this change, the process isolation level will be determined when we prepare the query and not when we execute. This is different from the previous behavior where the process isolation level was taken from the query execution time. Customers do not normally change process isolation level with queries already prepared so it is unlikely this will cause problems, but it is a change in behavior.

DP-408485+PLUS: Corrects bugs in the SQL 'EXPLAIN' feature

Category: SQL
Platforms: All
Version: 2022.2.0

This change refactors the SQL EXPLAIN feature in order to fix multiple bugs. The SQL EXPLAIN statement is now fully supported via the following interfaces:

  • Embedded SQL  [Both <select stmt: single row> and <select stmt: multi row> (e.g. DECLARE)]
  • Dynamic SQL  [e.g. %SQL.Statement class]
  • SQL Shell [do $SYSTEM.SQL.Shell()]
  • Management Portal [System Explorer -> SQL -> Query]
  • JDBC
Given the newly refactored code, it should be possible for future enhancements to add more interfaces that support our SQL *EXPLAIN* statement.  The next and possibly most logical new interface for which we should add support is via ODBC.

Our SQL *EXPLAIN* statement is best described via the following BNF:

<explain> ::= EXPLAIN [ <explain option list> ] [ INTO <host ref> ] <selct>
   -- <selct> denotes the SELECT Statement, which is the only valid query currently supported with <explain> 
<explain option list> ::= [ <alt option ] [ <stat option> ]
<alt option>  ::= ALT | ALL
<stat option> ::= STAT | STATS
                  -- The <stat option> and <alt option> can be specified in any order

<decl> ::= DECLARE <ident> CURSOR FOR <selct> [ FOR <updtcls> ] | DECLARE <ident> CURSOR FOR <explain> [ FOR <updtcls> ]

The following examples show how the SQL *EXPLAIN* statement can be used:
// --- Returns the query plan as an XML string ---
EXPLAIN SELECT Name,DOB FROM Sample.Person where Name [ 'Q'
// --- Returns the query plan and performance stats (by module) as an XML string ---
EXPLAIN STAT SELECT Name,DOB FROM Sample.Person where Name [ 'Q'
// --- Returns the alternate query plans as an XML string ---
EXPLAIN ALT SELECT Name,DOB FROM Sample.Person where Name [ 'Q'
// --- Returns the alternate query plans and performance stats as an XML string ---
EXPLAIN ALT STAT SELECT Name,DOB FROM Sample.Person where Name [ 'Q'
This change also enhances the following methods/APIs within the %SYSTEM.SQL class that relate to the SQL *EXPLAIN* statement:
  • GetSQLPlan(sqlStr,showStats,planType,sqlPlan)
  • RefactorSQLPlan(planRef)    (Previously named: CollectPlans(planRef) )
  • Explain(sql,qualifiers,dynargs,plan)
DP-411232: New %DROP_UNOWNED SQL admin privilege

Category: SQL
Platforms: All
Version: 2022.2.0

In previous releases, if a user held the %DROP_TABLE or %DROP_VIEW administrative privilege, the user would be able to drop a table or view that the user did not own. In this release, in order to drop a table or view, the user must either be the owner of the table or view or must hold the %DROP_UNOWNED administrative privilege (which is new in this release).

DP-412103: SQL STRING(...) function now correctly handles nulls and empty strings

Category: SQL
Platforms: All
Version: 2022.2.0

This change modifies the SQL *STRING(...)* function code generator to work correctly for any number of parameter values, including NULL and the empty string (which is represented internally as $char(0)), and to generate more efficient code.

Prior to this change, the SQL *STRING(...)* function would return a NULL value ("") if ANY of the parameters are NULL, which was incorrect. In this scenario, the NULL value is meant to be treated as an empty-string ('') if other parameters are present. 

Now the logic of SQL *STRING(...)* is in line with the _Sybase SQL Anywhere_ definition, and will return the concatenation of all parameters, treating NULL parameters as the empty-string ('') as in the following example:

SELECT STRING('This', ' ', NULL, 'now', ' ', 'works!') INTO :testdata
SELECT STRING('This', ' ', '', 'now', ' ', 'works!') INTO :testdata

With this change, each of these SQL statements set the testdata variable equal to "This now works!"

DP-412300: Add %NOJOURN SQL Admin priv & disable transactions with %NOJOURN SQL keyword

Category: SQL
Platforms: All
Version: 2022.2.0

With this change, users must now hold the %NOJOURN SQL Admin privilege in order to use the %NOJOURN keyword in INSERT [ OR UPDATE ], UPDATE, DELETE, BUILD INDEX, or fast insert statements. Also, the %NOJOURN flag for INSERT [ OR UPDATE ], UPDATE, DELETE, and fast insert statements now explicitly turns off transactions. Transactions are implicitly skipped when journaling is disabled, but this change optimizes mirrored environments because mirrors must keep journalling enabled so that data can be propagated to backups. Also, this change fixes a bug where %NOLOCK SQL Admin priv was not checked when %NOLOCK is used in BUILD INDEX statements.

DP-414622: Require %Development:USE privilege for DDL statements that invoke external language code

Category: SQL
Platforms: All
Version: 2022.2.0

There are a number of DDL statements in which a user can call ObjectScript or Python (and in some cases Java and DotNet) code. The following shows an example:

CREATE TABLE Test.MyTable(MyField VARCHAR(100), MyOtherField INT COMPUTECODE OBJECTSCRIPT \{set {MyOtherField} = +$h / 2})

Before this code, there was no check that the user executing such DDL statements had %Development:USE privileges.

With this change, a user who does not have %Development:USE permissions will encounter a privilege violation (SQLCODE -99) error and the DDL will fail. The DDL statements affected are CREATE METHOD/PROCEDURE/FUNCTION/QUERY/TRIGGER, and CREATE/ALTER TABLE where the user specifies ObjectScript DEFAULT or COMPUTECODE for a column.

The only scenarios in which a user without proper permissions can still execute such DDL statements are as follows:

  • The DDL is executed via embedded SQL (embedded SQL does not do privilege checks)
  • The code being run explicitly specifies no privilege checking, for example, a %SQL.Statement prepared with nocheck-priv or run with %ExecDirectNoPriv().

System

DP-415808: CPF file changes related to gateways

Category: System
Platforms: All
Version: 2022.2.0

This change updates the Gateways section of the CPF file to reorganize the fields for each gateway type, and to add a resource field.

For each gateway type, the CPF file no longer has heartbeat properties. For all types except Remote, there is a new default Resource field. The UsePassphrase property has been removed.

Web Gateway

DP-410079: Make Maximum_Server_Connections a flat limit

Category: Web Gateway
Platforms: All
Version: 2022.2.0

This change makes Maximum Server Connections a flat limit instead of a per-process limit. The strategy is to implement a throttle in cspTCPIPOpenSession, tallying connections on the same server in addition to the session-ID-based tally. This change also makes it so that the Maximum Server Connections configuration field is displayed and used even in the non-threaded/multi-process case. Additionally, processes with status Server and Private now count toward the total server connection tally.

Customers who have multi-process web server architectures (e.g., Apache Prefork MPM) may need to adjust their Maximum Server Connection settings to accommodate more connections. The Web Gateway does not take responsibility for the underlying web server configuration. To support the same number of IRIS server connections as before, simply multiply the original maximum connection limit by the web server's maximum number of processes. (In Web Gateway Management, see Server Configuration -> Maximum Server Connections.)

For Additional Help

If you need assistance with evaluating how upgrading to this extended maintenance (EM) 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