InterSystems Documentation 
Caché Maintenance Kit Release Notes


The release notes are available in the \Docs subdirectory of your installation.

Late-breaking information about this kit can be found in: \relnotes\readme.1st

Release notes from prior kits are combined in the file: \relnotes\cache\relnotes.htm

This document provides a list of the changes between Caché 2007.1.5 and Caché 2007.1.6.

Topics include:


General Announcements
Upgrading From Prior Released Versions
Customers running on any prior released version of Caché may upgrade to this version of Caché during installation. When upgrading across multiple versions, intermediate upgrade steps may be necessary depending on the inter-release compatibility requirements. The release notes for the intervening releases will contain that information.

After each upgrade step, the following conditions apply:

Upgrading ECP Configurations
The following guidelines apply to the process of upgrading ECP configurations:
If you have questions or concerns about how to upgrade your ECP configuration, please contact InterSystems Worldwide Customer Support.

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.

The most current list can be obtained from the InterSystems Website.

Users should check this list periodically to obtain the latest information on issues that may have an effect on the operation of their site.


Online Documentation
As a convenience to our users, InterSystems provides online access to documentation for recent product versions at the InterSystems Website. >From the home page, choose the Support & Education tab, then choose the Support menu item for the product you are interested in, for example, Caché Support. Links to the available documentation can be found on the support page for each product.

Description of a Change Report
To help you assess the impact of this maintenance kit on your applications, the remaining topics in this document describe each modification in detail.
If you need assistance evaulating the effect on your application(s), system(s), or related plans, please contact the InterSystems Worldwide Support Center:


Change Reports for This Maintenance Kit

Category: CSP
Platforms: All
DevKey: MAK2346
Summary: Restore journal state after each CSP page

Description:

If a CSP page disabled journaling with a call to DISABLE^%SYS.NOJRN, the CSP server was not preserving this so the next CSP page served by this same process would be running with journaling disabled.

This change remembers the journal state and restores it after each CSP page.


Category: CSP
Platforms: All
DevKey: MAK2375
Summary: Make sure CSP Server and CSP Gateway agree on the Preserve state of a session

Description:

There were some unusual cases where it was possible for the CSP Gateway and the Caché server to disagree on whether the Preserve setting was 0 or 1. The failure to keep these values in sync would result in either of two conditions:

This change now checks for any potential inconsistency in the Preserve state of the session and makes sure the gateway is updated with the correct state and the cookie is reset to the correct value.


Category: CSP.Gateway
Platforms: All
DevKey: CMT656
Summary: Rewrite the code responsible for responding to 'preserve' mode changes made in the Caché footer records

Description:

This change allows CSP Gateway to properly handle modifications to "Preserve" mode. Such changes can be made anywhere in the code responsible for delivering the session response. Changing a session from state-less (preserve mode 0) to state-aware (preserve mode 1) and vice versa results in changes to the data held in the session cookie/token. The Gateway needs to be made aware of these changes so that it can manage its connection pool appropriately.

Category: Networking.ECP
Platforms: All
DevKey: GK619
Summary: Modified ECP server daemon not to use the job server

Description:

When ECP daemon is started by the job server, ECP will now job a non job-server daemon, and abandon the original.

Category: Networking.ECP
Platforms: All
DevKey: GK656
Summary: Fixed the ECP requests number to wrap consistently

Description:

The ECP client and server both number their requests to one another in circular lists. When the number reaches a limit, it "wraps" to the beginning of the list.

The ECP client wrapped the request numbers to 1 but the ECP server wrapped it to 0. A mismatch in numbers causes a console log entry, drop the connection, and reconnect and recover immediately. This is an issue at sites where ECP recovery is disabled.

This has now been corrected so the wrapping on both sides is handled the same way.


Category: Networking.ECP
Platforms: All
DevKey: GK668
Summary: Modified the ECP server session shutdown to cleanup any queued background pre-fetching

Description:

This change modifies the ECP server shutdown to cleanup any queued pending pre-fetch requests. If these are not cleared properly, in very rare conditions the ECP server may receive a message while the write daemon of that session same is shutting down. This event leaves the background pre-fetcher in an undefined state.

Category: Networking.ECP
Platforms: All
DevKey: GK669
Summary: Removed the journal file number/count dependency in the ECP server

Description:

To provide its guarantees, the ECP server depends on the durability of its activities. Durability tracking was previously dependent on the journal file number, which is not updated and tracked in parallel with the journal offset.

This change modifies the durability logic not to depend on the journal file number.


Category: Object.ActiveX
Platforms: All
DevKey: JCN949
Summary: Avoid Microsoft Vista bug by not calling GetUserName() inside dll init code

Description:

Caché connections were failing in random ways due to a Microsoft bug that corrupts memory when GetUserName() is called inside the initialiuzation code of a dll. The details of the bug are described at http://support.microsoft.com/kb/942234.

This change alters CacheODBC.dll so it no longer calls GetUserName() during initialization.


Category: Object.Class Compiler
Platforms: All
DevKey: MAK2391
Summary: Fix typo in %occConvert

