Skip to main content

Caché ® and Ensemble ® Maintenance Release Changes (2017.2.2)

This document lists the changes between the 2017.2.2 maintenance release of Caché and Ensemble and the previous maintenance release. It also lists the changes in each previous 2017.2.x maintenance release of Caché and Ensemble.

The latest up-to-date maintenance release changes (this document) and a continually updated documentation set are available on the website https://docs.intersystems.com. The docs subdirectory of your installation also provides local access to the maintenance release changes and contains PDF versions of some key documents, but these may be missing late-breaking changes and corrections.

Topics in this document include:

Important:

For information about upgrading an installed instance of Caché or Ensemble, and procedures that you may need to follow,see the “Upgrading Caché” chapter in the Caché Installation Guide.

Restricted Rights Legend

Use, duplication, or disclosure by the Government is subject to restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in Technical Data and Computer Software clause at DFARS 252.227-7013.
InterSystems Corporation
One Memorial Drive
Cambridge, MA 02142
When acquired by the Government, commercial computer software and related documentation bearing this legend are subject to the following:
  1. Title to and ownership of the software and documentation shall remain with the Contractor.
  2. Use of the software and documentation shall be limited to the facility for which it is acquired.
  3. The Government shall not provide or otherwise make available the software or documentation, or any portion thereof, in any form, to any third party without the prior written approval of the Contractor. Third parties do not include prime contractors, subcontractors and agents of the Government who have the Government's permission to use the licensed software and documentation at the facility, and who have agreed to use the licensed software and documentation only in accordance with these restrictions. This provision does not limit the right of the Government to use software, documentation, or information therein, which the Government has or may obtain without restrictions.
  4. The Government shall have the right to use the computer software and documentation with the computer for which it is acquired at any other facility to which that computer may be transferred; to use the computer software and documentation with a backup computer when the primary computer is inoperative; to copy computer programs for safekeeping (archives) or backup purposes; and to modify the software and documentation or combine it with other software. Provided that the unmodified portions shall remain subject to these restrictions.
END OF LEGEND

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/. InterSystems recommends that you check this list periodically to obtain the latest information on these issues.

Changes in Maintenance Release Caché and Ensemble 2017.2.2

To help you assess the impact of this maintenance release on your applications, this document describes each of its changes in detail. If you need assistance with evaluating the effect on your application(s), system(s), or related plans, please contact the InterSystems Worldwide Support Center:

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

Maintenance release 2017.2.2 includes the following changes, grouped by category:

The following sections describe the changes in detail.

Changes in the %CSP.Documatic Category

AAH1050: Restore Private and Storage check boxes

Category: %CSP.Documatic

Platforms: All

Version: 2017.2.2

Description: This change corrects an error that prevented the Private and Storage check boxes from being displayed when viewing a class in the class reference.

Changes in the Atelier Category

CDS2944: Fix Atelier <PROTECT> on %SYS database

Category: Atelier

Platforms: All

Version: 2017.2.2

Description: Under certain circumstances, a user with only the %Developer role gets a <PROTECT> error. This change corrects this problem. If the user does not have sufficient privileges to see the documents, Atelier returns an empty document list.

CDS2952+CDS2953: Do not display internal system tasks in list of tasks debugger can attach

Category: Atelier

Platforms: All

Version: 2017.2.2

Description: When the user is attaching to tasks to debug code, Atelier could include system tasks, such as the %SYS.WorkQueueMgr task, which do not contain any user code to debug. This change corrects this problem.

CDS2958: Handle searches when only have %Developer access

Category: Atelier

Platforms: All

Version: 2017.2.2

Description: If the user account only has %Developer access, Atelier could encounter a <PROTECT> error and would not return results that the user had permission to access. This change corrects this problem.

CDS2960: Correctly handle routine mapping for Atelier modified documents

Category: Atelier

Platforms: All

Version: 2017.2.2

Description: In a namespace with complicated routine mappings, Atelier could get a <SYNTAX> error when looking for modified routines. This change corrects this problem.

CDS2963+CDS2964+CDS2965: Improve Atelier handling for debugging attaching and detatching

Category: Atelier

Platforms: All

Version: 2017.2.2

Description: In certain circumstances, Atelier did not handle attaching to the process to start a debugging session and detatching to stop it. This change improves how Atelier attaches and detatches a process for a debugging session.

CDS2978: Ensure that users with only %Developer role can open source control session

Category: Atelier

Platforms: All

Version: 2017.2.2

Description: A user with limited permissions could encounter a <PROTECT> error when using server-side source control. This change avoids the <PROTECT> error.

CDS3005: Fix how the REST API for Atelier GetDocs method handles invalid document name

Category: Atelier

Platforms: All

Version: 2017.2.2

Description: If an invalid filename is included in the GetDocs file list, GetDocs returned an error and did not get any documents. This change ensures that GetDocs returns information for valid names and error status for the invalid file name.

CDS3020: Fix <UNDEFINED> in Atelier /doc api for a CSP file

Category: Atelier

Platforms: All

Version: 2017.2.2

Description: Atelier reported an <UNDEFINED> error when loading a CSP file from the server. This change corrects this problem.

CDS3026: Provide information on whether a database is a system database in Source Code File REST API for Atelier

Category: Atelier

Platforms: All

Version: 2017.2.2

Description: When the Source Code File REST API (for Atelier) returns information about databases, it includes an element dbsys that has a true value for system databases and a false value for all other databases.

CDS3031: Improve handling attempt to search namespace when access is not allowed

Category: Atelier

Platforms: All

Version: 2017.2.2

Description: If a user attempted to search a namespace and the Atelier connection did not have access to the namespace, the Accessing Source Control Files (Atelier) REST API returned a <PROTECT> error. This change enables Atelier to handle this condition correctly and return an empty search result.

CDS3033: Extend Source Code File REST API for Atelier to support CSP files with no extension

Category: Atelier

Platforms: All

Version: 2017.2.2

Description: The Source Code File REST API for Atelier GetDocNames method can return CSP files with no file extensions (file types). To request these files use the URL:

http://server:port/api/atelier/v1/namespace/docnames/CSP/

Note the trailing slash with no type value following it.

CDS3034: Atelier server information will not return inaccessible %SYS namespace

Category: Atelier

Platforms: All

Version: 2017.2.2

Description: The GetServer REST API would return the %SYS namespace for a user who did not have access to it. This change ensures that only accessible namespaces are returned.

Changes in the CSP Category

MAK4935: Add a new class %CSP.HTMLEscape that encodes output with HTML escapes for the current device

Category: CSP

Platforms: All

Version: 2017.2.2

Description: This change adds a new class, %CSP.HTMLEscape, that allows output to the current device to be encoded with HTML escapes, for example:

  Write "2<3 and 4>3",!
  New escape
  Set escape=##class(%CSP.HTMLEscape).%New()
  Write "2<3 and 4>3",!
  Set escape=""
  Write "2<3 and 4>3",!

Will output:

2<3 and 4>3
2& lt;3 and 4& gt;3
2<3 and 4>3

Once the oref is removed, the HTML escape encoding stops.

Changes in the CSP.Gateway Category

CMT1635: Ensure that the Gateway can gracefully cope with an oversize HTTP status description in the response headers

Category: CSP.Gateway

Platforms: All

Version: 2017.2.2

Description:

This change ensures that the Gateway can gracefully cope with an oversize HTTP status description in the response headers.

Structure of the first line of the HTTP response headers:

HTTP/1.1 [status] [status description]\r\n

With previous releases the Gateway would throw an 'insufficient buffer space' exception in the 'cspSendResponseHeader()' function if the status description exceeded 32 Bytes.

CMT1706: Correct a fault that could result in a spin condition when processing the HTTP request headers

Category: CSP.Gateway

Platforms: All

Version: 2017.2.2

Description:

This change corrects a fault that could result in a spin condition (100% CPU usage) when processing the HTTP request headers. This fault would be exposed for situations where the session cookie was missing for a request, but nevertheless expected on account of the path being configured for cookie-based session management and the cookie-based session had already been established (in other words, previous requests for the session presented with the session cookie intact).

Changes in the DeepSee Category

DTB676: Make Excel export cell formats that suppress decimal places

Category: DeepSee

Platforms: All

Version: 2017.2.2

Description: This restores the ability to suppress the decimal place in cells in the Excel export using a format such as "#,###". This change also allows the export to recognize a leading "$" in the cell format.

DTB691: Add system lock to RegistryMap groups to prevent modification in Cube Registry UI

Category: DeepSee

Platforms: All

Version: 2017.2.2

Description: This enhancement allows applications to manage the cube update schedule without allowing users to change that schedule in the cube Registry UI. In previous releases, if you prevented users from updating the schedule, you would also be prohibiting the application from updating the schedule. With this change an application designer can set the attribute:

