Tmax 5 SP2 Fix#3

This chapter briefly describes newly added and changed features and bug fixes in Tmax 5 SP2 Fix #3. For detailed information, refer to the relevant guide.

1. Added features

This section describes the major features added.

1.1. Engine

  • Added SVRQTIMEOUT per server

    • Added a feature to allow QTIMEOUT to be applied individually to each server.

    • The behavior according to the SVRQTIMEOUT setting value is as follows.

      Setting Description

      -1

      It is set to the same value as the CLHQTIMEOUT setting in the NODE section.

      0

      Requests from the specified server are not purged from the queue (QPURGE).

      Positive

      Only the specified server operates with the settings.

    • When the queue is purged, the following log is recorded in slog.

      (E) CLH2093 server queue is purged due to CLH or SVR QTIMEOUT(seconds): SVRNAME[svrname] CLID[client ID] REQTIME[HHMMSS.MIL] [CLH0051]
    • Setting IGNORE_CLHQTIMEOUT=Y has the same effect as SVRQTIMEOUT=0.

      When executing uncfl, if SVRQTIMEOUT=0, the IGNORE_CLHQTIMEOUT=Y item and the SVRQTIMEOUT item are displayed. If SVRQTIMEOUT is not 0, the IGNORE_CLHQTIMEOUT setting is not displayed and only the SVRQTIMEOUT item is displayed. If SVRQTIMEOUT is -1, it is not displayed.

    • This setting can be dynamically changed using the set command in tmadmin. The field name is sqt or svrqtimeout.

    • It can be viewed through the tmadmin() API of the server library, and can be dynamically changed through the TMADM_SET command.

    • Related issue: IMS 111648

  • Added dynamic setting function for -R count and -D options to TMMOPT section

    • Added a functionality to enable dynamic setting of the -R count and -D options in the TMMOPT section using tmadmin -m setopt.

      $$1 tmaxi4 (tmadm): setopt -tmm -R 5
      new value (5) is set for section = -tmm, name = N/A, fld = -R
      (I) TMM3039 TMM option [-R] set to 5 [TMM0295]
      
      $$1 tmaxi4 (tmadm): setopt -tmm -D 0
      new value (0) is set for section = -tmm, name = N/A, fld = -D
      (I) TMM3039 TMM option [-D] set to 0 [TMM0295]
    • Related issue: IMS 112688

  • Added the ability to ensure that transactions in progress are preserved when executing tmdown.

    • Set RDOWN=Y in the GATEWAY(TMAX, TMAXNONTX) section

      • When performing tmdown after requesting inbound/outbound to the domain gateway, the server is shut down after the transaction in progress is completed.

      • For requests coming into the gateway during tmdown, an error (TPENOREADY) is returned immediately.

      • If a timeout occurs during tmdown, an error (TPETIME) is returned and then the server is shut down.

    • Set the NODE section CLIREQBLOCK=Y

      • When performing tmdown after a client request, the server is shut down after the transaction in progress is completed.

      • During tmdown, an error (TPENOREADY) is returned immediately for client calls.

      • Dynamic update is possible by executing 'tmadmin -m' and then 'set -n nodename crb Y/N'.

    • Related issue: IMS 108322

  • Added a feature to terminate all processes when TMM terminates abnormally.

    • Add MAC=Y/(N) to the DOMAIN and NODE sections.

      If the MAC option is set to Y, all processes will be forcibly terminated after detecting the loss of connection to the TMM when the TMM terminates abnormally or the domain-socket channel with the TMM is disconnected.

    • Related issue: IMS 115397

  • Added the Tmax Failover Retry feature

    • The number of times to retry is specified with -R count in the TMMOPT section. Failover is performed after this number * nliveinq time has elapsed.

    • If -D is specified in the TMMOPT section, the backup svr that is automatically started when failback occurs is terminated.

    • Related issue: IMS 105883

  • Added the SLOG_RNAME function to the NODE section

    • When setting SLOG_RNAME=Y/(N) in the NODE section, the server name, not the server type, is output to slog.

    • For servers of type GATEWAY, HMS, RQS, and TMS, if the above settings are not made, the server type, not the actual server name, will be printed in the slog.

  • Added macro functions such as TMMOPT -e/-o $(CDATE)

    • The following macros can be used with the -e / -o options of the TMMOPT entry:

      • $(CDATE)

      • $(CTIME)

      • $(CYEAR)

      • $(CMONTH)

      • $(CMONTHS)

      • $(CDAY)

      • $(CWDAY)

      • $(CWDAYS)

      • $(CYDAY)

      • $(CHOUR)

      • $(CMINUTE)

      • $(CSECOND)

      • $(PID)

    • The -e and -o options of the CLHOPT entry can also be used in the same way as above.

  • Added a timeout function for broadcast

    • Added the [-B] option to CLHOPT section

      Item Description

      [ -B sec ]

      Sets the time at which messages are deleted. BROADCASTTIMEOUT If a new Broadcat enq request comes in while there is an old message, the queue is checked and deleted at that time.

    • Patch Module: CLH

    • Related issue: IMS 102184

  • Added the TSM engine

    • While the tmapm program was previously provided separately, it required users to register it directly as a UCS server in the configuration file. Furthermore, when the program detects a timeout, it calls a user-defined script and then terminates, making it cumbersome to use. Therefore, the tmapm program has been made manageable as an engine process (TSM), which is easier to configure than before.

    • Settings

      • SERVER section TMAPM=n (default -1, range: 1 to 32767)

        This setting allows the TSM engine process to check for timeouts for services running on the server. Setting this to -1 excludes the server from TSM checks. The value indicates the amount of time allowed after a timeout. Setting this to 1 allows the program to run for 1 second after a timeout occurs, after which the process is forcibly terminated (SIGKILL). The maximum value is 32,767 seconds.

        If TMAPM is not configured for all servers, the TSM engine process will not start at tmboot. However, if TMAPM is configured for a server through a dynamic configuration change, the TSM engine process will start immediately. It can be started with the tmboot -e tsm command.

      • SERVICE section TMAPM=[Y|n] (default Y)

        This option determines whether the TSM engine process will check for timeouts for a given service. If a specific service is set to N, TSM will not check for timeouts even if the service timeout occurs. This option also applies to the tmapm program (it has been available since its inception).

    • Dynamic configuration

      • It can be changed dynamically using the set -v svr_name tmapm n command.

        $$1 tmax (tmadm): echo set -v alarm0 ta 5
        new value (5) is set for section = SERVER, name = alarm0, fld = ta
        $$2 tmax (tmadm): ADM quit for node (tmax)
    • Log

      • (E) BOOT3025 tsm is already running [BOOT0040]

        This error occurs when executing the tmboot -e tsm command if the system is already running.

      • (E) CFL3198 line n : invalid parameter value : TMAPM. Valid range = (MIN : -1, MAX : 32767) except (0) [CFL5542]

        This error occurs when the SERVER section TMAPM option is set incorrectly.

      • (W) TSM7203 svc(service_name) of svr(svr_name:spri:pid) clh(n) svctime(n) elapsed n seconds [TSM0304]

        Prints service timeout information for server processes checked by TSM.

      • (I) TSM7204 SVR (svr_name) spri(n) is down due to TMAPM=n [TSM0306]

        This log indicates that TSM forcibly terminated the server process with the SIGKILL signal.

      • (I) TMM3068 TSM (tsm) is started, pid = n[TMM5205]

        This log indicates that the TSM process has been restarted due to a dynamic configuration change.

    • Note

      • In tpsvctimeout(), the server process itself restarts by calling tpreturn(TPEXIT). On the other hand, a timeout by TSM forces the server process to terminate by sending a SIGKILL signal. Therefore, the error code returned to the client is TPESVRDOWN, not TPESVCERR.

      • In a multi-clh environment, if the service that is performed first experiences a timeout while being scheduled simultaneously on the server, and the server itself is restarted, requests from other CLHs that are still waiting are normally processed by other processes. However, if the server is forcibly terminated by TSM, requests from other CLHs that were waiting also receive a TPESVRDOWN error.

    • Related issue: IMS 110953, 110305

