Technical Bulletin - GT.M V5.3-004A Release Notes

Copyright © 2010 Fidelity Information Services, Inc.  All Rights Reserved. 
 

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts and no Back-Cover Texts.

 

GT.M™ is a trademark of Fidelity Information Services, Inc.  Other trademarks are the property of their respective owners.

 

This document contains a description of GT.M and the operating instructions pertaining to the various functions that comprise the system.  This document does not contain any commitment of FIS.  FIS believes the information in this publication is accurate as of its publication date; such information is subject to change without notice.  FIS is not responsible for any errors or defects.

 

Revision History

Revision
 
Date
 
Summary
 
1.13
26 January 2012 In the Platforms section, removed a line that erroneously stated AIX 5.2 as a supported operating system version.
1.12
27 November 2009
Reworked section "Database Compatibility for GT.M V5.3-004A" for clarity and renamed it to "Upgrading to GT.M V5.3-004A"; Added the guidelines for using MUPIP REORG -UPGRADE;
Moved the instructions for compiling ICU on HP PA-RISC HP-UX to a separate section; Added the instructions for compiling ICU on HP Integrity IA64 HP-UX. 
1.11 13 August 2009 Corrected AIX information to reflect AIX 5.3 as lowest supported operating system level
1.1
 
10 August 2009
 
Updated to reflect V5.3-004A; corrected description of S9A11-001722; added entry for S9F04-002544, previously fixed in V5.3-003
 
1.0
 
16 July 2009
 
First published version
 

 

GT.M Group

Fidelity National Information Services, Inc.

2 West Liberty Boulevard, Suite 300

Malvern, Pennsylvania 19355

United States of America

 

GT.M Support for customers: +1 (610) 578-4226 / gtmsupport@fisglobal.com

 

Switchboard: +1 (610) 296-8877

Website: http://fis-gtm.com

 

Table of Contents

Click here to go directly to the Changes section.
 
 
  1. Technical Bulletin - GT.M V5.3-004A Release Notes
    1. Revision History
    2. Table of Contents
    3. Conventions
    4. Bulletin Overview
      1. Platforms
      2. Migrating to 64-bit platforms
        1. Call-ins and External Calls
        2. Internationalization (Collation)
        3. Environment Translation
      3. Recompile
      4. Rebuild Shared Libraries or Images
      5. Additional Installation Instructions
        1. UNIX
          1. Additional Information for AIX
        2. OpenVMS
      6. Upgrading to GT.M V5.3-004
        1. Stage 1: Upgrading your Global Directory
        2. Stage 2: Upgrading your Database Files
            1. Database Compatibility Notes
        3. Stage 3: Upgrading your Replication Instance File
        4. Stage 4: Upgrading your Journal Files
      7. Managing M mode and UTF-8 mode
      8. Setting the environment variable TERM
      9. Installing Compression Libraries
    5. Changes
      1. M-Database Access
        1. S9I11-002714 Better protection against damaged journal file descriptors
        2. S9A11-001722 More conservative access permissions
        3. C9905-001119 Caching optimization for transaction processing
        4. C9A05-001476 Database encryption
        5. C9E02-002510 Rare case of incorrect KILL in progress indicator fixed
        6. C9E10-002648 Correct $ORDER(gvn,-1) if last gvn subscript is "" & last global node starts with $ZCHAR(255)
        7. C9I09-003042 TP performance optimization
        8. C9J01-003076 Redundant database disk writes eliminated
        9. C9J01-003078 Better protection against spurious signals during database startup and shutdown
        10. C9J03-00396 Improved error message for OpenVMS journaling issue (V5.3-004A)
        11. C9J04-003120 More graceful handling of high contention during database open and close
        12. C9J05-003121 More robust handling of MM database file headers when generating core files
        13. C9J05-003122 Database file size limit raised to 224 million blocks
        14. C9J05-003123 More robust handling of insufficient timer queue entries (TQELM) on OpenVMS
        15. C9J05-003132 Better handling of version mismatch errors during database initialization
        16. C9J06-003139 Eliminate a cause of redundant records in journal file
        17. C9J07-003162 Prevent two unusual causes of DBKEYORD (V5.3-004A)
      2. M-Other Than Database Access
        1. S9902-001105 New gtm_nocenable environment variable
        2. S9F04-002544 FIFO timed READ correction (V5.3-003)
        3. S9G06-002616 Correct report of MAXFORARGS
        4. S9H01-002639 More appropriate error message on inability to access a file to be compiled
        5. S9I10-002704 GT.CM Server out-of-memory prevented (V5.3-004A)
        6. S9J01-002718 $ZSYSTEM returns exit status modulo 256 of shell invoked by last ZSYSTEM
        7. S9J05-002724 SET correctly handles special case of local variables used as subscripts for target
        8. S9J06-002725 $NAME() returns empty string for undefined variables
        9. S9J07-002728 ZCOMPILE with an error closes the object file (V5.3-004A)
        10. S9J07-002729 MUMPS -LIST with an error more robust (V5.3-004A)
        11. C9B09-001754 KILL of a variable joined by pass-by-reference to a formallist variable
        12. C9E02-002527 Correct $ZEOF handling when $PRINCIPAL is NULL device
        13. C9I02-002957 New functionality - alias variables
        14. C9I04-002984 Correct $ZEOF handling on read from or append to zero length files
        15. C9I08-003017 No inappropriate process terminations on access to routine source after ZLINK
        16. C9I09-003031 GT.M now runs on z/OS on IBM eServer zSeries
        17. C9I09-003033 ICU versions 3.6 and greater now supported
        18. C9I12-003064 Improvements to PIPE and FIFO devices
        19. C9I12-003068 Reduced memory fragmentation for processes linking large numbers of routines
        20. C9J01-003080 Memory leak plugged in pattern matching with alternation
        21. C9J01-003081 Better handling of deeply nested indirection on 64-bit platforms
        22. C9J03-003097 Error during creation of a file or FIFO device
        23. C9J03-003102 Non ASCII characters accepted in M mode pattern match string literals
        24. C9J03-003104 Trailing white space ignored in string used for indirection or Xecute
        25. C9J04-003106 Inappropriate failure of EXCEPTION handler on OPEN fixed
        26. C9J04-003109 $ZPROMPT initialized from environment variable / logical name $gtm_prompt
        27. C9J04-003115 Appropriate error when compiling M programs containing binary data
        28. C9J04-003119 Correct code generation for branches to previous labels in large routines on Solaris
        29. C9J05-003129 Correct location reported in large routines
        30. C9J06-003135 Cause of segmentation violation in complex external calls with AIX removed
        31. C9J06-003136 Faster compilation, using less memory
        32. C9J06-003141 gtmprofile and gtmcshrc recognize lower-case utf-8 for gtm_chset
        33. C9J06-003144 "Timed" LOCK release maintains $TEST (V5.3-004A)
        34. C9J07-003146 zOS cursor movement correction (V5.3-004A)
        35. C9J07-003147 prevention of a rare stuck process in OpenVMS
        36. C9J07-003152 Improved error messages for UTF-8/ICU issues (V5.3-004A)
        37. C9J07-003161 Compile of many literals no longer fails (V5.3-004A)
      3. Utilities- MUPIP
        1. S9J05-002723 Source Server generates a core dump for JNLBADRECFMT error
        2. C9G09-002804 Update Server handling of key & record sizes too large for replicating instance
        3. C9J01-003086 MUPIP commands to freeze updates print informational messages
        4. C9J04-003117 MUPIP LOAD speeded up in UTF-8 mode
        5. C9J07-003159 Improved MUPIP BACKUP error message (V5.3-004A)
      4. Utilities-Other Than MUPIP
        1. C9B11-001789 Improved recoverability after low-level DSE operations
        2. C9J01-003071 Installation script on Solaris now works with /bin/sh and tests for 64-bit ICU libraries
        3. C9J01-003079 Distribution may now be unpacked by any user
        4. C9J02-003095 Installation script creates any needed parent directories
        5. C9J05-003128 Better printing of UTF-8 characters with DSE DUMP -BLOCK
        6. C9J06-003134 GDE issues better errors when opening command files
        7. C9J06-003138 DSE CACHE-VERIFY no longer reports spurious error
    6. Error Messages
        1. ALIASEXPECTED, Alias or alias container variable expected in this context
        2. BADTAG, Unable to use file ffff (CCSID tttt) with CCSID uuuu
        3. BUFFLUFAILED, Errors flushing buffers from uuuu for database file dddd
        4. CLOSEFAIL, Error while closing file descriptor dddd
        5. CRYPTDLNOOPEN, Error loading encryption library. xxxx
        6. CRYPTHASHGENFAILED, Error generating encryption hash. xxxx
        7. CRYPTINIT, Error initializing encryption library. xxxx
        8. CRYPTJNLWRONGHASH, Encryption key hash mismatch between journal file jjjj and corresponding database file dddd
        9. CRYPTKEYFETCHFAILED, Cannot obtain encryption key for ffff. xxxx
        10. CRYPTKEYFETCHFAILEDNF, Cannot obtain encryption key. xxxx
        11. CRYPTNOMM, is an encrypted database. Cannot support MM access method.
        12. CRYPTNOPSWDINTP, Cannot prompt for password inside a TP transaction.
        13. CRYPTNOV4, ffff is an encrypted database. Cannot downgrade(to V4) with Encryption option enabled.>/error/fao=2!/ansi=0
        14. CRYPTOPFAILED, Encrypt/Decrypt operation failed. xxxx
        15. DZWRNOALIAS, $ZWRTAC cannot be aliased
        16. DZWRNOPAREN, $ZWRTACxxx is not allowed inside a parenthesized SET target
        17. FREEZEERR, Error while trying to ffff region rrrr
        18. NOALIASLIST, Parenthetical lists of multiple arguments cannot have a preceding alias introducer or include alias (*) forms
        19. NONUTF8LOCALE, Locale has character encoding (cccc) which is not compatible with UTF-8 character set
        20. TRANS2BIG, Transaction exceeded available buffer space for region rrrr
        21. VIEWLVN, Invalid local variable name used with VIEW/$VIEW(): vvvv