UserUpdatesLocked="true"

in either of the

  <RegistryMap>
  <RegistryMapGroup>

objects within the saved registry. This attribute is "false" by default.

When UserUpdatesLocked="true" (set via editing the registry directly) for a RegistryMap:

  • The registry's Disable setting cannot be changed through the Details tab.

When UserUpdatesLocked="true" (set via editing the registry directly) for a RegistryMapGroup:

  • Each registered group's Exclude checkbox is displayed but disabled, so the user cannot uncheck it and have the automated update tasks trigger it on their schedule.

  • Each registered cube's Exclude checkbox is hidden.

  • Each registered group's Update Plan is hidden, showing instead a message indicating something else is managing updates (not yet configurable).

  • Each registered cube's Update Plan is hidden, showing instead a message indicating something else is managing updates (not yet configurable).

  • The red "X" for unregistering each group is removed.

  • The Build Frequency and Synch Frequency columns are left blank.

  • The details pane, when selected from the Table view, also responds to the UserUpdateLock.

  • The Build Dependency List is available for cubes, but the Build This Group button is disabled.

DTB702: Avoid collisions in asynchronous join index tasks

Category: DeepSee

Platforms: All

Version: 2017.2.2

Description: There was a pause added to prevent inter-process collisions while waiting for asynchronous join index tasks to complete, but this wait was too long and was not needed under other conditions. This change reduces the waiting time and avoids the waiting time completely under some conditions.

Changes in the DeepSee.User Interface Category

DTB662: Use the %DeepSee.ResultSet to better identify complete OnClick cell context for exports

Category: DeepSee.User Interface

Platforms: All

Version: 2017.2.2

Description: Using an OnClick filter action in a DeepSee dashboard will supply the current chosen filters in addition to the specific cell context defined by the cell click/selection. This is now processed using a DeepSee resultset which includes tools to create and read an axis cache to provide a human-readable context in exports.

Changes in the Documentation.DocBook Application Category

AAH1058: Fixed misalignment of link text and target

Category: Documentation.DocBook Application

Platforms: All

Version: 2017.2.2

Description: In some reference sections, selecting a link could display the section for the following link. This change corrects the CSS style that was causing this error.

AAH1064: Fixed search error where there are no results when product is selected

Category: Documentation.DocBook Application

Platforms: All

Version: 2017.2.2

Description: If you specified the product to search in, the search would return 0 results even if the search text appeared in the product's documentation. This change corrects this problem.

Changes in the Ensemble Category

KDS361: Fixed Problem With "_" in Property Path for VDoc Search Tables

Category: Ensemble

Platforms: All

Version: 2017.2.2

Description: This change fixes a problem that was preventing property paths with the underscore character ("_") in them (eg. "{/MySchema_TopNode/MySchema_Element}") from being successfully used in Search Tables.

Changes in the Ensemble.HL7/EDI Category

JGM660: Correct EnsLib.HL7.Service.HTTPService class inheritance

Category: Ensemble.HL7/EDI

Platforms: All

Version: 2017.2.2

Description: The EnsLib.HL7.Service.HTTPService was modified to allow for connections via the web gateway. This led to not using the OnGetConnections(),GetRequestClassList() and GetResponseClassList() methods from EnsLib.HL7.Service.Standard but from Ens.BusinessService. Therefore production diagram would no longer show connections from service items of class EnsLib.HL7.Service.HTTPService. This is now corrected

Changes in the Ensemble.Workflow Category

JGM679: Disable purge bitmap indices for Ens.Enterprise.MsgBank.MessageHeader

Category: Ensemble.Workflow

Platforms: All

Version: 2017.2.2

Description: When purging Message Bank messages the bitmap indices are also compressed. This led to the corruption of 2 bitmap indices (Node source and Node target). This is now corrected and the bitmap indices are not purged.

It is still possible to purge bitmap indices for the Message Bank messages using the system API %SYS.Maint.Bitmap

If expected messages do not appear when searching by Source or Target it is possible to disable the Node source and Node target indices with:

Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NSrc",0) Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NTrg",0)

then rebuild the indices NTrg and NSrc

Once rebuilt re-enable the indices with

Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NSrc",1) Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NTrg",1)

Changes in the Global Module Category

JO3022: Avoid system freezes from <FILEFULL> errors allocating big string blocks

Category: Global Module

Platforms: All

Version: 2017.2.2

Description: The system has been enhanced to minimize <FILEFULL> errors from triggering a system freeze when there is insufficient space to allocate data blocks for big string storage. Previously some situations would result in a system freeze while others would not. With this change only a <FILEFULL> while allocating a pointer block will still trigger a system freeze.

RJF295: Uppercase namespace name in extended reference so matching global vectors are found

Category: Global Module

Platforms: All

Version: 2017.2.2

Description: Prior to this correction, extended global references to a defined namespace using any lower-case letters would be dramatically slower when compared to using the canonical all-uppercase form of the namespace name. This slowdown is particularly severe in versions 2015.2 and later.

Specifically, the extended syntax referred to is the form ^|"MyNamespace"|GLO or ^["MyNamespace"]GLO. Other forms of extended reference involving directories (implied namespaces), as well as "normal" global references without extended syntax are not affected.

This correction improves performance of extended global reference using lower- and mixed- case namespace names such that it is almost equivalent to using the canonical all-uppercase form; the uppercase form is still recommended. For best performance, avoid using extended references unless it is required.

RJF297: Reinstate preloading data blocks using async reads in gcompact

Category: Global Module

Platforms: All

Version: 2017.2.2

Description: This change reinstates asynchronous reads in global compaction utility (GCOMPACT), which is also used internally by database compaction and defragmentation. This can improve performance of those utilities substantially as compared with recent versions (version 2015.2 and later had ceased using asynchronous reads). The magnitude of the performance improvement depends on system caching characteristics and number of reads that the disk subsystem can effectively support in parallel.

SML2556: Fix database truncation problem

Category: Global Module

Platforms: All

Version: 2017.2.2

Description: There could be a <BLOCKNUMBER> error in the freespace routine after a database was truncated. This change corrects the truncation action.

Changes in the iKnow Category

BDB805: Fix filtered proximity search that returned incomplete results

Category: iKnow

Platforms: All

Version: 2017.2.2

Description: This change fixes %iKnow.Semantics.ProximityAPI:GetProfile() that, when invoked with a non-null filter, would return incomplete results.

JDN257: Prevent out of bounds memory access in Hunspell library

Category: iKnow

Platforms: All

Version: 2017.2.2

Description: Under certain circumstances the Hunspell library reported an out-of-bounds memory access violation when the input for the stemmer was at the maximum allowed size (256 characters). On Red Hat Linux this condition caused the process to crash. On other platforms, the system just reports the error. This change corrects this problem by slightly reducing the allowed length of the input.

JDN261: Fix access violation error when splitting non-textual tokens at the end of the buffer

Category: iKnow

Platforms: All

Version: 2017.2.2

Description: This is an access violation that can occur in very rare cases, when non-texual tokens (eg "!..............") at the very end of the text buffer are treated as textual. Some language models (such as French) will rewrite this and split it.

Reconstructing the splitted tokens assumes that a valid token was present (like "abc..." rewritten to "abc" + "...") to extract the textual token, but this is not the case here, a reference to the last lexrep of an empty vector crashes the engine.

On most platforms, an error is thrown and caught by the engine, leading to an error message in the cconsole.log file, but on Red Hat Linux this halts the process.

Changes in the Installation Category

ALE3114: preserve Apache 2.2 confguration and CSP Gateway modules when upgrading pre-ALE2468 kits

Category: Installation

Platforms: All

Version: 2017.2.2

Description: When upgrading Windows Caché/Ensemble instances 2014.1 and below which had CSP Gateway for Apache 2.2 installed we will save httpd.conf before old instance is installed and restore it to the pre-upgrade state after old version is uninstalled. CSPGateway modules directory will also be preserved on upgrade.

Changes in the Installation.UNIX Category

ALE3036: clean up bin/cinstall before creating a new link in Unix install

Category: Installation.UNIX

Platforms: All

Version: 2017.2.2

Description: Unix install will remove bin/cinstall if it is left over from a failed install before it creates a new link.

ALE3096: Ensure installation fails cleanly when it encounters an error

Category: Installation.UNIX

Platforms: UNIX

Version: 2017.2.2

Description: In some cases when a UNIX installation encountered an error, it would not stop the processes in the correct order. This change corrects this problem.

ALE3099: Suppress messages in nonroot install on Solaris when distribution files are not owned by user

Category: Installation.UNIX

Platforms: All

Version: 2017.2.2