1.2. Client/Server

  • Added the MQ xa_stub library

    • Added the libmqs.so library.

    • You can use the stub library by setting the SVRGROUP section in MultipleRM to DBNAME=MQ.

    • Related issue: IMS 107602

  • Added the ability to specify MultipleRM stub libraries

    • A feature was added to enable use of the library if there is an entry matching the DBNAME of the Tmax environment settings in the $TMAXDIR/config/RM file.

      *SVRGROUP
      svg1           NODENAME = "@HOSTNAME@",
                     OPENINFO = "QMNAME=MQTEST",
                     TMSNAME  = tms_mq,
                     DBNAME = MQ_RENAME
      
      [RM file]
      # Sample for RM Definition
      # Oracle
      Oracle_XA:oras:-L${ORACLE_HOME}/lib -lclntsh `cat ${ORACLE_HOME}/lib/ldflags` `cat ${ORACLE_HOME}/lib/sysliblist`
      # Informix
      Informix_XA:infs:-L${INFORMIXDIR}/lib -L${INFORMIXDIR}/lib/esql -lifxa `esql -libs`
      # Sybase
      Sybase_XA:sybs:-L${SYBASE}/${SYBASE_OCS}/lib -lxadtm `sybopts.sh ct cs comlibs` `sybopts.sh syslibs`
      # DB2
      DB2_XA:db2s:-L${DB2DIR}/lib -ldb2
      MQ_RENAME:mqs
    • Related issue: IMS 107602

  • Added the tmax_my_rminfo() API

    • Added an API to retrieve DB information of the server group to which you belong in the MultipleRM server.

      • Prototype

        int tmax_my_rminfo(RM_INFO_T *rminfo, int max_elem);
      • Parameters

        Parameter Description

        rminfo

        A pointer to a structure array buffer that will store M information.

        max_elem

        The number of elements in the structure array (MRM can specify up to 16 server groups).

        The following is the RM_INFO_T structure information.

        #include <usrinc/tmaxapi.h>
        
        typedef struct RM_INFO_S {
          int rmid;
          int flags;
          char dbname[DBNAME_SIZE + 1];
          char openinfo[RM_STRING_SIZE + 1];
          char closeinfo[RM_STRING_SIZE + 1];
        } RM_INFO_T;
      • Return value

        Return value Description

        Number of RMs

        The number of RMs owned by the server group to which you belong

    • Related issue: IMS 113300

  • Added an option to support older version client error codes

    • If you specify TMAX_PRB_1000=Y in the environment settings file (tmax.env), it will force a rollback to the behavior before Tmax 5 SP2 Fix#2.

    • When called after the channel is disconnected, the part where TPECLOSE returns the problem that TPEOS returns is modified to work as before so that TPEOS occurs.

    • If an error occurs due to a problem with the channel connection status between CLH and the client (for example, if a TPECLOSE or TPESYSTEM error occurs in APIs such as tpcall() or tmax_chk_conn()), the part that was modified to cause a TPECLOSE error when calling a client API without calling tpend() will now operate as before so that a TPEOS error occurs.

    • Related issue: IMS 111005

1.3. Domain Gateway

  • Added the CLOPT -x option to prevent connection attempts from being logged in slog.

    • Due to the configuration of the environment, if you periodically attempt to connect to a domain gateway that has a remote connection disconnected, a large amount of logs will inevitably be left in the slog.

      If the -x option is given to the CLOPT entry, the logs are left only in the ulog and not in the slog.

    • Related issue: IMS 117571