Conventions

UNIX: The term UNIX is used here in the general sense of all platforms for which GT.M uses a POSIX API.  As of this date, this includes: AIX; HP-UX on IA64 and PA-RISC; GNU/Linux on IA64, x86 and x86_64; Solaris on SPARC; z/OS.

 

Command Syntax: UNIX syntax (that is, 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 "/".

 

 
Program Names: When referring to a GT.M program or function, the reference is in upper case, e.g, MUPIP BACKUP.  When a specific example is provided, the lower case UNIX command names are used, e.g., mupip backup -database ACN,HIST /backup  

 

Reference Number: 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 Table of Contents

Bulletin Overview

GT.M V5.3-004A addresses a few issues with V5.3-004 (highlighted as V5.3-004A).

 

 

GT.M V5.3-004 adds significant new functionality to GT.M:

 
 

There are of course numerous bug fixes, remedied mis-features and smaller enhancements.  For a comprehensive list, see Changes.

 

 

Return to Table of Contents

Platforms

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

 

 

Platform

Supported Versions

Notes

Hewlett-Packard Integrity IA64 HP-UX

11V3 (11.31)

-

IA64 GNU/Linux - Red Hat Enterprise Linux

Red Hat Enterprise Linux 5.3

GT.M should also run on recent releases of other major Linux distributions with a contemporary 2.6 Linux kernel, glibc (version 2.5-24 or later) and ncurses (version 5.5-24 or later).  We have verified that GT.M passes comprehensive testing on RHEL 5.x on machines that have single cells (no more than 8 CPUs).  Multi-cell machines are not considered suitable for production use until they are certified.

 

Hewlett-Packard PA-RISC HP-UX

11.11

GT.M supports UTF-8 mode and M mode on this platform subject to the following:

 
  • Problems with HP-UX 11.11 prevent FIS from testing 4 byte UTF-8 characters.  FIS understands that the issue is resolved in HP-UX 11.31.  At this time, HP-UX 11.31 is still untested and not formally supported for GT.M; however, we are aware of nothing that would prevent GT.M V5.3-004 from working correctly on that newer version.

 

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 gives fairly consistent database errors of varying types, structural damage, and in general does not work correctly for any but the most simplistic usage.  The swlist -p command (executed as root) can be used to determine if this patch has been applied.  Since recent "BATCH" and "GOLDEN" patches may contain this patch, your system may already have this patch applied but may not list it separately. Contact your HP support channel for more information.

 

 

GT.M does not support database encryption on this platform.

 

Hewlett-Packard Alpha/AXP Tru64 UNIX

5.1B

GT.M supports M mode but not UTF-8 mode on this platform.  GT.M does not support database encryption on this platform.

Hewlett-Packard Alpha/AXP OpenVMS

7.3-1/7.3-2/8.2/8.3

GT.M supports M mode but not UTF-8 mode on this platform.  GT.M does not support database encryption on this platform.

 

If you need to work with external calls written in C with Version 6.x of the Compaq C compiler on Alpha OpenVMS, then you must carefully review all the provided kits for that product and apply them appropriately.

 

IBM eServer pSeries AIX

5.3

Since GT.M processes are 64-bit, FIS expects 64-bit AIX configurations to be preferable.


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

Sun SPARC Solaris

9 (Update 3 and above) and 10

GT.M supports the deprecated DAL calls in M mode but not in UTF-8 mode.  Please refer to the Integrating External Routines chapter in the Programmer’s Guide for appropriate alternative solutions.

 

x86_64 GNU/Linux

Red Hat Enterprise Linux 5.3; Ubuntu 8.04 LTS (Hardy Heron), 8.10 (Intrepid Ibex) & 9.04 (Jaunty Jackalope)

To run 64-bit GT.M processes requires both a 64-bit kernel as well as 64-bit hardware.

 

GT.M should also run on recent releases of other major Linux distributions with a contemporary 2.6 Linux kernel, glibc (version 2.5-24 or later) and ncurses (version 5.5 or later).

 

To install GT.M with Unicode (UTF-8) support on RHEL 5.3, in response to the installation question Should an ICU version other than the default be used? (y or n) please respond y and then specify the ICU version (e.g., respond 3.6) to the subsequent prompt Enter ICU version (at least ICU version 3.6 is required. Enter as <minor-ver>.<major-ver>):

 

x86 GNU/Linux

Red Hat Enterprise Linux 4

This 32-bit version of GT.M runs on either 32- or 64-bit x86 platforms; we expect the X86_64 GNU/Linux version of GT.M to be preferable on 64-bit hardware.

 

GT.M should also run on recent releases of other major Linux distributions with a contemporary 2.6 Linux kernel, glibc (version 2.3.4-2 or later) and ncurses (version 5.4-1 or later).  The minimum CPU must have the instruction set of a 686 (Pentium Pro) or equivalent. Contact FIS for support of older CPUs.

 

 

Although RHEL 5.x is officially not supported for the 32-bit x86 GNU/Linux GT.M, we are aware of no reason why GT.M will not run on it.

 

This is the last GT.M release for RHEL 4.x.  Future GT.M releases will require RHEL V5.x.

 

 

Return to Table of Contents

Migrating to 64-bit platforms

The same application code runs on both 32-bit and 64-bit platforms. Please note that:

 

 

Call-ins and External Calls

 

Parameter type

32-Bit

64-bit

Remarks

gtm_long_t

4-byte (32-bit)

8-byte (64-bit)

gtm_long_t is much the same as the C language long type, except on Tru64 UNIX, where GT.M remains a 32-bit application.

gtm_ulong_t

4-byte

8-byte

gtm_ulong_t is much the same as the C language unsigned long type.

gtm_int_t

4-byte

4-byte

gtm_int_t has 32-bit length on all platforms.

gtm_uint_t

4-byte

4-byte

gtm_uint_t has 32-bit length on all platforms

 
  • If your interface uses gtm_long_t or gtm_ulong_t types but your interface code uses int or signed int types, failure to revise the types so they match on a 64-bit platform will cause the code to fail in unpleasant, potentially dangerous and hard to diagnose ways.

Internationalization (Collation)

 

Parameter type

32-Bit

64-bit

Remarks

gtm_descriptor in gtm_descript.h

4-byte

8-byte

Although it is only the address within these types that changes, the structures may grow by up to 8 bytes as a result of compiler padding to meet platform alignment requirements.

 
  • Assuming other aspects of their code are 64-bit capable, collation routines should require only recompilation.
     

Environment Translation 

Parameter type

32-Bit

64-bit

Remarks

gtm_string_t type in gtmxc_types.h

4-byte

8-byte

Although it is only the address within these types that changes, the structures may grow by up to 8 bytes as a result of compiler padding to meet platform alignment requirements.

 

 

Return to Table of Contents

Recompile


 

Return to Table of Contents

Rebuild Shared Libraries or Images


 

Return to Table of Contents

Additional Installation Instructions 

To install GT.M, 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 must overwrite an existing GT.M installation with a new version you must first shut down all processes using the old version.  Since the the Linux Assigned Names and Numbers Authority has assigned GT.M the package name lsb-gtm, FIS recommends installing GT.M V5.3-004 in /opt/lsb-gtm/V5.3-004_arch (e.g., /opt/lsb-gtm/V5.3-004_i686) on Linux systems.  On other POSIX platforms, a location such as /opt/gtm/V5.3-004 would be appropriate.
  2. Use the MUPIP RUNDOWN command of the old GT.M version to ensure all database files are cleanly closed.

  3. In UNIX editions, make sure gtmsecshr is not running. If gtmsecshr is running, first stop all GT.M processes including the DSE, LKE and MUPIP utilities and then perform kill pid_of_gtmsecshr.

 
  • Never replace the binary image on disk of any executable file while it is in use by an active process.  It may lead to unpredictable results. 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 these processes open (that is, database structural damage).
Additional Information for AIX

GT.M for IBM pSeries AIX requires the Asynchronous IO facility to be available and configured. Before installing GT.M on IBM pSeries AIX, run the following command to check the filesets of this facility: lslpp -l bos.rte.aio

 

If there are no filesets, then install them from AIX installation media.  Then, use SMIT to configure the Asynchronous IO facility.  Use SMIT as follows:

  • smit aio (for gui mode) or

  • smitty aio (for text mode)

 

For system that has the "posixaio" option instead of "aio" (also called "legacy aio"), use SMIT as follows:

  • smit posixaio (for gui mode) or

  • smitty posixaio (for text mode)

Select "Configure AIO now".  If you see a message such as "aio0 has been created", it means that there is no further need of setup at this time.
 
 

In addition to configuring the aio0 device, select "Change/Show characteristics of Asynchronous I/O" change the value of "State to be configured at system restart" from "defined" to "available".  This ensures that the aio0 device will be available when you next reboot the system.

 

If you expect a database file to exceed 2GB, then you must configure its file system to permit files larger than 2GB.  Furthermore, should you choose to place journal files on file systems with a 2GB limit, since GT.M journal files can grow to a maximum size of 4GB, you must then set the journal auto switch limit to less than 2 GB.

OpenVMS

To upgrade from a GT.M version prior to V4.3-001, you must update any customized copy of GTM$DEFAULTS to include a definition for GTM$ZDATE_FORM.

 

You can ignore the following section if you choose the standard GT.M configuration or 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 the same 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 must 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 for each process to match the proper GTMCOMMANDS.CLD with the version of GT.M it runs.

 

Return to Table of Contents

Upgrading to GT.M V5.3-004

The GT.M database consists of four types of components— database files, journal files, global directories, and replication instance files. The format of each database component may differ for each GT.M version and even for 32-bit/64-bit GT.M platforms on the same hardware architecture.

 

GT.M upgrade procedure for V5.3-004A consists of 4 stages:  
 

 

Read the upgrade instructions of each stage carefully. Your upgrade procedure for GT.M V5.3-004A depends on your GT.M upgrade history and your current version. 

Stage 1: Upgrading your Global Directory

FIS strongly recommends you make a copy of your Global Directory before upgrading it. There is no way to downgrade a Global Directory to an earlier format.

To upgrade from any prior GT.M version:


  1. Open your Global Directory with the GDE utility program from GT.M V5.3-004A.
  2. Run the EXIT command. This command automatically, even with no other intervening commands, upgrades the global directory.

 

If you inadvertently open a global directory in an earlier format, with no intention of upgrading it, execute the QUIT command rather than the EXIT command.

 

If you inadvertently upgrade a global directory, perform the following steps:
 
  1. Open the global directory with GDE from V5.3-004A.
  2. Execute the SHOW ALL command.
 
Note: Create a GDE command script, or manually enter the GDE commands corresponding to the output, into GDE from the prior GT.M version.

 

Note: Because global directories are binary files, analogous to object files, FIS recommends that you use a GDE command script to create your global directories.

Stage 2: Upgrading your Database Files  

You need to upgrade your database files only when there is a block format upgrade (V4->V5). However, some versions, for example, the ones which have been initially been created with V4 (and subsequently upgraded to a V5 format) may additionally need a MUPIP REORG –UPGRADE operation to upgrade previously used but free blocks that may have been missed by earlier upgrade tools. 


To upgrade from a GT.M version prior to V5.000:


  1. Upgrade your database files using in-place or traditional database upgrade procedure depending on your situation. For more information on in-place/traditional database upgrade, see Database Migration Technical Bulletin.
  1. Run the MUPIP REORG –UPGRADE command. This command upgrades all V4 block to V5 format.

 

Note: Databases created with GT.M releases prior to V5.0-000 and upgraded to a V5 format retain a maximum size limit of 64M (67,108,864) blocks.

To upgrade from GT.M V5.0*/V5.1*/V5.2*/V5.3*:


No database file upgrade procedure is necessary if you upgrade from GT.M V5.0-000 or later to V5.3 series releases.  However, you may need to run the MUPIP REORG –UPGRADE command to upgrade any previously used but free block that may have been missed during earlier upgrade cycles.  You do not need to run MUPIP REORG –UPGRADE in the following situation:
 
  1. A database was instantiated by a V5 MUPIP CREATE, or
  2. A database has previously been completely processed by a MUPIP REORG –UPGRADE from V5.3-003 or later.
 
If you have already run the MUPIP REORG –UPGRADE command in V5.3-003[A], subsequent versions cannot determine whether or not it was done correctly and record warnings in the operator log for running MUPIP REORG -UPGRADE. Therefore, you must run either:
 

 

For additional upgrade considerations, see "Database Compatibility Notes".  
Database Compatibility Notes

Stage 3: Upgrading your Replication Instance File

If you are running a logical multi-site (LMS) application configuration on a UNIX platform, then you need to recreate the replication instance file using the MUPIP REPLICATE -INSTANCE_CREATE command whenever your upgrade changes GT.M from a 32-bit implementation to a 64-bit implementation (or potentially vice versa on the x86 platform).  If your upgrade does not include a change between a 32- and 64-bit implementation then you do not need to recreate the replication instance file.  For example, on Linux systems, you do not have to recreate the replication instance file if you upgrade from 32-bit pre V5.3-001 to 32-bit V5.3-001/V5.3-001A/V5.3-002/V5.3-003. You have to recreate the replication instance file only for the upgrade scenarios below.

 

Note: When upgrading from a 32-bit GT.M version to a 64-bit GT.M version you always need to recreate the replication instance files.  This includes upgrades from V5.3-000 or prior versions to GT.M V5.3-001 or later on AIX or 64-bit Linux and upgrades from V5.3-001 or prior versions to GT.M V5.3-002 or later on Solaris.  GT.M version upgrades on 32-bit Linux do not need to recreate instance files.  After recreating replication instance files for a replication secondary (or tertiary in a multi-site replication environment) always start it with the -UPDATERESYNC qualifier.  Using pre-existing instance files (as opposed to creating new instance files) could cause any process that reads the instance file (which includes the source server, receiver server, update process and GT.M processes on primary) to abnormally terminate with errors ranging from REPLINSTSECMTCH to a SIG-11 (which would create a corefile).

 

  1. On AIX systems, if you upgrade from 32-bit pre-V5.3-001 to 64-bit V5.3-001 or later.
  2. On Linux systems, if you upgrade from a 32-bit pre-V5.3-001 to 64-bit V5.3-001 or later or from a 64-bit release to a newer 32-bit release.
  3. On Sun SPARC Solaris, if you upgrade from 32-bit pre-V5.3-003 to 64-bit V5.3-003.

 

In these three scenarios, your source server process terminates abnormally if you do not recreate the replication instance file. Shut down all receiver servers on other instances looking for updates from this instance, shut down this instance, recreate the instance file and then restart the receiver server on this instance with the -UPDATERESYNC qualifier. 

 

Note: The UPDATERESYNC qualifier unconditionally synchronizes this secondary instance with the primary.

 

You must always follow the steps in the Multi-Site Replication technical bulletin when migrating from a logical dual site (LDS) configuration to an LMS configuration, even if you are not changing GT.M releases.

Stage 4: Upgrading your Journal Files

To upgrade from any prior GT.M version:


 

Important: This is necessary because MUPIP can't use journal files from a release other than its own for RECOVER or ROLLBACK. 
 

Return to Table of Contents

Managing M mode and UTF-8 mode

With International Components for Unicode (ICU) version 3.6 or later installed, GT.M's UTF-8 mode provides support for Unicode (ISO/IEC-10646) character strings.  On a system that does not have ICU 3.6 or later installed, GT.M only supports M mode.

 

On a system that has ICU installed, GT.M installs support for both M mode and UTF-8 mode, including a utf8 subdirectory of the directory where GT.M is installed.  From the same source file, depending upon the value of the environment variable $gtm_chset, the GT.M compiler generates an object file either for M mode or UTF-8 mode.  GT.M 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.  A GT.M process triggers an error if it encounters an object file generated with a different setting of $gtm_chset/$ZCHset than that processes' current value.  

 

Always generate an M object module with a value of $gtm_chset/$ZCHset matching the value processes executing that module will have.  As the GT.M installation itself contains utility programs written in M, their object files also conform to this rule.  In order to use utility programs in both M mode and UTF-8 mode, the GT.M installation ensures that both M and UTF-8 versions of object modules exist, the latter in the utf8 subdirectory.  This technique of segregating the object modules by their compilation mode prevents both frequent recompiles and errors in installations where both modes are in use.  If your installation uses both modes, consider a similar pattern for structuring application object code repositories.

 

GT.M is installed in a parent directory and a utf8 subdirectory as follows:

 

Compiling ICU on HP PA-RISC HP-UX

Note: All GT.M versions prior to V5.3-004 require exactly ICU 3.6, however, V5.3-004 (or later) accept ICU 3.6 or later.

As of this writing (November, 2009), ICU version 3.6 can be compiled on HP PA-RISC HP-UX with the following configuration:


Version: 11.31 (11iv3)

Compiler: cc HP C/aC++ B3910B A.06.12, aCC HP C/aC++ B3910B A.06.15, GNU Make 3.81

Instructions:

  1. Ensure that system environment variable $PATH includes the location of all the compilers mentioned above.

  2. Download the source code of ICU (in this example, version 3.6 for C from http://icu.sourceforge.net/download/3.6.html#ICU4C)

  3. At the shell prompt, execute the following commands:

    gunzip -d < icu4c-3_6-src.tgz | tar -xf -
    cd icu/source/
    chmod +x runConfigureICU configure install-sh
    runConfigureICU --enable-debug HP-UX/ACC --enable-64bit-libs? --enable-rpath –disable-threads
    gmake
    gmake check
    gmake install
  4. Set the environment variable $LD_LIBRARY_PATH to point to the location of ICU.  HP-UX uses the environment variable $LD_LIBRARY_PATH to search for dynamically linked libraries to be loaded.

  5. ICU is now installed in /usr/local.


  • By default, ICU is installed in /usr/local.  If you install ICU in a different directory, type:

    • runConfigureICU HP-UX/ACC --prefix=<install_path> --enable-64bit-libs? --enable-rpath –disable-threads
    • Then execute the gmake commands, and set the environment variable $LD_LIBRARY_PATH to point to the appropriate location.


Note: Although GT.M uses ICU, ICU is not FIS software and FIS does not support ICU.  Instructions for installing and configuring ICU are merely provided as a convenience to you.

Compiling ICU on HP Integrity IA64 HP-UX

Note: All GT.M versions prior to V5.3-004 require exactly ICU 3.6, however, V5.3-004 (or above) accept ICU 3.6 or later.


As of this writing (November, 2009), ICU version 3.6 can be compiled on HP Integrity IA64 HP-UX with the following configuration:

Version: HP-UX 11.31
Compilers: HP C/aC++ B3910B A.06.15, GNU make (3.81)
Instructions:

  1. Ensure that system environment variable PATH includes the location of all the compilers mentioned above.
  2. Download the source code of ICU (in this example version 3.6 for C from http://icu.sourceforge.net/download/3.6.html#ICU4C).
  3. At the shell prompt, run the following commands:

               gunzip -d<  icu4c-3_6-src.tgz | tar -xf -
            cd icu/source/
            chmod +x runConfigureICU configure install-sh
            runConfigureICU HP-UX/ACC --disable-threads
            gmake
            gmake check
            gmake install

  1. Set the environment variable LD_LIBRARY_PATH to point to the location of ICU. HP-UX uses the environment variable LD_LIBRARY_PATH to search for dynamically linked libraries to be loaded.


ICU is now installed in the /usr/local directory.


By default, ICU is installed in /usr/local.  If you install ICU in a different directory, type:

  

Note: Although GT.M uses ICU, ICU is not FIS software and FIS does not support ICU.  The instructions for installing and configuring ICU are merely provided as a convenience to you.

 

Return to Table of Contents

Setting the environment variable TERM

The environment variable $TERM must specify a terminfo entry that accurately 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 needs to run.

 

 

 

GT.M sends keypad_xmit before terminal reads for direct mode and READs (other than READ *) if EDITING is enabled. GT.M sends keypad_local after these terminal reads.

 

Return to Table of Contents

Installing Compression Libraries

If you plan to use the optional compression facility for replication, you must provide the compression library.  The GT.M interface for compression libraries accepts the zlib compression libraries without any need for adaptation.  These libraries are included in many UNIX distributions and are downloadable from the zlib home page.  If you prefer to use other compression libraries, you need to configure or adapt them to provide the same API provided by zlib.  Simple instructions for compiling zlib on a number of platforms follow.  Although GT.M uses zlib, zlib is not FIS software and FIS does not support zlib.  These instructions are merely provided as a convenience to you.

 

 

Solaris/cc compiler from Sun Studio:

./configure --shared
make CFLAGS="-KPIC -m64"
 
            

HP-UX(IA64)/HP C compiler:

./configure --shared
make CFLAGS="+DD64"
 
            

AIX/XL compiler:

./configure --shared
Add -q64 to the LDFLAGS line of the Makefile
make CFLAGS="-q64"
 
            

Linux/gcc:

./configure --shared
make CFLAGS="-m64"
 
z/OS:
 
Refer to the steps we used to install zlib on z/OS in the GT.M for z/OS technical bulletin.
 

 

If a package for zlib is available with your operating system, FIS suggests that you use it rather than building your own.

 

By default, GT.M searches for the libz.so shared library (libz.sl on HPUX PA-RISC) in the standard system library directories (for example, /usr/lib, /usr/local/lib, /usr/local/lib64).  If the shared library is installed in a non-standard location, before starting replication, you must ensure that the environment variable $LIBPATH (AIX and z/OS) and $LD_LIBRARY_PATH (other UNIX platforms) includes the directory containung the library.  The source and receiver server link the shared library at runtime.  If this fails for any reason (such as file not found, or insufficient authorization), the replication logic logs a DLLNOOPEN error and continues with no compression.

 

 

Return to Table of Contents

Changes

M-Database Access

S9I11-002714 Better protection against damaged journal file descriptors

GT.M now checks the validity of the journal file descriptor if it encounters an ENO9 (EBADF) or ENO29 (ESPIPE) error while writing to the journal file. If GT.M finds the descriptor invalid, GT.M now creates a core file, closes that journal file and resumes operation. Furthermore, when a GT.M process opens a database file or journal file, it now checks whether the new file descriptor matches that of any open database or journal file. If so, GT.M creates a core file in the current working directory of the process. Then, if the invalid file descriptor corresponds to a journal file the process closes that journal file, and continues operation; if the invalid file descriptor corresponds to a database file, the process terminates abnormally in order to avoid potential database damage. This change was in response to a handful of reports of unexplained journal file closings and one report of writes to a journal file incorrectly redirected to a database file resulting in database and journal file damage all on AIX pSeries. We were not able to determine the root cause - whether in GT.M, in AIX, or in calls to application code written in C - but this change protects against that error whatever the cause. [UNIX] (S9I11-002714) 

S9A11-001722 More conservative access permissions

When you restrict access to a database file, GT.M now propagates those restrictions to shared resources associated with the database file, such as semaphores, shared memory, journals and temporary files used in the course of MUPIP BACKUP. Prior versions granted world read/write access to these resources, since permissions of the database file control effective access, and since journal files can reside in directories whose ownership, group and access permissions can be limited. In the unusual case where the owner of the database file is not a member of the group of the database file, but the owner of the database file is a member of the group of libgtmshr.so, GT.M uses that group id; otherwise granting world read/write access to the database associated resources. Note that an owner who is not a member of the group owning the distribution cannot run GT.M if the distribution is limited to group access. These more conservative access permissions should be transparent to existing applications. [UNIX] (also C9C12-002191, C9I10-003048)
 

C9905-001119 Caching optimization for transaction processing

 

Transaction Processing (TP) logic now enables a caching optimization for global references that previously only worked for non-TP (so called mini-transactions).  This can provide a performance increase for applications using TP.  (C9905-001119)

C9A05-001476 Database encryption

 

GT.M now supports database file encryption using a plug-in architecture.  This enhances GT.M’s ability to protect data stored in the database and assists with compliance, such as HIPAA and PCI DSS.  The GT.M Database Encryption Technical Bulletin provides details.  [AIX, HP-UX on IA64, Linux, Solaris, z/OS] (C9A05-001476)

C9E02-002510 Rare case of incorrect KILL in progress indicator fixed

 

The KILL in progress (KIP) handling now deals correctly with the very rare case where a process terminates (perhaps because of a MUPIP STOP) in the middle of a non-TP (mini-transaction) multi-block Kill, and termination processing encounters a secondary error.  In previous versions there was a very small chance the process could inappropriately clear the KIP indicator for the wrong region and/or leave behind an incorrect KIP indicator.  DSE DUMP -FILE displays the current value of KIP as "KILLs in Progress".  (C9E02-002510)

C9E10-002648 Correct $ORDER(gvn,-1) if last gvn subscript is "" & last global node starts with $ZCHAR(255)

Using "" as the last subscript in a global argument to $ORDER(gvn,-1) or $ZPREVIOUS() now produces correct results when the global level contains subscripts beginning with $ZCHAR(255). In previous versions, these functions incorrectly ignored such nodes. This was not an issue with local variables. Note: When using GT.CM GNP in a client server environment, you must upgrade both the client and server environments to implement a complete correction - upgrading only one of the two retains the incorrect behavior for subscripts beginning with $ZCHAR(255). (C9E10-002648)

C9I09-003042 TP performance optimization

Transaction processing performance has been improved in the case where a only a small subset of the global variables accessed by a process in its lifetime are accessed within any given transaction.  (C9I09-003042)

C9J01-003076 Redundant database disk writes eliminated

 

Fewer disk write operations are used to keep the database file, and journal file if any, on disk up-to-date with shared memory when the database has had no updates for a while.  In previous versions, it was possible for more than one process to (redundantly) write file headers and EPOCH records.  [UNIX] (C9J01-003076)

C9J01-003078 Better protection against spurious signals during database startup and shutdown

 

GT.M now manages any signals arriving during database startup and rundown and (BG) buffer allocation more robustly.  In previous versions, there were very narrow windows where a signal such as a MUPIP STOP could disrupt lock management and cause a deadlock.  [UNIX] (C9J01-003078)

C9J03-00396 Improved error message for OpenVMS journaling issue (V5.3-004A)

GT.M now sends a JNLFLUSH error message to the operator facility if a process has trouble completing its journal writes.  Prior versions issued a GTMASSERT in this case. [OpenVMS] (C9J03-003096)

C9J04-003120 More graceful handling of high contention during database open and close

GT.M now handles high contention at database startup and shutdown more gracefully.  In prior versions, a large number of processes opening and closing a database file at the same time could cause one of them to get an inappropriate CRITSEMFAIL error.  Such an error had no associated database damage.  [UNIX] (C9J04-003120)

C9J05-003121 More robust handling of MM database file headers when generating core files

When possible, in a core file, GT.M now appropriately includes the file header for a database region using the MM access method.  In prior versions if a memory related problem triggered the core it could cause an indefinite recursion.  [UNIX] (C9J05-003121)

C9J05-003122 Database file size limit raised to 224 million blocks

Databases created with V5.3-004 can grow to a maximum size of 224M (234,881,024) blocks.  This means, for example, that with an 8KB block size, the maximum single database file size is 1,792GB (8KB*224M).  In prior V5 versions, the maximum was 128M (134,217,728) blocks.  Note that this is the size of a single database file - a logical database (an M global variable name space) can consist of an arbitrary number of database files.  (C9I09-003122)

C9J05-003123 More robust handling of insufficient timer queue entries (TQELM) on OpenVMS

 

GT.M now handles the situation where a process has insufficient timer queue entries (TQELM) by skipping a free (idle) journal epoch, potentially repeatedly.  In previous versions, the epoch logic could live-lock and produce indefinite looping when the process timer queue entries were exhausted.  The workaround and recommended practice is to ensure that processes running GT.M have sufficient TQE limits (three per database file added to any other needs).  You can adjust this limit for all users with the SYSGEN PQL_MTQELM parameter.  Note that deferred epochs can lengthen journal recovery times.  [OpenVMS] (C9J05-003123)

C9J05-003132 Better handling of version mismatch errors during database initialization

GT.M now generates %GTM-E-VERMISMATCH errors correctly during database initialization.  Previous versions could inappropriately return an %GTM-E-REQRUNDOWN error.  (C9J05-003132)

C9J06-003139 Eliminate a cause of redundant records in journal file

 

GT.M now limits the number of EPOCH and PBLK records it writes in journal files that have before image journaling turned on.  In previous versions of GT.M, depending on database update patterns, more records than needed could be written resulting in journal file size bloat.  [UNIX] (C9J06-003139)

C9J07-003162 Prevent two unusual causes of DBKEYORD (V5.3-004A)

GT.M now maintains the integrity of the database even in rare cases of TP updates to globals that have NOISOLATION optimization turned on and non-TP updates to globals using the $INCREMENT() function.  In GT.M V5.3-004, the NOISOLATION case could under very rare circumstances result in a damaged database.  In all previous GT.M versions since V5.0-000 which implemented $INCREMENT(), its use could in very rare circumstances result in a damaged database.  The symptoms of the damage could be either a DBKEYORD integrity error report from MUPIP INTEG or a false GVUNDEF reported by GT.M. (C9J07-003162)

 
Return to Table of Contents

M-Other Than Database Access

S9902-001105 New gtm_nocenable environment variable

The new environment variable $gtm_nocenable controls whether <CTRL-C> is enabled at process startup. If $gtm_nocenable has a value of 1, "TRUE" or "YES" (case-insensitive), and the process principal device is a terminal, $PRINCIPAL is initialized to a NOCENABLE state where the process does not recognize <CTRL-C> as a signal to enter direct mode. No value, or other values of $gtm_nocenable initialize $PRINCIPAL with the CENABLE state. The [NO]CENABLE deviceparameter on a USE command can still control this characteristic from within the process. In prior versions, there was theoretically a minuscule window where GT.M might recognize a <CTRL-C> and enter direct mode even if a USE $PRINCIPAL:NOCENABLE was the very first command executed. In Open VMS, GTM$DEFAULTS provides a way to address this same issue. [UNIX] (S9902-001105)

S9F04-002544 FIFO timed READ correction (V5.3-003)

A FIFO timed READ to an existing, but empty device no longer results in a SYSTEM-E-ENO11 error.  In versions prior to V5.3-003, this error not only inappropriately appeared, but also recurred on all subsequent READ operations until the device CLOSE.  While this was fixed in V5.3-003, we missed documenting it in release notes for V5.3-003.  [UNIX] (S9F04-002544) 

S9G06-002616 Correct report of MAXFORARGS

GT.M correctly reports the MAXFORARGS when the compiler encounters more FOR command arguments than it can handle (currently 127). In previous releases, the compile might SEG-V (signal-11) or hang; some platforms worked correctly in V5.3-003, but all now appropriately handle this extreme case. (S9G06-002616)

S9H01-002639 More appropriate error message on inability to access a file to be compiled

GT.M now returns a more appropriate error message when compiling a file that exists, but which, for some reason, GT.M cannot open (for example, %SYSTEM-E-ENO13, Permission denied).  Previous versions issued the less helpful %GTM-E-IONOTOPEN.  [UNIX] (S9H01-002639)
 

S9I10-002704 GT.CM Server out-of-memory prevented (V5.3-004A)

 

The GT.CM GNP or OMI server process no longer suffers from inappropriate memory consumption (due to unnecessary string pool growth).  This addresses a problem introduced in V5.0-000, which could cause the server to exhaust available memory and fail, particularly when the server had been running for a long time and the data rates were high.  In theory, DSE, MUPIP or compilation could also trigger this issue, but in practice none of them are likely to generate enough temporary storage to expose the problem.  Increasing the OS managed memory limits on processes and restarting the server frequently could ameliorate or workaround the issue. (S9I10-002704)

S9J01-002718 $ZSYSTEM returns exit status modulo 256 of shell invoked by last ZSYSTEM

The $ZSYSTEM Intrinsic Special Variable (ISV) now returns the exit status modulo 256 of the shell invoked by the last ZSYSTEM command.  The 256 limitation is external to GT.M.  Previously $ZSYSTEM was not always reliable - it reported the actual exit status, but potentially OR'd with extraneous data multiplied by 256 modulo 65536.  [UNIX] (S9J01-002718)

S9J05-002724 SET correctly handles special case of local variables used as subscripts for target

The SET command correctly handles the case where local variables used as subscripts of glvns outside of parentheses on the left hand side of the SET are also modified as part of a $$ or $& or $INCREMENT invocation on the right hand side of the SET; for example: SET X(I)=$$FUNC() where $$FUNC() modifies the value of I.  As a consequence of a regression introduced in V5.2-000A, SET evaluated the right hand side first and used the modified value of the variable as the subscript for the SET.  A workaround for such prior versions is to use a parenthesized set instead; for example: SET (X(I))=$$FUNC().  (S9J05-002724)

S9J06-002725 $NAME() returns empty string for undefined variables

When using NOUNDEF, $NAME() now returns an empty string where appropriate for undefined variables.  Starting with V5.3-001, $NAME() would return nothing at all for such undefined variables.  (S9J06-002725)

S9J07-002728 ZCOMPILE with an error closes the object file (V5.3-004A)

GT.M now appropriately handles the situation when ZCOMPILE finds an error in the routine being compiled.  Versions after V5.3-001 and through V5.3-004 create the object file, but do not close it - resulting in the possibility that other users trying to access the same object file, for example, through ZPRINT or $TEXT(), wait indefinitely for the object file to be closed. [Unix] (S9J07-002728)

S9J07-002729 MUMPS -LIST with an error more robust (V5.3-004A)

 

GT.M now correctly handles the situation when a command line qualifier requests a source program listing file and the file being compiled has syntax errors.  In previous versions certain types of syntax errors (for example LABELMISSING or FMLLSTPRESENT) could cause abnormal termination (SIG-11). [Unix] (S9J07-002729)

C9B09-001754 KILL of a variable joined by pass-by-reference to a formallist variable

KILL of a variable joined by pass-by-reference to a formallist variable now always KILLs the formalist variable when the actuallist variable is KILL'd even if the formallist variable is specified as protected by an exclusive KILL.  In prior releases, both variables were protected by the exclusive KILL.  The new behavior conforms to the M standard.  (C9B09-001754)

C9E02-002527 Correct $ZEOF handling when $PRINCIPAL is NULL device

GT.M now correctly reports 0 for $ZEOF prior to a READ from a NULL device $PRINCIPAL.  Previously $ZEOF would inappropriately be set to 1 prior to attempting a READ from a NULL device $PRINCIPAL.  [UNIX] (C9E02-002527)

C9I02-002957 New functionality - alias variables

Alias variables provide a layer of abstraction between the name of a local variable and its value analogous to that provided by M pass by reference in routine calls.  Multiple local variables can be aliases, and a SET or KILL to one acts as a SET or KILL to all.  Alias container variables provide a way of storing a reference to a data-space in an M sparse array, which protects the associated data-space even when it is not accessible through any current name.  The Alias Variables Technic

al Bulletin covers the details. (C9I02-002957)

C9I04-002984 Correct $ZEOF handling on read from or append to zero length files

GT.M now handles $ZEOF for disk files correctly by setting it to 1 only after a read to the end of file.  Previously $ZEOF would inappropriately be set to 1 when opening a zero length file READONLY or when opening a file for APPEND - in both cases prior to any read operation.  Note: $ETRAP and $ZTRAP occur on the READ after $ZEOF is set by a prior READ, while EXCEPTION is triggered on the same read that sets $ZEOF.  [UNIX] (C9I04-002984)

C9I08-003017 No inappropriate process terminations on access to routine source after ZLINK

 

Certain inappropriate terminations during ZLINK or ZPRINT commands, $TEXT() functions or $ETRAP/$ZTRAP invocations no longer occur.  Previously, GT.M could get a signal 11 (UNIX) or ACCVIO (VMS) in these situations if a routine had been replaced by one or more ZLINK commands and the process referenced its source text with ZPRINT, $TEXT, $ETRAP, or $ZTRAP.  (C9I08-003017)

C9I09-003031 GT.M now runs on z/OS on IBM eServer zSeries

z/OS on zSeries is now a supported platform using a 64-bit POSIX API.  The GT.M on IBM eServer zSeries z/OS Technical Bulletin provides details.  [z/OS] (C9I09-003031)

C9I09-003033 ICU versions 3.6 and greater now supported

In UTF-8 mode, GT.M now also uses ICU versions later than 3.6 (previous versions of GT.M required ICU 3.6).  By default, GT.M now uses the most current installed version of ICU.  GT.M expects ICU to have been built with symbol renaming disabled and will issue an error at startup if the currently installed version of ICU has been built with symbol renaming enabled.  To use a different version of ICU (not the currently installed) or a version of ICU built with symbol renaming enabled, use the new $gtm_icu_version environment variable to indicate the MAJOR VERSION and MINOR VERSION numbers of the desired ICU formatted as MajorVersion.MinorVersion (for example "3.6" to denote ICU-3.6).  When $gtm_icu_version is so defined, GT.M attempts to open the specific version of ICU.  In this case, GT.M works regardless of whether or not symbols in this ICU have been renamed.  A missing or ill-formed value for this environment variable causes GT.M to only look for non-renamed ICU symbols. Note that display widths for a few characters are different starting in ICU 4.0. [UNIX] (C9I09-003033)

C9I12-003064 Improvements to PIPE and FIFO devices

The PIPE device and FIFO device now maintain consistent status variables for all types of READ operations, including a READ that encounters an end of file (EOF). The FIFO device now utilizes non-blocking WRITE like the PIPE device. In prior versions FIFO WRITE operations could block if the buffer was full. In prior versions $DEVICE was not maintained at EOF on any READ nor was $ZA on a timed READ. $DEVICE now returns a 0 for for a timed READ that yields a partial result (unterminated or less than full fixed length), where it used to return inappropriate value of "1,Resource temporarily unavailable" . $ZA returns a 0 for a timed READ that returns a partial or empty result but does not encounter an EOF or error, where it used to return a 9. $TEST now returns a 0 (FALSE) for a partial result and a 1 (TRUE) for an EOF, where it used to do the opposite. Note: a FIFO READ does not recognize an EOF if the device is opened for both READ and WRITE. The table below shows the current behavior with the items that changed in bold where n is any (positive) non-zero time and the error case applies to timed or untimed READ. [UNIX] (C9I12-003064)
 

 

PIPE and FIFO ISV after a READ

Operation

Result

$DEVICE

$ZA

$TEST

X

$ZEOF

READ X:n

Normal Termination

0

0

1

Data Read

0

READ X:n

Timeout with no data read

0

0

0

empty string

0

READ X:n

Timeout with partial data read

0

0

0

Partial data

0

READ X:n

End of File

1,Device detected EOF

9

1

empty string

1

READ X:0

Normal Termination

0

0

1

Data Read

0

READ X:0

No data available

0

0

0

empty string

0

READ X:0

Timeout with partial data read

0

0

0

Partial data

0

READ X:0

End of File

1,Device detected EOF

9

1

empty string

1

READ X

Error

1,<error signature>

9

n/c

empty string

0

C9I12-003068 Reduced memory fragmentation for processes linking large numbers of routines

 

GT.M now more efficiently handles large numbers of M routines within a single process, reducing memory usage for processes that link a large number of routines.  (C9I12-003068)

C9J01-003080 Memory leak plugged in pattern matching with alternation

 

GT.M now frees memory created when processing a pattern match operator containing alternations.  In previous versions of GT.M, this same usage caused a small memory leak.  (C9J01-003080)

C9J01-003081 Better handling of deeply nested indirection on 64-bit platforms

 

64-bit implementations now handle deeply nested indirection in a more wholesome way.  In previous releases, indirection nesting of more than 16 levels could trigger a buffer overflow, causing the process to terminate abnormally.  [AIX, HP-UX IA64, Linux IA64 & x86_64, Solaris] (C9J01-003081)

C9J03-003097 Error during creation of a file or FIFO device

GT.M now handles the case where an error occurs during the creation of a file or FIFO device, for example resulting from incorrect parameters, by ensuring neither the external device or file, nor the GT.M internal information on it persist.  In previous versions an empty file would exist after the unsuccessful OPEN and a ZSHOW “D” included a CLOSED device.   Additionally, the descriptors associated with the empty file would accumulate leading to a possible depletion of available descriptors.  [UNIX] (C9J03-003097)

 

C9J03-003102 Non ASCII characters accepted in M mode pattern match string literals

 

If $ZCHSET is "M", GT.M now accepts string literals containing characters in the range $CHAR(128) to $CHAR(255) on the right side of the pattern match operator.  Previously GT.M issued a PATLIT error in such cases.  Note that this is an unhealthy programming practice because string literals containing such characters are different between "M" and "UTF-8" modes and may cause subtle application bugs that are not immediately obvious.  [UNIX] (C9J03-003102)

C9J03-003104 Trailing white space ignored in string used for indirection or Xecute

 

GTM now ignores trailing white space and/or comments in a string compiled for use in indirection or the Xecute command.  Previously GTM would generate an INDEXTRACHARS error in this situation.  (C9J03-003104)

C9J04-003106 Inappropriate failure of EXCEPTION handler on OPEN fixed

 

GT.M now protects an EXCEPTION handler for an OPEN on a Sequential Disk, FIFO, or PIPE device when the OPEN fails.  Previously there was a small chance the EXCEPTION could be corrupted during such an error resulting in inappropriate failure of the exception handler. (C9J04-003106)

C9J04-003109 $ZPROMPT initialized from environment variable / logical name $gtm_prompt

 

If the UNIX environment variable or VMS logical name $gtm_prompt is defined, it is used to initialize the $ZPROMPT Intrinsic Special Variable (ISV), which specifies the direct mode prompt.  If $gtm_prompt is not defined, the default remains "GTM>". (C9J04-003109)

C9J04-003115 Appropriate error when compiling M programs containing binary data

 

GT.M now issues an appropriate error if an attempt is made to compile an M program that contains binary data.  Previous versions of GT.M could terminate abnormally.  (C9J04-003115)

C9J04-003119 Correct code generation for branches to previous labels in large routines on Solaris

 

GT.M now manages branches (DO, Extrinsic, GOTO, ZGOTO) to previous labels in the same routine properly.  Previous 64-bit versions (V5.3-002 or later) could branch incorrectly, when the offset to the branch exceeded 1MB, typically causing a SEGV (Signal-11) error.  Note that a 1MB offset is extremely large for an object module, requiring a substantially larger source module to generate it.  [Solaris] (C9J04-003119)

C9J05-003129 Correct location reported in large routines

 

GTM now reports the correct location (entryref) in errors, $STACK, $ZPOSITION and other places where it displays location.  In prior versions large routines could trigger an internal overflow and cause GT.M to report incorrect locations.  (C9J05-003129)

C9J06-003135 Cause of segmentation violation in complex external calls with AIX removed

 

The call-out ($&) interface now correctly manages the registers on return from the call.  In previous AIX releases stating with V5.3-001 external call logic that used many registers – typically programs with instances of significant logic complexity - could fail with a SEG-V (signal 11).  The workaround was to rework called routines to lower their register usage high-water mark.  [AIX] (C9J06-003135)

C9J06-003136 Faster compilation, using less memory

 

GT.M now compiles programs with many literals faster and manages compiler memory requirements to a low rather than high-water mark.  This change also increases how many names (labels, routines and variables) the 32-bit x86 Linux edition can handle in a compilation.  Previous versions took longer to compile some routines and could acquire a large memory footprint when compiling large routines.  The memory size was typically an issue only when doing dynamic compilation from a running process.  [UNIX] (C9J06-003136)

C9J06-003141 gtmprofile and gtmcshrc recognize lower-case utf-8 for gtm_chset

 

The gtmprofile and gtmcshrc scripts now recognize utf-8 as a valid setting of the gtm_chset environment variable. Previously, only UTF-8 was recognized by these scripts.  [UNIX] (C9J06-003141)

C9J06-003144 "Timed" LOCK release maintains $TEST (V5.3-004A)

 

GT.M now sets $TEST to 1 in case of a timed lock release operation (e.g. LOCK -^GBLREF:TIMEOUT).  Previous versions of GT.M left $TEST untouched in this case which was not in compliance with the M-standard. (C9J06-003144)

C9J07-003146 zOS cursor movement correction (V5.3-004A)

 

Cursor addressing for terminal devices now works correctly using the X, Y, UP, or DOWN parameters of the USE statement. [z/OS] (C9J07-003146)

C9J07-003147 prevention of a rare stuck process in OpenVMS

 

GT.M now avoids a case where multiple processes attempting to exit at the same time might cause one process to deadlock trying to get information about one of the other processes which is not available. [OpenVMS](C9J07-003147)

C9J07-003152 Improved error messages for UTF-8/ICU issues (V5.3-004A)

 

GT.M now reports more descriptive error messages for two cases dealing with ICU (for UTF-8)  - ICUVERLT36, when it finds an ICU library with version less than 3.6 or when the $gtm_icu_version environment variable defines a value less than 3.6; and ICUSYMNOTFOUND when $gtm_icu_version is not defined and it encounters an ICU library built with symbol renaming.  Previously, GT.M did not immediately report the error when $gtm_icu_version specified a version less than 3.6 and the error message did not include the library path and the ICU version in question. [Unix] (C9J07-003152)

 

C9J07-003161 Compile of many literals no longer fails (V5.3-004A)

 

GTM now compiles routines with many thousands of literals correctly and without error.  Previously a routine with a large number or literals could occasionally cause a memory access violation (SEG-V, Sig-11 or ACCVIO) or, at least in theory, some corruption of a literal string. (C9J07-003161)

Return to Table of Contents

Utilities- MUPIP

S9J05-002723 Source Server generates a core dump for JNLBADRECFMT error

For enhanced troubleshooting, the source server now creates a core dump as part of issuing a JNLBADRECFMT error, in case one is encountered.  The core file will help with determining the cause of the error.  [UNIX] (S9J05-002723)

C9G09-002804 Update Server handling of key & record sizes too large for replicating instance

 

After one retry (to rule out the unlikley case of a TCP error in transmission), the Update Server on a replicating instance now appropriately issues GVSUBOFLOW or REC2BIG errors and then shuts down.  GVSUBOFLOW indicates the incoming key length is greater than the maximum key size for a region.  REC2BIG indicates the incoming global variable record length exceeds the maximum for a region.  Previous versions ignored the GVSUBOFLOW error, causing database structural damage, and indefinitely retried a REC2BIG error, logging a stream of “Bad trans” messages.  If the database key and record sizes on replicating instance are properly matched with those on the initiating instance, replication never encounters this issue. (C9G09-002804)

C9J01-003086 MUPIP commands to freeze updates print informational messages

 

MUPIP FREEZE, DSE ALL -FREEZE/-NOFREEZE and DSE CHANGE -FILEHEADER -FREEZE=TRUE/FALSE now print informational messages to indicate the action on each region and the overall outcome.  These commands used to be silent unless they encountered an error.  (C9J01-003086)

C9J04-003117 MUPIP LOAD speeded up in UTF-8 mode

 

MUPIP LOAD in UTF-8 mode runs faster and should now more closely approximate MUPIP Load in M mode.  [UNIX] (C9J04-003117)

 

C9J05-003128 is described below, under Utilities other than MUPIP.

C9J07-003159 Improved MUPIP BACKUP error message (V5.3-004A)

 

MUPIP BACKUP -DATABASE now issues an appropriate error message in case it encounters a failure while creating the backup database.  Previous versions would issue a misleading error message in this case. (C9J07-003159)

 

Return to Table of Contents

Utilities-Other Than MUPIP

 

C9B11-001789 Improved recoverability after low-level DSE operations

 

DSE CHANGE -BLOCK -TN and DSE MAPS -RESTORE now write before-image journal records (which show up as PBLK records in a mupip journal -extract -detail output) as appropriate.  DSE CHANGE -BLOCK -TN also writes after-image journal records (which show up as a AIMG records in the detailed journal extract) in case of local bitmap blocks.  Previous versions did not write these records which could prevent a backward recovery/rollback from restoring the database to a valid past state.  Please note that these are low-level DSE operations intended only to be performed under the guidance of FIS support.  (C9B11-001789)

C9J01-003071 Installation script on Solaris now works with /bin/sh and tests for 64-bit ICU libraries

 

The installation script for GT.M on Solaris now works with /bin/sh.  Previously, it required /usr/xpg4/bin/sh or Korn shell (ksh).  Also, the script now correctly checks for 64-bit ICU libraries.  Previously it checked for 32-bit ICU libraries, despite the fact that GT.M is a 64-bit application, and would fail to build GT.M's utf8 subdirectory if the 32-bit ICU libraries were not found.  [Solaris] (C9J01-003071)

C9J01-003079 Distribution may now be unpacked by any user

 

The release tar file may now be unpacked by any user.  The install script must still be run as root to set permissions properly.  Previous releases required root permissions to unpack the archive.  [UNIX] (C9J01-003079)

 

C9J01-003086 is described above under Utilities, MUPIP.

C9J02-003095 Installation script creates any needed parent directories

 

The installation script for GT.M now creates any required parent directories for either an absolute or relative path installation.  In addition, the installation creates a soft link from the utf8 installation directory to gtmsecshr and copies all include files in the distribution to the installation directory.  Previously, the installation failed if any parent directories did not exist or if the installation directory was a relative path; also it did not provide the soft link and omitted some include files.  [UNIX] (C9J02-003095)

C9J05-003128 Better printing of UTF-8 characters with DSE DUMP -BLOCK

 

DSE DUMP BLOCK now outputs certain printable UTF-8 character representations that it incorrectly suppressed in previous versions.  Also, MUPIP LOAD now produces proper terminal output while loading binary format extract files created by GT.M versions before V5.2-000.  Previous versions incorrectly displayed a <CTRL-D> character at the end of the first line of the header report, even though the actual database load worked correctly.  [UNIX] (C9J05-003128)

C9J06-003134 GDE issues better errors when opening command files

 

GDE now issues an error if it encounters any problem opening a command file.  In previous versions, it reported only file not found, but suppressed other errors, for example insufficient authorization.  (C9J06-003134)

C9J06-003138 DSE CACHE-VERIFY no longer reports spurious error

 

DSE CACHE -VERIFY now works correctly. In previous versions, it could fail with a DBBMMSTR error (reported in the operator log) even though the database was clean.  [OpenVMS] (C9J06-003138)

 

Return to Table of Contents

Error Messages

ALIASEXPECTED, Alias or alias container variable expected in this context

Compile time or Run Time Error: This indicates the argument for a SET * or KILL * command used a non-alias local variable where the syntax requires an alias or alias container variable.

Action: Correct the code in or investigate the logic to determine why the local variable in question is not in the expected state.

BADTAG, Unable to use file ffff (CCSID tttt) with CCSID uuuu

Run Time Error: This z/OS specific error indicates the device or file ffff had a tag tttt incompatible with the tag uuuu implied by chset associated with OPEN command.
 

Action: Change the [i/o]chset to match the device or file or use iconv to convert the file to an appropriate character set, or possibly use chtag to [re]tag the file.

 

BUFFLUFAILED, Errors flushing buffers from uuuu for database file dddd

 

MUPIP Error: MUPIP or DSE (uuuu) could not flush the buffers for database file dddd completely. In the case of MUPIP, this typically means that some process is not releasing the critical section. In the case of DSE, this typically means there is some error in the global buffer cache which needs to be fixed.

Action: In the case of MUPIP, wait approximately 20 seconds and retry. In the case of DSE, try DSE CACHE RECOVER to fix the cache. If the error persists, report it to the group responsible for database integrity at your operation as soon as possible

CLOSEFAIL, Error while closing file descriptor dddd

Run Time Error: GT.M records this error in the syslog whenever it attempts to close an open file descriptor dddd and the close returns with an error. After recording this error, the GT.M process resumes normal operation.
Action:  Report the above error message along with the accompanying GTM-I-CALLERID message to GT.M Support, as it may be a symptom of out-of-design operation.
 

CRYPTDLNOOPEN, Error loading encryption library. xxxx

Run Time Error: GT.M failed to load the gtmcrypt plug-in or one of its related libraries.

Action: Refer to the accompanying detail (xxxx) and verify that the gtmcrypt plug-in and related libraries are properly installed and that $LD_LIBRARY_PATH / $LIBPATH are properly set.

CRYPTHASHGENFAILED, Error generating encryption hash. xxxx

Run Time Error: gtmcrypt plug-in reports there is problem with the hash function.

Action: Examine the message (xxxx) from the plug-in and take the needed action.

CRYPTINIT, Error initializing encryption library. xxxx

Run Time Error: The gtmcrypt plug-in reports it is unable to initialize one or more of its related libraries.

Action: Examine the detailed message (xxxx) from the plug-in and take appropriate action.

CRYPTJNLWRONGHASH, Encryption key hash mismatch between journal file jjjj and corresponding database file dddd

Run Time Error: gtmcrypt plug-in reports the hash of the key in the header of database file dddd does not match the hash stored in the header of journal file jjjj.  This is most likely caused by inappropriate operator action such as replacing the current journal file with an older journal file.

Action: Correct the error that caused the incorrect journal file to be pointed to by the database file. If the correct journal file has been inadvertently deleted, create new journal files with the -noprevjnl switch.  Take a backup as soon as possible thereafter. Depending on your situation, you may need to refresh secondary instances.

CRYPTKEYFETCHFAILED, Cannot obtain encryption key for ffff. xxxx

Run Time Error: gtmcrypt plug-in reports it was unable to obtain an encryption key for file ffff.

Action: Examine the message (xxxx) from the plug-in and take the needed action: for example, verify encryption key for this file is pointed to by the database key file, verify proper permissions on the directory path and the file, etc.

CRYPTKEYFETCHFAILEDNF, Cannot obtain encryption key. xxxx

Run Time Error: gtmcrypt plug-in reports it was unable to obtain an encryption key based upon matching the hash of an encryption key.

Action: Examine the message (xxxx) from the plug-in and take the needed action: for example, verify encryption keys for all database files are pointed to by the database key file.  For extracts and backups, verify all the keys from the databases that provided records are in the database key file.

CRYPTNOMM, is an encrypted database. Cannot support MM access method.

MUPIP or GDE error: This error is triggered by an attempt to mark an MM database as encrypted with GDE or to switch an encrypted database from BG to MM with MUPIP SET.  The MM access method is not supported for encrypted databases.

Action: Use the BG access method for encrypted files.

CRYPTNOPSWDINTP, Cannot prompt for password inside a TP transaction.

Run-time error: This error occurs if an external call was used to set the gtm_passwd environment variable to the null string after GT.M has been started and the first time an encrypted database file is accessed is within a TP transaction.

Action: If possible, set the gtm_passwd environment variable to the obfuscated password. Otherwise, ensure that any TP transactions have been closed before setting the gtm_passwd environment variable to the null string. Once that is done, immediately touch a global from an encrypted database, e.g., $DATA(myglobal), to ensure the prompting happens before entering another TP transaction.
 

CRYPTNOV4, ffff is an encrypted database. Cannot downgrade(to V4) with Encryption option enabled.>/error/fao=2!/ansi=0

MUPIP error: An attempt to downgrade ffff which is an encrypted database to the V4 (GT.M version 4) format failed because the V4 format does not support encrypted database files.

Action: Use the database in the current format.  If a V4 format is required, extract the data in unencrypted ZWRite format with MUPIP EXTRACT and load it into a newly created V4 database.

CRYPTOPFAILED, Encrypt/Decrypt operation failed. xxxx

Run Time Error: gtmcrypt plug-in reports there is problem with encryption or decryption.

Action: Examine the message (xxxx) from the plug-in and take appropriate action.

DZWRNOALIAS, $ZWRTAC cannot be aliased

Compile Time Error: This indicates the argument for a SET * command attempted to assign a $ZWRTAC* psuedo-variable as a alias.

Action: Correct the code in question - the $ZWRTAC* is only useful in restoring context from ZSHOW or ZWRITE output and has very narrow capabilities.

DZWRNOPAREN, $ZWRTACxxx is not allowed inside a parenthesized SET target

Compile Time Error: This indicates the argument for a SET command attempted to assign a $ZWRTAC* psuedo-variable within a parenthesized list of left-hand arguments.

Action: Correct the code in question - the $ZWRTAC* is only useful in restoring context from ZSHOW or ZWRITE output and has very narrow capabilities.

FREEZEERR, Error while trying to ffff region rrrr

MUPIP Error: This indicates an unsuccessful database freeze or unfreeze ffff operation on region rrrr.

Action: Look for accompanying text that explains the cause of the error and take appropriate action.

 

NOALIASLIST, Parenthetical lists of multiple arguments cannot have a preceding alias introducer or include alias (*) forms

Run Time Error: This indicates the argument for a SET command attempted to assign an alias using a parenthesized list as a left-hand argument, which is unsupported syntax.

Action: Correct the code in question to avoid the parenthesized list.

NONUTF8LOCALE, Locale has character encoding (cccc) which is not compatible with UTF-8 character set

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

Action: Set the environment variable LC_CTYPE to a Unicode 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.

TRANS2BIG, Transaction exceeded available buffer space for region rrrr

Run Time Error: This indicates that a transaction updated more blocks than the global buffer could hold for a particular region rrrr or accessed more than the single transaction limit of 64K blocks.

Action: Look for missing TCOMMIT commands; modify the code to reduce the total content or change content of the transaction. If the transaction is as intended and the issue is the number of updates, increase the GLOBAL_BUFFERS for the region using MUPIP SET, or modify the Global Directory to redistribute the relevant globals to more regions.

VIEWLVN, Invalid local variable name used with VIEW/$VIEW(): vvvv

Run Time Error: This indicates the argument for a VIEW command or $VIEW() function required a local variable name, but it (vvvv) was either missing or invalid.

Action: Correct the code in or investigate the logic to determine why the local variable in question is not in the expected state.

 

Return to Table of Contents

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