InterSystems Documentation 
Caché and Ensemble Maintenance Kit Release Notes


This document provides a list of the changes between versions 2010.2.6 and 2010.2.7 for Caché and Ensemble.
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

Topics in this document 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.

Prior to beginning an upgrade of a Caché or Ensemble instance, InterSystems recommends that the be shut down normally.

After each upgrade step, the following conditions apply:

  • Routines

    Compiled routines are upward-compatible from version to version and do not need to be recompiled unless specified otherwise in the upgrade notes for a specific release.

    Because most versions contain improvements in the routine compiler, in the generated code, and/or efficiencies in the runtime support, customers may decide to recompile their routines to take advantage of new features and meta-routine information. Those customers whose actions implicitly access this underlying information must recompile their routines. An example of such access is source-level debugging on version X of code compiled on version earlier than X.

    If you recompile routines, they should be recompiled after classes are recompiled.

  • Classes, SQL, Projections, Proxy Classes

    InterSystems requires that all classes be recompiled after an upgrade. The following command will upgrade and compile the class dictionaries in every namespace:

        Do $SYSTEM.OBJ.CompileAllNamespaces("u")
    

    You must regenerate any proxy classes used in the upgraded instance by following the instructions in the appropriate guide(s) in the Caché Language Bindings set. You must also purge any cached queries in any upgraded namespace by issuing the command:

        Do $SYSTEM.SQL.Purge()
    

    in that namespace.

  • Exported XML

    Unless specified in the upgrade notes for a specific release, exported XML files can be imported into later releases.

    The reverse is NOT true. Later versions could be using new features not present in earlier versions, and could have a different class dictionary version number which alters how these classes are stored internally that can not be undone when importing to a previous version.

  • Debugging

    InterSystems also recommends recompiling routines and classes for applications under development. This synchronizes the debugger with the expected format of the compiled code.

  • Caveat

    Because recompiling necessarily updates system data associated with the routine, users who recompile classes or routines must have write access to this data (^ROUTINE) in each namespace where the object being compiled is mapped. Failure to observe this requirement will result in
    ERROR #302: the database is read-only.

Upgrading ECP Configurations
The following guidelines apply to the process of upgrading ECP configurations:
  • Unless explicitly noted for a particular version, the protocol used to communicate among ECP systems is fully compatible across versions.
  • For ECP configurations consisting of stateless, independent database and application servers, an ECP configuration may be updated incrementally, system by system.

    The application servers should be upgraded to the new version first. Once all application servers have been upgraded, the database servers can be serially upgraded.

If your database or application servers hold local transaction information until the transactions are completed, or 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 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


Category: Ensemble
Platforms: All
DevKey: DDP416
Summary: Make Message Bank client more robust after timeouts

Description:

In situations where a TCP timeout was encountered by the Message Bank client code, it was possible for the Message Bank server to respond (albeit in a delayed fashion) to each submission sent from the client. The client code was not handling this possibility, and would run into issues due to the extra responses being returned from the server. With this change, the client can handle such responses and ignore those that have already been processed.

Furthermore, the code was not thread-safe whenever a retry was required -- after the first attempt the client code would release the lock preventing other processes from attempting modifications on the current header. This has also been corrected.


Category: Ensemble
Platforms: All
DevKey: DDP418
Summary: Performance and reliability improvements to Ens.Alarm

Description:

This change modifies the internal structures used by the Ens.Alarm component to improve the performance of the component in situations where large numbers of AlarmRequests need to be processed. (The process now uses the ^||ISC.Ens.Alarm process-private global to avoid memory issues on very busy systems.)

In addition, the behaviour has been improved to ensure that all AlarmRequests survive production shutdowns when the Ens.Alarm pool size is greater than 1.


Category: Ensemble
Platforms: All
DevKey: JN979
Summary: Prevent Data Corruption When Invalid Value Is Stored Into DICOM Document

Description:

This change corrects a problem where data inserted into a DICOM document which fails validation can be corrupted.

Category: Ensemble.Adapter
Platforms: All
DevKey: TAP1239
Summary: Fix error logic for FTP Inbound disk write errors

Description:

This change fixes an <UNDEFINED> *tSC1 in EnsLib.FTP.InboundAdapter:retrieveFile() that occurs if %Net.FtpSession:Retrieve() returns an error.

This change also makes EnsLib.FTP.Common:disconnectOnNetErr() ignore <WRITE> errors that come from a File Stream rather than from the FTP/TCP connection.


Category: Ensemble.Adapter
Platforms: All
DevKey: TAP1242
Summary: In FTP Outbound Adapter, wrap %IO stream in %Library stream

Description:

This change makes the FTP Outbound Adapter PutStream() and GetStream() methods wrap supplied arguments in a %IO.LibraryStream wrapper if they are %IO stream objects. This allows the %Net.FtpSession object to handle them with full error checking even though it is not aware of %IO stream signatures.

Category: Ensemble.Adapter
Platforms: All
DevKey: TAP1249
Summary: Use Process Private Global for chunks in WriteCountedStream() method

Description:

This change allows the Ensemble TCP "Counted" adapters to write very large streams without the risk of exhausting process memory.