1.4. JAVA Gateway

  • Added the CLOPT -x option to prevent connection attempts from being logged in slog.

    • When making periodic attempts to connect to a JAVA gateway that has been disconnected from the remote node due to the environment configuration, a large amount of logs will inevitably be recorded in the slog.

      If the -x option is given to the CLOPT entry, the logs are recorded only in the ulog and not in the slog.

    • Related issue: IMS 117571

1.5. TCP gateway

  • Added the TCPGW queuing function

    • When the [-XFWDQ] option is given to the CLOPT entry, the function has been improved so that when tpforwarded to TCPGW, the service is queued when all CPCs of TCPGW are in use.

    • Related issue: IMS 101309

  • Added the svclog function

    • Added a function to record service logs for requests made remotely from Tmax and responses received from remote when the CLOPT -l option (-- before) is given.

      Like TCS and UCS, it flushes the contents every 5 minutes, and also flushes the unrecorded contents when TCPGW terminates normally.

      Even if a TCPGW request times out, the elapsed time from the request to the time of occurrence is recorded in svclog. Note that if the timeout time is set to 10 seconds, there may be a slight error in the timeout occurrence because it cannot check the time as accurately as TCS. This feature is only available in Tmax 5 SP2 Fix3 or later versions.

    • Related issue: IMS 101309

1.6. Utility

  • Added the -P option to output the cfl shared memory size

    • The -P option has been added to show the size of the total shared memory used by Tmax when running cfl.

      $ cfl -i m.m -P
      shmsize info:
      shmkey = 0x11936(71990), shmsize = 552652
      shmkey = 0x11937(71991), shmsize = 290192
      shmkey = 0x11938(71992), shmsize = 230816
      shmkey = 0x11939(71993), shmsize = 49152
      shmkey = 0x1193a(71994), shmsize = 0
      CFL is done successfully for node
    • Related issue: IMS 108588

  • Added the svcrpt -A option

    • The -A option has been added to sort service logs in svcrpt by average processing time.

      $ svcrpt -i /home/tmaxha/tmax/log/ulog/svclog* -A
      
      Services issued
              between Thu May 26 18:34:31 2016
              and     Thu May 26 18:35:04 2016
      
                                       18 - 19        total
       svc_name                        num/avg        num/avg
      ------------                    ------------   ------------
       SVC10                          1000/1.000     1000/1.000
       SVC9                           1000/0.900     1000/0.900
       SVC8                           1000/0.800     1000/0.800
       SVC7                           1000/0.700     1000/0.700
       SVC6                           1000/0.600     1000/0.600
       SVC5                           1000/0.500     1000/0.500
       SVC4                           2000/0.400     2000/0.400
       SVC3                           1000/0.300     1000/0.300
       SVC2                           2000/0.200     2000/0.200
       SVC1                           4000/0.100     4000/0.100
      ------------                    ------------   ------------
       total                          15000/0.427    15000/0.427
    • Related issue: IMS 111395

  • Added the Tmax version information patch/release information feature

    • When printing Tmax version information, it is displayed as a release version (final_release) or a patch version (patch).

      $ tmaxlibver -l libsvr.so -d -6
      libsvr.so for TMAX Version 5.0 SP #2 Fix #3 r10353 fd(16384) 64bit binary for Solaris 11 (patch)
      $ tmadmin -V
      Admin for TMAX Version 5.0 SP #2 Fix #3 r10353 fd(16384) 64bit binary for Solaris 11 (patch)
      $ svr2 -V
      SVR for TMAX Version 5.0 SP #2 Fix #3 r10353 fd(16384) 64bit binary for Solaris 11 (patch)
    • Related issue: IMS 107212

  • Added the cfl -g option

    • This option has been added to allow duplicate settings for REMOTE IP/PORT on the gateway.

    • Example

      cfl -g -i gw.m
      CFL is done successfully for node(tmaxi4)
    • Related issue: IMS 117102