Description: Unix install will suppress "Not owner" messages when copying symbolic links on Solaris when source links are not owned by user installing Caché.

ALE3110: Suppress "Not owner" message in nonroot install on Solaris when copying libssh libraries

Category: Installation.UNIX

Platforms: All

Version: 2017.2.2

Description: Nonroot install on Solaris will no longer produce spurious messages copying libssh libraries when the source files are not owned bu user.

Changes in the Journaling Category

HYY2238: Divide dejournal updates evenly among prefetchers

Category: Journaling

Platforms: All

Version: 2017.2.2

Description: Addressed an issue that caused dejournaling to use only one active prefetcher per updater.

The problem is present in 2017.2.x.

HYY2268: Fix potential system hang caused by dejournal prefetchers

Category: Journaling

Platforms: All

Version: 2017.2.2

Description: This change addressed an issue that could cause system to hang when there is an ongoing dejournaling task.

Changes in the Language Bindings.Net.ObjectBinding Category

JCN1984: Add Boolean property to CacheSysList to enable CacheObject $list behavior

Category: Language Bindings.Net.ObjectBinding

Platforms: All

Version: 2017.2.2

Description: This change adds a Boolean property to CacheSysList to control how it handles null and empty strings. The default behavior is the one needed to work with SQL and object storage on the server, but the names do not reflect how $list handles these values on the server when used directly. In addition, CacheObject did project $list behaviors that mirror how the server handles null and empty string. In order to allow users to work with old data stored by either Vism or CacheObject, CacheSysList needs to behave in the same way as Vism and CacheObject.

The new static property CacheSysList.listObjectBehavior when set to true will set null to 01 and will set "" to 02 01 on the server .

Changes in the Lock Category

SML2574: Fix lock command that could ignore 'E' mode when namespace is re-activated

Category: Lock

Platforms: All

Version: 2017.2.2

Description: Under certain circumstances a lock command could ignore the 'E' mode when a namespace is activated or security roles or resources are updated. This change corrects this problem.

Changes in the Mirroring Category

JO3062: Fix rare mirroring problem if catchup is interrupted

Category: Mirroring

Platforms: All

Version: 2017.2.2

Description: This change corrects a rare problem in mirroring where if catchup gets interrupted, the subsequent catchup operation would report a journal file GUID mismatch.

SML2535: Improve error handling during mirror shutdown

Category: Mirroring

Platforms: All

Version: 2017.2.2

Description: Under certain circumstances, mirroring shutdown failed when the master daemon encountered an error retrieving a large file in in synchronizing stage. This change corrects this problem and the mirroring shutdown will succeed.

SML2559: Improve handling of error encountered during a database recovery

Category: Mirroring

Platforms: All

Version: 2017.2.2

Description: In rare cases, an error during dejournaling could produce problems restarting journaling on the database that had the error. This change improves how Caché handles this condition.

SML2567: Improve performance of DejournalReader daemon when backup/async connection to primary

Category: Mirroring

Platforms: All

Version: 2017.2.2

Description: When the primary has heavy journal activities, the backup/async connection to primary could have reduced performance because it is unnecessarily checking whether the primary is active. This change reduces the frequency of that check.

Changes in the Networking.ECP Category

GK1339: Fix an ECP app-server cache coherency issue

Category: Networking.ECP

Platforms: All

Version: 2017.2.2

Description: In very rare cases an app-server did not refresh its cached blocks in the right order. This change corrects this problem.

GK1340: Fix DLM ECP server corrupting messages sent to the app-server.

Category: Networking.ECP

Platforms: All

Version: 2017.2.2

Description: When there are big string blocks that are modified and accessed from multiple app-servers and cluster members (frequently, indices/bitmaps) ECP big string cache management could corrupt messages sent to the app-server. Most likely this problem only occurs in DLM cluster ECP servers. This change corrects this problem.

Changes in the Object Category

CDS2956: Ensure deployed flag is correctly set after UDL save of a class

Category: Object

Platforms: All

Version: 2017.2.2

Description: If the source for a deployed class was loaded in UDL form, from Atelier or via Load^%apiOBJ, the class was still marked as deployed. This change corrects this problem and the class is marked as not deployed.

Changes in the Object.Library Category

CDS2998: Prevent memory access error during UDL export

Category: Object.Library

Platforms: All

Version: 2017.2.2

Description: There could be a memory access violation if a source control class did ExportUDL during a Save operation. This change corrects this problem.

Changes in the Object.Storage Category

DLP3754: Fix <UNDEFINED> during serialization of GUIDENABLED classes

Category: Object.Storage

Platforms: All

Version: 2017.2.2

Description: In some cases, saving an object with a GUIDENABLED caused an <UNDEFINED> error. This change corrects this problem.

Changes in the Security Category

CDS2966: Change in permissions required for MVBasic PCPERFORM statement and the MVBasic SH and DOS commands

Category: Security

Platforms: All

Version: 2017.2.2

Description: The MVBasic PCPERFORM statement and the MVBasic SH and DOS commands now require Use permission for the %System_CallOut resource.

CDS2970: Debug attach must have the same $USERNAME

Category: Security

Platforms: All

Version: 2017.2.2

Description: In order for the debugger to attach a running process, if the user issuing the attach does not have the %All role it must have the same $USERNAME as the running process.

CDS2971: Audit commands from a command pipe

Category: Security

Platforms: All

Version: 2017.2.2

Description: Under certain conditions, operating system commands issued via a |CPIPE| command pipe device were not properly audited. The audit would not contain the command or any exception encountered. This change corrects this problem.

CDS2972: Provide new non-shell command pipe

Category: Security

Platforms: All

Version: 2017.2.2

Description: This change provides a new option in the command pipe device (device name |CPIPE|)-- this option causes the command pipe device to execute a program without using a command shell.

The new behavior is invoked when one or both of the new keyword parameters, /COMMAND or /ARGS, is specified.

 OPEN device:/COMMAND=cmd

executes the program 'cmd' without a shell and with no arguments.

 OPEN device:(/COMMAND=cmd:/ARGS=arg1,arg2)
 OPEN device:(cmd:/ARGS=arg1,arg2)

executes the program 'cmd' without a shell, with two arguments.

Arguments can also be specified in an array as in a DO command:

 set array(1)=arg1, array(2)=arg2, array=2
 OPEN device:(/COMMAND=cmd:/ARGS=array...)

If a command pipe is executed without a shell and the command pipe encounters an error, a <NOTOPEN> error is returned. The underlying error is available via the $SYSTEM.Process.OSError() method.

The behavior of a command pipe device without either of these options is unchanged:

 OPEN device:cmd

executes the command string 'cmd' in a shell.

MAK4948: Correct failure to match IP addresses in 'subjectAltName'

Category: Security

Platforms: All

Version: 2017.2.2

Description: When checking a server certificate to see if the certificate matches the DNS/IP address where connected, the logic which parses the 'subjectAltName' section was not validating the IP address correctly. This would result in the logic returning an error code rather than connecting to the IP address when the IP address was listed correctly in the server certificate. This change corrects this problem.

MXT2066: Prohibit Document Type Declaration in SOAP request or response

Category: Security

Platforms: All

Version: 2017.2.2

Description: Prohibit Document Type Declaration in SOAP request or response. The presence of a Document Type Declaration in a SOAP message is prohibited by the SOAP 1.1 specification.

STC2670: Add check for expiration dates of LDAP certificates to system monitor

Category: Security

Platforms: All

Version: 2017.2.2

Description: The system monitor now checks LDAP certificates for expiration dates that will expire within 30 days and provides a warning in the log.

STC2684: Add auditing of operating system commands

Category: Security

Platforms: All

Version: 2017.2.2

Description: This change provides new auditing of %System/%System/OSCommand. When the %System/%System/OSCommand audit event is enabled, all $zf(-100), $zf(-1), and $zf(-2) commands are audited. In addition, when a user enters a "!" to get to the OS shell this is also audited. Note that commands executed after the shell is invoked are not audited.

STC2687: Update UnknownUser record correctly on failed login

Category: Security

Platforms: All

Version: 2017.2.2

Description: In some cases, the UnknownUser user record could be overwritten with the wrong user record of a previous failed login. This change corrects this problem.

STC2727: Correct error to enable delegated user authentication

Category: Security

Platforms: All

Version: 2017.2.2

Description: An error removed the capability of ZAUTHENTICATE to modify the user name during login. This feature is used to enable delegated users. This change restores that capability.

STC2733: Eliminate unnecessary auditing for jobs started by STU

Category: Security

Platforms: All

Version: 2017.2.2

Description: The STU process is audited, but when it starts jobs, they should not be automatically audited. They were being audited and this could fill the audit log with useless information. This change corrects this problem.

STC2777: Eliminate delay when REST request has null username and password

Category: Security

