GT.M Version 5.2-000B Release Notes

Release Notes: GT.M Version 5.2-000B Release

Legal Notice

April 20, 2007

Revision History
Revision 1.2April 20, 2007 Changes for V5.2-000B
Revision 1.1April 10, 2007 Changes for V5.2-000A
Revision 1.0January 04, 2007Changes for V5.2-000



                        GT.M Group

                        Fidelity National Information Services, Inc.

                        2 West Liberty Boulevard, Suite 300

                        Malvern, PA 19355

                        United States of America

                     



GT.M Support: +1 (610) 578-4226

Switchboard: +1 (610) 296-8877

Fax: +1 (484) 595-5101

Website: http://www.fis-gtm.com

E-mail:  

Table of Contents

Typographical Conventions
Bulletin Overview
Platforms
Recompile
Relink
Global Directory Upgrade
Database Upgrade
Installation Instructions
UNIX
OpenVMS
Managing M mode and UTF-8 mode
Note on setting the environment variable TERM
Change History
V5.2-000B
V5.2-000A
V5.2-000
M-Database Access
M-Other Than Database Access
Utilities-MUPIP
Utilities-Other Than MUPIP
Error Messages
BADCASECODE
BADCHAR
BADCHSET
BOMMISMATCH
DLLCHSETUTF8
DLLCHSETM
DLRCILLEGAL
DLRZCTOOBIG
INVDLRCVAL
INVICUVER
NONASCII
NONUTF8CHSET
MRTMAXEXCEEDED [V5.2-000A]
PADCHARINVALID
RECSIZENOTEVEN
SOCKMAX
SVNEXPECTED [V5.2-000A]
SVNONEW [V5.2-000A]
WIDTHTOOSMALL
ZCNOPREALLOUTPAR [V5.2-000A]
ZINTDIRECT [V5.2-000A]
ZINTRECURSEIO [V5.2-000A]

Return to top

Typographical Conventions

Command Syntax: UNIX syntax (i.e., lowercase text and "-" for flags/qualifiers) is used throughout this document. OpenVMS accepts both lowercase and uppercase text; flags/qualifiers on OpenVMS should be preceded with "/".

Reference Number: The reference numbers used to track software enhancements and customer support requests appear in parentheses ( ).

Platform Identifier: If a new feature or software enhancement does not apply to all platforms, the relevant platform or platforms appear in brackets [ ].

Return to top

Bulletin Overview

In prior releases, GT.M treated all 256 combinations of the 8 bits in a byte as characters. There was no way to interpret a sequence of bytes as characters in Unicode™. GT.M Version 5.2-000 introduces support for string processing of strings in Unicode™ on UNIX platforms. Now, GT.M detects character boundaries(especially when the size of a character is greater than 1 byte), calculates glyph display width, and performs string conversion between UTF-8 and UTF-16. [UNIX] (C9911-001317)

GT.M now operates in 2 modes – M mode and UTF-8 mode.

  • In UTF8 mode, functionality related to Unicode™ becomes available and standard string-oriented operations (particularly intrinsic functions) operate with UTF-8 encoding.

  • In the default M mode, GT.M exhibits the same behavior as previous versions.