1.7. Management tools

  • Added clientinfo -c, -P, -p options

    • For the clientinfo command, those options have been added to display only clients connected to a specific port, CRYPTPORT.

    • How to use

      $$1 tmax1 (tmadm): ci [-c] [-P] [-p [portno, ...]]
      Option Description

      [-c]

      Only clients connected in encrypted mode can view it.

      [-P]

      Additional port number information is output.

      [-p [portno, …​]]

      Output only for the listed Tmax connection port numbers.

    • Example

      The following is an example of command usage:

      $$1 tmaxi9 (tmadm): ci -c
      CLH 0:
      --------------------------------------------------------------------------------------------------------
       cli_id     clid     status  count  lastin_time  ipaddr                   usrname            tmax_port
      --------------------------------------------------------------------------------------------------------
      
            0  0x00000000  RUN         0            1  127.0.0.1:58235                          7189
            1  0x00000001  RUN         0            1  127.0.0.1:58236                          7389
            4  0x00000004  RUN         0            1  127.0.0.1:58239                          7289
      
      --------------------------------------------------------------------------------------------------------
      Total Connected Clients(CRYPTED) = 3
      --------------------------------------------------------------------------------------------------------
      
      $$1 tmaxi9 (tmadm): ci -p 7189,7289,7389,7489,7589
      CLH 0:
      --------------------------------------------------------------------------------------------------------
       cli_id     clid     status  count  lastin_time  ipaddr                   usrname            tmax_port
      --------------------------------------------------------------------------------------------------------
      
            0  0x00000000  RUN         0            1  127.0.0.1:58235                          7189
            1  0x00000001  RUN         0            1  127.0.0.1:58236                          7389
            2  0x00000002  RUN         0            1  127.0.0.1:58238                          7489
            3  0x00000003  RUN         0            1  127.0.0.1:58237                          7589
            4  0x00000004  RUN         0            1  127.0.0.1:58239                          7289
      
      --------------------------------------------------------------------------------------------------------
      Total(7189,7289,7389,7489,7589) Connected Clients = 5
      --------------------------------------------------------------------------------------------------------
      
      $$8 tmaxh9 (tmadm): ci -P
      CLH 0:
      --------------------------------------------------------------------------------------------------------
       cli_id     clid     status  count  lastin_time  ipaddr                   usrname            tmax_port
      --------------------------------------------------------------------------------------------------------
      
            7  0x00000007  QED         0           27  192.168.1.34:63307                          12399
            8  0x00000008  QED         0           27  192.168.1.34:63308                          12399
            9  0x00000009  QED         0           27  192.168.1.34:63309                          12399
           10  0x0000000a  QED         0           27  192.168.1.34:63310                          12399
           11  0x0000000b  QED         0           27  192.168.1.34:63311                          12399
      
      --------------------------------------------------------------------------------------------------------
      Total Connected Clients = 5
      --------------------------------------------------------------------------------------------------------
    • Related issue: IMS 108817

  • Added the maxrstart reset function

    • The restat -r option has been added to tmadmin to allow resetting the maxrstart value in tmadmin.

    • Example

      $ qpsx2@tmax1:/home/tmax1/tmax/sample/server>tmadmin -m
      --- Welcome to Tmax Admin (Type "quit" to leave) ---
      
      $$1 qpsx2 (tmadm): restat -v svr2 -r
      Restarted count for SVR(svr2:4) cleared: 1
      $$2 qpsx2 (tmadm):
    • Related issue: IMS 114095

  • Added the -R, -D and -gw features to cfgopt tmm

    • The -R and -D options have been added for cfgopt -tmm.

    • The cfgopt -gw gwname option has been added.

    • Example

      $ tmadmin
      $$1 node1 (tmadm): setopt
      Usage: setopt -tmm -option value
                    -gw gwname -option value
      
      $$2 node1 (tmadm): cfgopt
      Usage: configopt -tmm
                       -gw gwname
      
      $$3 node1 (tmadm): setopt -tmm -D 1
      new value (1) is set for section = -tmm, name = N/A, fld = -D
      
      $$4 node1 (tmadm): cfgopt -tmm
      ------------------------------------------------------------------------
       -tmm configurable value
      ------------------------------------------------------------------------
        accept retry count               (-A) = 100
        max forked threshold             (-F) = 95
        booting timeout                  (-t) = 10
        auto failback                    (-D) = 1
        node check try count             (-R) = 0
      ------------------------------------------------------------------------
      
      $$5 node1 (tmadm): setopt -gw gw_name -D 2
      new value (2) is set for section = -gw, name = gw_name, fld = -D
      
      
      $$6 node1 (tmadm): cfgopt -gw gw_name
      ------------------------------------------------------------------------
       -gw configurable value
      ------------------------------------------------------------------------
        debug log level                  (-D) = 2
      ------------------------------------------------------------------------
    • Related issue: IMS 118505

2. Changed features

This section describes the major changes to the features.