Platforms: All

Version: 2017.2.2

Description: If a REST request specified a null username and password and unauthenticated access is not allowed, there would be a delay before the the error. This change corrects this problem and eliminates the wait.

WDS701: Allow quotation marks in passwords in PKI.CAClient and PKI.CAServer

Category: Security

Platforms: All

Version: 2017.2.2

Description: It was not possible to use quotation marks in PKI.CAClient and PKI.CAServer passwords. This change corrects this problem.

WDS705: Fix errors in %OAuth2.JWT that caused input key ID to be ignored

Category: Security

Platforms: All

Version: 2017.2.2

Description: In some cases OAuth2 validation would not find the matching encryption key and return an error. This change corrects this problem.

Changes in the SQL Category

DPV5233: Ensure that Unfrozen/Parallel statements are not treated as frozen

Category: SQL

Platforms: All

Version: 2017.2.2

Description: In some cases after an upgrade a parallel query may behave as if it is frozen even though statements with a state of Unfrozen/Parallel are never frozen. This change corrects this problem.

Changes in the SQL.GateWay Category

JCN1986: Add bulk insert mechanism to jdbcgateway

Category: SQL.GateWay

Platforms: All

Version: 2017.2.2

Description: HL7 updates via the gateway could be slow due to many round trips between Caché and jdbcgateway process. This change adds a bulk insert method to eliminate the round trips and to improve performance. The executeParametersBatch method is new in %Net.Remote.Java.JDBCGateway.

JCN1988: Fix access violation in the ODBC SQL Gateway

Category: SQL.GateWay

Platforms: All

Version: 2017.2.2

Description: Passing in a $list value of 01 to the GetDataLen method was causing an access violation. This change corrects this problem.

Changes in the SQL.Query Optimizing Category

HSU268: Restrict TOP ORDER BY optimization for aggregate fields

Category: SQL.Query Optimizing

Platforms: All

Version: 2017.2.2

Description: Under certain circumstances, the SQL optimization of a query with TOP ORDER BY does not use existing indices because accessing the records directly is faster. But if the index was for an aggregated field, using the index would be more efficient than accessing the records directly. This change ensures that in these cases, the indices are used.

TRW1601+DPV5258: Fix error handling bitslice index and USEEXTENTSET=1 class

Category: SQL.Query Optimizing

Platforms: All

Version: 2017.2.2

Description: Tables created with USEEXTENTSET=1 (the default for DDL-created tables) and one or more bitslice indices could cause some queries to fail to compile. These changes correct this problem.

Changes in the SQL.Query Processing Category

AK974: Optimize a rare case of OUTER JOIN

Category: SQL.Query Processing

Platforms: All

Version: 2017.2.2

Description: Optimize a rare case of OUTER JOIN with a MERGEd / FLATTENed subquery, to reduce amount of resources needed to complete the query.

TRW1600: Fix error from outer join query in READ COMMITTED mode when all data had been successfully committed

Category: SQL.Query Processing

Platforms: All

Version: 2017.2.2

Description: In some cases, a query using implicit or explicit outer join in READ COMMITTED mode returned an SQLCODE 100 when the query should have succeeded. This change corrects this problem.

TRW1610+HSU250: Eliminate repeated results for TOP ... ORDER BY queries that also include an outer join

Category: SQL.Query Processing

Platforms: All

Version: 2017.2.2

Description: Some TOP ... ORDER BY queries that also include an outer join could have returned repeated results. This change corrects this problem.

Changes in the SQL.SQLFiler/TableCompiler Category

DPV5186: Fix creation of unneeded variable in %SQLGetOld (chunk)

Category: SQL.SQLFiler/TableCompiler

Platforms: All

Version: 2017.2.2

Description: Under certain circumstances the SQLFiler/TableCompiler would new an unneeded chunk or epos variable. This change corrects this problem.

DPV5189: Correct <UNDEFINED> error in %ValidateIndices when attempting to report error

Category: SQL.SQLFiler/TableCompiler

Platforms: All

Version: 2017.2.2

Description: Under certain circumstances, %ValidateIndices would attempt to return an error but instead caused an <UNDEFINED> error. The error looked like:

ERROR #5002: Cache error: <UNDEFINED>%SQLValidateIndex1+5^%sqlcq... *pRowID

This change corrects this problem and %ValidateIndices returns the correct error.

DPV5199: Correct a couple of issues with %ValidateIndices

Category: SQL.SQLFiler/TableCompiler

Platforms: All

Version: 2017.2.2

Description: A problem has been corrected with %ValidateIndices where, in some rare cases, an <UNDEFINED> error could occur while attempting to report an error.

Another problem has been corrected where the %ValidateIndices utility might not unlock a row if an error occurred attempting to retrieve the indexed value from the data map for a row.

DPV5254: Correct SQL filer for bitslice index filing of string value, and corrections for %ValidateIndices of bitslice indexes

Category: SQL.SQLFiler/TableCompiler

Platforms: All

Version: 2017.2.2

Description: This change corrects problems in the SQL filer and $SYSTEM.OBJ.ValidateIndices when a bitslice index is defined on a field that is a string type and the data values contain strings that evaluate to 0 for the purpose of the bitslice index. For example, a value like 'abc123' was not properly handled as a 0 value in the bitslice index filing and validation.

Changes in the System Category

CDS2967: Handle $ETRAP failures with low-memory conditions

Category: System

Platforms: All

Version: 2017.2.2

Description: Under certain low-memory conditions, setting $ETRAP could cause an exception. This change corrects this condition.

GK1355: Corrected cleaning during halt of open object references when their IDs were > 1024

Category: System

Platforms: All

Version: 2017.2.2

Description: In some cases, during halt, lingering objects may not execute their destructor. In rare conditions this may cause access violations during halting. This change addresses this issue.

JLC2098: Improve detection of lingering shared memory

Category: System

Platforms: All

Version: 2017.2.2

Description: If there are multiple instances of Caché on a system in rare circumstances they could appear to have the same shared memory segment and Caché would not start correctly. Appearing to have the same shared memory segment could be caused by an operating system reboot and is not an error. This change corrects this problem and Caché does not treat this as an error.

JLC2104: New $ZF(-100) function executes an operating system command or program as a child process

Category: System

Platforms: All

Version: 2017.2.2

Description: This new function provides the functionality of $ZF(-1) and $ZF(-2). While $ZF(-1) and $ZF(-2) are still available, their use is deprecated. To invoke an executable program or a command of the host operating system, use $ZF(-100). For a full description of $ZF(-100), see http://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=RCOS_fzf-100 in the ObjectScript Reference. This note provides a brief summary.

General syntax:

$ZF(-100, <keyword flags>, <program> [, <arg1>, <arg2> ... <argn>] )

<keyword flags> is a string expression consisting of a sequence of flags like "/keyword", "/keyword=value" or "/keyword+=value" similar to those used in the OPEN/USE/CLOSE commands. The keywords can be in upper or lowercase and blanks are allowed before the '/' and around the '=' and '+=' tokens. If the value contains a forward slash or a blank, it must be quoted. If it is present as a string literal, then it must be double quoted (as is the case in ObjectScript strings when we want the quote character to be included in the string).

/SHELL - When present indicates that we should invoke the program using a shell, like $ZF(-1)/$ZF(-2). The default is to not use a shell in $ZF(-100). Not available on VMS.

/ASYNC - Asynchronous program call, that is, don't wait for it to complete ($ZF(-2) is also asynchronous).

I/O redirection:

/STDIN=input-file

/STDOUT=output-file

/STDERR=error-file

The output and standard error files are created if they don't exist and are truncated if they already exist. If you want to append to an existing file, specify it with '+=' instead of '='. If you want the standard error to go to the same file as the standard output, specify the same file for both keywords.

Examples:

$ZF(-100, "/stdout=""/home/user/myfile.txt""", "ls", "-l")

$ZF(-100, "/stdout += myfile.log /stderr += myfile.log /stdin=""/home/user/myinput.txt"" ","myprog")

JLC2108: Detect when agent process is still attached to lingering shared memory

Category: System

Platforms: UNIX

Version: 2017.2.2

Description: This change improves the handling of shared memory when the system is shut down.

JO3035: 3 argument $Order() from an ECP server with subscript level mapping sometimes would not return the value when there was one

Category: System

Platforms: All

Version: 2017.2.2

Description: A problem where the 3 argument form of reverse $Order() over subscript level mapped globals might return the incorrect value of the node has been resolved. This problem occurs when the value of the node is mapped to a different database from where the answer was found in (that is the answer can be found by a descendant of the level the $Order() is operating at).

JO3036: Improve handling of disk access problems

Category: System

Platforms: All

Version: 2017.2.2