Category: Ensemble.Adapter
Platforms: All
DevKey: TAP1267
Summary: Remove unused MsgBank LastId queries and response values

Description:

This change removes the computation and inclusion of LastId values for messages and events in the returned response XML from the Message Bank TCP Service when new messages and events are banked. Because of the way Id's are constructed in the message bank with the node Id prepended, there is no use to the concept of a "last" id. Each client effectively has its own range of IDs.

Category: Ensemble.BPL
Platforms: All
DevKey: TAP1241
Summary: Don't suspend messages with priority SimSync when shutting down

Description:

This change fixes a flaw where, upon restarting, synchronous BPL messages and responses to them are not restored because they were suspended during shutdown. Thus, a BP that ought to resume without problems is instead dependent on manual intervention to resubmit the suspended messages it's waiting for so it can resume operation.

Category: Ensemble.JavaGateway
Platforms: All
DevKey: AND1178
Summary: JavaGateway: Add socket.close() to thread error exit code

Description:

This corrects an issue where the Ensemble keepalive processing created a separate socket for each keepalive request. Each thread now reuses the same socket.

Category: Ensemble.JavaGateway
Platforms: All
DevKey: HCR249
Summary: Remove debug command from %Net.Remote.Gateway

Description:

This change remove an extraneous debug command from the normal Gateway code path.

Category: Ensemble.ManagementPortal
Platforms: All
DevKey: DDP106
Summary: Fix SVG Height Calculation in Message Trace

Description:

When a large number of messages are included in a trace, the SVG display will now adjust for the number of items present rather than the number of items returned by the query as a whole.

This would cause an overly tall SVG display in most cases, and could cause a white display on Internet Explorer if there were enough messages in the trace.

The height is now correctly calculated.


Category: Ensemble.RulesEngine
Platforms: All
DevKey: MC1169
Summary: Normalize TimeExecuted in its InitialExpression

Description:

SQL assumes the InitialExpression is normalized, and its value goes into the index unchanged. However, on delete, the storage value must be normalized (StorageToLogical) before being used in an index. This change assures that this happens.

Category: Languages.COS
Platforms: All
DevKey: JO2461
Summary: CORRECT JOB command problem passing TCP devices in conjunction with certain amount of other data

Description:

A rare problem which could cause the JOB command to fail while passing an open socket to the child process has been corrected. This generally only occurred when also passing the symbol table or a large amount of argument data, however, neither of these would guarantee the JOB command would run into trouble.

Category: Networking.ECP
Platforms: All
DevKey: GK957
Summary: ECP recovery to ignore dismounted remote DBs

Description:

ECP recovery may fail or cause an unexpected failure if one of the remote DBs is dismounted. During recovery, it may remount again. The side effects are: access vio during ECP recovery (a rare event). This is now fixed by ignoring dismounted remote databases.

Category: Networking.ECP
Platforms: All
DevKey: GK959
Summary: ECP recovery may drop some partially processed requests

Description:

In very rare cases, when the network and the host service is very fast, ECP recovery may lose partially processed requests during a connection outage. This is fixed.

Category: Object
Platforms: All
DevKey: MAK3216
Summary: When releasing locks on ^rINDEX/^rINDEXCLASS use immediate mode

Description:

In order to ensure consistency of the routine and class index, Caché sometimes locks ^rINDEX and ^rINDEXCLASS. This code has been changed to use immediate mode for releasing the locks to ensure they are released straight away even if in a transaction.

Category: Object.Gateway
Platforms: All
DevKey: HCR238
Summary: OPEN commands in %Net.Remote.Gateway to check for timeout

Description:

Open commands executed in the .NET Gateway have now been modified to include timeouts to prevent indefinite hangs.

Category: Object.Library
Platforms: All
DevKey: DMC829
Summary: CacheSSH: Update to libssh2-1.3.0

Description:

This changes updates libssh2 to version 1.3.0 to correct an increasing number of issues being reported in 2010.2.x installations in the field.

Category: Object.Library
Platforms: All
DevKey: MAK3293
Summary: Trap errors in stream object inside %Net.FtpSession

Description:

When using %Net.FtpSession to send or receive data, Caché uses a stream to put/receive the data but was not checking for errors from the stream class (such as it running out of disk space for a file stream). With this change, Caché will detect this error and report an error code from the %Net.FtpSession class with the error information from the stream embedded.

Category: Object.Storage.Default
Platforms: All
DevKey: DLP2785
Summary: Object Storage - acquire an exclusive lock on insert of atomic object if in a transaction

Description:

If %Concurrency is true then locks are acquired and released to guarantee consistent reads. All write operations are also guaranteed to be consistent. For %Concurrency values greater than 2, locks are acquired and not released until the object is destructed.

This change addresses a concurrency error that occurred when an atomic object (one that occupies a single global node on disk) is inserted inside of a transaction. In this case, the atomic write was not protected by a lock and a competing process could update the newly inserted object. This is only an issue when the transaction containing the original insert is rolled back. In that case, an error is reported by the rollback.

An exclusive lock is now taken out on all objects during insert as long as %Concurrency is true and, if the object is atomic, the insert occurs within a transaction.