2.1. Engine

  • Improved the issue of long recovery times for TIM and TMS when performing tmboot.

    • Improved the time-consuming part of recovering TXLOG and GWTXLOG files in TLM.

    • When calling xa_recover() from RM in TMS, the request for 10 at a time has been changed to request 256 by default. This value can be changed with the -c <count> option in the CLLOPT entry. The default is 256, and the minimum value is 10 and the maximum value is 8192.

    • Related issue: IMS 105295

  • Improved error messages for CLH2053 and CLH2052

    • Changed the log CLH2053 to output msgtype and spri together when discarding messages coming from a disconnected server in CLH.

      • Before update

        2053 msg discarded due to closed server connection : svc = %s
      • After update

        2053 msg discarded due to closed server connection : svc = %s, msgtype = %d, spri = %d
    • CLH2052 was also changed to output msgtype.

      • Before update

        2052 msg discarded due to closed client(%#x) connection : svc = %s
      • After update

        2052 msg discarded due to closed client(%#x) connection : svc = %s, msgtype = %d
    • Related issue: IMS 116465

  • Changed behavior when CLH loses connection with TMM

    • If MAC=N (default) in the NODE section

      If the connection to the TMM is lost, but the TMM process itself remains alive, the CLH should not continue to run. This is because, when the TMM loses its connection to a CLH, it assumes that the CLH has terminated and will start another CLH. Therefore, when the CLH loses its connection to the TMM, it attempts to reconnect to the TMM to check if it is alive.

      The log related to this is as follows and is output at INFO log level.

      2011 TMM connection closed : %d

      If the connection to the TMM is successful, the TMM sends a SIGTERM signal to the CLH to terminate the CLH. The TMM log related to this is as follows.

      TMM3067 SIGTERM sent to disconnected CLH, pid = %d
    • If MAC=Y in the NODE section

      As with other Tmax processes, when the connection with TMM is lost, it outputs a FATAL log and terminates. The related logs are as follows and are output at the FATAL log level.

      2011 TMM connection closed : %d
    • Related issue: IMS 115531

  • CLHQTIMEOUT improvement

    • In previous versions, the check interval was fixed at 35 seconds. If CLHQTIMEOUT is set to less than 35 seconds, a queue timeout does not occur, so the function has been improved to ensure that the timeout check is performed accurately even when it is less than 35 seconds. The same applies to SVRQTIMEOUT.

    • Related issue: IMS 111648

2.2. Client/Server

  • Changed openssl library function/variable names in libsvr* and libtms*

    • The library function/variable names have been changed as follows:

      Before change After change

      RC4

      _lspf_RC4

      RC4_options

      _lspf_RC4_options

      RC4_set_key

      _lspf_RC4_set_key

      RC4_version

      _lspf_RC4_version

    • Related issue: IMS 115833

2.3. Domain Gateway

  • Changed the functionality of the CLOPT -p option to allow specifying the message output by LOGLVL.

    • Previously, setting the CLOPT -p option and LOGLVL=DEBUG4 would print both transaction summary information and full text.

      After the version, if set to DEBUG1, only one line excluding the full text is logged, and if set to DEBUG2 or higher, the function was changed so that logging including the full text is possible.

    • Related issue: IMS 114185

2.4. Management Tools

  • Improved the hang phenomenon when executing commands such as gwi, txgwi, ntxgwi, and jgwi

    • When the gateway (Domain GW, JEUS GW, TUXEDO GW) fails to listen to a port while it is running because another process is occupying the port, a hang occurs when commands such as gwi, txgwi, ntxgwi, and jgwi are executed in tmadmin in this state.

    • Improved to receive and process incoming requests from TMM while waiting to use the listen port.

    • Related issue: IMS 103483

3. Bug Patch

3.1. Engine

  • Fixed the issue where scheduling was performed as outbound CPC when starting an additional UCS server.

    • When a server is restarted and a CPC is registered, the current queued CPC channel is retrieved and scheduled at the moment of registration. While inbound CPC channels are not affected, outbound CPC channels are not processed. This has been modified to schedule inbound and outbound CPC channels separately.

    • Related issue: IMS 79295

  • Fixed an error that caused incorrect message types to be sent to clients when TMAXGW terminates abnormally.

    • There is a problem where when TMAXGW is abnormally terminated, an error response message of XA_COMMIT and XA_PREPARE is sent to the client, causing the following error.

      CLI 3039 internal error : unknown message type :2112 [CSC5713]
    • XA related messages are a type of message that is exchanged between CLH and TMS or transaction support gateway. If CLH is disconnected from transaction gateway and it is an XA message type, it has been modified so that it does not respond to the client.

    • Related issue: IMS 103569

  • Fixed the issue that occurred when CLL was restarted due to an abnormal termination when there were no servers running.

    • Fixed the issue where CLL would not establish a connection with CLH if it was restarted due to an abnormal termination when there was no running server.

    • Related issue: IMS 108258

  • Fixed the issue where the server name was displayed as unknown when a booting timeout occurred.

    • Indexes are internally managed for booting time calculation. The issue of index value initialization failure when adding a server with cfgadd has been fixed.

    • Related issue: IMS 107128

  • Fixed an error occurring when setting TMSTYPE=STD_MT

    • The error that occurred when setting TMSTYPE=STD_MT has been fixed.

      CLH2131 invalid thri: 4
    • When specifying the STD_MT type, the problem of CLH2131 error occurring and no response being sent to the client or server when tx_commit(), tx_rollback() requests exceed TMSTHREADS has been fixed.

    • Fixed the issue where requests to TMS would suddenly stop being sent when the number of requests to TMS increased simultaneously.

    • Fixed the issue where thread id was displayed as a negative number in slog.

    • Fixed the issue where TMS would abnormally terminate when tmdown Tmax normally after multiple XA requests had been performed.

    • Related issue: IMS 107299

  • Fixed the issue where the lock file was in use by another process when restarting CLH.

    • There is a problem that CLH waits in the lockf() function during startup when the -c option of the domain gateway is set (the path/clhld000 lock file is being used by another server process) when CLH restarts.

      When CLH starts, it is modified to delete existing files and always create new files so that it does not fall into a waiting state due to a lock file.

    • Related issue: IMS 106794

  • Fix for TMM abnormal termination in multi-node environment

    • Fixed the issue where TMM would terminate abnormally by referencing incorrect memory during the process of confirming a connection with the opposing TMM due to network delay, etc.

    • Related issue: IMS 112078

  • Fixed the issue where the POD server would not start when called after tmdown -g svgname and added the -b feature.

    • Fixed the issue where a POD-type server would not start when a service request came in if the process was not running at the time of tmdown -g svgname.

    • A feature has been added to prevent a POD-type server from starting when a service request comes in if the process is not running at the time of tmdown -b -g svgname.

    • Related issue: IMS 112124

  • Fixed the issue that occurred when restarting the CUSTOM GATEWAY server.

    • Fixed the issue where the following error would occur when the CUSTOM GATEWAY server was restarted.

      TMM3033 svr (*) booting time (10) is over
    • Related issue: IMS 112051

  • Fixed the issue that occurred when restarting DomGW.

    • Fixed the issue where the following error message would be displayed when restarting DomGW.

      TMM3004 SVR (gw) is restarted the 1th time
    • Related issue: IMS 115478

  • Fixed the issue where tmboot would terminate abnormally when starting the server with tmboot after setting environment variables in ENVFILE.

    • During the startup process, the length of the buffer that reads the variables of ENVFILE at once with fgets is 1024, and after reading, if the ${} environment variable pattern exists, there is a problem that the final string length of the substituted value exceeds the buffer size and breaks another variable (file pointer used for fgets).

    • The path environment variable length has been changed from 1024 bytes to 65536 bytes (=64KB). However, it may be larger than 64KB depending on the platform or compilation optimization.

      Applies to the following cases:

      • After setting the file in the ENVFILE entry, the normal server starts with tmboot.

      • After setting the file in the ENVFILE entry, the general server is started with tmadmin rst

      • After setting the file in the ENVFILE entry, the normal server starts (reboot) with tmm.

      • After setting the file in the ENVFILE entry, start the TCPGW server with tmboot.

      • tmaxreadenv(file)

      • racd -i file

    • Related issue: IMS 117013

  • Fixed the issue occuring when setting CLOPT -r on server

    • The following phenomenons have been corrected when setting the [-r] option.

      1. The SERVER section CLOPT -r option does not increment the restart count when the server terminates with TPEXIT due to a service timeout.

      2. The restart count is not reset after gperiod has passed.

      3. masrstart fails to initialize when performing tmdown -S

    • Related Patch: TMM

    • Related issue: IMS 101667

  • Fixed the last XID numbering error occurring when TLM recovers TXLOG files

    • When Tmax restarts, TLM passes the last XID + 10240 number to CLH if there is data in the TXLOG file, and if there is no data, it passes the current time % 0xFFFF modular operation value as the initial value to CLH. Then, CLH sequentially issues XIDs when requesting a transaction from this starting value.

      During the above process, a bug occurred where TLM always passed the current time % 0xFFFF value during the last XID numbering process, resulting in duplicate XIDs. This error was fixed, which caused the actual decision to be rolled back during the recovery process, or the XID searched a few days ago had a decision to commit, so the actual decision was rolled back or committed.

    • Related Patch: TLM

    • Related issue: IMS 116341

  • Fixed the issue where incorrect errors were output when using the SVRQTIMEOUT function

    • The phenomenon of the CLH0922 error being printed instead of CLH0051 has been fixed.

    • The phenomenon of the EQPURGE error always occurring in svrlib after dynamically setting timeout to 0 has been fixed.

    • Related issue: IMS 111648

3.2. Client/Server

  • Fixed memory leak when using tmadmin API

    • Fixed a memory leak that occurred when querying TMADM_SVC_STAT and TMADM_SVC_STAT_EX in the tmadmin API.

    • Related issue: IMS 103322

  • Fixed the return value error of tmax_is_xa() function occurring when using MultipleRM

    • When using MultipleRM, the phenomenon in which the tmax_is_xa() function returns Non_XA even though it is XA has been fixed.

    • Related issue: IMS 109734

  • Fixed the xa_start error occurring when calling MultipleRM service from client in a transaction

    • When a client calls the MultipleRM service more than 32 times (tpcall) by bundling the service into a transaction, the bqno is incremented each time the service is called. In Oracle, if the bqno exceeds 32, an xa_start error occurs.

      When calling a service, bqno is no longer always increased, but is only increased when necessary. (Applies to tpcall only)

    • Related issue: IMS 108631

  • Fixed the issue where FBEVTSYNTAX(bad viewfile) occurred when calling fbinit() and fbput().

    • There was a problem where calling fbinit() on a buffer allocated with tpalloc("CARRAY") returned an error FBEVTSYNTAX(16).

      From Tmax 5.0, when using the FDL function, it was improved so that only buffers allocated with tpalloc("FIELD") can be used. However, in Tmax 4.0, this buffer type check logic is not performed, which is causing problems when upgrading versions.

    • When calling fbinit() on a buffer other than the FIELD type, such as the CARRAY type, the type of the buffer is changed to the FIELD type.

    • When using buffers other than FIELD type in FDL functions, error handling logic is removed to ensure compatibility with Tmax 4.0. This means that FDL functions are executed without generating errors. Instead, due to potential risks, the following error log is output only once per process.

      CLI0248" "SVR0248 buffer type error(CARRAY). use FIELD type. [FDL0515]
    • In the log left when setting TMAX_TRACE, FBEVTSYNTAX was changed to FBESETVER.

    • Related issue: IMS 112081

  • Fixed the TPEINVAL error when calling TMADM_SVR_CONF command of tmadmin() API

  • Fixed the issue where txinfo(NULL) would terminate abnormally when called without tpstart.

  • Fixed the issue that occurred when using TDL’s implicit version consistency in tx_begin

    • In the TOUPPER service flow that proceeds in the following order, tpreturn() and tpforward() internally add a trailer message to the end of the user message and transmit it between Tmax to provide implicit consistency.

      1. Set TDL=Y in Tmax config

      2. Tmax client calls the functions in the following order:

        tx_begin -> tpcall(FORWARD) -> tx_commit
      3. Tmax server performs FORWARD(tpforward(TOUPPER))

        At this point, the phenomenon of the length of the user message increasing by 10 bytes due to an incorrect calculation of the length of the trailer message was corrected.

    • Related issue: IMS 114518

  • Changed behavior of calling tx_info without tpstart

    • Starting with Tmax 5.0, when calling without tpstart, a TPEPROTO, TX_PROTOCOL_ERROR error occurs. However, in Tmax 4.0, it returns 0, which caused problems when upgrading Tmax due to the different error codes. In response, the return code was changed to match that of Tmax 4.0.

      Additionally, the following functions have been modified to return 0 when called without tpstart.

      - tx_info
      - tx_set_commit_return
      - tx_set_transaction_control
      - tx_set_transaction_timeout
    • Related issue: IMS 114518

  • Modified the gdb trace of the Tmax Core file to output the Tmax full path abbreviated.

  • Fixed a message output issue when specifying TMAX_DEBUG in TDL

    • Fixed the issue where messages would only be logged to the log file and not displayed on the terminal screen when TMAX_DEBUG was specified in TDL. Setting the environment variable TMAX_ERR_STDOUT=Y while TMAX_DEBUG was specified would cause messages to be logged to the log file and displayed on the terminal screen.

    • Related issue: IMS 114552

  • Fixed a core issue when calling tdlcall()

    • In Tmax 5.0, the char[] type buffer was removed as unnecessary through refactoring, so the stack frame size of the tdlcall() function in Tmax 5.0 is smaller than that in 4.0.

      When a stack overflow occurs in user_function, Tmax 4.0’s tdlcall() does not break the return address or parameters used after calling the user function due to the large stack frame size. Tmax 5.0 causes a core crash when the above memory is broken.

      As with Tmax 4.0, when a stack overflow occurs in a user function, a free buffer (4000 bytes) has been added to the stack frame of the tdlcall() function to protect the critical memory area.

    • Related issue: IMS 114518

3.3. Domain Gateway

  • Fixed the issue where the full message text was not printed when using the CLOPT -p option.

3.4. TCP gateway

  • Fixed a core issue that occurred when the return value of libtcpgw’s get_msg_info was -1 when using ping msg.

    • Related logs

      (E) SVR6105 user routine error: get_msg_info [HLINK9050]
      (E) SVR0030 read error [HLINK9041]
    • Related issue: IMS 110764

  • Fixed the issue where message 42 was passed to CLH when chk_pong_msg() returned a positive number.

    • Related logs

      (E) CLH0209 internal error : invalid msg type(42) from server [CLH0034]
    • Related issue: IMS 115415

  • Fixed the issue that occurs when using set_ping_msg in TCPGW

    • Fixed an error where set_ping_msg() was called before init_remote_info().

      Fixed the issue where the timeout check cycle was incorrect when using set_ping_msg in TCPGW. The delay occurred because the TCPGW internal check logic was implemented so that the timeout was not checked for interval seconds after sending the ping message at interval intervals.

      Ping transmission was modified to be sent at interval cycles and the cycle of waiting for a pong immediately after transmission was modified to operate as a timeout time.

    • Fixed the issue where memory increased at each health check cycle in TCPGW.

      After sending a ping message to the remote for a health check, if a ping response (pong) is received from the remote, the chk_pong_msg() callback function is called. If this callback function returns a positive number, it is determined to be a health check message and the get_msg_info() callback is not called and the function ends. The issue of not releasing the buffer for the pong message has been fixed.

    • Related issue: IMS 117622, 110764

3.5. Tuxedo Gateway

  • Fixed the issue where the alive check response message was mistakenly logged as a normal message when it was an error response.

    • Related error messages

      GATEWAY9003 Error reply from remote gateway :diagonostic [6] tran [0:0:0] [TUXGW0409]
    • Related issue: IMS 100700

  • Fixed an abnormal termination issue in TUXGW when using the tuxgw -n option on 32bit Linux.

  • Fixed TUXGW Table Overflow Error

    • Fixed an error where the internal limit value MAXSACALL was not set when calling tpacall.

      When calling tpacall, if the internal limit MAXSACALL timed out, the table would not be reduced, resulting in a Table overflow error. This has been fixed so that the table is reduced when a timeout occurs.

    • Related error messages

      (E) GATEWAY0209 internal error : request table overflow [TUXGW0014]
    • Related issue: IMS 109504

  • Modified to leave an error log including the IP and port of the connection when a connection is attempted to a connected TUXGW.

    • tuxgw log

      (E) GATEWAY3008 another connection from 192.168.15.116:48052 [TUXGW0162]
      (E) GATEWAY3010 connection error from remote gateway [TUXGW0002]
    • Related issue: IMS 108835

  • Fixed a protocol error that occurred in TUXGW.

    • Fixed TUXGW to properly recognize protocols when returning null as data from Tuxedo.

      (E) GATEWAY9002 Protocol error :  [TUXGW0507]
    • Related issue: IMS 108835

  • Fixed the issue where TUXGW alive check did not work.

    • Fixed the issue where a live check was not performed after receiving a TUXGW Inbound XA request and performing a live check before responding.

    • Related issue: IMS 108835

  • Fixed a log macro not working in TUXGW

  • Fixed the issue where a normal response message was returned to the requester for a request that had already been processed with an error.

    • When a timeout occurs for a request from TUXGW to Tuxedo, a TPETIME error response is returned to the requestor. However, when a timeout response comes in from Tuxedo under a heavy load situation with many requests to TUXGW, a normal response message is returned to the requestor for a request that has already been processed as an error.

      In this case, subsequent requests resulted in the following error:

      (W) GATEWAY0209 internal error : -1 [TUXGW0118]

      When a response comes from Tuxedo for a request that has already been processed as an error in TUXGW, the following log is printed and discarded.

      (W) GATEWAY0209 internal error : invalid msg from rgw 0, maybe a message arrived after timeout, seqno 0 [TUXGW0161]
    • Related issue: IMS 101645

3.6. Java Gateway

  • Fixed the issue where logs were not output even when connected to a remote in JEUSGW and JEUSGW Async.

    • If the connection fails, the following logs are printed:

      • Failed to accept connection request from remote

        (E) GATEWAY3010 connection error from remote gateway [JGW0002]
      • When there is only one remote address

        1) An error occurs immediately

        (I) GATEWAY0046 socket connect error :rgw(c) host[xxx.xxx.xxx.xxx], port[portno], type[16(primary)|32(backup)],
        [retry index : new connection channel index] [COM3605]

        2) An error occurs while waiting after requesting

        (I) GATEWAY0046 socket connect error :rgw(c) host[xxx.xxx.xxx.xxx], port[portno], type[16(primary)|32(backup)],
        [0:0] [COM3609]
      • When there are two or more remote addresses

        1) Primary connection request failed

        (I) GATEWAY0046 socket connect error : xxx.xxx.xxx.xxx portno [JGW0109]

        2) Backup connection request failed

        (I) GATEWAY0046 socket connect error : xxx.xxx.xxx.xxx portno errno [JGW0112]
    • Related patches: JEUSGW / JEUSGWA

    • Related issue: IMS 111280

  • The phenomenon where incoming connections are not limited to MAXINRGW

    • Fixed the issue where JEUSGW inbound connections would not connect as much as the MAXINRGW + 30 setting.

    • Fixed the issue where live checks were performed on inbound sessions.

    • Related Patch: JEUSGW

    • Related issue: IMS 103171

  • Fixed the issue where Core would crash if incorrect options were set on the gateway.

    • Core occurred when incorrect options such as jeugw -a were set on SUN 9/10, and this was fixed.

    • Related issue: IMS 114154

  • Fixed the issue where Core crashed when requesting JEUSGWA outbound from SUN

  • Fixed the issue when requesting JEUSGW RQ service from WebT client

    • Fixed the issue where an invalid queue name occurred when requesting the JEUSGW RQ service from a WebT client.

    • Related issue: IMS 104273

  • Fixed an error that caused the gateway to terminate abnormally when using the specialized logging feature on the gateway.

    • Fixed an error that caused abnormal termination when using the specialized logging feature in JEUSGW, TMAXGW, and TUXGW if the string %n was included.

      • JEUSGW

        clopt="-D4"
      • TMAXGW

        clopt="-p"
      • TUXGW

        clopt="-D"
    • Related issue: IMS 115860