Description: In rare cases reading a disk could return a block with null values. This change minimizes the damage caused by this error.

RJF302: Fix integrity check for better streaming of async I/Os

Category: System

Platforms: All

Version: 2017.2.2

Description: This change corrects a performance issue in integrity check.

SOH643: Fix stack space error encountered by nested %FromJSON() on Solaris x64

Category: System

Platforms: UNIX

Version: 2017.2.2

Description: When the %FromJSON( ) method read a deeply nested JSON object on the Solaris x64 platform, recursive calls involving the JSON parsing routines ran out system stack space and caused a system crash with a memory access violation. To eliminate these process crashes, the %FromJSON nesting limit on the Solaris x64 platform has been reduced from 1024 levels to 400 levels. Any deeply nested JSON object that has more than 400 levels of nesting, will encounter an error on the Solaris x64 platform for exceeding the limit but the system crash will not occur. This error was encountered in testing nesting limits. In most cases, JSON objects are not nested to more than 400 levels. In rare conditions, it is possible to have this deep level of nesting. In these rare cases, code that worked in previous versions can encounter this nesting level limit error and fail.

SOH646: Fix -2**31 error in $ZABS

Category: System

Platforms: UNIX

Version: 2017.2.2

Description: On the Solaris Sparc and HPUX Itanium platforms only, under some circumstances, the computation of $ZABS(-2147483648) would return -2147483648 instead of returning +2147483648. This change corrects this problem.

Changes in the Utilities Category

CDS2951: Replacing a deployed class with Load UDL gave error

Category: Utilities

Platforms: All

Version: 2017.2.2

Description: If Load^%apiOBJ or LoadUDL^%apiOBJ was used to load UDL source to replace a deployed class, an error was displayed although the operation succeeded. This change eliminates the incorrect error message.

Changes in the XML Category

JN1736: Add parse flag for %XML.SAX.Parser to prohibit parsing of DTDs

Category: XML

Platforms: All

Version: 2017.2.2

Description: This changes provides the option to prohibit parsing of DTDs.

The new flag is defined in %occSAX.inc

SAXVALIDATIONPROHIBITDTDS 128

Adding this flag to the parse flags causes the parser to throw an error if it encounters a DTD.

When calling the various ParseXXX methods of %XML.SAX.Parser, you must explicitly include this value in the parse flags to prohibit parsing DTDs.

MKM812: Pass a null XML node to the isc:evaluate callback handler as an empty string.

Category: XML

Platforms: All

Version: 2017.2.2

Description: If an XPATH argument to isc:evaluate returns a null XML node in the XSLT2 Saxon parser, the argument is now passed along to the ObjectScript callback handler as an empty string. Previously, it would cause an XPATH exception that was reported to the caller.

Changes in the Zen Reports Category

TRW1611: Rendering server logs default to system temporary directory

Category: Zen Reports

Platforms: All

Version: 2017.2.2

Description: This change causes ExcelServer, RenderServer, PrintServer to, by default, write their log files in the system-defined temporary directory as described here as the "%t" symbol, instead of the user home directory "%h".

Changes in Maintenance Release Caché and Ensemble 2017.2.1

To help you assess the impact of this maintenance release on your applications, this document describes each of its changes in detail. If you need assistance with evaluating the effect on your application(s), system(s), or related plans, please contact the InterSystems Worldwide Support Center:

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

Maintenance release 2017.2.1 includes the following changes, grouped by category:

The following sections describe the changes in detail.

Changes in the Atelier Category

ATL-4073: Correct debugger errors on launch and exit

Category: Atelier

Platforms: All

Version: 2017.2.1

Description: The Atelier debugger was not sending an exit event before exiting. This caused nonstandard error message. This change corrects this problem.

ATL-4403: Fix error when Atelier debugger issued a break

Category: Atelier

Platforms: All

Version: 2017.2.1

Description: The Atelier debugger will issue an error message and quit if the user has the %SecureBreak role.

CDS2922+CDS2929: Improve debugger's robustness

Category: Atelier

Platforms: All

Version: 2017.2.1

Description: Under certain conditions, the Atelier debugging session would end prematurely because of a socket timeout or other event. Typically, this could happen during startup or during the process of exiting the debugger. These changes improve the debugger's robustness in handling these conditions.

CDS2931: Fix Atelier debugger <PROTECT> if CACHELIB is writable

Category: Atelier

Platforms: All

Version: 2017.2.1

Description: If an Atelier user did not have Read permission for %DB_CACHESYS and the CACHELIB database is not read-only, a debug session would get a <PROTECT> error. This change corrects this problem.

CDS2932: Enable trace events for unprivileged users

Category: Atelier

Platforms: All

Version: 2017.2.1

Description: This change makes it possible for an unprivileged user to trace events to diagnose problems in Atelier. Typically, users use this trace when requested by the InterSystems Worldwide Response Center.

CDS2940: Correct Atelier debugger response to Detach

Category: Atelier

Platforms: All

Version: 2017.2.1

Description: When a process was attached to the debugger, there was no mechanism to detach it. This change provides the mechanism to disconnect from the Atelier debugger.

CDS2946: Improve error reporting for debugger commands

Category: Atelier

Platforms: All

Version: 2017.2.1

Description: The debugger commands were not consistently reporting errors using the XDebug protocol. This change corrects this problem.

CDS2947: Fix Atelier debugger error invalid XML character

Category: Atelier

Platforms: All

Version: 2017.2.1

Description: Variable values that contain non-ascii data could cause an error "invalid XML character" when the Variable view tries to display them. This change corrects this error.

Changes in the Backup/Restore Category

RJF263: Fix DBSIZE full backup calculation

Category: Backup/Restore

Platforms: All

Version: 2017.2.1

Description: The backup sizes estimated by DBSIZE could be substantially incorrect for full backups. It could happen with any database larger than a map size (488MB for 8KB block size database) and the count could neglect to include any map that was entirely used.

This problem exists in 2015.1.4, 2015.2.3 and later releases. This change corrects this problem.

Changes in the Class Compiler Category

DPV5155: Correct binding of OutlierSelectivity and AverageFieldSize for serial properties

Category: Class Compiler

Platforms: All

Version: 2017.2.1

Description: This change corrects a problem where the outlier selectivity and the average field size values recorded by TuneTable for serial properties might not get bound to the SQL table definition properly during class compilation.

MAK4730: When including dependent classes do not report missing classes as an error

Category: Class Compiler

Platforms: All

Version: 2017.2.1

Description: In previous releases, if you compiled classes with 'b' flag or equivalent qualifier to include related classes and one of these related classes had been deleted, the compiler reported this as an error. However in some cases, this did not reflect an actual error. If the class being compiled does not have a link to the deleted class, the compile should succeed and no error condition exists. Typically, this situation occurs if the class had a link to the deleted class, but that link was removed when the class was deleted. The only problem is the unnecessary flag indicating the related class. This change ignores errors of a related class that has been deleted. Note that if there is still a link between the class being compiled and a class that was deleted then the class compile will report this as an error itself.

MAK4738: Ensure that compiler returns meaningful underlying error

Category: Class Compiler

Platforms: All

Version: 2017.2.1

Description: In some cases, the class compiler included a <SYNTAX>errdone+2^%qaqqt error in the compiler output and did not include the underlying error. This change corrects this problem. The compiler now includes the more useful underlying errors, such as SQL errors.

MAK4782: Fix computed code generation that falsely identified computed field contained embedded SQL

Category: Class Compiler

Platforms: All

Version: 2017.2.1

Description: In some cases, the class compiler identified a computed field as containing embedded SQL because it had the string "&sql". This could cause a compile error. This change reduces the possibility of falsely identifying embedded SQL and avoids the compile error in the rare cases where it still occurs.

MAK4839: Improve handling of persistent objects with properties that are dynamic objects

Category: Class Compiler

Platforms: All

Version: 2017.2.1

Description: In some cases persistent objects with properties that are dynamic objects could cause errors or be loaded with missing properties. This change corrects this problem.

Changes in the CSP Category

MAK4815: Improve locking of login data to improve clean up

Category: CSP

Platforms: All

Version: 2017.2.1

Description: Under certain conditions, concurrent updates to GroupById would not succeed in getting a lock and Caché could not complete the clean up. This change corrects this problem.

Changes in the CSP.Gateway Category

CMT1607+CMT1615: Add an Event Log message to provide information about failure to write to client

Category: CSP.Gateway

Platforms: All

Version: 2017.2.1

Description: These changes create event log messages when Apache reports a failed or incomplete write to a client. The CMT1615 change additionally checks the web server 'Client Aborted' flag to ensure that it was an actual failure.

CMT1608: Ensure that interrupted Caché processes are not reused to serve HTTP requests

Category: CSP.Gateway

Platforms: All