Category: SQL.ODBC
Platforms: All
DevKey: JCN1213
Summary: Fix ProcessRow(false) returning SQL_ERROR at 32K boundry with complete data

Description:

Calls to SQLFetch could return SQL_ERROR(-1) in the case where a query returns 32K of data to the client and the last row of data is complete and no more data is present on the server.

This issue has been fixed. This change handles the 100 message on the attempt to fetch the next chunk of data, and returns SUCCESS to SQLFetch. The next call to SQLFetch will detect there is no more data and return SQL_NO_DATA_FOUND.


Category: SQL.Statement
Platforms: All
DevKey: DLP2849
Summary: SQL Statement - fix initial column offset in %SQL.ClassQueryResultSet

Description:

A bug that caused a result set returned by a CALL <class_query> SQL statement to fail to send its content to an xDBC client has been fixed.

Category: Studio
Platforms: All
DevKey: JN983
Summary: Update DICOM Association Defaults

Description:

Due to an expanded dictionary of SOP classes added in an earlier version, the total number of SOP classes defined by the standard exceeds 255. Some DICOM implementations cannot handle more than 255 classes.

In order to avoid this problem the EnsLib.DICOM.Util.AssociationContext:CreateAssocation() class method has been updated to create its default associations with only those SOP classes whose names contain the MOVE,FIND,GET or STORAGE words. This presently limits the number of definitions to around 180.

This method is really only provided as a convenience for testing and users should create their own association definitions which exactly match the requirements of their DICOM peers to which they wish to connect, limiting the SOP classes to those that are really needed. In addition to being more concise, this also has the advantage of improved performance.


Category: System
Platforms: All
DevKey: CDS1985
Summary: Fix memory overlay when using $ZU(160)

Description:

This change corrects an issue where an internal function used by Weblink Developer could overlay memory and cause access violations in the process.

Category: System
Platforms: All
DevKey: GK956
Summary: Modified the routine loader to preserve the string stack

Description:

When a large number of routines are loaded as part of an object instantiation, the system may run out of string stack. This situation has been fixed.

Category: System
Platforms: All
DevKey: GK971
Summary: Fixed large object destruction hang

Description:

Destruction of a large object hierarchy destruction may take some time. Any of the entries are to be retained, the system may hang. This change addresses that situation by releasing the retained block if there are any JOBs waiting for it

Category: System
Platforms: All
DevKey: JO2472
Summary: Correct remote JOB command so new JOB does not get exception on remote references

Description:

This change corrects situations where:
  • a process started via the remote JOB command could generate an exception if the new JOB references a global over ECP.
  • a remote JOB command could fail and block ECP if the %ZSTART code for a jobbed JOB made an ECP reference that failed.

Category: System
Platforms: All
DevKey: SAP1493
Summary: Fix accvio in a JOB server

Description:

This change corrects a situation where a jobserver could generate an <ACCVIO> if it received a "sigur1" signal while trying to halt its process.

Category: System
Platforms: All
DevKey: SAP1511
Summary: Fix infinite loop in global module while doing FileCompact

Description:

This correction addresses a situation where attempting to compact a file causes the process to go into an infinite loop taking 100% CPU.

Category: System.Journaling
Platforms: All
DevKey: HYY1677
Summary: Release lock on journal log upon error in purging journal log

Description:

This change addresses an issue that could cause journal switch to hang after an error in purging the journal log (such as an error resulting from insufficient disk space in the mgr directory where journal.log resides).

Category: System.Journaling
Platforms: All
DevKey: HYY1683
Summary: Prevent database error from freezing system during journal recovery at startup

Description:

This change corrects a situation where a system could freeze upon encountering <DATABASE> errors during journal recovery at startup.

Category: System.Journaling
Platforms: All
DevKey: HYY1684
Summary: Eliminate an unnecessary error in scanning for open transactions in journal restore

Description:

This fix corrects an issue that could cause journal restore to think mistakenly that an earlier file that might contain open transactions. The problem occurred if the user was restoring non-local journal files and did not specify a journal.log.

Category: System.Shadowing
Platforms: All
DevKey: HYY1642
Summary: Prevent cluster shadow from being left in "trying to reconnect" state

Description:

This change corrects an issue involving cluster shadowing where a cluster shadow copying process that died involuntarily might be left in a "trying to connect" state, even after Caché restart.

Category: System.Shadowing
Platforms: All
DevKey: HYY1666
Summary: Ensure only one JOB gets JOBbed off to copy journal files from a source cluster node

Description:

This change addresses an issue of cluster shadowing in certain rare circumstances (such as CPU shortage) where multiple JOBs might get started to copy journal files from one source cluster node. This resulted in overwriting the same destination file and causing one or more of the cluster shadow dejournaling JOBs to get an error.

Category: System.Trans. Proc.
Platforms: All
DevKey: HYY1686
Summary: Address a case of <STORE> error in transaction rollback

Description:

This correction addresses an issue of transaction rollback where rolling back open transactions involving a number of global nodes updated via bit SETs could fail with a <STORE> error.


© 2011, InterSystems Corporation. All rights reserved.