3.7. TDL

  • tdlupdate bug fixes and performance improvements

    • Fixed the issue where tdlupdate would stop when the target file to be reflected did not exist when using the -i option.

    • When performing tdlupdate, access to the target file was added at multiple points, making it twice as slow as before. This was modified to minimize access.

    • The backup file update method previously required individual backup file updates for each function within the library. This has been improved to handle all backup file updates simultaneously.

    • When reflecting information in the TDL shared memory, a signal block function was added to prevent interruption for all signals except SIGKILL, SIGSTOP, and SIGCONT.

      If a signal such as <Ctrl>+C is received at a time other than the above, all processes such as file copying are restored to their original state.

      • Target signals: SIGHUP, SIGINT, SIGQUIT, SIGTERM, SIGUSR1, SIGUSR2

      • Related modules: tdlclean / tdlupdate

    • In addition to the existing method of using /bin/cp, a copy function has been added to copy independently.

      Add the following option to tdl.cfg (default: mmap)

      COPY=[cp|mmap]
      Item Description

      cp

      This method uses /bin/cp.

      mmap

      tdlcall internally copies files in a memory-mapped manner, which has a slight performance advantage over cp.

    • Related issue: IMS 104752

  • Fixed the issue where variables were uploaded to TDL shared memory (tdlshm) as functions on AIX.

    • Due to the characteristics of the AIX platform, the phenomenon of global variables being searched with nm and variables being registered as TDL functions has been corrected.

      Add the following options to tdl.cfg:

      CUSTOMCMD=Y
    • Related patches: tdlinit / tdlupdate

    • Related issue: IMS 107466

  • Fixed the issue where a tdlupdate error occurred when updating with tdlupdate -p.

    • Fixed the issue where a tdlupdate error occurred when there was a tdl.cfg(LANG=COBOL) setting when updating with tdlupdate -p.

    • Related error messages

      (E) TDLUTIL0078 file rename error: /run/tdlcall2v_s.so -> /run/tdlcall2v_s.5728054d [TDL0447] [No such file or directory]
    • Related patch: tdlupdate

    • Related issue: IMS 110591

  • Fixed the issue where an error occurred when executing tdlupdate -l list if the list file was null.

    • Related error messages

      (I) TDLUTIL0040 invalid arguments [TDL0401]
      (E) TDLUTIL0001 memory allocation error : size = 0 [TDL0434]
    • Related patch: tdlupdate

    • Related issue: IMS 114469

  • Fixed the issue where an error would occur when tdlcall() was called while tdlupdate was being performed.

    • Fixed the issue where a "library not found" error would occur when tdlcall() was called while tdlupdate was being performed.

    • This only occurs in the MODLE=SINGLE configuration of tdl.cfg.

    • Related issue: IMS 113724