Version: 2017.2.1

Description: An interrupted Caché process can be returned to the pool and reused, which frees up resources. However, in some conditions, these processes could not reliably serve subsequent HTTP requests. This could lead to the communication protocol between the CSP Gateway and Caché becoming unsynchronized. This change ensures that these interrupted Caché processes are not reused to serve HTTP requests.

CMT1609+CMT1614: Return the unique request ID with each HTTP response and check that it matches the request ID

Category: CSP.Gateway

Platforms: All

Version: 2017.2.1

Description: This change returns the unique request ID (%request.RequestId) with each HTTP response and checks that it matches the request ID dispatched to Caché with the corresponding request message. This enhancement provides an extra level of validation. If the request/response IDs do not match, one of the following messages is written to the Event Log:

Protocol Error between the CSP Gateway and Cache

WARNING : Outgoing Session ID does not match the Incoming Session ID

CMT1630: Ensure that the 'Start Private Web Server' function ($$StartPWS^CSPGWMGR) will work for cases where a TCP Port other than the default is specified.

Category: CSP.Gateway

Platforms: All

Version: 2017.2.1

Description: This change will ensure that the 'Start Private Web Server' function ($$StartPWS^CSPGWMGR) will work for cases where a TCP Port other than the default is specified.

For example:

Set status = $$StartPWS^CSPGWMGR(57777)

Where '57777' is not the default port for the PWS (as specified in the Cache configuration - cache.cpf).

Changes in the DeepSee Category

DTB635: Fix failure to complete certain queries

Category: DeepSee

Platforms: All

Version: 2017.2.1

Description: Under some circumstances DeepSee queries would not complete while cubes with large amounts of data were being synchronized. This change corrects this problem.

DTB668: Fix parsing of SQL fieldList containing functions with quoted arguments

Category: DeepSee

Platforms: All

Version: 2017.2.1

Description: A DeepSee listing field list which contained a function call could fail to parse properly if one or more arguments of the function call was quoted, eg: fieldList="BirthDate, TO_CHAR(BirthTime,'hh24:mi:ss')" These fields in the fieldList will now execute correctly when used as a detail listing.

DTB674: Check for related cube existence in Model Browser load

Category: DeepSee

Platforms: All

Version: 2017.2.1

Description: The Model Browser would display a system error if a cube in a relationship network was disabled without disabling the related cubes pointing to it. With this change the page will load as if the disabled cube is not defined at all. It will not highlight the fact that a relationship is defined that points to a cube that is disabled.

PFS003: Assign correct parent node to tuple(expr) simplification

Category: DeepSee

Platforms: All

Version: 2017.2.1

Description: In cases where a tuple(expr) is used within another expression, it was possible for the incorrect parent node to be assigned. Now, single expression tuples should be assigned their correct parent.

Changes in the Documentation.DocBook Application Category

AAH1030: Fix slow DocBook search

Category: Documentation.DocBook Application

Platforms: All

Version: 2017.2.1

Description: DocBook search started slowly. This problem first appeared in Caché 2017.1. This change corrects this problem.

Changes in the Ensemble Category

KDS342: Ensure All Matching Results Appear in Message Viewer

Category: Ensemble

Platforms: All

Version: 2017.2.1

Description: In the Message Viewer, users can filter the results which will be displayed by various criteria. However, when the search criteria included certain extended criteria and the selected Page Size was smaller than the total number of messages, some of the matching results were not displayed even if you navigated to the next page. This change ensures that all matching messages are displayed.

Changes in the Ensemble.DTL Category