See Technical Bulletin—GT.M Support for the Unicode™ Standard (http://www.fidelityinfoservices.com/user_documentation/GTM-Unicode/GTM_Unicode_Support.html ) for comprehensive information on these two modes and their use.

See section Change History for a brief description of the fixes and enhancements in this release.

Return to top

Platforms

As of the publication date, Fidelity supports this release on the following hardware and operating system versions. Contact the company for a current list of supported platforms.

Please note that UTF-8 support requires that version 3.6 of International Components for Unicode™ (ICU – http://icu.sourceforge.net) to be installed on the computer. See Technical Bulletin—GT.M Support for the Unicode™ Standard (http://www.fidelityinfoservices.com/user_documentation/GTM-Unicode/GTM_Unicode_Support.html) for details.

[Note]
ICU is not required for M mode.

Platform

Supported Versions

Notes

Hewlett-Packard HP-PA HP-UX

11i V2

[Note]
Owing to limitations in the operating system, 4 byte UTF-8 characters are not supported in UTF-8 mode on the supported version of the HP PA-RISC HP-UX platform. FIS understands that the issue is resolved in HP-UX 11.31. At this time, HP-UX 11.31 is not formally supported; however, we are not aware any reason that GT.M V5.2-000B will not work on it.

Running GT.M on HP-UX 11i requires that patch PHKL_28475 be applied to the system. This patch fixes a problem with the lseek64() C library call that GT.M uses. A system without this patch applied will give fairly consistent database errors of varying types, structural damage, and in general will not work correctly for any but the most simplistic usage. The "swlist -p" command (as root) can be used to determine if this patch has been applied. Note that recent "BATCH" and "GOLDEN" patches may contain this patch so your system may have this patch applied but may not list it separately. Contact your HP service representative if you have questions.

Hewlett-Packard Alpha/AXP Tru64 UNIX

5.1B

UTF-8 mode is not supported on this platform. M mode continues to be supported.

Hewlett-Packard Alpha/AXP OpenVMS

7.3-1/7.3-2/8.2

UTF-8 mode is not supported on this platform. M mode continues to be supported.

If you use external calls written in C with Version 6.x of the Compaq C compiler on Alpha OpenVMS, be sure to carefully review all the provided kits for that product and apply them appropriately. GT.M does not provide support for Unicode™ on OpenVMS.

IBM eServer pSeries AIX

5.2/5.3

[Note]
While GT.M supports both UTF-8 mode and M mode on this platform, there are problems with the AIX utilities that prevent us from testing 4-byte UTF-8 characters as comprehensively on this platform as we do on others.

Sun SPARC Solaris

9.0

The deprecated DAL calls continue to be supported in M mode, but are not supported in UTF-8 mode.

x86 GNU/Linux - Red Hat Enterprise Linux

4

Although Red Hat Enterprise Linux is the formally supported distribution, the software should run on any contemporary combination of kernel, glibc (version 2.3.2 or later) and ncurses (version 5).The minimum CPU now must have the instruction set of a 686 (Pentium Pro) or equivalent. For support of older CPUs contact FIS.

Return to top

Recompile

  • Recompile all M and C source files.

  • Relink all shared-libraries (UNIX) and rebuild all executable shared images (OpenVMS) after recompiling all M and C source files.

Return to top

Global Directory Upgrade

Upgrading from GT.M V5.0-000 or later does not require a global directory upgrade.

If upgrading from a GT.M version prior to V5.0-000, the V5 global directory format is different from a V4 global directory format, and must be upgraded. When a V4 global directory is opened with the V5 GDE utility program, even if no changes are made, an EXIT command automatically replaces the V4 format global directory file with a V5 format global directory file.

[Note]
Fidelity strongly recommends that you make a copy of any global directory before upgrading it. There is no way to downgrade a global directory from V5 format to V4 format.
  • If you inadvertently open a V4 global directory with a V5 GDE, and do not wish to upgrade it, use the QUIT command rather than the EXIT command.

  • In the event you inadvertently upgrade a global directory, open it with V5 GDE, execute a SHOW ALL command and edit the output into a command file or manually enter the commands corresponding to the output into a V4 GDE invocation.

Return to top

Database Upgrade

If upgrading from a GT.M version prior to V5.0-000, a database upgrade is required. Database upgrades are described in the GT.M Database Migration Technical Bulletin (GTM_Database_Migration.html). However, when upgrading from GT.M V5.0-000 or later, no database upgrade is necessary.

[Note]
The global directory in use at the time of database upgrade MUST have a mapping of globals to databases that exactly matches the globals that are actually resident in those databases. Some sites have more than one global directory with some having reduced or changed mappings such that, for example, a database may have more than one global in it but the global directory mapping has only a single global in it. This situation can potentially cause the database upgrade procedure to fail because database certification was not correctly processed. A sign that this could be an issue is if MUPIP REORG UPGRADE or a GT.M process fails with the DYNUPGRDFAIL message (block has insufficient room for expansion) after the V5 upgrade.

Return to top

Installation Instructions

See the "Installing GT.M" section in the GT.M Administration and Operations Guide.

UNIX

  1. Fidelity strongly recommends installing each version of GT.M in a separate (new) directory, rather than overwriting a previously installed version. If you are overwriting an existing GT.M installation with a new version, you must:

    • shut down all processes using the old version, and

    • remove any running gtmsecshr from the old version. A running gtmsecshr can be shut down with kill <pid_of_gtmsecshr>.

  2. Any database files that were opened using the old version must be rundown (using MUPIP RUNDOWN) with the old software.

  3. If you replace the binary image on disk of any executable file while it is in use by an active process, the results are unpredictable, depending on the operating system. These results include but are not limited to the denial of service (that is, system lockup) and damage to files that are opened by those processes (that is, database structural damage).

  4. In UNIX editions, the configure script for this release will ask the following question:

    • Enter the RC node ID of the GT.CM server, if desired (42).

    • Respond by pressing ENTER.

Additional Information for AIX

GT.M V4.4-002 and later releases for IBM pSeries AIX require the Asynchronous IO facility to be available and configured. This must be done before installing GT.M. To make sure the facility is available; the following command can be used to display the filesets:

  • lslpp -l bos.rte.aio

If the filesets are not found, they will need to be installed from AIX installation media.

Use SMIT to configure the Asynchronous IO facility. Enter either:

  • smit aio (for gui mode) or

  • smitty aio (for text mode)

Select the "Configure AIO now" selection, which should give a message to the effect that "aio0 has been created". No further setup needs to be done at this time. Note that some systems may have a "posixaio" option instead of "aio", so in the case that the above smit command fails, try with posixaio instead. In addition to configuring the aio0 device, select "Change/Show characteristics of Asynchronous I/O" then change the value of "State to be configured at system restart" from "defined" to "available". This ensures that the aio0 device is available when the system is rebooted next.

If you intend to use database files larger than 2GB, you will need to configure any file system where such a file will reside, when the file system is created, to permit files larger than 2GB.

OpenVMS

In OpenVMS, if upgrading from a GT.M version prior to V4.3-001, any customized copy of GTM$DEFAULTS must be updated to include a definition for GTM$ZDATE_FORM.

The following section can be ignored if you choose the standard GT.M configuration or if you answer yes to the following question:

Do you want to define GT.M commands to the system

If you define GT.M commands locally with

SET COMMAND GTM$DIST:GTMCOMMANDS.CLD

in GTMLOGIN.COM or other command file for each process which uses GT.M, you must execute this command after installing the new version of GT.M before using it. If you define the GT.M commands to the system other than during the installation of GT.M, you will need to update the system DCLTABLES with the new GTMCOMMANDS.CLD provided with this version of GT.M. See the OpenVMS "Command Definition, Librarian, and Message Utilities Manual" section on "Adding a system command." In both cases, it is important to match the proper GTMCOMMANDS.CLD with the version of GT.M being used.

Managing M mode and UTF-8 mode

From the same source file, the GT.M V5.2-000B mumps process generates an object file for M mode or UTF-8 mode depending on the value of the environment variable gtm_chset. GT.M V5.2-000B mumps process generates a new object file when an object file is older than the source file and was generated with the same setting of $gtm_chset/$ZCHset. GT.M V5.2-000B mumps process trigger an error if the object file was generated with a different setting of $gtm_chset/$ZCHset.

M object modules must be generated with an environment that matches the run-time setting. As the GT.M product contains M utility programs, their object files must conform to this rule. In order to be able to use either, or both, M mode and UTF-8 mode, the GT.M installation ensures that both M and UTF-8 “flavors” of object modules exist and can be found in known locations (as described above). The technique of segregating the object modules by their compilation mode prevents both frequent recompiles and errors in installations where both modes are in use – the same pattern should be considered for structuring application object code repositories.

The following changes are made to the way in which V5.2-000 (and above) is installed.

  1. Most GT.M product executables (mumps, mupip, dse, lke, etc.) are in the parent directory, that is, environment variable gtm_dist.
  2. The object files for programs written in M (GDE, utilities) have two versions-- one compiled for functionality related to Unicode™ in the utf8 subdirectory, and one compiled for functionality not related to Unicode™ in the parent directory. Installing V5.2-000B generates both the versions of object files if ICU 3.5 is installed; otherwise it generates only the M mode object files.
  3. Both the parent directory and the utf8 subdirectory have files called mumps, mupip, dse, etc. Those in the utf8 subdirectory are relative symbolic links to the executables in the parent directory (e.g., mumps is the symbolic link ../mumps).
  4. When the user sources the shell scripts gtmprofile or gtmcshrc, the behavior is as follows:
    1. If environment variable gtm_chset is m, M or undefined, there are no changes to the environment from the previous versions.
    2. If environment variable gtm_chset is UTF-8,
      1. $gtm_dist is set to the utf8 subdirectory (i.e, if GT.M is installed in /usr/local/gtm_V5.2-000B, $gtm_dist will be set to /usr/local/gtm_V5.2-000B/utf8).

      2. The last element of $gtmroutines will not be $gtm_dist as it is today, but will instead be $gtm_dist($gtm_dist/..) so that the source directory for GDE and the utilities are matched with the appropriate executables.

Note on setting the environment variable TERM

Users must set the environment variable TERM to a terminfo entry that matches the terminal (or terminal emulator) settings. Refer to the terminfo man pages for more information on the terminal settings of the platform where GT.M is being run.

[Important]
Some terminfo entries may seem to work properly but fail to recognize function key sequences or position the cursor properly in response to escape sequences from GT.M. GT.M itself does not have any knowledge of specific terminal functions. Therefore, it is important to specify the right terminfo entry to let GT.M communicate correctly with the terminal. Users may need to add new terminfo entries depending on their specific platform and implementation.The terminal (emulator) manufacturer may also be able to help.

Return to top

Change History

Return to top

V5.2-000B

The only fix released in V5.2-000B is:

This fix is marked with [V5.2-000B] in the subsequent sections.

Return to top

M-Database Access

  • [V5.2-000A] In response to two incidents of repeated GVxxxFAIL or TPFAIL errors with failure code xLLL caused by process, rather than database, damage, the condition that led to the xLLL failure now triggers a GTMASSERT. This allows FIS to get better diagnostic information and prevents the damaged process from failing repeatedly. (S9H02-002641)

  • GT.M now issues a VERMISMATCH error whenever a process tries to access a GT.M database that is already being accessed by a different version of GT.M. This is both in UNIX and OpenVMS. Previous versions of GT.M used to issue a different message that was less user-friendly. In addition prior versions of GT.M in OpenVMS could potentially cause deadlocks and even database damage if GT.M versions were mixed. All these issues are now fixed. (C9D08-002387)

  • [V5.2-000A] GT.M manages shared resources through the use of shared memory. For performance reasons, a significant part of this management is based on algorithms designed to minimize or avoid locks. As processors, caches, and multi-processor interconnects have evolved, computer architectures have become more prone to memory update patterns that appear to a reading process in a different order than they do in the code of the updating process (commonly called out-of-order stores). GT.M uses platform specific primitives (commonly called memory barriers) to prevent out-of-order store issues where they pose problems. GT.M adopted memory barriers some time ago in selected places within the database logic. We recently found that the journal code, which is subject to less intense inter-process contention, needs some as well. This release adds a few memory barriers to the journal management logic to prevent rare problems, including journal file corruption, which could be induced by out-of-order stores. The likelihood of encountering this issue is function of both the particular hardware (different models of the same CPU line may have different characteristics) and the level of contending activity. [AIX, HP-UX, Tru64, OpenVMS] (C9E02-002511)

  • [V5.2-000A] GT.M now prevents a possible source of database damage by ensuring that a non-programmatic process termination, typically due to MUPIP STOP, does not try to commit a transaction where the process has initialized in preparation for a transaction but has not yet formed any real updates. (C9F09-002757)

  • When GT.M and its utilities (source server etc.) read the replication instance file and find that the instance file was created in an older format, they issue a REPLINSTFMT error. Prior versions of GT.M used to leave an ipc semaphore (the ftok semaphore of the replication instance file) hanging around. This is now fixed so no semaphores are left around after issuing the REPLINSTFMT error. [UNIX] (C9G06-002800)

  • [V5.2-000A] TPRESTART logging to the operator log used to be controlled by setting the logicals GTM_TPRESTART_LOG_START and GTM_TPRESTART_LOG_DELTA appropriately. This stopped working in V50000D onwards and used to cause any restarting process to ACCVIO if the above logicals were defined. This is now fixed to work as it used to. [OpenVMS] (C9H03-002829)

  • [V5.2-000A] GT.M now protects against inappropriately long resource waits which could cause brief moments of degraded performance. [OpenVMS] (C9H03-002830)

  • [V5.2-000A]GT.M no longer issues a GTMASSERT in the very rare case that a process uses the DAL call to disconnect all databases and then terminates due to a forced exit or an error before successfully [re-]opening any database.[OpenVMS] (C9H03-002833)

Return to top

M-Other Than Database Access

  • [V5.2-000A] SET of global variables within a parenthesized list of targets where the global references use extended syntax containing one or more local variables now occurs properly when the local variables are defined or gives an appropriate UNDEF error when a local variable is undefined. In previous versions, even when the local variables were all defined, it used to give a message that did not specify the variable name (HPUX/AIX) or a segmentation fault (SIG-11). [Linux/Tru64/Solaris/AlphaVMS] (S9C08-002197)

  • [V5.2-000A] Output-only parameters of type char * and string * without pre-allocation now trigger the ZCNOPREALLOUTPAR error. Also see C9F09-002753.[UNIX] (S9C10-002243)

    Note that this change makes V5.2-000A not backward compatible for programs that use this feature. Although GT.M is normally fastidious with respect to maintaining backward compatibility, improvements in performance and robustness were judged to warrant an exception in this case.

  • [V5.2-000A] The pattern match operator no longer causes a process to hang if the pattern following the question-mark (?) is a string literal more than 6 characters long and the repetition count consists of a period (.) with no leading and trailing integer literals. (S9F01-002526)

  • [V5.2-000A] Unrecognized Intrinsic Functions and Intrinsic Special Variables and unrecognized deviceparameter constructions that are bypassed due to FALSE postconditionals no longer cause run-time errors. The error messages affected by this change are INVFCN, INVSVN, FNOTONSYS, SVNOSET, SVNONEW, DEVPARINAP, DEVPARUNK, DEVPARVALREQ. These errors still trigger error reports at compile time—for example "SET:0 $ZZZZ=1" continues to generate a compilation error— but no longer generates a run-time error. (S9F10-002572)

  • [V5.2-000A] Extensive testing validates that two argument $STACK() and ZSHOW “S” work properly. If $ECODE is null then the two argument $STACK() returns the same result as ZSHOW "S". The result differs only when $ECODE contains error information. Fidelity recommends applications reset $ECODE in their error handlers before restoring the normal flow of control. (S9F12-002579)

  • READ X:0 now leaves $TEST set in case the only character READ is a terminator. (S9F12-002582)

  • Certain cases of an untimed OPEN of the TCP device that would cause the process to spin in a tight loop no longer do so.(S9G09-002625)

  • READ *X:<timeout>now properly times out when the timeout is greater than 8 seconds. [Linux] (S9G11-002628)

  • [V5.2-000A] $zgetjpi(“”,”INVALID ARG”) now produces the BADJPIPARAM error rather than a segmentation fault (SIG-11). (S9G12-002632) [UNIX]

  • [V5.2-000A] Pre-allocation of xc_string_t is now allowed and is required for output-only parameters on external calls. Also see S9C10-002243. (S9G12-002634, C9F09-002753) [UNIX]

  • [V5.2-000A] ZSHOW "V" or ZWR when variables with "long" content no longer give a segmentation fault (SIG-11). This was fixed in V5.2-000 but the fix was not documented. (S9G12-002635)

  • [V5.2-000A] $ZB now contains the correct value after a READ *. In particular, $ZB holds the full escape sequence after entry of an escape sequence when ESCAPE processing enabled. This was broken in GT.M V5.2-000. [AIX/Solaris/HPUX] (S9H02-002642)

  • [V5.2-000A] Exponents greater than 18 digits no longer result in a numeric evaluation of 0; for example in previous versions, WRITE +"1E12234567890123456789" produced 0. (S9F11-002573)

  • [V5.2-000A]The GT.M utilities and the mumps commands now use a space-dash (“ –“)combination to delimit/introduce a qualifier, which is standard UNIX usage, where they used to require only a dash ("-", which was not standard).

    [Warning]
    This will cause existing shell scripts that use the idiosyncratic dash-only form to break – they can be fixed by adding one or more spaces in front of any dash.

    This change allows the use of dashes in argument and qualifier values. [UNIX] (C9B04-001681)

  • [V5.2-000A] $ORDER() now returns the correct value even if the optional second argument is specified and contains a global reference. In such cases, previous versions used to perform the $ORDER() operation on the global reference in the second argument instead of the first.

    $REFERENCE is now set properly after a $ORDER() operation involving a global reference in the first or second argument. Previous versions used to set this incorrectly. For example $ORDER(^x(1)) used to incorrectly set $REFERENCE to ^x(1.00) instead of ^x(1). (C9B10-001744)

  • [V5.2-000A] $ORDER() now returns the correct value where the second argument is an extrinsic function that manipulates the first argument. In such cases, previous versions could give an incorrect result. For example, $ORDER(V(2,-1),$$ABC) where the extrinsic $$ABC() sets the node V(2,2) to 1 and quits with a value of 1 now returns a result of 2 where it used to incorrectly return a null string (""). Substituting ^V for V in the example demonstrates the change for global references. (C9B10-001765)

  • [V5.2-000A] $GET() with two arguments where both the arguments contain global references now sets the naked indicator correctly to the last global reference in the second argument. In cases where the first argument had a value, previous versions used to incorrectly set the naked indicator to that first argument. (C9B10-001767)

  • [V5.2-000A] The processing of SET commands with multiple targets and $Piece() / $Extract() now complies better with the M standard.

    GT.M now allows the $PIECE() and $EXTRACT functions as targets in a SET command that has a parenthesized, comma-separated list of targets. Previous versions disallowed this usage.

    When SET arguments have multiple parenthesized (set-left) targets and a target is used as a subscript in more than one item in the list of targets that follow, ALL the targets now use the before-SET value (not the after-SET value) in conformance to the M-standard. Previous versions of GT.M used the before-SET value only for the last such subscripted target item in the list and incorrectly used the after-SET value for all prior subscripted target items. For example, set a=0,(a,array1(a),array2(a))=2 now sets both array1(0) and array2(0) to 2 whereas previous versions of GT.M would set array2(0) to 2 and array1(2) (instead of array1(0)) to 2.

    If a SET target is of the form $PIECE(glvn,d,m,n) or $EXTRACT(glvn,m,n) GT.M now evaluates the right hand side of the Set even when m > n or n < 1. Previous versions of GT.M would not evaluate the right-hand-side of the SET which could result in the naked indicator not being set correctly. For example, set ^x=1,$piece(^a,";",3,2)=^b now correctly sets the naked indicator to point to the global ^b. Previous versions of GT.M set the naked indicator to ^x in this example. (C9C05-002003)

  • GT.M socket devices now allow up to the number of clients specified in the environment variable gtm_max_sockets. The default limit is 64, and there is an absolute maximum which at this point in human history exceeds your wildest dreams. $VIEW("MAX_SOCKETS") returns the current value. (C9C10-002149)

  • [V5.2-000A] ZWRITE with a range (n:m) no longer no longer occasionally fails with a segmentation fault (SIG-11). [AIX; Solaris] (C9D01-002239)

  • The maximum length for the argument to the ZSYSTEM command has increased to 4K bytes.[UNIX] (C9E09-002637)

  • [V5.2-000A] Messages and Recovery Procedures Manual is now current up to V5.2-000A. See http://www.fidelityinfoservices.com/user_documentation/V52AMsgRecProc/index.htm. (C9F07-002745)

  • OPEN of TCP device with an invalid address specification now gives an appropriate error rather than terminating the process. (C9G12-002808)

  • [V5.2-000A] Pattern match with multiple unbounded patterns where a lower bound after the first unbounded pattern is 7 (9 for V5.2-000) or more now gives the correct result. For example, in GT.M V5.2 (1.1?.n1"."9.n), and, in prior versions, (1.1?.n1"."7.n) incorrectly returned 1. (C9G12-002813)

  • [V5.2-000A] GT.M now reports complete error messages where in V5.2-000 utf-8 mode they were terminated at the first non-ASCII character. [HP-UX] (C9G12-002815)

  • [V5.2-000A] GT.M no longer inappropriately issues a GTM-E-GTMSECSHRSOCKET when it finds a socket conflict (usually because of an abandoned socket) for use in activating GTMSECSHR actions.[UNIX] (C9H03-002828)

  • [V5.2-000A] GT.M introduces a new deviceparameter called MOREREADTIME that applies to OPEN and USE commands for a SOCKET device. Except when a READ has a zero (0) timeout, MOREREADTIME specifies the time (in milliseconds) that a READ waits for input.

    • By default, MOREREADTIME is 10.
    • When MOREREADTIME is set to -1, it takes the default value of 10.
    • The maximum value of MORETREADTIME is 999 (basically 1 second). GTM triggers the MRTMAXEXCEEDED error if MOREREADTIME exceeds the maximum value.
    • Previous versions of GT.M used a fixed value of 200ms.
    [Note]
    This change may affect the operational behavior of TCP/IP aspects of your application. If the impact is adverse, specify a value of 200 milliseconds to restore the previous behavior.

    TCP/IP is a stream-based protocol that guarantees that bytes arrive in the order in which they are transmitted, but does not make any further guarantees that they will be grouped in the same packets, etc. Usually, a higher-level communications / messaging protocol layered on top of TCP implements messages using one of the following approaches:

    1. Use a delimiter to separate messages
    2. Specify messages as <length, value> pairs
    3. Parse the bytes or characters as they come in

    To implement approach 1 in MUMPS, specify a delimiter in an OPEN or USE command for the SOCKET device and then use a generic READ.

    To implement approach 2, use a pair of fixed-length READs (READ #). Specifying a large value of MOREREADTIME is appropriate for Approach 1 and 2, but it tends to make Approach 3 work sub-optimally (except when it is implemented with zero timeout READ).

    Specify a short value of MOREREADTIME for Approach 3. However, when used together with Approach 1 and 2, it uses CPU less efficiently than otherwise.

    [Warning]
    Never set MOREREADTIME to 0 as it may cause a CPU to "spin". (C9H03-002835)

  • [V5.2-000B] READ * in M-mode on Sequential Disk file and Socket device of a character with encoding between 128 to 255 inclusive now returns the correct code value. This fixes a problem introduced in V5.2-000 that resulted in READ * on those devices returning an incorrect (negative) value. (C9H04-002843)

Return to top

Utilities-MUPIP

  • The CHECKHEALTH, SHOWBACKLOG and SHUTDOWN qualifiers in a MUPIP REPLIC -SOURCE command now honor the value (if any) specified in the environment variable gtm_repl_instsecondary. [UNIX] (S9G07-002618)

  • MUPIP RUNDOWN now correctly uses an INFO message severity at its termination which prevents its hanging. This problem was introduced in V5.1-000 and is now fixed. [OpenVMS] (S9G07-002619)

  • MUPIP ENDIANCVT no longer terminates with an error while trying to convert a V5.0 format database. (S9G08-002621)

  • [V5.2-000A] MUPIP INTRPT command no longer causes the loss of data in the input buffer on a terminal READ or direct mode.

    If an interrupt (sent by the MUPIP INTRPT command) triggers code that does not resume from where the process was interrupted while a terminal READ is in progress, GT.M discards all input that the terminal READ received up to the time of that interrupt. ZSHOW "D" in a $ZINTERRUPT routine now includes a "ZINTERRUPT" designation for a terminal device if MUPIP INTRPT interrupted input on a terminal READ. Fidelity recommends that applications declare $ZINTERRPT routine specific $ETRAP/$ZTRAP error handlers in the interrupt processing code.

    MUPIP INTRPT no longer causes the loss of previously received input on a terminal READ or direct mode. While GT.M processes an interrupt through the MUPIP INTRPT command, the only operation that GT.M permits on the current device ($IO) is the USE command with no deviceparameters. All other actions (CLOSE, OPEN, READ, WRITE) to that device trigger the ZINTRECURSEIO error. GT.M also triggers the ZINTDIRECT error for all attempts to BREAK into direct mode while that interrupt is processed. This allows the interrupt processing code to use another device and then restore the original device in an undisturbed state so that the interrupted application can resume as if uninterrupted (at least as far as the device behavior is concerned).[UNIX] (S9G12-002636)

  • [V5.2-000A] Both socket /WAIT (server side) and socket READ now respond to MUPIP INTRPT. A socket device performing a client connect operation does not currently respond to an INTRPT until the connection is complete. (C9G04-002779, S9G03-002602)

    [Important]
    Note that the TCP device is not changed and still does not respond to INTRPT. FIS recommends replacing the deprecated TCP device usage with the standard SOCKET device.

  • MUPIP ENDIANCVT now ensures that buffers in shared memory are flushed to disk and completes close of its output file before printing success. (C9G06-002799)

  • If the environment variable gtm_quiet_halt is set to 1, then if the process is stopped via MUPIP STOP or by a SIGTERM signal (as is sent by some web servers), the FORCEDHALT message will be suppressed as it is assumed that this is the "normal" way this type of process will terminate. Full robust process termination, database flush, cleanup etc will be performed as is normally done. [UNIX] (C9G12-002812)

  • [V5.2-000A] A Journal file's name can now include characters in Unicode™.[HP-UX] (C9G12-002814)

  • In rare cases where processes accessing a GT.M database were terminated abnormally, MUPIP RUNDOWN on that database could terminate prematurely with a SIG-11. This is now fixed.[UNIX] (C9F09-002755)

  • [V5.2-000A] Users now have the option to install GT.M with or without Unicode-related functionality. GT.M now installs components related to the M-mode only on a computer which does not have ICU. GT.M continues to require ICU for functionality related to UTF-8 mode. (C9H02-002821)

  • [V5.2-000A] GT.M now produces correct process initiation (“pini”) records in a journal file created during a recovery from an event that happens to interrupt a database file extension, where in prior versions this rare occurrence could result in an incorrect record. Such an incorrect record would not generally be noticed in M mode, but could cause a BADCHAR error in UTF-8 mode. (C9H03-002832)

  • [V5.2-000A] In a backward rollback/recovery GT.M now avoids counting blocks requiring a V4 to V5 upgrade more than once when the action is interrupted and reissued more than once. In prior versions, a MUPIP INTEG of the recovered database could report a benign DBBTUWRNG integrity error, which it then automatically fixed. [UNIX] (C9H03-002836)

Return to top

Utilities-Other Than MUPIP

  • The INSTALL script no longer terminates prematurely on some HP-UX systems.[HP-UX] (S9G11-002627)

  • DSE ALL -DUMP [-ALL] now dumps the fileheader for all regions in the global directory. The -ALL qualifier selects the comprehensive format. The default is the briefer format. The -DUMP qualifier can only be intermixed with the -ALL qualifier. (C9G04-002784)

  • [V5.2-000A] DBCERTIFY CERTIFY now correctly handles all conditions that lead to a split in the root level of a global variable tree. Previously these (fortunately rare) conditions triggered occasional spurious DBCMODBLK2BIG errors and the only workaround was to revert to a V4 format database and then repeat the scan/upgrade process. DBCERTIFY now always operates in M mode, while in V5.2-000 it could inappropriately attempt to operate in UTF-8 mode.

    Also, the V5CBSU utility no longer triggers an occasional spurious INVFCN errors when it encounters a character with encoding in the range of 128-255. This problem was specific to V5.2-000 version only. [UNIX] (C9G04-002790)

Return to top

Error Messages

Return to top

BADCASECODE

BADCASECODE, xxxx is not a valid case conversion code.

Run Time Error: The two-argument form of $ZCONVERT() reports this error if the case conversion specifier (second argument) is not one of the valid codes (U,u,L,l,T and t).

Action: Choose a valid case designation code.

BADCHAR, XXX is not a valid character in the YYY encoding form.

Runtime Error: GT.M triggers this error when it encounters a byte sequence that is not legal according to the given character set of the current device.

Action: Either handle the illegal byte sequence or disable the triggering of BADCHAR error by VIEW "NOBADCHAR" command. See Technical Bulletin—GT.M Support for the Unicode™ Standard (http://www.fidelityinfoservices.com/user_documentation/GTM-Unicode/GTM_Unicode_Support.html) for more details.

BADCHSET, xxxx is not a valid character mapping in this context.

Run Time Error: When GT.M recognizes that the expr in ICHSET=expr or OCHSET=expr is not one of the supported character set names ("M", "UTF-8", "UTF-16", "UTF-16LE" or "UTF-16BE"), it reports this error. Note that not all modes are supported under all conditions.

Action: Choose the proper designation for a supported character set.

Return to top

BOMMISMATCH

BOMMISMATCH XXX Byte Order Marker found when YYY character set specified

Run Time Error: A Byte Order Marker (BOM) for character set XXX was found at the beginning of a file specified as containing data in character set YYY.

Action: Specify the proper character set when opening the file. For UTF-16 data, specifying CHSET="UTF-16" will use the BOM to determine whether the data is Little Endian or Big Endian. If no BOM is found, GT.M assumes Big Endian.

Return to top

DLLCHSETUTF8

DLLCHSETUTF8, Routine XXX in library YYY was compiled with CHSET=UTF-8 which is different from $ZCHSET. Recompile with CHSET=M and re-link.

Runtime Error: This error is triggered when an M mode process attempts to execute a shared library's routine that was complied in UTF-8 mode.

Action: Recompile and relink the routine using M-mode settings or switch to UTF-8 mode.

Return to top

DLLCHSETM

DLLCHSETM, Routine XXX in library YYY was compiled with CHSET=M which is different from $ZCHSET. Recompile with CHSET=UTF-8 and re-link.

Runtime Error: This error is triggered when a UTF-8 mode process attempts to execute a shared library's routine that was complied in M-mode.

Action: Recompile and relink the routine using UTF-8-mode settings or switch to M mode.

Return to top

DLRCILLEGAL

DLRCILLEGAL, Illegal $CHAR() value xxxx

MUPIP Error: This indicates that MUPIP LOAD with the qualifier FORMAT=GO or ZWR encountered an invalid Unicode™ code point xxxx for $CHAR() in its input stream.

Action: Edit or recreate the input file so the value falls within the valid range of Unicode™ code points.

Return to top

DLRZCTOOBIG

DLRZCTOOBIG, xxxx $ZCHAR() value cannot be greater than 255.

Run Time Error: This error indicates that the value xxxx provided to $ZCHAR() exceeds the maximum allowed value (255) that can be stored in a byte.

Action: Choose a valid sequence of byte value arguments or use $CHAR() for character encoding.

Return to top

INVDLRCVAL

INVDLRCVAL, Invalid $CHAR() value.

Runtime Error: The $CHAR() function triggers this error if its arguments contains an invalid code-point. According to the Unicode™ Standard version 5.0, invalid code-points include the following sets:

  1. The "too big" code-points (those greater than the maximum U+10FFFF).

  2. The "surrogate" code-points (in the range [U+D800, U+DFFF]) which are reserved for UTF-16 encoding.

  3. The "non-character" code-points that are always guaranteed to be not assigned to any valid characters. This set consists of [U+FDD0, U+FDEF] and all U+nFFFE and U+nFFFF (for each n from 0x0 to 0x10).

Action: Specify argument in the range of valid Unicode™ code-points.

Return to top

INVICUVER

INVICUVER, xxx not found in the ICU libraries. ICU version 3.6.x must be used.

Runtime Error: GT.M currently requires ICU version 3.6.x for $ZCHSET="UTF-8" to work. If the version of ICU installed on the system is not 3.6.x, the above error is issued.

Action: Install ICU version 3.6.x. See Technical Bulletin—GT.M Support for the Unicode™ Standard (http://www.fidelityinfoservices.com/user_documentation/GTM-Unicode/GTM_Unicode_Support.html ) for instructions on installing ICU Version 3.6.x on a supported platform.

NONASCII, xxx is illegal for a yyy as it contains non-ASCII characters.

Run Time Error: These errors are reported by GDE when it encounters non-ASCII name (xxx) for global, region or segment names respectively. GT.M does not support non-ASCII characters for these names.

Action: Observe the restriction to use ASCII on designations in global directories.

Return to top

NONUTF8CHSET

NONUTF8CHSET, Incorrect character set. Locale must be set to use UTF-8 character set.

Run Time Error: This error is reported by GT.M when it recognizes that the LC_CTYPE locale category (as shown by the UNIX locale command) does not use UTF-8 character encoding when environment variable gtm_chset is "UTF-8".

Action: Set the environment variable LC_CTYPE to a locale name with UTF-8 character encoding. Note that LC_ALL, if defined, overrides LC_CTYPE. The name of the locale varies between different UNIX platforms, but mostly in the form of <lang>_<country>.<charset>, where each element (without the angular brackets) has the form shown below:

  1. <lang> is the language code in lower case (such as en, or de).

  2. <country> is the country name in upper case (such as US, GB)

  3. <charset> is the character set encoding (such as UTF-8, ISO8859-1)

Refer to the operating system manuals for the specific details of available locale names on the system.

Return to top

MRTMAXEXCEEDED [V5.2-000A]

MRTMAXEXCEEDED, Maximum value of xxxx for SOCKET deviceparameter MOREREADTIME exceeded.

Compile Time/ Run Time Error: GT.M triggers this error when MOREREADTIME exceeds its maximum value of 999ms.

Action: Specify a value between 1 and 999. Never set MOREREADTIME to 0 as it may cause a CPU to "spin". See "Input/Output Processing" Chapter of the GT.M Programmer's Guide for more information.

Return to top

PADCHARINVALID

PADCHARINVALID, PAD deviceparameter cannot be greater than 127.

Runtime Error: The PAD deviceparameter (valid only for Sequential Disk files) specified in the open command can be between 0 and 127 (both inclusive).

Action: Specify a value within the allowed range.

Return to top

RECSIZENOTEVEN

RECORDSIZE [xxxx] needs to be a multiple of 2 if ICHSET or OCHSET is UTF-16, UTF-16LE or UTF-16BE

Runtime Error: This error is issued when the OPEN command specifies an ICHSET or OCHSET or CHSET of UTF-16 or UTF-16LE or UTF-16BE and the RECORDSIZE specified (xxxx) is not a multiple of 2.

Action: Specify a RECORDSIZE that is a multiple of 2.

SOCKMAX Attempt to exceed maximum sockets xxx for the SOCKET device

Runtime Error: Attempting to connect more than the maximum number of sockets defined for the process triggers this error. xxx is the maximum for the current process.

Action: Reduce the number of connections or use a process that has a higher maximum number of sockets defined by the environment variable gtm_max_sockets.

Return to top

SVNEXPECTED [V5.2-000A]

SVNEXPECTED, Special variable expected in this context

Compile Time/Run Time Error: This indicates that GT.M encountered a dollar sign in a NEW command that was not followed by a valid special variable name.

Action: Look for misspelled special variable names or a missing $ in an extrinsic.

SVNONEW, Cannot NEW this special variable

Compile Time/Run time error: This indicates that a NEW command tried to new an intrinsic special variable that is not a valid argument for a NEW.

Action: Look for inappropriate $ prefixes. $ZTRAP, $ETRAP, $ESTACK, $ZYERROR, $ZGBLDIR are the only intrinsic special variables that can be NEWed.

Return to top

WIDTHTOOSMALL

WIDTHTOOSMALL, WIDTH should be at least 2 when device ICHSET or OCHSET is UTF-8 or UTF-16.

Runtime Error: This error is issued whenever the ICHSET or OCHSET of the current terminal or file device is UTF-8 or UTF-16 and the WIDTH specified is 1. The minimum width allowed is 2 for such devices.

Action: Specify a width that is 2 or greater.

Return to top

ZCNOPREALLOUTPAR [V5.2-000A]

ZCNOPREALLOUTPAR, Parameter xxxx in external call yyyy.zzzz is an output only parameter requiring pre-allocation.

Run Time Error: This indicates that a pre-allocation value was not specified for the output only parameter xxxx in package yyyy, external call zzzz.

Action: Specify a pre-allocation value for the output only parameter xxxx. A package designation of "<DEFAULT>"indicates the default package rather than an actual package name.

Return to top

ZINTDIRECT [V5.2-000A]

ZINTDIRECT, Attempt to enter direct mode from $ZINTERRUPT

Run Time Error: A $ZINTERRUPT routine cannot break to direct mode if the current IO device is the same as $PRINCIPAL.

Action: Modify the $ZINTERRUPT routine to not break to direct mode.

Return to top

ZINTRECURSEIO [V5.2-000A]

ZINTRECURSEIO, Attempt to do IO to the active device in $ZINTERRUPT

Run Time Error: A $ZINTERRUPT routine cannot perform I/O to the current IO device if it is a terminal or socket device.

Action: Modify the $ZINTERRUPT routine to not perform I/O to terminal or socket devices.

Return to top

For more information, see the GT.M web site.