3.8. Utility

  • CFL3110 output error fix

    • The phenomenon of the actual CPC value being larger than the output value when printing CFL3110 has been corrected.

      (E) CFL3110 more CPC(100) than MAXCPC(3) are defined at node [CFL0955]
    • Related issue: IMS 102921

  • When adding a server service from cfl to cfgadd, it fails depending on the memory situation.

    • Fixed the issue where an error would not occur in TMM due to the order of the details added being changed due to a memory error.

    • Related Patch: cfl

    • Related issue: IMS 111598

  • Fixed an abnormal error occurring when using mksvr and not having svctab permission

    • When using mksvr, if you do not have svctab permission, there is a phenomenon in which Err#13 EACCES occurs and then SIGSEGV terminates abnormally.

      In this case, it was modified to output an error message.

      $ mksvr  -o svr2 -f svr2.c -s TOUPPER,TOLOWER -v -64
      cp: cannot create regular file `svr2_svctab.c': Permission denied
      total 2 svcs added.
      cp /home/tmax2/tmax/svct/svr2_svctab.c svr2_svctab.c
      cannot open svr2_svctab.c : Permission denied
    • Related issue: IMS 102921

3.9. Management Tools

  • Fixed the issue where st -s/p -x gateway_name was incorrectly displayed.

    • Fixed the issue where mintime, utime*, and stime* of st -s/p -x gateway_name were displayed incorrectly.

    • For gateway types that do not use CPU Time, usertime and systime have been modified to not be used. (Unchanged from 0)

    • Related issue: IMS 103525

  • Fixed the issue of No Alive Connection when monitoring gwi in tmadmin.

    • When an alive check message is sent, the status of the corresponding session is changed from READY to PING_REQUESTED, and when an alive check response is received, it is changed back to READY. During this time, if the tmadmin gwi command is executed, the gateway (Tmax/JEUS/Tuxedo) checks the status information, but the phenomenon of No Alive Connection appearing because only sessions in the READY status are checked has been corrected.

    • No Alive Connection occurred even in XA processing state in JEUSGW, so this was fixed to prevent this from happening.

    • Related issue: IMS 112228

  • Fixed the issue where memory increased after setting the HOSTLINK configuration file.

    • When setting and operating the LOGGING section of the HOSTLINK configuration file, the phenomenon of memory increasing each time data is logged has been fixed.

    • Related issue: IMS 102206

  • Fixed the issue where LU62RGW would terminate abnormally.

    • The phenomenon of the LU62RGW process abnormally terminating due to stack overflow when multiple transaction requests are received simultaneously from the mainframe via SNA has been fixed.

    • Related issue: IMS 102206

3.11. RPC

  • Fixed memory leak in Entgw

    • Fixed the issue where some data was not freed when receiving a request from the Entera server, performing a service, and returning a response.

    • Related issue: IMS 101036