Copyright © 2005 Fidelity Information Services, Inc.
Legal Notice
GT.M™is a trademark of Fidelity Information Services, Inc.
GT.M and its documentation are provided pursuant to license agreements containing restrictions on their use. They are the copyrighted intellectual property of Fidelity Information Services, Inc. and Sanchez Computer Associates, LLC (collectively "Fidelity") and are protected by U.S. copyright law. They may not be copied or distributed in any form or medium, disclosed to third parties, or used in any manner not authorized in said license agreement except with prior written authorization from Fidelity.
This document contains a description of Fidelity products and the operating instructions pertaining to the various functions that comprise the system. It should not be construed as a commitment of Fidelity. Fidelity believes the information in this publication is accurate as of its publication date; such information is subject to change without notice. Fidelity is not responsible for any inadvertent errors.
June 6, 2005
GT.M Group
Fidelity 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
http://www.sanchez-gtm.com
gtmsupport@fnf.com
Table of Contents
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.
Platform | Supported Versions | Notes |
Hewlett-Packard HP-PA HP-UX | 11i V2 | 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 on 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 | - |
Hewlett-Packard Alpha/AXP OpenVMS | 7.3-1/7.3-2 | 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. |
IBM eServer pSeries AIX | 5.1/5.2/5.3 | - |
Sun SPARC Solaris | 9.0 | - |
x86 GNU/Linux - Red Hat Enterprise Linux | 3 | Although Red Hat Enterprise Linux is the formally supported distribution, the software should run on any contemporary combination of kernel, glibc and version 5 of ncurses. |
All M sources must be recompiled.
[OpenVMS] All existing Call-in tables (i.e. MACRO source files) used in the call-in interface must be recompiled using the new macro library gtm$dist:gtmzcall.mlb. If they are not recompiled, GT.M behavior is unpredictable, and can include access violation, hangs and even possibly damage to the database.
[x86 GNU/Linux] GT.M will automatically recompile as required provided $gtmroutines/$ZROutines is set up correctly.
Any existing images [OpenVMS] or shared-libraries [UNIX] created from compiled M sources must be relinked [OpenVMS] or recreated [UNIX] from the recompiled sources.
[OpenVMS] Any existing images created from the compiled call-in (MACRO) tables must be relinked.
The V5 global directory format is different from a V4 global directory format, and must be upgraded. If a V4 global directory is opened with the V5 GDE utility program, even if no changes are made, an EXIT command will automatically replace the V4 format global directory file with a V5 format global directory file.
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 manually enter the necessary commands into a V4 GDE invocation.
Refer to "Installing GT.M" in the GT.M Administration and Operations Guide.
If you are overwriting an existing GT.M installation with a new version, you must shut down all processes using the old version.
Any database files that were opened using the old version must be rundown (using MUPIP RUNDOWN) with the old software.
In UNIX editions, make sure gtmsecshr is not running. If found running, perform kill <pid of gtmsecshr>.
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).
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.
GT.M V4.4-002 and later releases for IBM pSeries AIX now 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 may need to configure any file system where such a file will reside, when the file system is created, to permit files larger than 2GB.
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.
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 "/".
Number: The reference numbers used to track software enhancements and customer support requests appear in parentheses ( ).
Identifier: If a new feature or software enhancement does not apply to all platforms, the relevant platform or platforms appear in brackets [ ].
GT.M V5.0-000 is a major release of GT.M. The fact that it has a new top level version number - V5 vs. V4 - means that it has a new database format. There is significant new functionality as well.
In GT.M V5, transaction counts are 64-bit unsigned integers, up from 32-bit unsigned integers in GT.M V4. This means that if a large bank with millions of accounts previously needed a mupip integ -tn_reset every 6 months, with V5.0-000, it will still need a transaction number reset, but only every 2 billion years. A database that runs nonstop at 1,000,000 updates per second will now need a TN reset every 585,554 years. [Note that even with a 32-bit transaction count, a typical GT.M installation other than very large banks, may have a transaction reset interval of years to decades. Only the largest GT.M production sites in banking are inconvenienced by 32-bit transaction counts.]
Even though a database format change affects every index and data block in the database, GT.M V5.0-000 comes with an upgrade procedure that operates mostly in parallel with normal application operation. Stand alone access is required typically only for a few seconds. There is also the ability to downgrade from V5.0-000 to V4.4-004, again mostly during normal operation, with a few seconds of stand alone access required. [Some limitations apply, but they are not believed to be relevant to typical applications deployed on GT.M.] Database upgrades are described in the GTM Database Migration Technical Bulletin. Note that if you are using an application deployed in a logical dual site configuration, the upgrade can be accomplished with continuous application availability.
See the Change History for a list of the differences between V5.0-000 and V4.4-004.
The most significant enhancements in this release are as follows:
As discussed above, transaction count are increased from 32 bits to 64 bits. In order to facilitate the database upgrade, Fidelity strongly recommends that new database files created with all prior versions of GT.M be created with the Reserved Bytes parameter set to 8 (in Unix) and 9 (in OpenVMS). See the technical bulletin on GTM Database Migration for more details.
M names can be up to 31 characters long. GT.M allows up to 31 characters for M local and global variable names; M routine names; M source file names; M Label names; M lock names; and database region and segment names. Leading carets (^) continue to not count towards identifier length. Any characters after the first 31 are ignored. See the technical bulletin GTM Long Names for details.
A new intrinsic function, $INCREMENT(glvn[,expr]), is provided to atomically increment a global variable by a numeric value. Please note that the increment is atomic, but the evaluation of the expression is not, unless inside a transaction (TStart/TCommit). See C9D03-002249 below.
GT.M on UNIX/Linux now recognizes when the $PRINCIPAL device is a TCP socket. Previously such devices were treated as regular files. Network services can now be written in GT.M and deployed under inetd/xinetd. See S9C05-002119 below.
On the secondary of an application deployed in a logical dual site configuration, helper processes can now be used to speed the rate at which updates can be committed to disk. For those environments where the primary is able to commit updates faster than the secondary can, resulting in the build up of a backlog on the primary, helper processes may be able to increase the rate at which the secondary can commit updates. See the technical bulletin GT.M Update Helper Processes for details.
There is now an option for a database file to allow existing global variable nodes with null subscripts but to prohibit setting/updating global variables with null subscripts. See the technical bulletin GTM Null Subscripts for details.
On OpenVMS, upper and lower case labels in M routines can be the target of a call from an external C routine to an M routine. There was previously a restriction requiring upper-case M labels in this context. See the technical bulletin GTM Long Names for details.
GT.M traditionally collated a null subscript between numeric subscripts and string subscripts. The M standard specifies that null subscripts be collated before numeric subscripts. When a database file is created, it can now be created to use either traditional GT.M collation or M standard collation for null subscripts. See the technical bulletin GTM Null Subscripts for details.
In addition to the above enhancements, there are a number of fixes, performance enhancements, and other improvements, as discussed below.
Fixes and enhancements specific to V5.0-000 are:
As a troubleshooting tool, M programs have been able to programmatically turn on (and off) a check for the structural integrity of database blocks written with the VIEW "GDSCERT" command. This functionality is now enhanced with the addition of a new environment variable [UNIX] or logical name [OpenVMS] gtm_gdscert. If it is defined, and evaluates to a non-zero integer, the string "TRUE", or the string "YES" (or any case independent leading substrings thereof), then block certification is turned on at process startup. Any other value keeps block certification off (default behavior) at process start up. The use of this feature now enables block certification also for the GT.M utilities DSE and MUPIP. It does not apply to LKE which never modifies database blocks. (C9B11-001796)
M names can be up to 31 characters long. GT.M allows up to 31 characters for M local and global variable names; M routine names; M source file names; M Label names; M lock names; and database region and segment names. Leading carets (^) continue to not count towards identifier length. Any characters after the first 31 are ignored. See the technical bulletin GTM Long Names for details on this enhancement. (C9D03-002250)
There is now an option for a database file to allow existing global variable nodes with null subscripts but to prohibit setting/updating global variables with null subscripts. See the technical bulletin GTM Null Subscripts for details. (C9D03-002251)
A new keyword has been added to the VIEW command: VIEW "FLUSH"[:region], which is analogous to the "JNLFLUSH" keyword. Just as "JNLFLUSH" flushes dirty journal buffers, "FLUSH" flushes dirty global buffers from the global buffer cache. If journaling is active, "FLUSH" flushes dirty journal buffers prior to flushing dirty global buffers. If no region is specified, all regions in the current global directory that the GT.M process has opened are flushed. (C9E02-002525)
A rare case of malformed messages being exchanged by GT.CM client and server leading to unexpected disconnects, or abnormal termination has been fixed. The issue could occur only when the size of data or global subscripts were large (approximately 16K or more), and the host running the GT.CM client or server was little endian. [UNIX] (C9E04-002561)
An issue in the GT.M database logic with the BG (Buffered Global) access method which could in very rare circumstances cause structural damage and/or false GVUNDEF errors has been fixed. Although this issue could show up with any number of global buffers, the likelihood of this decreases significantly with the number of global buffers typically used (for example: 1024 and higher). (C9E07-002610)
M-sets done within a TP transaction, where the destination is a global variable, could in very rare circumstances corrupt process private memory which in turn could potentially affect the integrity of the database. This is now fixed. Non-TP sets of global variables are unaffected by this issue. This was reported as having been fixed by C9E03-002537 in GT.M V4.4-004 but the fix was later found to have been incomplete. It is now completely fixed. (C9E09-002635)
In very rare cases, a TP transaction that creates a lot of global variables could end up causing integrity errors in the directory tree. This is now fixed. (C9E11-002655)
With alternative collation type > 0, $next() now returns the correct string if the input subscript is numeric type and the output subscript is string. (C9E12-002674)
MUPIP REORG on a database that has concurrent GT.M activity (read/update) could in rare cases terminate abnormally. In extremely rare cases, this could structurally damage the database too. This issue is now fixed. (C9E12-002676)
A bug that has never been reported at a production site, but which can in theory occur because it was detected during internal stress testing by Fidelity, has been fixed. Under certain very unlikely conditions, a database block could in principle be written to the wrong database, and the only recovery would be to restore a backup and perform a mupip forward recovery. Users of GT.M versions V43001F, V44003, V44003A and V44004 are therefore advised to upgrade to V5.0-000 as soon as practicable. [OpsenVMS] (C9F05-002726)
GT.M traditionally collated a null subscript between numeric subscripts and string subscripts. The M standard specifies that null subscripts be collated before numeric subscripts. When a database file is created, it can now be created to use either traditional GT.M collation or M standard collation for null subscripts. See the technical bulletin GTM Null Subscripts for details. (S9B03-001813)
GT.M now handles ZTP transactions (ZTSTART and ZTCOMMIT) correctly when journaling is turned on. Previously, it was possible for GT.M to issue GVGETFAIL or other database errors for a global reference following ZTCOMMIT when such a global belonged to a region other than the region last accessed within the ZTP transaction. (S9E08-002484)
GT.M is designed to repair and recover from certain classes of damage to the shared memory control structures used to manage database global buffers. This recovery has been speeded up - there were previously cases when it could take many tens of minutes - and should now take no longer than four minutes. (S9E12-002516)
A new intrinsic function, $INCREMENT(glvn[,expr]), is provided to atomically increment a global variable by a numeric value. Please note that the increment is atomic, but the evaluation of the expression is not, unless inside a transaction (TStart/TCommit). (C9D03-002249)
$I, $INCR, $INCREMENT, $ZINCR, and $ZINCREMENT are considered as valid synonyms of the full function name.
If not specified, expr defaults to 1. Otherwise, it is evaluated and coerced to a numeric value. The "expr" argument will be evaluated ahead of the "glvn" argument.
If the value of glvn is undefined, it will be treated as having the null string value before the increment, i.e. an implicit $GET() before the increment. This is true even if glvn is a global variable that resides on a remote node and is accessed through a GT.CM GNP server. glvn will be evaluated and coerced to a numeric value before the increment.
If the function is inside a transaction ($TLevel is non zero), or if glvn refers to a local variable, it is equivalent to SET glvn=glvn+expr.
If the function is not inside a transaction ($TLevel is zero) and glvn refers to a global variable, the function is equivalent to a SET glvn=glvn+expr that is performed as an Atomic, Consistent and Isolated operation. Note that the evaluation of expr is not Atomic, Consistent or Isolated; it is only the actual incrementing of the glvn that is. If the region containing the glvn is journaled, then the operation is also Durable. Only BG, MM (OpenVMS only) and GT.CM GNP access methods are supported for the region containing the global variable (glvn). GT.CM OMI and GT.CM DDP access methods are not supported and there are no plans to support them in future.
$INCREMENT is not supported for global variables that have NOISOLATION turned ON (through the VIEW "NOISOLATION" command). If a $INCREMENT is attempted on such a variable, the run time error GTM-E-GVINCRISOLATION is generated.
The naked reference is affected by the usage of global variables (with or without indirection) in the glvn and/or expr components. The fact that "expr" is evaluated ahead of "glvn" needs to be used to determine the value of the naked reference after the $INCREMENT. If no indirection is used in either glvn or expr, the naked reference after the $INCREMENT will be:
glvn, if glvn is a global or
the last global reference in "expr" if glvn is a local or
unaffected if neither glvn nor expr has any global reference
The value of the glvn after the increment is returned as the value of the function.
In certain situations during database file extension and when journaling is ON, GT.M would cause a process to hang within a self inficted-deadlock waiting for an OpenVMS system trap (AST) after the process previously disabled AST. This bug is now fixed. [OpenVMS] (C9E04-002557)
A bug in the intrinsic function $REVERSE() which could in very rare cases cause memory corruption or abnormal termination has been fixed. This was an issue only if the argument to $REVERSE() evaluated to a numeric (non-string) expression. (C9E04-002559)
GT.M previously displayed certain control characters incorrectly in ZWRite output when the decimal representation of character's collating value contained a non-zero digit in the 100s position and zero in the 10s position. The problem only occurred when the standard PATCODE C was redefined with an alternative pattern table. This is now fixed. (C9E07-002609)
Logging interval (in count of transactions) is now configurable for all replication servers - source, receiver and update process. The source server -START, -ACTIVATE, -DEACTIVATE, and -CHANGELOG commands accept an optional qualifier -LOG_INTERVAL=n where n is a positive number. Source server prints a message in the server log after sending every n transactions. If -LOG_INTERVAL is not specified with -START or specified as 0, the logging interval is set to its default value 1000. If -LOG_INTERVAL is not specified or specified as 0 with -CHANGELOG or -ACTIVATE or -DEACTIVATE, the logging interval is left unchanged. The receiver server START (except when -UPDATEONLY is specified) and CHANGELOG commands accept an optional qualifier -LOG_INTERVAL=[m][,n] where n and m are numbers. The receiver server prints a message in the receiver log after receiving every m transactions. The update process server prints a message in the update log after processing every n transactions. If -LOG_INTERVAL is not specified with -START, the logging interval for both receiver and update process is set to the default 1000. If -LOG_INTERVAL is specified with -START, and either interval (m or n) is not specified or specified as 0, the default value of 1000 is used for the corresponding server. If -LOG_INTERVAL is not specified with -CHANGELOG, the logging interval of receiver and update process are left unchanged. The same holds when -LOG_INTERVAL is specified, but the corresponding server's interval is specified as 0, or not specified (m is specified but not n, or vice versa). To change the receiver's logging interval alone, you can specify -LOG_INTERVAL=m (or -LOG_INTERVAL=m,0). To change the logging interval of update process alone, you can specify -LOG_INTERVAL=,n (or -LOG_INTERVAL=0,n). Note: The source server optimizes communication with receiver by bunching multiple transactions into a single send operation. This may mean that more than LOG_INTERVAL transactions may be sent before the source server logs a message. This may also mean that source server messages are not always spaced at LOG_INTERVAL transactions. LOG_INTERVAL specification for source server must be considered as advisory - there is no guarantee that the interval specification will be strictly followed. Special note for OpenVMS: The receiver server -LOG_INTERVAL specification must be quoted. That is, /LOG_INTERVAL="m,n" form must be used. (C9E09-002633)
When an M file name had more than 8 characters (i.e. longer than the earlier M name limit), in some cases, ZLINK would fail, reporting error messages with junk characters. This bug is fixed and ZLINK works correctly even if the M file name contains more than 31 characters (i.e. the new M name limit). GT.M truncates the compiled object file names to 31 characters, not including the .o or .OBJ extension. (C9E11-002670)
GT.M on UNIX/Linux now recognizes when the $PRINCIPAL device is a TCP/IP socket. Previously such devices were treated as regular files. This feature is designed to allow a GT.M process to be started in response to a connection request made via inetd/xinetd. [UNIX] (S9C05-002119)
When using xinetd, socket_type should be "stream" and wait should be "no" as in the example below:
service gtmserver { disable = no type = UNLISTED port = 7777 socket_type = stream wait = no user = gtmuser server = /path/to/startgtm }
If the service is defined in /etc/services, the type and port options are not needed. See the xinetd.conf man page for more details.
When using inetd, the sockettype should be "stream", protocol "tcp", and the "nowait" flag should be specified as in the example below which assumes a gtmserver service is defined in /etc/services:
gtmserver stream tcp nowait gtmuser /path/to/startgtm
In both of the above examples, "gtmserver" is the arbitrary name for the service being defined, "gtmuser" is the name of the user the service should be run as, and "/path/to/startgtm" is the name of a script which defines some environment variables needed by GT.M before starting it.
The minimum variables are $gtm_dist which should specify the directory containing the GT.M distribution and $gtmroutines. As an example:
#!/bin/bash cd /path/to/workarea export gtm_dist=/usr/local/gtm export gtmroutines="/var/myApp/o(/var/myApp/r) $gtm_dist" export gtmgbldir=/var/myApp/g/mumps.dat $gtm_dist/mumps -r start^server
When start^server begins, the $PRINCIPAL device will already be connected and $KEY will contain "ESTABLISHED|socket_handle|remote_ip_address". In most cases, a USE should be executed to set various device parameters such as delimiters.
ZSHOW "D" will provide both the local and remote addresses and ports:
0 OPEN SOCKET TOTAL=1 CURRENT=0 SOCKET[0]=h11135182870 DESC=0 CONNECTED ACTIVE NOTRAP REMOTE=10.1.2.3@53731 LOCAL=10.2.3.4@7777 ZDELAY ZBFSIZE=1024 ZIBFSIZE=0
Currently this feature is not available on OpenVMS.
A bug in $TEXT(), that would cause abnormal process termination due to access violation when an indirection argument is used with $TEXT(), has been fixed. (S9D12-002412)
Heavy usage of routine calls passing indirect argument(s) by reference [eg. do label(.@arg)], or for loops using indirect index variable [eg. for @index=1:10] in a long running M process used to cause abnormal termination. This has now been fixed. (S9E04-002439)
Changes introduced in V4.4-004 for long records in RMS files as part of TR S9D06-002345 had an undesirable side effect of not allowing access to NFS mounted files. This has been fixed. [OpenVMS] (S9E06-002470)
A bug in M Profiling that, in rare circumstances, would terminate the process abnormally or produce corrupted and/or missing information in the global on the VIEW "TRACE", is now fixed. [Solaris] (S9E08-002479)
When there is a situation where GT.M fails to write to a journal file (say, due to lack of disk space or other disk I/O problem) for a region that is replicated, GT.M now turns OFF both journaling and replication issuing a REPLJNLCLOSED error in the operator log. The only way to turn replication back ON is by bringing down the instance as the transition from replication off to replication on needs standalone access. However, GT.M would previously permit a user to turn journaling ON while keeping the replication state OFF. In a replicated environment, this state is an out-of-design situation that would cause GT.M processes to terminate with cascading GTMASSERT errors. (S9E08-002485)
Effective V5.0-000, GT.M provides the means to:-
Prevent the out-of-design situation (i.e. journaling ON and replication OFF) so that GT.M processes will no longer terminate with GTMASSERT error. After replication (as well as journaling) is closed following a journal file I/O error, both MUPIP SET -JOURNAL and MUPIP BACKUP -NEWJNL will not allow switching journal state back ON without also turning replication ON. Both commands will fail issuing REPLJNLCNFLCT message.
Support the option to turn replication back ON without bringing down the replication instance. Both MUPIP SET and MUPIP BACKUP commands will allow turning replication (as well as journaling) back ON without requiring standalone access.
In order to support these features, GT.M internally maintains an additional replication state, called WAS_ON, which is also reflected in the file header, to indicate that replication was ON but currently turned OFF due to journal file I/O problems. The following are the commands with new behavior when the replication state is WAS_ON:
MUPIP SET -JOURNAL=ON or MUPIP -BACKUP -NEWJNL: Both commands will fail with REPLJNLCNFLCT message. GT.M no longer allows journaling ON without an accompanying REPLICATION qualifier.
MUPIP SET -REPLICATION=ON or MUPIP BACKUP -REPLICATION=ON: Both commands will turn replication (as well as journaling) ON on regions specified. These commands no longer need standalone access. They can be run concurrently with other database activity. However, the user must realize that although replication is restored and the source servers picks up transactions of the newly restored regions, the two sites are NOT in sync until the primary's backup is restored to secondary. The backup used must be one that is taken subsequent to the restoration of replication state.
These commands also switch the journal files implicitly cutting previous journal links of those regions for which replication state is restored from WAS_ON to ON. No previous journal files of those regions can be used for rollback.
DSE DUMP displays the new replication state WAS_ON in the file header as shown below:
DSE > dump -f
File /home/testarea/raom/mumps.dat Region DEFAULT Date/Time 31-MAY-2005 15:34:48 [$H = 60051,56088] Access method BG Global Buffers 1024 Reserved Bytes 0 Block size (in bytes) 1024 Maximum record size 256 Starting VBN 129 Maximum key size 64 Total blocks 0x00000065 Null subscripts NEVER Free blocks 0x00000062 Standard Null Collation FALSE Free space 0x00006000 Last Record Backup 0x0000000000000001 Extension Count 100 Last Database Backup 0x0000000000000001 Number of local maps 1 Last Bytestream Backup 0x0000000000000001 Lock space 0x00000028 In critical section 0x00000000 Timers pending 0 Cache freeze id 0x00000000 Flush timer 00:00:01:00 Freeze match 0x00000000 Flush trigger 960 Current transaction 0x0000000000000001 No. of writes/flush 7 Maximum TN 0xFFFFFFFFDFFFFFFF Certified for Upgrade to V5 Maximum TN Warn 0xFFFFFFFF5FFFFFFF Desired DB Format V5 Master Bitmap Size 64 Blocks to Upgrade 0x00000000 Create in progress FALSE Modified cache blocks 0 Reference count 1 Wait Disk 0 Journal State OFF Journal Before imaging TRUE Journal Allocation 100 Journal Extension 100 Journal Buffer Size 128 Journal Alignsize 128 Journal AutoSwitchLimit 8388600 Journal Epoch Interval 30 Journal Yield Limit 8 Journal Sync IO FALSE Journal File: /home/testarea/raom/mumps.mjl Mutex Hard Spin Count 128 Mutex Sleep Spin Count 128 Mutex Spin Sleep Time 2048 KILLs in progress 0 Replication State [WAS_ON] OFF Region Seqno 0x0000000000000001 Resync Seqno 0x0000000000000001 Resync trans 0x0000000000000001
The update process is fixed to generate a process dump for memory-exhausted errors GTM-E-MEMORY [UNIX] and GTM-E-VMSMEMORY [OpenVMS]. These error messages are also modified to display the caller information to help identify the error location for debugging purposes. (S9E09-002496)
In direct mode, a TSTART command that specifies a list of un-subscripted local variable names to be restored on a RESTART works correctly (previous versions would abnormally terminate with this usage). Please note that with GT.M's optimistic concurrency control, TSTART is not appropriate anyway in direct mode. (S9E10-002504)
MUPIP JOURNAL -RECOVER/-ROLLBACK, that could previously fail with HTOFLOW error due to overflow of internal hash tables, now works correctly with no errors. GT.M no longer limits the growth of the hash tables that are used internally as long as adequate system memory resources are available. (C9D06-002288)
MUPIP upgrade now properly checks for standalone access to upgrade a database and will not "re-upgrade" an already upgraded database. (C9D10-002441)
A bug, that would cause MUPIP BACKUP -BYTESTREAM command on multiple regions without SINCE or TRANSACTION qualifiers to backup incorrect transactions, is now fixed. (C9E08-002621)
An online backup of a database with NOBEFORE-IMAGE journaling and which is being updated concurrently by TP transactions could in very rare cases have structural damage. This issue affected only the backup database, not the actual database. This is now fixed. (C9F03-002713)
MUPIP JOURNAL -RECOVER/-ROLLBACK is now much more robust in recovering (backward recovery) from before-image journal files that were actively being updated during a system crash. There are two aspects to this. One is that each journal record has a new checksum field which helps better differentiate valid versus invalid journal records in the tail of the journal file. Another is that backward recovery/rollback now knows to handle journal files that have a sequence of invalid journal data followed by valid journal data on disk (this is possible in some cases of a system crash). In earlier versions, backward recovery/rollback on such journal files would error out prematurely. (S9E04-002440)
MUPIP JOURNAL -ROLLBACK -FETCH_RESYNC could fail incorrectly with a GTMASSERT message in case one or more regions had no updates after the source server was started and before it was shutdown. This is now fixed. (S9E04-002447)
Restarting the source server no longer keeps journal files open when such files do not need to be read for replication. (S9E05-002460)
Source server reports "GTM-E-NOPREVLINK, Journal file <file-name> has a null previous link" if it detects a null previous link in a journal file that it reads. Previously, an error of the form "GTM-E-JNLFILOPN, Error opening journal file for database file <region-name>, %SYSTEM-E-UNKNOWN, Unknown system error 0" would have been issued. (S9E06-002468)
MUPIP SET -JOURNAL on multiple regions that had concurrent GT.M activity could, in rare cases, cause deadlocks. This bug is now fixed. (S9E09-002490)
The source server has two modes of operation, reading from the journal pool (pool-read) and reading from the journal files (file-read). If there is little or no backlog, then the source server reads journal records from the pool. Whenever the backlog builds up more than the pool can hold, the source server switches to reading from the files and similarly switches to reading from the pool if the backlog reduces to what the journal pool can hold. When the source server transitions from file-read to pool-read mode and it has multiple journal files (including earlier generations) open for one or more regions, it used to fail to close the oldest generation journal file of those regions. With every such transition from file-read to pool-read mode, the number of un-closed (and hence open) files used to keep increasing until the maximum-open-files limit for the process was reached. At that point, the source server used to exit with a "Too many open files" error. The source server now correctly closes the oldest generation journal file thereby avoiding this open file buildup. (S9E09-002493)
On the secondary of an application deployed in a logical dual site configuration, helper processes can now be used to speed the rate at which updates can be committed to disk. For those environments where the primary is able to commit updates faster than the secondary can, resulting in the build up of a backlog on the primary, helper processes may be able to increase the rate at which the secondary can commit updates. See technical bulletin GT.M Helper Processes for details.(S9E10-002497)
Additional Changes
The following qualifiers now always interpret values as decimal. Previously, for UNIX, if there was a "0x" prefix or hexadecimal digits, the value would be interpreted as hexadecimal.
Replication: /LISTENPORT, /BUFFSIZE, /TIMEOUT EXTEND: /BLOCKS INTEG: /MAXKEYSIZE, /TRANSACTION, /MAP, /ADJACENCY LOAD: /BEGIN, /END, /FILL_FACTOR REORG: /FILL_FACTOR, /INDEX_FILL_FACTOR SET /JOURNAL: /ALLOCATION, /ALIGNSIZE, /AUTOSWITCHLIMIT, /BUFFER_SIZE, /EPOCH_INTERVAL, /EXTENSION, /YIELD_LIMIT RECOVER: /FETCHRESYNC, /ERROR_LIMIT
GT.CM OMI server's PID is written into log file. [Solaris] (C9C04-001967)
The internal consistency checks in DSE INTEG have been improved to detect and report a few cases of previously undetected DBMAXNRSUBS, DBKEYORD, DBINVGBL, DBDIRTSUBSC, and DBBDBALLOC errors. (C9E04-002574)
LKE SHOW -ALL -WAIT, now displays correct values of process-ids that are waiting for all LOCKs to be granted. A bug where incorrect values were sometimes displayed has been fixed. (C9E07-002607)
Network conditions when performing a network IO operation can result in an hang of GT.CM OMI server. There is now a -servtime command line parameter (default value 60). If a network IO operation does not complete within the number of seconds specified by the -servtime parameter, the GT.CM OMI server process will go through an internal recovery procedure to clear the "hang". [Solaris] (S9C11-002246)
The startup script of GT.CM OMI server has been modified to check the existence of running other GT.CM OMI servers, which eliminates the possibility of "Address already in use" error. [Solaris] (S9D06-002330)
GT.CM OMI servers no longer dump core in the case of errors that need to be logged in syslog. [Solaris] (C9B11-001829) (S9E11-002509) (S9E04-002453)
The DSE add -star command no longer terminates abnormally with a SIGADRALN error on Solaris, SIG-10 on HP-UX or unaligned access errors on Tru64 UNIX if the STAR key is added the end of an index block whose bytes in use field (before the add -star command) is not a multiple of 4. [Solaris/HPUX/Tru64] (S9E12-002512)
DSE Changes
The replication update helper qualifiers (AVG_BLKS_READ, PRE_READ_TRIGGER, UPD_RESERVED_AREA, and UPD_WRITER_TRIGGER_FACTOR) all take decimal input.]
DSE interprets all numeric input as hexadecimal, except for time values, the /BLK_SIZE=, /KEY_MAX_SIZE=, /RECORD_MAX_SIZE=, /REFERENCE_COUNT=, /TIMERS_PENDING=, and /WRITES_PER_FLUSH= on CHANGE /FILEHEADER, and /VERSION= on the REMOVE and RESTORE commands. This convention corresponds to the displays provided by DSE and by MUPIP INTEG.
The following qualifiers now always interpret values as decimal. Previously, for UNIX, if there was a "0x" prefix or hexadecimal digits, the value would be interpreted as hexadecimal.
CHANGE /BLOCK: /LEVEL CHANGE /FILE: /BLK_SIZE, /RESERVED_BYTES, DEF_COLLATION, /TIMERS_PENDING, /WRITES_PER_FLUSH, /TRIGGER_FLUSH, /WAIT_DISK, /HARD_SPIN_COUNT, /SLEEP_SPIN_COUNT, /SPIN_SLEEP_TIME, /RC_SRV_COUNT, /JNL_YIELD_LIMIT. EVAL: /NUMBER if /DECIMAL is specified. REMOVE: /VERSION. RESTORE: /VERSION. The following qualifiers now always interpret values as hexadecimal. Previously, they only interpreted values as decimal. CHANGE /FILE: /REG_SEQNO, /RESYNC_SEQNO
The following qualifiers now always interpret values as hexadecimal. Previously, they only interpreted values as decimal.
CHANGE /FILE: /REG_SEQNO, /RESYNC_SEQNO
GT.CM GNP [UNIX]
The following qualifier now always interprets its value as decimal. Previously, if there was a "0x" prefix or hexadecimal digits, the value would be interpreted as hexadecimal.
/TIMEOUT
Several message mnemonics violated GT.M's rule of 15 characters or less for message mnemonics, and were shortened:
Long Form (from) | Short Form (to) |
COMMAORPARENEXP | COMMAORRPAREXP |
GTMSECSHRSHUTDOWN | GTMSECSHRSHUTDN |
GTMSECSHRSRVFILE | GTMSECSHRSRVFIL |
GTMSECSHRSTARTUP | GTMSECSHRSTART |
ISOLATIONSTSCHNG | ISOLATIONSTSCHN |
NEWJNLFILECREATE | NEWJNLFILECREAT |
The following error messages are newly added in this release. In addition, please see technical bulletins GTM Null Subscripts, GTM Long Names and GTM Database Migration for more messages.
CHNGTPRSLVTM, Mupip will change tp_resolve_time from aaaa to bbbb because expected EPOCH or EOF record was not found in Journal File cccc.
Severity: Info
MUPIP Information: At startup, backward recovery/rollback internally computes a time called the tp_resolve_time which is until when backward processing will be performed across journal files of all regions. During backward processing it is possible in very rare cases that recovery does not see an EPOCH record or an EOF record as the last record in the journal file of those regions that had not been updated for quite a long time. In such cases recovery reduces the tp_resolve_time further by taking into account the timestamp of the last journal record. This effectively causes further backward processing but is necessary for a clean recovery. A CHNGTPRSLVTM message is printed whenever such journal files are encountered by backward recovery.
Action: None necessary.
DBADDRANGE8, Database file xxxx, element location yyyy: control zzzz was outside aaaa range bbbb to cccc.
Severity: Info
Run time Error: This message is the same as a DBADDRANGE message except that bbb8 and ccc8 are 8-byte quantities (as opposed to 4-byte quantitites in DBADDRANGE).
Action: GT.M often fixes this error unless there is a serious problem causing this error. If there is a serious problem, the accompanying messages identify the cause.
DBCRERR, Database file xxxx, cr location yyyy blk = zzzz error: aaaa was bbbb, expecting cccc -- called from module xxx at line yyy
Severity: Info
Run time Error: This usually indicates that a process was abnormally terminated and left database control structures in an inconsistent state in shared memory.
Action: GT.M often fixes this error unless there is a more serious problem causing this error. If there is a more serious problem, accompanying messages identify the cause.
DBCRERR8, Database file xxxx, or location yyyy blk = zzzz error: aaaa was bbbb, expecting cccc -- called from module yyy at line xxx
Severity: Info
Run time Error: This message is the same as a DBCRERR message except that bbbb and cccc are 8-byte quantities (as opposed to 4-byte quantitites in DBCRERR). See Error description for message DBCRERR.
Action: GT.M often fixes this error unless there is a more serious problem causing this error. If there is a more serious problem, accompanying messages identify the cause.
DBDIRTSUBSC <xxxx Directory tree block contains non name-level entries>
Severity: Info
Run Time/DSE Information: This indicates that the specified database block has an internal structural damage since it contains subscripts global variable names even though this block is part of the directory tree.
Action: Report this database structure error to the group responsible for database integrity at your operation.
EPOCHTNHI, At the EPOCH record at offset xxxx of yyyy transaction number [0xaaaa] is higher than database transaction number [0xbbbb]
Severity: Error
MUPIP Error: This indicates that during turnaround point from where mupip applies logical records, backward recover found that epoch's transaction number is greater than the current database transaction number.
Action: Contact your system administrator and report to GT.M Support if necessary.
GVINCRFAIL <Global variable $INCR failed. Failure code: xxxx.>
Severity: Error
Run Time Error: This indicates that a $INCREMENT command encountered a database problem when it attempted to update a global variable. xxxx contains the failure codes for the four attempts. It is very likely that the database may have structural damage or that the process-private data structures are corrupted.
Action: Report this database error to the group responsible for database integrity at your operation.
GVINCRISOLATION <$INCREMENT cannot be performed on global xxxx as it has NOISOLATION turned ON>
Severity: Error
Run Time Error: Global xxxx has NOISOLATION turned ON (through a VIEW "NOISOLATION" command). $INCREMENT is currently not supported for such globals.
Action: Change the application either to turn OFF NOISOLATION on the global or not use $INCREMENT on it.
HTEXPFAIL, Hash table expansion failed for lack of memory
Severity: Error
Run Time/MUPIP Error: The hash table, an internally expanding data structure maintained by GT.M, has exceeded its maximum capacity. In GT.M, each unique local variable name uses up some hash table space. In MUPIP, it is backward recovery (or rollback) that might encounter this error. Here each TP transaction that is encountered in the backward processing phase of recovery uses up some hash table space. In either case, it is more likely that a process will run out of virtual memory much before it reaches the maximum hashtable capacity.
Action: Increase process memory quotas to increase available process virtual memory. Reduce the number of unique local variable names referenced by the GT.M process. For MUPIP backward recovery/rollback, reduce the number of TP transactions encountered in the backward processing phase by using a later timestamp in the SINCE_TIME qualifier or higher RESYNC_SEQNO for rollback.
JNLBADRECFMT, Journal Record Format Error encountered for file xxxx at disk address yyyy.
Severity: Error
MUPIP Error: This indicates that MUPIP has found an error in the journal file.
Action: Report this error to GTM Support.
JNLUNXPCTERR, Unexpected error encountered for Journal aaaa at disk address 0xbbbb
Severity: Error
MUPIP Error: This indicates that MUPIP JOURNAL has detected an unexpected error in the journal file that prevents the command from proceeding. A recovery or rollback that uses this journal file cannot successfully complete.
Action: Report this error to GTM Support.
MAXTRACEHEIGHT, <The maximum trace tree height (xxxx) has been exceeded. The trace information will be incomplete.>
Severity: Info
Run time information: The internal GT.M data structure used to gather information during M Profiling can not hold all the information.
Action: Not all lines executed will be reported in the global specified by VIEW "TRACE". There is no impact on the actual execution of the user program. Please report this to GT.M Support with all information necessary to reproduce this error.
MUINFOSTR, xxxx : aaaa
Severity: Info
MUPIP Information: MUINFOSTR message is issued by a variety of MUPIP commands to inform the user of the command's progress. This indicates the string xxxx has the value aaaa.
Action: None necessary.
MUINFOUINT4, xxxx : aaaa [0xbbbb]
MUPIP Information: MUINFOUINT4 message is issued by a variety of MUPIP commands to inform the user of the command's progress. This indicates the string xxxx has the decimal value aaaa and hexadecimal value bbbb.
Action: None necessary.
MUINFOUINT8, xxxx : aaaa [0xbbbb]
Severity: Info
MUPIP Information: MUINFOUINT4 message is issued by a variety of MUPIP commands to inform the user of the command's progress. This indicates the string xxxx has the decimal 8-byte value aaaa and hexadecimal 8-byte value bbbb.
Action: None necessary.
MUNOSTRMBKUP, Database xxxx has a block size larger than yyyy and thus cannot use stream (incremental) backup
Severity: Warning
MUPIP Warning: GT.M does not support bytestream (a.k.a incremental) backup of a database file that is created with a GDS block size larger than xxxx. As of GT.M version V5.0-000, this limit is 32256 bytes. MUPIP CREATE issues MUNOSTRMBKUP warning when creating a database file with a block size that exceeds the limit. MUPIP BACKUP -BYTESTREAM issues MUNOSTRMBKUP warning and skips backing up a file that has block size that exceeds the limit. NOTE: Comprehensive BACKUP does not impose any limit on the GDS block size of the database file being backed up.
Action: Create the database file with a block size that does not exceed the limit.
MUTNWARN, Database file xxxx has 0xaaa more transactions to go before reaching the transaction number limit (0xbbbb). Renew database with MUPIP INTEG TN_RESET.
Severity: Warning
MUPIP Warning: This indicates that MUPIP INTEG detected that the transaction numbers in the named database are approaching the maximum number as specified by the Maximum TN Warn field in the database file header. This message is issued periodically at decreasing intervals as the transaction number approaches the maximum. Note that the actual maximum TN is less than this theoretical limit. DSE DUMP FILEHEADER shows what the limit is. The actual limit reflects some overhead used, for example, during a TN_RESET operation.
Action: Use MUPIP INTEG with the qualifier TN_RESET to reset the transaction numbers in the database. If the database is in the V4 format, consider converting it to the V5 format.
REPLJNLCLOSED, Replication and journaling closed at region seqno <xxx> [<XXX>], system seqno <yyy> [<YYY>] for <zzz> GT.M
Severity: Warning
Run time error: This operator log message indicates that from this point replication is not possible between primary and secondary. The message also displays the region and journal sequence numbers for debugging purposes.
Action: In order to restore replication without bringing down the system:
Turn replication ON using MUPIP SET -REPLICATION=ON or MUPIP BACKUP -REPLICATION=ON for the database file <zzz>.
Since the two sites are out of sync during this timeframe, take primary backup of the database file and restore it to secondary.
REPLJNLCNFLCT, Journaling cannot be turned <xxx> on database file <yyy> as the replication state is <zzz>
Severity: Warning
MUPIP Error: If journaling could not be turned ON, it indicates that MUPIP could not use SET -JOURNAL=ON or BACKUP -NEWJNL option for the database file <yyy>, because it has replication turned OFF.
Action: Do not use MUPIP SET -JOURNAL=ON or MUPIP BACKUP -NEWJNL when the current replication state of the database file <yyy> is OFF.
REPLOFFJNLON, Replication state for database file <xxx> is OFF but journaling state is enabled.
Severity: Fatal
Replication error: In a replicated environment, this indicates that the database file <xxx> cannot have journaling ENABLED or ON when the replication state is OFF. This is an out of design situation due to implications on recovery as journal files can't be a mix of SET/KILL records that were created when replication was ON and those created when replication was OFF.
Action: In order to prevent this situation, enable replication state for the database file <xxx> (using MUPIP SET -REPLICATION=ON or MUPIP BACKUP -REPLICATION=ON) or disable journaling using MUPIP SET -JOURNAL=DISABLE whichever is desirable.
REPLSTATEERR, Replication state cannot be changed to the specified value for database file <xxx>.
Severity: Error
MUPIP BACKUP Error: This indicates that the specified change in the replication state cannot be done due to the reason described in a following GTM-E-TEXT message.
Action: If the message indicates "Standalone access required", try to enable the replication in the standalone mode using MUPIP SET REPLICATION. If the message suggests switching journal file, specify the backup qualifier NEWJNL in the command line.
SHMPLRECOV, Shared memory pool block recovery invoked for region xxxx
Severity: Info
Run time information: GT.M carves out a portion of shared memory/global section allocated for each database region to use for ONLINE BACKUP - this portion is called "shared memory pool". This portion is also used by GT.M on OpenVMS while the region is being downgraded dynamically. In the unlikely event of corruption of shared memory pool, GT.M detects the corruption and runs a recovery procedure to fix it. Such an occurrence is logged in the operator log (syslog on Unix) with SHMLRECOV message.
Action: Report occurrence to GT.M Support. No user action required. GT.M will continue to operated normally.
STPEXPFAIL, Stringpool expansion failed. It could not expand to xxxx bytes
Severity: Error
Run Time Error: The stringpool, an internally expanding data structure maintained by GT.M to store primarily M-local variable content, needs more memory than is available in the process virtual memory.
Action: Increase process memory quotas to increase available process virtual memory. Change application to reduce memory requirements of the stringpool by using lesser M-local variables.
For supplementary information on GT.M V5.0-000 Release, refer to GTM V5.0-000 Supplementary Information Technical Bulletin