Description:

%occConvert could get an UNDEFINED error when upgrading a class dictionary version in a database. This has been corrected.

Category: Object.Library
Platforms: All
DevKey: MC788
Summary: Mark all methods DisplayToLogical and LogicalToDisplay as ServerOnly=0

Description:

These methods were projected by the prior CacheObject bindings. The classes modified are:


Category: Object.Relationships
Platforms: All
DevKey: DLP2159
Summary: Fix %BuildIndices 2007.1 bug for index on a collection of objects

Description:

An error that caused an invalid index to be constructed by %BuildIndices has been fixed. This affects only an index on a collection where the collection element type is an object. The error caused the subscript value to be a full OID form value instead of the standard ID value.

This error is present only in preceding releases of 2007.1.


Category: Object.Soap
Platforms: All
DevKey: MXT1049
Summary: WS-Security and WS-Addressing headers always in literal format

Description:

Independent of the SoapBindingStyle for a web client or web service, the WS-Security and WS-Addressing headers should always be in literal format (that is, not SOAP encoded).

Because of the use of SOAP encoding, the WS-Security header for SoapBindingStyle=encoded web client had the wrong header element name. This change fixes that problem.

The XMLFORMAT parameter (value of literal or encoded) in a %SOAP.Header subclass determines if the header should always be in the specified format. If XMLFORMAT is "" or not specified, then the header is output in the same format as the Body which is specified by SoapBindingStyle.


Category: Security
Platforms: All
DevKey: SML1045
Summary: Fix a security hole in $INCREMENT() for cluster nodes

Description:

This changes fixes a security hole in $INCREMENT() and $BIT() functions when a clustered database is configured to be read-only for a user. In this instance, the user gets a <PROTECT> error when a SET or KILL is attempted on a global in the database, but the $INCREMENT() or $BIT() code does not check for the error and the operation is passed through to the server.

This only happened on the cluster slave node side.


Category: Security
Platforms: All
DevKey: STC1423
Summary: $SYSTEM.Security.AddRoles() can no longer be called after an unhandled error

Description:

$SYSTEM.Security.AddRoles has been updated so that

you can no longer Call $SYSTEM.Security.AddRoles() from the debug prompt and escalate your roles outside of the scope of the application.

Important:
It is recommended that any routine or class use error handling in the procedures which call $system.Security.AddRoles().

Category: Security
Platforms: All
DevKey: STC1430
Summary: $SYSTEM.Security.AddRoles() can now be called from User defined "Z" functions

Description:

This change also allows $SYSTEM.Security.AddRoles() to be called from user-defined "Z" functions. These functions are extensions to the COS language which allow commands, functions, and special variables starting with "Z" to be added to the language.

Category: System
Platforms: All
DevKey: JO2234
Summary: Correct accvio due to calling object Destruct methods as part of popping the execution stack

Description:

In certain situations QUIT, ZQUIT and HALT commands could get exceptions triggered when Caché invoked the Destruct method to clean up objects which go out of scope as part of "popping" the internal execution stack.

This change avoids that condition.


Category: System
Platforms: All
DevKey: JO2241
Summary: Reload pointer into block after converting to exclusive ownership

Description:

This change corrects a condition where, in certain rare conditions, database corruption could occur on an ECP Client if the write daemon is in the process of writing a bottom pointer block for the ECP Client cache to disk while a user job is deleting a node from the block because the user job found a data block which is marked as "purged from the local cache".

The symptom of this degradation is that the indication of the space in use in the bottom pointer block will be larger than the size of the block itself.


Category: System
Platforms: All
DevKey: RFD412
Summary: Fix terminal margin handling for VMS itanium

Description:

The 'margin' parameter of the terminal USE command (for example, USE 0:(270) ) was handling values >255 differently on OpenVMS Alpha and OpenVMS Itanium.

The documentation says, "Values from 1 to 255 set the right margin for output; any other value disables the right margin", but on OpenVMS Alpha, Caché properly handled values only up to 511. On OpenVMS Itanium, Caché internally truncated the value to one byte, essentially acting as a #256 on values between 255 and 512.


Category: System.Licensing
Platforms: All
DevKey: RJW1576
Summary: License server can enter infinite loop and write enormous license report file

Description:

Under some rare circumstances, the license server could create a circular linked list of licenses. When this happened, the license server would loop attempting to process the list, or it would attempt to write an infinitely large license report file.

This change mitigates these problems from occurring by counting the elements processed and causing the license server to exit if the number exceeds the maximum possible number of structures. The license server will be restarted automatically if this should occur. User login and logout proceed without interruption during this period.

The license server restart will rebuild the list properly.


Category: Utilities.Routines
Platforms: All
DevKey: CDS1306
Summary: Fix possible regression in %STACK <FRAMESTACK> handling

Description:

Caché had been previously modified so it was careful to not use any more space on the frame stack than necessary if it was processing a <FRAMESTACK> error.

This change modifies that logic so it does not do this processing until after if checks that a <FRAMESTACK> error has occurred.