JGM619: Ensemble DTL correct addition of .GetAt( for short hand .( where used as parameter of a function call

Category: Ensemble.DTL

Platforms: All

Version: 2017.2.1

Description: In a DTL it is possible to have a value of a function acting on a collection property such as '..Pad(source.ToDo.(1),20)' In previous versions this would be compiled to ..Pad(source.ToDo.GetAt(1),20) but an error had been introduced whereby the GetAt would only be inserted if the second parameter to the function was in quotes.This has now been corrected.

Changes in the Ensemble.Editors Category

KDS343: Avoid JavaScript Error in Complex Record Mapper When Modifying Complex Map Attributes

Category: Ensemble.Editors

Platforms: All

Version: 2017.2.1

Description: The panel on the right side of the Complex Record Mapper page displays attributes of the selected part of the Complex Map, whether that is a header, trailer, sequence, record, or the complex map as a whole. If the current document is not read-only, users can modify the values of the displayed attributes. However, prior to this change, if a user tried modifying the value for one of the complex map attributes (Target Classname, Character Encoding, Annotation), an error popup would come up describing a JavaScript exception. This change fixes that problem.

Changes in the Ensemble.ManagementPortal Category

JGM622: Correct resource required for Ensemble Activity Volume And Duration dashboard

Category: Ensemble.ManagementPortal

Platforms: All

Version: 2017.2.1

Description: The Ensemble Activity and Duration monitoring dashboard requires the %Ens_Dashboard USE privilege. There was an error specifying this required privilege. This change corrects this error.

Changes in the Global Module Category

RJF274: Fix an unnecessary delay and WD pass during compaction

Category: Global Module

Platforms: All

Version: 2017.2.1

Description: When database compaction or defragmentation runs concurrently with user jobs, it could lead to the database write daemon running more frequently than intended. In most cases this would be benign, but the increased write activity could slow user response on system that are under substantial load. This change eliminates the unnecessary delay.

Changes in the iKnow Category

BDB786: Matching: fix matched word bit mask length

Category: iKnow

Platforms: All

Version: 2017.2.1

Description: For entity-level matches, a mask of which entity word positions were matched can be obtained through %iKnow_Objects.EntityMatch or %iKnow.Matching.MatchingAPI:GetMatchElements(). This mask is calculated when entities are matched through $bit() operations for all matching word positions and is then stored for retrieval through the above methods. As only the matching word positions are registered, trailing false bits were never recorded, although they do represent important information about the quality of the match. For most Germanic languages incl English, the last words are most important, so filtering the %iKnow_Objects.EntityMatch table based on the endings of this word mask is one of the more relevant queries.

This change ensures that the stored bitstring has a length equal to the number of words in the entity, so trailing false bits are saved appropriately.

HSU234: [iKnow] Fix dictionary error

Category: iKnow

Platforms: All

Version: 2017.2.1

Description: This change corrects an error reported by internal references in the dictionary.

Changes in the iKnow.iFind Category

HSU213: Fix iFind cooccurrence search issues

Category: iKnow.iFind

Platforms: All

Version: 2017.2.1

Description: This change makes the following iFind cooccurrence search corrections:

  • Handle whitespace correctly.

  • Ensure %iFind.Rank.Analytics handles positional search and cooccurrence search mode correctly.

  • Ensure that newline and return characters are handled correctly for highlighting.

  • Ensure that highlighting is handled correctly.

Changes in the Installation.UNIX Category

ALE2971: Improve error detection in UNIX installation

Category: Installation.UNIX

Platforms: UNIX

Version: 2017.2.1

Description: If certain errors occurred during a UNIX installation, the errors would not be reported and the installation would continue. This change corrects this problem; the UNIX installation will abort if any command returns an error in preinstall, configure, install and postinstall stage scripts in any package. If your environment relies on the previous behavior, that is the installation continuing through these errors, you can return to the this behavior by setting "ISC_PACKAGE_SHELL_COMMAND=sh" before running the install. This disables error checking.

ALE3018: Fix installer error recognizing Japanese Red Hat Linux platform

Category: Installation.UNIX

Platforms: UNIX

Version: 2017.2.1

Description: Under some circumstances the installer did not recognize the Japanese Red Hat Linux platform and requested that the user identify the platform. This change corrects this problem and the installer now correctly recognizes Japanese Red Hat Linux platforms when a multibyte locale is set.

ALE3024: abort Unix install as soon as one package install fails

Category: Installation.UNIX

Platforms: All

Version: 2017.2.1

Description: Unix install will abort immediately when any package fails to install.

Changes in the Journaling Category

HYY2189: Address an issue of global name matching in journal restore

Category: Journaling

Platforms: All

Version: 2017.2.1

Description: This change addresses an issue in journal restore where, if the user specifies selected globals to restore, globals whose names begin with any of the selected ones could get restored as well.

HYY2204: Address a potential case of incorrect mirror checkpoint

Category: Journaling

Platforms: All

Version: 2017.2.1

Description: In rare circumstances, the dejournal updater has to skip an update. For example, it skips an update if the database file is dismounted after the dejournaling starts. This change ensures that these cases are handled correctly and that the mirror checkpoint is correct.

HYY2206: Suppress exit messages from dejournal prefetchers

Category: Journaling

Platforms: All

Version: 2017.2.1

Description: Removed exit messages from dejournal prefetchers like the following:

06/21/17-16:20:49:354 (13056) 0 Prefetcher #53 for dejournaling task 0 exits after idling for 300 seconds

06/21/17-16:20:49:354 (13056) 0 Mirror Prefetch exited due to halt command executed

which are present in 2017.2.0.

Changes in the Language Bindings.Net.ADO Category

JCN1868: Add cast to prevent infinite loop

Category: Language Bindings.Net.ADO

Platforms: All

Version: 2017.2.1

Description: The CacheParameterCollection.AddRange(CacheParameter) api was calling AddRange without providing a cast to an Array and causing an infinite loop.

Changes in the Language Bindings.Net.Gateway Category

WAL373: Improve Handling of Null Parameters in Gateway Code

Category: Language Bindings.Net.Gateway

Platforms: All

Version: 2017.2.1

Description: Prior to this change passing "" as an argument to proxy class methods could cause a problem with later parameters, depending on the type of the parameter. This is now fixed.

Changes in the LDAP Category

STC2654: Fix error searching groups when authenticating for LDAP

Category: LDAP

Platforms: UNIX

Version: 2017.2.1

Description: Under some circumstances Caché would not correctly search groups for LDAP authentication requests. This change ensures that the correct escape sequence is present so that groups can be searched.

Changes in the Lock Category

SML2531: Fix non-mirror database recovery failure when mirror ECP connection outage occurred

Category: Lock

Platforms: All

Version: 2017.2.1

Description: Under certain circumstances, a non-mirrored database recovery fails because of a mirror ECP connection outage. The symptoms include a <LOCKLOST> error and possibly an access violation. This change corrects this problem.

Changes in the Mirroring Category

JO2996: Mirror members are allowed to have additional collations when connecting to the primary

Category: Mirroring

Platforms: All

Version: 2017.2.1

Description: Mirror members will no longer refuse to connect to the primary if the instance supports more collations than the primary. However a system will continue to refuse to connect if the primary supports collations which it does not support. This change corrects a problem with minimum downtime mirror upgrades when the new version has an additional collation added to the existing locale. Previously when the backup was restarted after upgrading to the new version it would refuse to connect to the primary because the set of collations did not match exactly.

JO2999: Correct handling of failure codes from mirror_dejrn_getrec_tilend

Category: Mirroring

Platforms: All

Version: 2017.2.1

Description: In the rare case where the dejournal updater job dies unexpectedly on a mirror member, the dejournal reader job will now log a message and exit gracefully. In the past the dejournal reader would simply get stuck and would enter an endless cycle of generating messages about getting stuck/unstuck without actually making any progress.

JO3009: Update System.Mirror.CatchupProcessFile to indicate whether it reached the valid end of the file or just the "current" end of the file

Category: Mirroring

Platforms: All

Version: 2017.2.1

Description: A rare problem could occur in 2017.2 catching up mirrored databases where the catchup process might log an error in the console log about an invalid starting point. The error message has the form:

Error: Invalid starting point in <journal file> (mirfile #46) pos 0, minimum expected (mirfile #45) pos 1073741824 during dejournal

Re-running the Catchup process would generally succeed.

SML2465: Allow backup/async member in Synchronizing state to purge mirror journal file

Category: Mirroring

Platforms: All

Version: 2017.2.1

Description: In previous releases, for backup/async member, Caché used to skip purging mirror journal file when the member was not connected to primary (data channel was not connected). With this change, Caché allows mirror journal files to be purged when the backup/async member is retrieving journal files from primary member before data channel is connected.

SML2469: Allow mirrored database to be removed when mirror is in synchronizing state

Category: Mirroring

Platforms: All

Version: 2017.2.1

Description: Under certain conditions, removing a mirrored database from a backup or async member could take a long time. This problem occurred when the mirror was in a synchronizing state. This change corrects this problem.

SML2507: Avoid ISCAgent getting into loop when initialize_config_info() gets error

Category: Mirroring

Platforms: All

Version: 2017.2.1

Description: This change fixes a problem where an agent job could run into a loop caused by initialization errors.

SML2522: Fix mirror monitor display when dejournal stopped due to error

Category: Mirroring

Platforms: All

Version: 2017.2.1

Description: In some cases the mirror monitor would report that the mirror needed to catch up when it actually was stopped because of an error. This change corrects this problem and the mirror monitor reports the correct state.

Changes in the MultiValue.Query Category

CDS2908: Prevent loop in CMQL error processing

Category: MultiValue.Query

Platforms: All

Version: 2017.2.1

Description: If a CMQL query was run on a read-only database, it caused a loop when processing the <PROTECT> error. This change corrects this problem.

Changes in the Networking Category

GK1313: Modify TCP write to not send any packets after a failure

Category: Networking

Platforms: All

Version: 2017.2.1

Description: On some platforms when the TCP system buffers are filled, the system call select could encounter an error. In those conditions it dropped the last partially sent packet, but subsequent write attempts succeeded. Since one packet failed, the following packets should not be sent.

  • To prevent dropping a partially sent packet, this change tries resending the packet under these conditions. If it encounters an error resending, the send will fail.

  • Modified all platforms to prevent sending more data on nonrecoverable TCP send errors until the connection is closed and reestablished.

Changes in the Networking.ECP Category

GK1331: Correct reverse $ORDER of subscript-level mapped global across ECP

Category: Networking.ECP

Platforms: All

Version: 2017.2.1

Description: In very rare conditions a reverse $ORDER of a subscript-level mapped (SLM) global, which is being modified by the same app-server, may return an incorrect value. This change corrects this problem.

GK1337: Fix ECP server failure to rollback all open transactions on connection failure

Category: Networking.ECP

Platforms: All

Version: 2017.2.1

Description: On app-server when there are nested remote transactions, if an inner transaction is rolled back and then the connection is dropped, the db-server session cleanup may not rollback the outermost transaction. This change fixes this problem.

Changes in the Object.Library Category

DLP3741: Object Synchronization - add support for collections of serial objects to %Library.ObjectJournal

Category: Object.Library

Platforms: All

Version: 2017.2.1

Description: A bug that caused collections of serial objects to not be properly synchronized when OBJJOURNAL = 2 is now fixed. The problem was that adding a journal record (%Library.ObjectJournal) to a sync set failed to process collections of serial objects, causing a seemingly successfully synchronized object to be missing some data.

Changes in the Object.Storage Category

DLP3734: Fix index on stream update

Category: Object.Storage

Platforms: All

Version: 2017.2.1

Description: iFind indexes defined on a property whose type class is a stream class will now be updated on every object update even if the stream property was not modified.

Changes in the Shadowing Category

HYY2203: Address an issue of shadow stopping when filter is used

Category: Shadowing

Platforms: All

Version: 2017.2.1

Description: A shadow system could stop under rare circumstances, typically with a filter specified. This condition could occur within five minutes of starting the shadow. This change corrects this problem.

Changes in the SQL Category

DPV5119: Correct from^%qaqpsq code that skips to FROM clause with JSON_OBJECT in the statement

Category: SQL

Platforms: All

Version: 2017.2.1

Description: A problem has been corrected with the parsing of JSON_OBJECT in embedded SQL which might cause the parser to incorrectly report that a closing quote on a string was missing.

DPV5125: SQL: Correct frozen plan error condition of SELECT * validation

Category: SQL

Platforms: All

Version: 2017.2.1

Description: A problem has been corrected where a SELECT * statement with a frozen plan would incorrectly get an "SQLCODE=-76 Message: Cardinality mismatch between the SELECT-list and INTO-list error". This error occurred if the class was modified to add a property to the class and that increased the number of columns returned by SELECT *. If the number of columns for a table changes and a SELECT * statement was using a frozen plan, the current (and correct) behavior is that the frozen plan goes into an error state and is not used. You can clear this error state by unfreezing the plan (and a new plan will be generated as needed) or by editing the class/table and returning the definition to its original state.

MAK4739: Reduce locks when cleaning SQL index entries to avoid compiler error

Category: SQL

Platforms: All

Version: 2017.2.1

Description: When Caché cleaned the SQL statement index, it was holding a lock on a root node for longer than required. Holding the lock occasionally caused a lock conflict which led to a compile error. This change reduces the time that the lock is held and minimizes the chance of a lock conflict.

MAK4832: Restructure where null replacement value is inlined for conversion code

Category: SQL

Platforms: All

Version: 2017.2.1

Description: If a property datatype has logical to display odbc type conversions and there is a an SQL query which selects this property and the property is coming from a subscript which could be null then it was possible the inlining logic could generate invalid ObjectScript code resulting in a compile error of the generated SQL code.

Changes in the SQL.DDL Category

DPV5152: Correct problems with COMPUTEONCHANGE with delimited identifiers, including %%INSERT/%%UPDATE

Category: SQL.DDL

Platforms: All

Version: 2017.2.1

Description: A problem has been corrected that occurred under the following conditions:

  • Create a table through DDL.

  • Include a field that is computed, with a COMPUTEONCHANGE specification where one or more fields in the COMPUTEONCHANGE were delimited identifiers.

Note that when specifying the keywords %%INSERT or %%UPDATE for COMPUTEONCHANGE, these special names must be specified using delimited identifiers.

For example:

CREATE TABLE SQLUser.MyStudents (
   Name VARCHAR(36) NOT NULL,
   DOB DATE,
   RowUpdated TIMESTAMP COMPUTECODE { Set {*}=$zdatetime($ztimestamp,3,1,6) } COMPUTEONCHANGE ("%%INSERT"))

DPV5153: Correction for CREATE VIEW when looking for a unique classname

Category: SQL.DDL

Platforms: All

Version: 2017.2.1

Description: A problem has been corrected with CREATE VIEW when the name of the classname the statement is using has already been defined, but with a different case.

Changes in the SQL.Privileges Category

DPV5139: Correct error reported for failure in $SYSTEM.SQL.GrantObjPriv/$SYSTEM.SQL.RevokeObjPriv

Category: SQL.Privileges

Platforms: All

Version: 2017.2.1

Description: A problem has been corrected where the methods $SYSTEM.SQL.GrantObjPriv() and $SYSTEM.SQL.RevokeObjPriv() were not properly returing an error when the user did not have privilege to perform the GRANT or REVOKE. The GRANT/REVOKE was not performed, but the return value of the method was incorrect, so the caller was assuming the GRANT/REVOKE was performed.

Changes in the SQL.Query Processing Category

MAK4848: Correct detection of MAXLEN="" meaning %String property can be any length in SQL processing

Category: SQL.Query Processing

Platforms: All

Version: 2017.2.1

Description: If you define a property such as:

property Str as %String(MAXLEN="");

This means there is no limit on the string length other than maximum string length. The logic in SQL which truncates long strings when processing these as DISTINCT or GROUP BY fields did not interpret this MAXLEN="" correctly which could result in SUBSCRIPT errors at runtime. This change corrects this problem.

TRW1570: Continue adding conditions to a join tempfile until at least one is on an incoming stream

Category: SQL.Query Processing

Platforms: All

Version: 2017.2.1

Description: Some left outer join queries with ON conditions on constants could fail to compile. This change corrects this problem.

Changes in the SQL.SQLFiler/TableCompiler Category

DPV5112: Correct field validation call when IsValid method has multiple arguments with default values

Category: SQL.SQLFiler/TableCompiler

Platforms: All

Version: 2017.2.1

Description: A problem has been corrected when the SQL Filer calls a field's IsValid method, and the IsValid method has arguments with default values, and the method code has at least one line label, the default values of the method arguments were not applied and a reference to the method argument might encounter an <UNDEFINED> error.

DPV5133: Support inserting into a stream field a value like '1@string" when there is an oref 1 defined

Category: SQL.SQLFiler/TableCompiler

Platforms: All

Version: 2017.2.1

Description: A problem has been corrected when using SQL to INSERT or UPDATE a stream field to a value of a string literal that looks like a string oref and the numeric part of the string-oref matches a real oref defined in the process's partition and that oref is not a stream oref.

For example:

Suppose an oref is defined in local variable

MyOref=1@User.MyClass

An SQL INSERT like the following is executed:

INSERT INTO MyTable (StreamField) VALUES ('1@mystring')

This INSERT would have failed with a -415, <METHOD DOES NOT EXIST> error. With this change, the INSERT succeeds.

Changes in the StartUp Category

JO2998: Test whether database is mounted read only rather than in open mode to decide if directio is required or optional

Category: StartUp

Platforms: IBM AIX

Version: 2017.2.1

Description: A minor issue has been resolved where if the manager's database of an instance on an AIX system using direct I/O for database writes is open outside of Caché for buffered access and Caché is then started, the system would appear to start but the write daemon would report Serious Disk Write errors. Under this conditions the system will now fail during start-up and will not prompt the user to log on.

Changes in the Studio Category

CDS2941: Support quoted name for SqlComputeOnChange

Category: Studio

Platforms: All

Version: 2017.2.1

Description: SqlComputeOnChange may now be quoted to allow reference to a property with a non-standard name.

JN1739: Avoid invalidation of C++ map iterator when updating class summaries

Category: Studio

Platforms: All

Version: 2017.2.1

Description: The Studio cache management was invalidating an iterator by an inappropriate erase() in the internal data structures. This has been corrected.

Changes in the System Category

RJF262: New memlock flags for controlling shared memory allocation

Category: System

Platforms: All

Version: 2017.2.1

Description: This change introduces new flags to the documented 'memlock' cache.cpf parameter to allow finer-grained control over Caché startup behavior allocating shared memory. To the degree possible, it allows users to standardize their selection across different flavors of UNIX/Linux and Windows. It does so while preserving compatibility with existing flag values.

This change adds bits 32 and higher and this change does not alter the behavior of pre-existing bits, nor does it alter the default behavior when all bit flags are off (memlock=0). For details, see the section on memlock in the [config] reference section in the Caché Parameter File Reference.

On AIX, the message that occurs on successfully allocated shared memory is changed slightly to indicate how it was allocated. The messages on other platforms are unchanged and already allowed the user to distinguish the various cases.

By default (memlock=0), just as before this change, Caché requests large pages from AIX and that request may be granted fully, partially, or not at all, depending on user privileges and available large pages. The details of whether large pages were used to respond to the request are not provided in the message but are only available from AIX (via the 'svmon' command). The message in this case is as follows:

06/14/17-16:48:53:464 (9962194) 0 Allocated 83536MB shared memory (using large pages if available): 80000MB global buffers, 35MB routine buffers

With large pages disabled, the following message indicates success:

06/14/17-16:17:53:634 (9962096) 0 Allocated 83530MB shared memory: 80000MB global buffers, 35MB routine buffers

With large pages set to be required, the following message indicates success:

06/14/17-16:14:26:173 (9502990) 0 Allocated 62880MB shared memory using large pages: 60000MB global buffers, 35MB routine buffers

SML2500: Improve CreateGUID() speed in UNIX when ethernet address is not available.

Category: System

Platforms: All

Version: 2017.2.1

Description: This change improve the speed of %SYSTEM.Util.CreateGUID() when there is no ethernet address available in the system.

TR1150: ECP client access error on big string bitmaps > 8kb

Category: System

Platforms: All

Version: 2017.2.1

Description: In unusual cases involving big strings used as bitmaps in which the big string is longer than about 8kb, it was possible for a user on an ECP client to get an error when accessing the string. This could occur in situations where the first block containing the big string is cached on the client but the last block is not and updates to the bit string are occurring on the client (various other conditions also must be present). In this situation, the data on the data server is fine - there is no database integrity problem. The condition could be cleared by anything that flushes the client cache - including temporarily disabling and reenabling ECP for that client or rebooting Caché on the client.

This change corrects this problem. Users will not encounter this error.

Changes in the Transaction Processing Category

HYY2211: Ensure <ROLLFAIL> is generated when journaling is disabled due to I/O error

Category: Transaction Processing

Platforms: All

Version: 2017.2.1

Description: Addressed an issue that caused transaction rollback to fail silently when journaling is disabled due to journal I/O error.

The problem is present in 2009.1 and later.

Changes in the UltiMumps Category

CDS2920: Apply U2 $C(0) subscript check when reference is created

Category: UltiMumps

Platforms: All

Version: 2017.2.1

Description: When $C(0) subscript checking is turned on, an error will be thrown when a reference to an invalid subscript is created, instead of when it is used.

Changes in the Utilities Category

CDS2939: Fix class load problem after UDL utility is used

Category: Utilities

Platforms: All

Version: 2017.2.1

Description: In previous releases, there could be a situation where loading a class from an xml file would fail if the process had previously worked with UDL-format files. This change corrects this problem.

CDS2943: Import^%apiRTN did not call source control OnAfterSave

Category: Utilities

Platforms: All

Version: 2017.2.1

Description: In previous releases, when a routine was loaded with Import^%apiRTN, or saved by Atelier, and source control hooks were defined for the namespace, the OnBeforeSave hook was called but not OnAfterSave. This change ensures that the OnAfterSave hook is also called.

STC2651: Provide information about namespace mounted state in SYS.NAMESPACE:GetNSInfo() method

Category: Utilities

Platforms: All

Version: 2017.2.1

Description: This change provides additional information about whether the namespace is mounted in the SYS.NAMESPACE:GetNSInfo() method.

Feedback