Tmax 5 SP2 Fix#4

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

1. Added features

This section describes the major features added.

1.1. Engine

  • Improved to prevent asqcount from increasing when suspend -s is used

    • When a service is blocked with suspend -s, the asqcount is modified to not increase due to the blocked service in CLH.

    • When the service is blocked with suspend -s, the blocked information is maintained even if the server is shut down.

    • Related issue: IMS 138006

  • Changed the license issuer to allow host names up to 256 characters

    • The NODE section of the configuration file now supports HOSTNAME up to 256 characters. Since NODENAME is limited to 16 characters, HOSTNAME must also be specified if it exceeds 16 characters.

    • Related issue: IMS 150028

  • Added the TPRETURN option to Tmax configuration SERVER section

    • When a service timeout occurs and tpreturn() is called inside the tpsvctimeout() function, the argument values defined in the source code are ignored and the values defined in the environment settings are forcibly set.

    • Add the following value to the TPRETURN option setting in the SERVER section.

      Item Description

      FAIL

      Forces the TPFAIL argument to be set.

      EXIT

      Forces the TPEXIT argument to be set.

      DOWN

      Forces the TPDOWN argument to be set.

      NONE

      Use the values defined in the source code as is.

    • Related issue: IMS 171100

  • Added logs when CLL and CLH are registered in TMM during Tmax startup

    • Added logs when CLH and CLL among Tmax engines are connected to TMM during startup.

      TMM3069 CLH (%d) registered, fd = %d, pid = %d [TMM5207]
    • Related issue: IMS 172080

  • Added a feature to wait until tpsvrinit() is completely terminated when starting the server via tmboot without starting other server processes

    • The BOOTWAIT setting has been added to each server in the SERVER section. If a server with the option value set to Y terminates abnormally during startup in tpsvrinit(), tmboot will proceed to start the next server process.

    • The following is a description of the added argument values.

      Argument value Description

      N

      If you specify a wait option (-w, -W, -d, -D) when starting tmboot, the server process will start up and the next process will start up just before tpsvrinit() is executed. (Default)

      Y

      When starting tmboot, the wait option (-w, -W, -d, -D) is ignored and the next server process is started after the tpsvrinit() execution of the corresponding server process is completed.

    • Related issue: IMS 206674

  • Added the CLHOPT -q option

    • When the server’s RESTART setting is Y, a feature has been added to the NODE section so that when all server processes are down, the called service is queued and can be processed when the server starts up normally.

    • If the q option is not used, queuing is not performed by default.

    • Usage examples

      *NODE
      CLHOPT = "-q"
    • Related issue: IMS 224522

  • Added the TSKILLTIMEOUT function to set timeout in tpsvrinit and tpsvrdone

    • The TSKILLTIMEOUT=1~255 (default: 0) setting was added to the SERVER section.

    • If the time taken from the time the server process is registered in TMM after startup until tpsvrinit ends exceeds the TSKILLTIMEOUT time registered in config, the server process is forcibly killed.

    • If the time taken from the time tpsvrdone starts until the server process unregisters with TMM exceeds TSKILLTIMEOUT, TMM forcibly kills the server process.

    • Related issue: IMS 183715

  • Added a function to receive an error response when a request scheduled to another node fails

    • Added the CLHRRCHK=Y/(N) option to DOMAIN and NODE sections.

    • When the setting value is set to Y, an error (TPESVRDOWN) is generated when a failure of a node is detected and scheduling of tpcall, tpacall, and tprecvfromcli requests from CLH is performed on another node.

      If you do not set it or set the value to N, a phenomenon of infinite waiting may occur when a request is made to another node but CLH communication is not possible due to the other node being down.

    • Related issue: IMS 193880

  • Added the queue functionality for tpadvertise requests

    • An issue occurred when tpadvertise() was called simultaneously from different server processes.

    • Added a queue function for tpadvertise requests to allow multiple tpadvertise requests to be processed sequentially at the same time.

      The default queue purge time is 5 seconds, and you can specify a desired time with -a sec in TMMOPT. If the -a option is not set, the default value of 5 seconds is set, and if -a sec is set, if the queue is queued for more than sec, it is purged and the TPEQPURGE error code is set in tpadvertise(). No purge-related logs are left in the slog.

    • Usage examples

      *NODE
      TMMOPT = "-a 10"
    • Related issue: IMS 244386

  • Added Tmax CLOUD License Features

    • When issuing a license for the CLOUD type, the license period is checked without checking the number of CPUs or hostname.

    • When issuing a license, a start date and expiration date are set, and the license is checked based on these dates. A notification log is output to slog starting one month before the expiration date, and a warning log is output upon expiration. Tmax is not started after the expiration date.

    • Below is an example of tmadmin licinfo information.

      ###############################################
       License Information (file: /home/tmax/license/license.dat)
      ###############################################
      
      License seqno: TDS-xxxx-xxx-xxxx
      License type: CLOUD
              Start date: 2021/04/01
              Expiration date: 2022/03/31
      Edition: Standard
      Licensed sub-products:
              Distributed transaction support
      ..
      License check without hostname or hostid
      Unlimited license
    • Related issue: IMS 247239

1.2. Client/Server

  • Added tpgetsvglist_bynode() and tpgetnodelist() APIs

    • This is provided to make it convenient to search for the value to be put in the svgno argument of the API when making a tpcallsvg() request to a service group existing on a specific node.

    • Related issue: IMS 144454

    [tpgetsvglist_bynode()]

    Retrieves a list of server groups corresponding to the specified node name among the server groups providing the specified service. This is the same as tpgetsvglist(), but the contents of the server group list vary depending on the node name argument.

    • Prototype

      struct svglist *tpgetsvglist_bynode(char *nodename, char *svc, long flags);
    • Parameters

      Parameter Description

      nodename

      Enter the node name that provides the service specified in svc.

      If NULL is input, it performs the same action as tpgetsvglist().

      If you enter an incorrect node name, a TPEINVAL or TPENOENT error will occur.

      svc

      Enter the service name.

      flags

      Not currently used.

    • Return value

      If an error occurs, NULL is returned and tperrno is set to an appropriate value. Otherwise, a list of server groups that failed the service call is returned in struct svglist.

      Return value Description

      Non-NULL value

      If the function call is successful, a list of server groups corresponding to the specified node name is returned.

      NULL

      If the function call fails, an error code is set in tperrno.

    • Example

      #include <stdio.h>
      #include <usrinc/atmi.h>
      
      SVGCALL(TPSVCINFO *msg)
      {
          char *svcname = msg->data;
      
          struct nodelist *node = tpgetnodelist();
          if (node == NULL)
             ...error process
      
          for (i = 0; i < node->count; i++) {
                  printf("[%d] %16s : %x:%p\n", i, node->nodelist[i].nodename,
                          node->nodelist[i].ipaddr, node->nodelist[i].port);
          }
      
          ...
          struct svglist *svg = tpgetsvglist_bynode(node->nodelist[1].nodename, svcname, 0);
          if (svg == NULL)
             ...error process
      
          for (i = 0; i < svg->ns_entry; i++) {
               printf("[%d] %d(%x)\n", i, svg->s_list[i], svg->s_list[i]);
          }
      
          ...
          tpreturn(TPSUCCESS,0,(char *)msg->data, msg->len,0);
      }

    [tpgetnodelist()]

    This function retrieves a list of nodes in the currently connected Tmax system. The address of the returned nodelist structure must not be freed.

    • Prototype

      struct nodelist *tpgetnodelist()
    • Return value

      If an error occurs, NULL is returned and tperrno is set to an appropriate value. Otherwise, a list of server groups that failed the service call is returned in struct svglist.

      Return value Description

      Non-NULL value

      If the function call is successful, it returns a list of structures containing a list of nodes.

      NULL

      If the function call fails, an error code is set in tperrno.

    • Example

      main(int argc, char *argv[])
      {
          int     ret;
          int     starti = 0, endi = 0;
      
          if (argc != 2) {
             printf(“Usage: argv[1] string\n”);
             exit(1);
             if((ret = tmaxreadenv( “tmax.env”,”TMAX” )) == -1 ){
                printf(“<%-15s> tmaxreadenv fail [%s]”, __FILE__, tpstrerror(tperrno));
                exit(1);
             }
      
          if (tpstart((TPSTART_T *)NULL) == -1){
              printf(“<%-15s> tpstart fail [%s]”, __FILE__, tpstrerror(tperrno));
              exit(1);
          }
      
          /* tpgetsprlist in client */
          ret = tpgetsprlist(argv[1], 2, &starti, &endi, 0);
          if (ret < 0) {
              printf(“<%-15s> tpgetsprlist fail [%s]”, __FILE__, tpstrerror(tperrno));
              exit(1);
          }
          else {
             printf(“Received Message : starti[%d], endi[%d]\n”, starti, endi);
          }
          tpend();
      }
  • CliWatcherCallback(), tpsetcliwatcher(), tpclrcliwatcher() API added

    • Provides an API for the UCS server to detect when a client has terminated and perform subsequent actions.

    • Related issue: IMS 146611

    [CliWatcherCallback()]

    This is a callback function that will be notified when the client terminates. The user writes the function and passes it to the callback argument of the tpsetcliwatcher function. The callback function is called when tpschedule() is called and the client termination event is detected.

    • Prototype

      typedef void (*CliWatcherCallback)(int clid, int reason, void *args);
    • Parameters

      Parameter Description

      clid

      This is the clid of the terminated client.

      reason

      Specifies the reason why the client terminated.

      In the case of tmaxgw_setcliwatcher(), even if a request is made but CLH does not detect it, a response is provided through this callback function.

      args

      This is the value of the args variable defined by the user in tpsetcliwatcher() or tmaxgw_setcliwatcher(). It is used to pass user-defined data. When using this args, be sure to be careful about memory allocation/deallocation.

    • Example

      #include <stdio.h>
      #include <usrinc/atmi.h>
      #include <usrinc/ucs.h>
      
      void logout_callback(int clid, int reason, void *args) {
              printf("[%s] clid:%#x, args:%p, reason:%d\n", "CALLBACK", clid, args, reason);
      }
      
      LOGIN(TPSVCINFO *msg) {
              int clid, ret;
              time_t curtime = time(NULL);
              clid = tpgetclid();
              ret = tpsetcliwatcher(clid, logout_callback, (void *)curtime, TPNOFLAGS);
      
              printf("[%s] clid:%#x, curtime:%ld, set_watch:%d(%s), data:%s\n",
                      msg->name, clid, curtime, ret, tpstrerror(tperrno), msg->data);
      
              tpreturn(TPSUCCESS, 0, NULL, 0, 0);
      }

    [tpsetcliwatcher()]

    Sets a callback function to be called when the client corresponding to clid terminates. The callback function returns only after the client has completed registering with the connected CLH. The callback function is called when tpschedule() is called and the client termination event is detected.

    • Prototype

      int tpsetcliwatcher(int clid, CliWatcherCallback callback, void *args, int flags);
    • Parameters

      Parameter Description

      clid

      Enter the client ID confirmed with tpgetclid(), etc. If you enter the clid of a server other than the client, a TPEINVAL error will occur.

      callback

      Create a function to be notified when the client terminates and input it as the CliWatcherCallback type above.

      args

      Enter the variable to be received as an argument when the callback function is called when the client terminates. The user can freely define it.

      flags

      Currently not in use.

    • Return value

      Return value Description

      1

      The function call is successful.

      -1

      The function call failed, and an error code is set in tperrno.

    • Example

      #include <stdio.h>
      #include <usrinc/atmi.h>
      #include <usrinc/ucs.h>
      
      void logout_callback(int clid, int reason, void *args) {
          printf("[%s] clid:%#x, args:%p, reason:%d\n", "CALLBACK", clid, args, reason);
      }
      
      LOGIN(TPSVCINFO *msg) {
              int clid, ret;
              time_t curtime = time(NULL);
              clid = tpgetclid();
              ret = tpsetcliwatcher(clid, logout_callback, (void *)curtime, TPNOFLAGS);
      
              printf("[%s] clid:%#x, curtime:%ld, set_watch:%d(%s), data:%s\n",
                     msg->name, clid, curtime, ret, tpstrerror(tperrno), msg->data);
              tpreturn(TPSUCCESS, 0, NULL, 0, 0);
      }

    [tpclrcliwatcher()]

    Cancels termination event detection for the clid registered with tpsetcliwatcher(). After the tpclrcliwatcher() function is called, the callback is no longer called when the client terminates.

    • Prototype

      int tpclrcliwatcher(int clid, void **pargs, int flags);
    • Parameters

      Parameter Description

      clid

      Enter the clid for which you want to cancel termination event detection.

      pargs

      Returns the value of the args variable entered in tpsetcliwatcher().

      flags

      Currently not in use.

    • Return value

      Return value Description

      1

      The function call is successful.

      -1

      The function call failed, and an error code is set in tperrno.

    • Example

      #include <stdio.h>
      #include <usrinc/atmi.h>
      #include <usrinc/ucs.h>
      
      LOGOUT(TPSVCINFO *msg) {
              int clid, ret;
              void *args;
              time_t curtime;
              clid = tpgetclid();
              ret = tpclrcliwatcher(clid, &args, TPNOFLAGS);
      
              printf("[%s] clid:%#x, args:%p, clr_watch:%d(%s), data:%s\n",
                     msg->name, clid, args, ret, tpstrerror(tperrno), msg->data);
      
              tpreturn(TPSUCCESS, 0, NULL, 0, 0);
      }
  • Added the tpgetcliinfo() API

    • Added the tpgetcliinfo() function to obtain information about the client corresponding to the clid among the clients connected to the Tmax system.

    • Related issue: IMS 129894

    [tpgetcliinfo()]

    • Prototype

      #include <tmadmin.h>
      int tpgetcliinfo(int clid, struct tmadm_cliinfo_body *info)
    • Parameters

      Parameter Description

      clid

      This is the clid to be searched.

      info

      This is where the information of the client matching clid is stored.

    • Return value

      Return value Description

      1

      The function call is successful.

      -1

      The function call failed, and an error code is set in tperrno.

      The contents of the returned struct tmadm_cliinfo_body are as follows.

      struct tmadm_cliinfo_body {
          int no;    /* cli index */
          int clid;  /* CLID */
          int clhno;
          int count;
          int idle;
          int reserve_int[3];
          char status[TMAX_NAME_SIZE];
          char addr[TMAX_IPADDR_SIZE];
          char usrname[TMAX_NAME_SIZE];
          int qpcount;
          int emaxcount;
          int reserved1;
          int reserved2;
      };
  • Added the libsvrucsmt.a library

    • The libsvrucsmt.a library was added to enable multi-threaded operation of business logic processed in UCS’s usermain.

    • Related issue: IMS 140461

  • Added the ability to process XA without linking the DB Stub library on servers in the XA server group

    • To address the issue where library loading fails and the xa_switch_t symbol is not found when a server belonging to an XA server group that has set up a DB does not link the xa stub and db client library of that DB, a function to load all user-specified libraries without changing the server program has been added.

    • Server group types MTMAX (MultipleRM function) type, STMAX, and TMAX type all search for the xa_switch_t symbol according to the following operation sequence.

      1. Check if the _tmax_xasw_init() function exists in your own program image.

      2. Extract the list of libraries from the setting with the same name as the DBNAME entry in the SVRGROUP section of the RM configuration file. If the .RM file is missing or does not have the same setting as the DBNAME entry in the SVRGROUP section, the list of internally defined libraries is extracted.

    • How to define the $TMAXDIR/config/RM configuration file

      If there is an entry in the RM file that matches the DBNAME of the Tmax environment settings, the library is dynamically loaded and used.

      Write each line in the following format:

      DBNAME:library[,library]
      Item Description

      DBNAME

      Set to the same name as defined in the DBNAME entry of the SVRGROUP section.

      library

      Specifies the library name to load. If loading more than one library, define multiple libraries using commas (,).

    • RM file example:

      ORACLE:oras
      ORACLE_ALL:clntsh,oras
      ORACLE_FULL:libclntsh.so,liboras.so
      TIBERO:tbs
      TIBERO_ALL:tbxa,tbs
      TIBERO_FULL:libtbxa.so,libtbs.so
    • Related issue: IMS 160532

1.3. Management tools

  • Added the disconnection function

    • Disconnection is possible with hexadecimal clid.

    • How to use

      $$1 tmax1 (tmadm): ds [-h clhno] [-f] { -d clid }
      Item Description

      { -d clid }

      Disconnects the client with the given clid.

    • The values printed in slog were modified to 8-digit hexadecimal.

    • Added clid value to error caused by MAXQCOUNT.

    • Modified to output qpcount and emcount as ci results.

      Item Description

      qpcount

      The number of messages purged from the queue.

      emcount

      This is the number of times the messages in the queue have reached the max value.

    • Related issue: IMS 147989

  • Modified the options to obtain qpcount and emaxcount information through the ci -P command

    • The options were modified to receive qpcount and emaxcount information through the ci -P command.

    • How to use

      $$1 tmax1 (tmadm):  ci [-P]
      Item Description

      [-P]

      Additionally outputs port number information and qpcount and emaxcount information.

    • Related issue: IMS 153093

  • Added a feature to view service execution time in microseconds

    • A feature has been added to output svc execution times in microseconds on tmadmin.

    • A function has been added to display the SVC execution times output from svclog and svcrpt up to 6 decimal places.

    • Related issue: IMS 175917

  • Add rbs -o option

    • Even if multiple server processes are running, a function to suspend→down→cp→boot→resume→reboot all server processes corresponding to old_file has been added.

    • How to use

      $$1 tmax1 (tmadm): rbs [-o] new_file old_file
      Item Description

      [-o]

      After terminating all server processes corresponding to old_file, restart all server processes corresponding to new_file.

      new_file

      Specifies a new file name.

      old_file

      Specifies the file name being used.

    • Related issue: IMS 176487

  • Added st -e [-s | -d | -C | -S] options

    • Prints subscription information managed by CLH by tpsubscribe.

    • Added tmadmin st command usage.

    • How to use

      $$1 tmax1 (tmadm): st
      Usage: stat {-v | -p | -s | -t | -e }
                   -v [svrname]
                   -p [svrname] [-x | -o [ca|ce|aa|ae][-] | -n maxline | -d]
                   -s [svcname] [-x | -o [ca|aa|cq|aq|qa][-] | -p | -l | -n | -X ]
                   -t [tmsname] [-x]
                   -e [event] [-s|-d|-C|-S]

      For more information about extended options [-s | -d | -C | -S], refer to Tmax Administration Guide.

    • Example

      $$1 tmax1 (tmadm): st -e
      -----------------------------------------------------------------
        clh  eventname         subscriptions  postCount  entryPostCount
      -----------------------------------------------------------------
          0  hello1                      100          1             100
          0  hello10                     200          0               0
          0  hello17                     100          2             200
          0  hello2                      300          0               0
          0  hello20                     100          0               0
          0  hello9                      500          0               0
      -----------------------------------------------------------------
      Total event topic = 6
      Total subscriptions = 1300
      -----------------------------------------------------------------
    • Related issue: IMS 187951

1.4. Utility

  • Enhanced the functionality used when creating field key classes for fdlc webt

    • The error message has been strengthened when the field number exceeds 16777215.

      (E) FDLC3009 Field number is too big : 16777216, Field number greater than 16777215 is not supported. [FDLC0014]
      (E) FDLC3005 no output generated due to previous errors [FDLC0003]
    • Modified to output an error for unsupported field types.

      (E) FDLC3004 input error : line(24) invalid or unsupported field type: fml32 [FDLC0130]
      (E) FDLC3005 no output generated due to previous errors [FDLC0003]
    • Modified to output usage when executing fdlc without options.

    • Added the [-k] option to generate a class or interface name with the Java file name specified by the [-h] option. At this time, an error was modified to occur if it is not used together with the [-jc|-ji] and [-h] options.

    • [-i] Prints the name of the text file specified in the option in the header comment.

    • The following additional definitions were added to the tuxinc/fml.h header:

      typedef int FLDOCC32;
    • Related issue: IMS 192391

1.5. TDL

  • Added the ability to manage shared objects in a local directory instead of NFS when setting TDL MODE=SHARE

    • Added the ability to manage shared objects in a local directory when using TDL with MODE=SHARED in a multi-node environment.

    • Below are examples and descriptions of options added to the tdl.cfg configuration.

      MODE=shared
      SMODDIR=${TDLDIR}/mod
      SRUNDIR=/home/tmax2/tmax/run
      LRUNDIR=${TMAXDIR}/localrun
      KEEPEXT=asmo
      COPY=DMA
      GSEQNOTIME=Y
      NODELIST=node2,qpsx2
      MASTERNODENO=qpsx2
      TDLNAME=REGION1
      Item Description

      SMODDIR

      Specifies the mod directory path (default: $TDLDIR/mod)

      SRUNDIR

      Specifies the run directory path. (Default: $TDLDIR/run)

      LRUNDIR

      Specifies the local run directory path. When the tdlcall() command is called, the shared object is loaded from the specified path and the program is called. If the value is not set, the function is not used.

      KEEPEXT

      When running tdlinit, allow files with the extension set in this option to be copied from the SMODDIR directory to the SRUNDIR directory.

      COPY

      Specifies how to copy files. DMA has been added as a possible value for the COPY option. This option copies files using a zero-copy function, similar to sendfile(). Currently, this function is only available on Linux (kernel 2.6.33 or later) and the SUN platform.

      NODELIST

      Selectively specifies nodes for synchronization in a MODE=SHARED environment. If no value is specified, all nodes defined in the Tmax configuration or racfile configuration file are synchronized by default. Up to 100 nodes can be specified, with multiple nodes separated by commas (,).

      MASTERNODENO

      Specifies the node to operate as MASTER in a MODE=SHARED environment. Previously, the node’s sequence number (starting from 0) defined in the Tmax environment was specified, but this has been improved to allow the node name to be entered.

      TDLNAME

      If TDLNAME is specified, TDLNAME is added in front when outputting the log.

    • The following is the default behavior of the TDL utility when using a local directory:

      • When tdlinit is run, the master node registers libraries from SMODDIR to SRUNDIR for all nodes and performs shared memory initialization if the file specified in the 'BACKUP' section of tdl.cfg does not exist. Depending on the KEEPEXT option, files in SRUNDIR are not deleted, and when files and libraries are copied from SMODDIR to SRUNDIR, files with the corresponding extensions are also copied.

      • When performing tdlupdate, the master node adds new versions of the libraries specified by SRUNDIR in SMODDIR or copies files with the extensions specified in KEEPEXT.

      • When performing tdlclean, the master node deletes the corresponding library from the SRUNDIR path and also deletes module information from shared memory if the tdlclean -m, -M option is called.

      • After all the above TDL utility operations are completed, all files in the SRUNDIR directory are synchronized to LRUNDIR.

    • When using tdlshm, a function to output the LRUNDIR path in the output header section for each node has been added.

    • Added the ability to replace environment variables when they are specified in the entry values of all tdl.cfg options.

    • Related issue: IMS 191363

  • Added the tdlclean performance improvement option -f

    • The existing tdlclean operation method was to extract symbols from the libraries in $TDLDIR/run one by one through nm and compare them with the latest libraries/functions in the TDL shared memory, which had the problem of slow execution speed.

    • When using the tdlclean -f option, all library information in run is registered in the heap memory and then compared with the functions of the latest library in the TDL shared memory at once. Cannot be used with the -N, -m, or -M options.

    • How to use

      $ tdlclean -f
    • Related issue: IMS 138434

  • Added a function to retrieve the most recent time instead of TDL’s Global seqno (last tdlupdate time) when calling tdlgetseqno()

    • When using a separate TDL system for each node (region), if tpforward, tpcall, etc. are performed to another region while tdlstart() is called, it may be difficult to match the Global seqno of the caller region’s TDL environment to the Global seqno of the caller region’s TDL environment even if the Global seqno of its own TDL environment is more recent.

      To address this issue, the following options were added to tdl.cfg:

      GSEQNOTIME=[Y|N]
      Item Description

      Y

      When assigning a number, it gets the time at the time of the call. This function compares the time at the time of the tdlgetseqno() call with the time at the time of assigning a number, rather than unconditionally assigning the Global Seqno, and assigns a larger number.

      N

      When coding, get the Global Seqno of TDL. (Default)

    • Related issue: IMS 140634

  • Added the default behavior for TDL utility when using SHARED

    • All nodes use the same TDLDIR environment variable and the same tdl.cfg configuration file in the same location.

    • Copy or delete files in the mod and run directories only on the node designated as MASTER.

    • Each node creates and manages its own TDL shared memory. However, module version information is applied equally across all nodes (same as MODE=MASTER,SLAVE operation).

    • Forces creation and management of backup files for TDL shared memory.

    • Related issue: IMS 144058

  • Added the ability to output information to backup files when executing tdlshm

    • When performing tdlshm, the function to output information for backup files with the -b option and -B option was added.

    • Below is a description of the added options.

      Item Description

      -b

      Prints information about the file defined in the 'BACKUP' entry of tdl.cfg.

      -B backup file path

      Prints information about the specified backup file.

    • Related issue: IMS 199203

  • Added the ability to compare SHM and backup files via tdlshm

    • When performing tdlshm, the function to output information targeting backup files was added with the -a option and -B option.

    • Below is a description of the added options.

      Item Description

      -a

      Compares the information in the file defined in the 'BACKUP' section of tdl.cfg with the information in the shared memory, and outputs any differences.

      -a -B backup file path

      Compares the information in the specified file with the information in shared memory and outputs any differences. (The order of options does not matter.)

    • When comparing, if they are the same, SUCCESS is printed on the last line. If they are not the same, information about the different parts and the number of different parts (number of headers, number of modules, number of indexes) are printed.

      • Success example)

        $ tdlshm -a
                          SharedMemory         BackupFile
        ------------------------------------------------------------------------------
        SHMKEY      : (O) 0x90200              0x90200
        MAXMODULES  : (O) 524288               524288
        CURMODULES  : (O) 31100                31100
        GlobalSEQNO : (O) 5d3189a5             5d3189a5
        VERSION     : (O) 1                    1
        MONITOR     : (O) N                    N
        HASHTYPE    : (O) lookup3              lookup3
        FREE_IND    : (O) 31100                31100
        ------------------------------------------------------------------------------
        ------------------------------------------------------------------------------
        SUCCESS
      • Failure example)

        $ tdlshm -a -B tdl.bak.2
                          SharedMemory         BackupFile
        ------------------------------------------------------------------------------
        SHMKEY      : (O) 0x90200              0x90200
        MAXMODULES  : (X) 524288               262144
        CURMODULES  : (O) 31100                31100
        GlobalSEQNO : (X) 5d3189a5             5d3187b8
        VERSION     : (O) 1                    1
        MONITOR     : (O) N                    N
        HASHTYPE    : (O) lookup3              lookup3
        FREE_IND    : (O) 31100                31100
        ------------------------------------------------------------------------------
        SHM:  Index = 1205, Funcname = mod_B_095, Seqno = 5d318731, Prev = 25988, Next = -40141, flags = 0
        BACK: Index = 1205, Funcname = mod_B_095, Seqno = 5d318731, Prev = 14089, Next = -40141, flags = 0
        ..
        SHM:  Index = 262143, Funcname = , Seqno = 00000000, Prev = 0, Next = 262144, flags = 0
        BACK: Index = 262143, Funcname = , Seqno = 00000000, Prev = 0, Next = -1, flags = 0
        
        ------------------------------------------------------------------------------
        TDLSHM.11421.184140:(E) TDLUTIL0126 Shared Memory and Backup File are different:
        header=2, modules=16, index=21872 [TDL0736]
    • Related issue: IMS 199203

  • Added the TDL backup file consistency verification function

    • Added the BACKUPCRC=(Y)|N option (enable/disable crc check function) to tdl.cfg. The default value of BACKUPCRC is Y, and if not set, the function is turned on.

    • Uses additional space at the end of the backup file to store crc information.

    • When performing tdlinit, tdlupdate, or tdlsync, crc information is written to the backup file.

    • When performing tdlinit -b, tdlshm -b (or -a), the crc check and linked list check functions in the backup file have been enhanced.

    • When performing tdlupdate, CRCs are calculated and stored for each section of the backup file for performance reasons, and then compared (1 CRC is calculated for every 256 functions). Because multiple functions stored in a single library have different hash results, multiple CRC calculations are required each time tdlupdate is performed.

      When activating this option, tdlupdate execution speed may be 50% slower than before due to CRC calculation. The default value for BACKUPCRC is Y, so set it to N if unnecessary. Changing this option after a backup file has been created may break the integrity of the backup file. Therefore, be sure to call tdlsync after the status change to update the CRC information.

    • Related issue: IMS 199203

1.6. TCP gateway

  • Added Ping Trycount

    • Added the CLOPT ="-X PING_RETRY=count" option to allow count ping retries.

    • For example, if you set it as follows, a total of 3 ping timeouts will be allowed, and the connection will be disconnected when the next ping timeout occurs.

      CLOPT="-X PING_RETRY=3"
    • Related issue: IMS 190984

  • Added get_timemsg_info() for IGW only

    • This function is used only in IGW and is used in the interval section of the trace log. (General users cannot use it.)

    • Related issue: IMS 219340

1.7. RPC

  • Added the environment variable TMAX_PRB_RPC_BLOB_NULL=Y

    • When querying BLOB and LongRaw types, if the length is 0 (null), no further data processing is performed and the request is returned as an error.

    • A function was added to ensure that the service is processed normally even in the case of null by specifying the TMAX_PRB_RPC_BLOB_NULL=Y environment variable.

    • Related issue: IMS 173317

1.8. Others

  • Added a function to reflect environment variables when executing cfl when setting environment variables in the *tmax config file

    • Added a feature to replace the part specified as an environment variable with a value when reading a config file. Only the $site format is supported for the environment variable.

    • Applicable files are Tmax configuration file (*.m) and TDL configuration file (tdl.cfg).

    • Usage examples

      <tdl.cfg>

      SMODDIR=${TDLDIR}/mod
      SRUNDIR=${TDLDIR}/mod
      LRUNDIR=${TMAXDIR}/localrun
    • Related issue: IMS 213850

  • Added an API to allow CustomGateway server to detect when client terminates and take subsequent actions

    • Prototype

      typedef enum {
         CWRC_END,      /* client shuts down by calling tpend() */
         CWRC_ABEND,    /* client abnormally shuts down */
         CWRC_INVALID,  /* client not detected due to incorrect clid */
         CWRC_NOWATCH,  /* client not detected due to insufficient memory for clh */
         CWRC_NORMAL    /* not used */
      } cwrc_e;
      
      typedef void (*CliWatcherCallback)(int clid, cwrc_e reason, void *args);
      typedef int (*SendToCLHCallback)(int clhno, header_t *hp, void *args);
      void tmaxgw_set_sendtoclh_cb(SendToCLHCallback callback);
      int tmaxgw_unmatched_msg_process(header_t *hp);
      int tmaxgw_setcliwatcher(int clid, CliWatcherCallback callback, void *args, int flags);
      int tmaxgw_clrcliwatcher(int clid, void **pargs, int flags);
    • Related issue: IMS 151939

2. Changed features

This section describes the major changes to the features.

2.1. Engine

  • Changed so that MAXQCOUNT cannot be set to 0 when ASQCOUNT is set

    • Previously, MAXQCOUNT could only be set to 1 or more as per the manual, but the setting was changed to allow for cases where an error is returned immediately without any queuing (IMS 125009 changed the setting so that MAXQCOUNT cannot be set to less than 1, but the above condition was added).

    • Related issues: IMS 179576, IMS 125009

  • Changed epoll log level

    • The epoll log specified as DEBUG1 level was changed to DEBUG4 level.

    • Related issue: IMS 172747

  • Improved multi-backup priority

    • The backup server startup order was modified to be performed as defined in the backup, but the backup server was not started if the previous node is alive.

    • When TMMOPT is set to "-S sec", when starting TMM, it tries to connect to all nodes even if its own node is not in the original server group in the backup settings, and if the node with a higher backup priority than itself is NRDY even after the time set to -S has passed, it starts the backup server on its own node.

    • The TMMOPT -D option (auto failback) has been modified to terminate all backup servers running on the preceding node when the preceding node comes back to life.

    • The phenomenon of a boot timeover error occurring after errors such as SVR_DOWN_REQUESTED and MAX_SPR_REACHED occurred during server process startup has been fixed.

    • Related issue: IMS 172747

  • Changed the behavior of the TMOPT -S, -D options

    • In the IMS 172747 issue, the TMMOPT -D option was changed to perform a backup automatically if it is not connected to main after the default timeout time of 1 second, in addition to the existing auto failback function.

    • The -S option was added to change the default timeout time (1 second) when the -D option is used. In the IMS 199091 issue, the -S option was modified to work only when the -D option is set.

    • In this release, the -D and -S options have been changed to operate independently. The -D option only operates on the existing auto failback function, and the -S option only operates on the function that starts the backup server if the main server is not running after the specified number of seconds.

      The time given to select is assigned the smaller number between NLIVEINQ and the -S option value, so if the NLIVEINQ value is smaller than the S option argument value, the backup server may not start after the number of seconds specified by the S value. For example, if NLIVEINQ is 2 and the -S option value is 5, the backup will usually start after 6 seconds.

    • Related issue: IMS 201892

  • Improved the phenomenon of TSM killing running processes that have not reached SVCTIME

    • In an environment with two or more CLHs, when server queuing occurs, a phenomenon occurs in which TSM (tmapm) kills running processes that have not reached SVCTIME.

    • By adding shm, the server records the service start time in shm, improving the accuracy of measuring the actual execution time even in multi-clh queuing situations.

    • The above functional improvement prevents TSM from malfunctioning. shm was added with the key value SHMKEY + 5.

    • Related issue: IMS 221987

2.2. Client/Server

  • Added TIBETO_TYPE to the tmax_get_db_usrname function

    • TIBERO_TYPE was added to the tmax_get_db_passwd, tmax_get_db_tnsname, and tmax_get_db_usrname function types.

    • Related issue: IMS 185450

  • Improved so that the tmax_make_unique_spri_in_domain() function can be called from the client side as well

    • The tmax_make_unique_spri_in_domain() API has been changed to be usable by both servers and clients.

    • Related issue: IMS 207027

  • Support for queuing and TPBLOCK flag features of the tpspracall function

    • Improved tpspracall to be queued and flag’s TPBLOCK function to work.

    • Previously, TPENOENT was returned when the CLH connected by the client was correct but spr was NOT_READY, but this was changed to TPENOREADY.

    • Servers with MULTICLH=N do not support the tpspracall() API. If the CLHi connected by the client and the clhi of the requested spr do not match, TPENOENT was previously returned, but this has been changed to return a TPEPROTO error.

    • Related issue: IMS 154095

  • Improved loading {lib}name{.sl} when specifying a library in a simple name format in an RM file on the HP platform

    • When specifying a library in the simple name format in the RM file on the HP platform, {lib}name{.sl} is loaded, but Oracle or Tibero libraries are provided in the .so format, not the .sl format, so there was an issue where the library could not be loaded.

    • On HP platforms, improvements have been made to load {lib}name{.so} when the {lib}name{.sl} file is not found.

    • Related issue: IMS 239931

2.3. Utility

  • Fixed tmadmin to reference libncurses instead of libtermcap

    • Modified tmadmin to reference libncurses instead of libtermcap (ncpu 64bit build for Linux)

    • Related issue: IMS 169868

  • (E) FDLC3009 Field number is too big text improvement

    • The error message has been strengthened when the field number exceeds 16777215.

      (E) FDLC3009 Field number is too big : 16777216, Field number greater than 16777215 is not supported. [FDLC0014]
      (E) FDLC3005 no output generated due to previous errors [FDLC0003]
    • Related issue: IMS 192354

  • Fixed racd and twagent to reference libncurses instead of libtermcap

    • Modified racd and twagent to reference libncurses instead of libtermcap.

    • Related issue: IMS 203185

  • Improved to use tmaxlibver without a compiler

    • Improved to check if there is a symbol starting with ProdVer in nm and output the corresponding information.

    • How to use

      $ tmaxlibver -l libsPfmAgent.so -6
      libsPfmAgent.so for TMAX Version 6.0 Sp #0 Fix #1 r11552 fd 32768 64bit Aix71 patch
    • Related issue: IMS 119149

  • Improved ksvr to be able to boot to MAX in tmboot -s svr -k ksvr

    • When executing tmboot -s -k, if there are additional sprs started by TMM, it has been improved to start additionally up to a limit that does not exceed MAX.

    • When executing tmboot -S, it has been improved to start spr as many times as the min number. (If this is not possible, the max number is guaranteed.)

    • Related issue: IMS 164518

  • Changed the wait time for tmdown, tmboot, cfl, tdl commands performed by racd and added the racd -t option

    • The waiting time for racd to terminate after executing the tmdown and tmboot commands has been changed from 20 seconds to the default 60 seconds, and requests for cfl and tdl have been modified to wait indefinitely until completion.

    • Added the option -t sec to the default wait time for racd’s tmdown and tmboot. (Specifying a negative number means infinite wait time, specifying a value greater than or equal to 1 means only the specified wait time, and specifying 0 is not allowed.)

    • The cfl, tmboot, tmdown, and racdr utilities have been modified to output information related to timeouts or errors that occur while executing commands in racd.

    • Modified to ignore SIGPIPE even if it occurs in cfl.

    • Related issue: IMS 176734

  • Changed tmdown/tmboot -t tms_name option to apply to tms_name of entire svg and added -G option

    • When executing tmboot/tmdown -t tms_name, if tms_name exists in multiple server groups, all tms with the same name will work. In Tmax 5 SP2 Fix3 and earlier versions, only the first svg with tms_name worked.

    • The following commands have been added:

      tmboot/tmdown -G svg_name [-k count | all]

      If you input svg_name after the tmboot/tmdown -G option, one tms of the corresponding svrg will be started/stopped. It can be used together with the -k option, and the -k option works the same as when using -t tms_name [-k].

    • Related issue: IMS 197005

2.4. TDL

  • Fixed so that tdlupdate succeeds even if some nodes die in a multi-node environment when TDL MODE=SHARE is set

    • If the node designated as MASTERNODENO is down (including when racd is not started), the node with the next number in the node section order of the Tmax environment settings has been modified to take over the role of the master node.

    • When RACFILE is specified, the next node number specified in the configuration file will process the request. If even the nodes in the order listed are down, the next node in the sequence will be assigned the master node role.

      For example, if three nodes are specified in the Tmax configuration and MASTERNODENO=0 is set, and the first node is down, the request cannot be forwarded to the racd of the first node, so a tdlupdate request is made to the second node. If tdlupdate is executed on the second node from the beginning, it becomes the master node and operates.

    • Nodes that were down while tdlupdate was running multiple times will be restored to the most recent state by simply running tdlinit, and there is no need to run a separate tdlupdate.

    • Related issue: IMS 166178

  • LOGDIR option in the tdl.cfg file

    • In Tmax 5 SP2, TDL’s logging system was integrated with Tmax, and LOGDIR in tdl.cfg was removed. The TMAX_DEBUG and TMAX_ERRLOG environment variables had to be specified, and logs from all utilities, not just TDL, were recorded, so the LOGDIR function was reused.

    • How to use

      LOGDIR=[ absolute path | relative path ]
    • Writes the logs of the TDL utility to the specified file. If an absolute path is specified, the logs are written to a file in the format tdllog.yyyymmdd in the directory of that path. If a relative path is specified, the logs are written to a file in the same format as above in the specified directory under $TDLDIR.

      • Format

        utility name.node name.pid.HHMMSS(time):(log level) error code message [service code]
      • Example

        TDLUPDATE.node2.6784.153157:(I) TDLUTIL0083 newlib3.5b4452dd updated successfully [TDL0443]
    • Related issue: IMS 166178

  • Increased the number of parameters allowed in the tdlcallva2 function from 10 to 127

    • The number of allowable parameters in the tdlcallva2 function has been increased from 10 to 127.

      int tdlcallva2(char *libname, char *funcname, long urcode, int flags, int rettype, void *retval, int argc, …);
    • After this improvement, the file sizes of libcli*, libsvr*, and libtdlcall* increased by about 2 times.

    • Related issue: IMS 211438

2.5. Domain Gateway

  • Enhanced the live check function for TmaxDomainGateway (not reflected)

    • In issue IMS 197126, when the remote domain gateway was in an unavailable state, the domain gateway would remotely fail an alive check, terminate the channel, and then reconnect the channel. However, before the live check could be performed to determine if the channel was in a normal state, transactions were sent to the channel, causing the transactions to fail.

      A patch was made to prevent scheduling through the channel by changing the channel to REGISTERED state until a response is received through an alive check after the remote channel (inbound, outbound) is connected in tmgw and tmgwnt.

    • Due to the impact of the above patch, an issue was discovered in IMS 256311 where a TPENOREADY error would always occur when making the first call while the remote channel (outbound) was not connected. Because it was deemed difficult to fix this issue with IMS 145674 patch applied, IMS 197126 patch has been rolled back and will not be reflected in the Tmax 5 SP2 Fix4 release.

    • Related issues: IMS 197126, IMS 256311

2.6. Tuxedo Gateway

  • Added port number to error log and improved time output to ulog when tuxgw connection is terminated

    • Improved the output of the time in the slog message printed to ulog when tuxgw connection is terminated.

      (E) GATEWAY2062 remote gateway closed: 192.168.5.142:PORT [TUXGW0307]
    • Related issue: IMS 145674

2.7. RQ

  • Increased RQ processing size from 1 million to 2 million

    • The RQ processing size has been increased from 1 million to 2 million (up to a total of 2,097,152 enqs).

    • When performing enq, the TPESVCFAIL error that occurred when there was no more space for messages was changed to a TPEQFULL error message.

    • When more than 2097152 enq requests are received and deq is not being processed, the TPEQFULL slog outputs the number of occurrences every 3 seconds as shown below. (The number of occurrences is not accumulated and is reset every 3 seconds.)

      RQS.13965.164433:(I) RQS3028 internal RQ QFULL (MAX : 2097152) occurred 17865 times, this log is written about every 3 seconds [RQS0226]
    • Related issue: IMS 221142

2.8. Others

  • Add typedef int FLDOCC32 to tuxinc/fml.h

    • The following additional definitions were added to the tuxinc/fml.h header:

      typedef int FLDOCC32;
    • Related issue: IMS 192376

3. Bug Patch

This section describes the bug fixes.

3.1. Engine

  • Fixed the issue where the backup settings server would start up repeatedly

    • The issue was fixed by separately managing the status indicating that the backup server is already running.

    • Related issue: IMS 136637

  • Fixed a malfunction issue when cfgadd messages were mixed up with other messages

    • When cfgadd is running and various other messages are transmitted between TMM and CLH, the engine blocks and magic number errors occur depending on the timing, so the messages have been modified to be processed clearly.

    • Related issue: IMS 136977

  • Fixed transaction failure when Auto Fail-Back is applied or not applied in Active & Backup situations

    • There was an issue where servers on backup nodes would not automatically shut down, causing the active node to fail-back error code to be output. This has been fixed so that in the abnormal case where a connection is made from the backup node to the active node while it is running, the active node can be shut down.

    • Related issue: IMS 148443

  • Fixed the issue where backups were performed even though main was not dead in a multi-node backup environment

    • Since the default value of backup_startup_timeout is set to 1, there was a phenomenon where backup was performed automatically if there was no connection to another node for 1 second in a multi-node backup environment even if the -D option was not set.

    • The default value of backup_startup_timeout was changed to 0, and the value was changed to 1 only when the -D option is turned on.

    • The -S option, which allows you to adjust the backup_startup_timeout time, has also been modified so that it is only applied when the -D option is given.

    • Related issue: IMS 199091

  • Fixed the issue where services called with tprelay did not perform properly

    • There was a phenomenon where the tprelay service failed with a CLH0709 error when the clid information contained in the ctx information did not match. By adding a crc item to the ctx information, the function was modified to terminate after setting TPEMATCH(23) tperrno when checking the item during tprelay and if it does not match.

    • Related issue: IMS 200708

  • Fixed the issue where svrlogs would be output to the terminal after midnight when cflag was set in CLOPT

    • When setting clfag, logs were no longer written to files after midnight, but instead displayed on the terminal. The logic that caused them to be displayed on the screen after midnight was removed. If the file was deleted, a new file was created if a new client request was received one minute after select was woken up. Additionally, a feature was added to create a new file if select wakes up regularly every five minutes and the file doesn’t already exist.

    • Related issue: IMS 201658

  • Fixed the issue where CLH would terminate abnormally when performing tpspracall on a server process on a node in NRDY state

    • There was an issue where the transmission buffer was double-freed when two error responses were sent from different callers to a node in the NRDY state. The logic was modified to prevent the error response from being sent twice.

    • Related issue: IMS 206023

  • Fixed the issue where tipsvr would not launch in a multi-node environment

    • An error occurred when the dynamic server was started with tip svr running and the tip svr was advertised to other nodes that did not have tip svr running yet. This has been modified to advertise the tip svr when the dynamic server is started.

    • Related issue: IMS 206806

  • Fixed the tpgetactivesvr API Hang phenomenon when shutting down a specific node system in a multi-node Tmax

    • In a multi-node environment, the phenomenon of waiting indefinitely until a response is received from Remote clh when the remote node’s system is abnormally terminated has been fixed.

    • Related issue: IMS 221149

  • Fixed the issue where tpsprcall() was not responding when called with a CONV server

    • The CONV=B option is patched assuming that one server will pass an interactive channel request to another server, and that tpforward will be called when passing an interactive channel between servers.

    • By adding CONV = O (OPEN), we modified it so that when CONV = O in the server library, tpreturn() is performed according to tpsprcall() and tpconnect() requests, it is processed normally.

    • It has been modified so that a TPEPROTO error occurs normally even when tpsprcall() returns in a setting where CONV=Y.

    • Fixed the issue where tpconnect() did not work when CONV=B was set.

    • Related issue: IMS 152775

  • Fixed the issue where TSM would kill a service even though its actual service time had not yet elapsed

    • Fixed the issue where TSM would kill players even though the actual service time had not yet passed.

    • Related issue: IMS 123310

  • Fixed a malfunction caused by a protocol change on the Extern Server after a tmdown request from the Cousin Svrgroup

    • When a request comes in using an older version of the protocol in TMM, it is checked and modified to provide maximum compatibility.

    • Related issue: IMS 128417

  • Fixed abnormal termination issue when using tmm log thread

    • The communication part with the main thread was modified to reprocess when interrupted.

    • Modified to prevent logging by checking for NULL pointers.

    • Related issue: IMS 142910

  • Fixed Core crash when CLH notifies CLH of server startup on another node

    • In the part where the patch version of clh is checked, the part that attempts verification with the already free msgtype has been modified.

    • Related issue: IMS 151131

  • Fixed the issue of only connecting to clh0 when dynamically adding a server with mutlclh=N

    • Fixed the issue where the server would only connect to clh0 when dynamically adding a server with MULTICLH=N settings.

    • The issue where a server with MULTICLH=N was not started additionally by ASQCOUNT after cfgadd was started has been fixed.

    • Related issue: IMS 151341

  • Fixed TMM infinite loop on AIX

    • If the pollset_ctl function call fails, the failure is due to EAGAIN or EINTR, and it has been modified to retry up to 5 times and generate the log below.

      (E) TMM0209 internal error : pollset_ctl failure
    • Related issue: IMS 154357

  • Fixed the issue where TMM CPU would reach 100% when setting the TMMOPT -g option on Linux

    • Fixed the issue where TMM CPU would reach 100% when setting the TMMOPT -g option on Linux.

    • Related issue: IMS 172041

  • Fixed transaction processing error when transaction is rolled back by the system

    • Fixed the issue where a transaction would be processed with a different XID when another service included in the transaction was requested while the transaction was rolled back by the system.

    • Related issue: IMS 175850

  • Fixed the issue where clients would terminate abnormally when attempting to connect while CLH was not fully running

    • Fixed the issue where the client would terminate abnormally when attempting to connect while CLH was not fully started when CLLCONNLB = "LC" was set.

    • Related issue: IMS 181211

  • Fixed the issue of abnormal termination of clh and data corruption when transmitting encrypted data using the Tmax WebT header

    • Fixed an error that occurred during the process of converting old headers to new headers in Tmax when using the encryption function and old header version in clients (including WebT).

    • Related issue: IMS 210748

  • Fixed the phenomenon where tmm _pollset_poll is called multiple times when setting TMMOPT -t 1, causing the CPU to increase

    • Fixed the phenomenon where tmm _pollset_poll was called multiple times and CPU was increased when TMMOPT was set to -t 1.

    • Related issue: IMS 210775

  • Fixed the issue where requests are processed when tpsvrdone() ends due to blocktime elapsed when tpcall() is called inside tpsvrdone()

    • When a server of the TCS type of FD 16384 version is terminated with tmdown, if tpcall() is called inside tpsvrdone(), the corresponding services are not called and are blocked, and when the blocktime of tpcall() passes and tpsvrdone() is terminated, the phenomenon of the corresponding requests being processed has been corrected.

    • Related issue: IMS 210775

  • Fixed tmm core occurrence when tmdown is performed after setting TMMOP -g

    • Fixed the issue where pthread_join() in main-thread would fail due to a problem performing pthread_detach() inside the log thread, causing the shared memory to be detached without waiting for the thread to terminate.

    • Related issue: IMS 211008

  • Fixed call distribution imbalance between CLHs after timeout

    • When rebooting after a timeout, call requests are always processed from clh1, which corrects the call imbalance between clhs.

    • Related issue: IMS 217600

  • Fixed the TPERDOWN error that occurred when forwarding between servers tied as cousins in a Node3 configuration

    • The phenomenon of TPERDOWN error occurring when svr1 forwards to svr2 in a situation where 3 out of 3 nodes are connected to svr1 as a cousin and 2 out of 3 nodes are connected to svr2 as a cousin (svr1 and svr2 on node 1 are down) has been fixed.

    • Fixed the issue where the TPERDOWN error would persist even after reconnecting once it occurred, due to the lack of code to initialize the _rolling_down_fail flag when performing tpstart on the client.

    • Related issue: IMS 235214

  • (E) CLL0110 signal 25 caught, ignored message deleted

    • When Tmax is started with a shell or similar and the terminal size is changed (window size changed) while the shell is not yet finished, the WINCH signal is caught, a log is output, and it is ignored. This only occurs in CLL and TMS and not in other processes, so the message was removed to ensure consistency.

    • Related issue: IMS 222484

  • Fixed the issue where backup servers that had not yet completed shutdown would be registered when tmboot was performed immediately after tmdown -i in a multi-node backup structure

    • When svr registers with TMM, it was modified to compare the PID of TMM and return a registration fail to the server if it is not the current TMM PID.

    • Related issue: IMS 236688

  • Fixed connection issue between TMMs when recovering after node failure in a 3-node multi-node configuration

    • The issue where the TMM of a specific node could not connect or could not connect for a long period of time after SIGSTOP when SIGCONT was sent has been fixed.

      TMM SIGSTOP is an unusual event, so unusual phenomena may occur later. However, Tmax cannot predict and guarantee normal operation in all cases. Caution should be exercised when testing the network or when administrators make operational errors.

    • When restarting node 1 in a multi-node configuration of node0, node1, and node2, the TMM3008 log occurs on node2 for several seconds and the connection between node1 and node2 is not established. This issue has been fixed.

    • Related issue: IMS 240894

  • Fixed TMM abnormal termination issue when COUSIN server built with mksvr starts up

    • Fixed the issue where TMM would terminate abnormally when the COUSIN server built with mksvr was started.

    • Related issue: IMS 232490

  • Fixed the issue where NLIVEINQ sec cycle could not be checked when setting TMMOP -R count

    • When setting TMMOPT -R count, the phenomenon of not starting the backup server after checking count every NLIVEINQ sec has been fixed.

    • Related issue: IMS 256237

  • Fixed the TMM abnormal termination of the backup node when the main node is shut down with tmdown -i when MAXSRP is 1700 or higher and the backup is Linux (specific kernel)

    • The issue where SIGSEGV occurred by accessing the tproc array of an unregistered server process in the logic that checks the server process status has been fixed.

    • This only occurs in kernel 3.10.0-514 and not in the higher kernels like 3.10.0-1062. It also does not occur in the older kernel 2.6.18.

    • Related issue: IMS 236688

3.2. Client/Server

  • Fixed the issue where a TPGOTSIG error was displayed when a timeout occurred after performing a tpcall

    • TXTIME was checked and modified to output a TXETIME error if tx_timeout occurred.

    • Related issue: IMS 192335

  • Fixed the issue where the tpschedule function’s select was waiting even though the acall callback was called

    • The phenomenon of waiting in the select of the tpschedule function even though the acall callback was called has been corrected to wake up immediately without waiting.

    • Related issue: IMS 204663

  • Fixed the issue where the function to suspend the tmax server using tmadmin() did not work

    • When using the tmadmin() function, the function to suspend the Tmax server using the TMADM_SUSPEND(cmd) command and TMADM_VFLAG(opt) did not work properly, so this issue has been fixed.

    • The TMADM_RESUME command also had the same problem and was fixed.

    • Related issue: IMS 230198

  • Fixed abnormal behavior when restarting a server that has been tpadvertised

    • Fixed the issue where the same service would not be advertised if tpadvertised again after the server was restarted after an abnormal termination.

    • The issue where the status would display READY when the tpadvertised server was restarted after an abnormal termination, but the advertised service would not operate normally has been fixed.

    • Related issue: IMS 224522

  • Fixed the issue where the node would wait indefinitely if the connection was terminated while requesting tprecvfromcli()

    • The tprecvfromcli() function has been modified to return a TPECLOSE error to the requester if the client terminates before returning a response after making a tprecvfromcli() request.

    • When calling tprecvfromcli(), if the client is terminated, clh is modified to return a TPECLOSE error.

    • After calling tprecvfromcli(), if the response received from libsvr is incorrect, an error is raised.

    • Added TPNOTIME flags to tprecvfromcli().

    • When calling tprecvfromcli(), if the clid value is a client of another node, the status of the node is checked and if the node is down, a TPESVRDOWN error is returned to the caller.

    • In tpsendto(), tpsendtocli(), and tprecvfromcli(), the API was modified to return a TPEINVAL error when the clid value is negative.

    • Related issue: IMS 193880

  • Fix blocking in tpchkunsol()

    • The tpchkunsol() function calls a callback function for each UNSOL message it receives and returns the number of called callback functions. If a UNSOL message has already been received before calling the tpchkunsol() function, it first retrieves it from the saved buffer at the time the tpchkunsol() function is called and calls the callback function. After that, if there is a message received from clh, it reads data from the socket buffer. This part was implemented to block until a UNSOL type message was received, so this part was modified to exit immediately.

    • Related issue: IMS 120817

  • Fixed Core crash when using TMAX_TRACE in multi-threaded clients

    • Fixed a Core issue that occurred when using TMAX_TRACE in a multi-threaded client.

    • Related issue: IMS 121250

  • Fixed the issue where TPMSGDESC argument was not initialized in tprecvfrom()

    • Fixed the issue where tprecvfrom() did not initialize the TPMSGDESC argument.

    • Related issue: IMS 127021

  • Fixed the issue where Core occurred in tpend of another thread after calling tpreset() when sharing context in the libclithr library

    • When executing tpreset(), it was modified to generate TPEPROTO if multiple threads share the context.

    • Related issue: IMS 138382

  • Fixed the phenomenon of TPEOS occurring when receiving a signal while waiting after calling tpcall(TPNOTIME)

    • If the TPSIGRSTRT flag is set, it will continue to wait for a response, and if it is not set, it will return a TPGOTSIG error. If TPSIGRSTRT is specified as a bitwise or operation in functions that wait for a response, such as tpcall and tpgetrply, it will ignore the signal received and wait again.

    • Added environment variable TMAX_PRB_1002=Y. When set, regardless of whether TPSIGRSTART is enabled or not, the signal is ignored and waits for the specified time (depending on the TPNOTIME flag).

    • Related issue: IMS 149444

  • Fixed an error that caused threads to hang in multi-threaded clients

    • Fixed the issue where values longer than 4 bytes of thread ID were truncated in a multi-thread, multi-context environment.

    • Related issue: IMS 150129

  • Fixed the issue where incorrect spri values were passed when querying tmadmin (TMADM_SPR_STAT..) for servers of type STD_DYN

    • Fixed the issue where incorrect spri values were passed when querying tmadmin(TMADM_SPR_STAT..) for servers of type STD_DYN.

    • Related issue: IMS 154342

  • Fixed the issue where process memory increased when using the tpgetactivesvr API

    • The phenomenon of memory leak occurring because the second parameter of the tpgetactivesvr API was set to contain the content allocated by the user, but the corresponding area was not freed has been fixed.

    • Related issue: IMS 155493

  • Fixed the TPEINVAL error when using tpgetactivesvr

    • While patching the memory leak issue IMS 155493, the check was changed to check whether the value of the pointer variable itself was NULL instead of checking whether the address value of the outbuf pointer variable was NULL. This fixed the problem of the TPEINVAL error occurring differently from the manual.

    • Related issue: IMS 161409

  • Fixed the issue of CLH’s User CPU over-utilization when organizing subscription information when a client calls tpsubscribe() multiple times when the client is terminated

    • When calling tpsubscribe() on a client or server, duplicate registrations can occur for events already registered by the client, resulting in excessive subscription information being registered in the CLH. The subscription registration and unsubscription functions have been improved to address the CLH CPU over-utilization issue. Some CLH functions are implemented in C03, so the CLH executable is linked with C-related libraries.

    • When performing tpsubscribe(), the SD information, which is the return value of the API, is improved to be managed in CLH.

    • When performing tpsubscribe(), the return value SD always increases by 10. This has been modified to increase by 1.

    • tpunsubscribe() has been improved to delete subscriptions corresponding to the SD passed as an argument. Previously, when a client/server made multiple subscribe calls for the same event name, tpunsubscribe would not remove subscription information corresponding to the event name corresponding to the SD, but would remove the first information found.

      While this isn’t a major issue for clients, on the server, incorrect subscriptions could be deleted when a POST request was made, due to incorrect service names or RQ names. This version has been improved to ensure that the correct subscription corresponding to sd is deleted.

    • Related issue: IMS 161409

  • Fixed the issue where the tprecvfromcli() function did not work in environments with MINCLH 2 or higher

    • Fixed the issue where responses sent from clients were not processed when performing tprecvfromcli() with a clid connected to another CLH on the same node.

    • Added UNSOL_TPRECVFROMCLI of tpsendtosvr() and tpgetunsol() to the client library.

    • Related issue: IMS 206035

  • Fixed the issue where the tmax_recv_fd() function would block when recv_fd was performed from a CLH other than the CLH that called the service when there were two or more CLHs.

    • Improved to process messages other than recv_fd reply from CLH normally (acall response for the same CLH, new request for a different CLH).

    • When performing recv_fd from another CLH, for STD type servers, a RFD_SET request was sent to TMM so that the CLH can receive the recv_fd request.

    • Improvements have been made so that when a new request is scheduled to the server from another CLH, the request can be processed normally in the next service processing.

    • Related issue: IMS 207607

  • Fixed the issue where tpsprio() and tpgprio() functions did not work properly

    • Even though the service was run by calling tpsprio, a problem occurred when the priority was not applied and SVC was run in the calling order.

    • The issue where the SVC priority (PRIO) was set through the Tmax environment file but the correct value was not output when tpgprio() was executed in the SVC was fixed.

    • Related issue: IMS 254541

  • Fixed an abnormal termination occurring when calling the libsvrmt.so server

    • Fixed the abnormal termination issue that occurred when calling STD_MT server type.

    • Related issue: IMS 260033

3.3. Management Tools

  • Fixed the issue where node status was incorrectly displayed when executing tmadmin clhsinfo

    • The phenomenon of displaying incorrect status when executing the tmadmin clhsinfo command has been fixed.

    • Related issue: IMS 202380

  • Fixed the phenomenon where min_time, max_time, and avg values of DomainGW’s tmadmin st -p -x are incorrectly displayed

    • Fixed the issue where the time during TIMEOUT was not reflected in the tmadmin st -p -x query when TIMEOUT occurred in TMAXNONTX GW.

    • Fixed the issue where the gateway’s st -p avg was not initialized when executing the restat command.

    • Fixed the issue where avg was displayed incorrectly when the gateway was in transaction mode.

      When requesting in the existing transaction mode, the average was calculated by including the sum of transaction-related requests and service requests as a count. This has been modified to count and calculate the average only for service requests.

    • Related issue: IMS 125216

  • Fixed the issue where all connected clients would be disconnected after running ci after tmadmin

    • In the IMS 147989 issue, the structure of the header file was changed to transmit emaxcount and qpcount information, which caused compatibility issues with previous versions. In addition, qpcount and emaxcount were being aggregated by clid, but the clid restriction range and multi-clh environment were not taken into account. The structure modified in the IMS 147989 issue was fixed to be compatible with previous versions.

    • Related issue: IMS 151341

  • Fixed the issue where ADM0003 error occurs when executing tmadmin st -t -x and there is no TMS server

    • When executing tmadmin st -t -x and there is no TMS server, an ADM0003 error occurs. This has been modified to not output the error.

    • Related issue: IMS 175706

  • Fixed the phenomenon where st -s status becomes BLK when rbs -s/S is used

    • The phenomenon where the status of the service or server remains as BLK after executing rbs s/S has been corrected.

    • Related issue: IMS 206486

3.4. Utility

  • Fixed the phenomenon where NRDY status svc was displayed as RDY when querying with tip

    • Fixed an error where the svc index calculation was incorrect and the svc status was not printed properly when MULTICLH = Y.

    • Related issue: IMS 193819

  • Fixed to prevent errors from occurring when using OPENINFO section encryption without entering anything

  • Fixed the issue where tmadmin started by racd would not terminate due to an infinite loop in the exit() function

    • Fixed the issue in tmadmin where exit() would not be called recursively when a signal was received during the shutdown process.

    • Related issue: IMS 129272

  • Fixed the issue where inputting the cfl password failed in the Notty environment

    • The phenomenon of the error below being output due to the problem of not properly processing input from stdin when executing cfl in a notty environment such as crontab has been fixed.

      (E) CFL0247 wrapped cipher text is too long : 5 > 256 [COM0706]
    • Related issues: IMS 149970, IMS 149156

  • Fixed an abnormal termination issue in tmboot when using a User License

    • Fixed the phenomenon of Core occurring in tmboot when using User License.

    • Related issue: IMS 169168

  • Fixed the issue where the boot block function on the POD server did not work for servers in NRDY state when tmdown -b -g or tmdown -b -A was executed

    • The tmdown -b -S option fixes an issue where tmdown would not request TMM.

    • The tmdowb -b -g, -A option was modified to apply the boot block to all servers in TMM.

    • Related issue: IMS 174881

  • Fixed the CFL3152 error when entering more than 9 characters in cfl after setting partial encryption in OPENINFO section in multi-node

    • Fixed the issue where whitespace was incorrectly parsed when reading encrypted password values remotely in a multi-node environment.

    • Fixed an error that occurred when there were two or more server groups.

    • Modified rcfl to work even when there are multiple ***** in an OPENINFO section.

    • Fixed the issue where rcfl did not work when pressing <Enter> after not entering encryption.

    • Related issues: IMS 180449, IMS 257569

  • Fixed the issue where servers booted after the TIP server boot were delayed by the amount of time specified by tmboot -d

    • Fixed the issue where booting was delayed when starting Tmax with the tmboot -d option while setting up the TIP server.

    • Fixed the issue where booting 10 servers on HP would take a total of 1 second.

    • Related issue: IMS 210889

  • Fixed the issue where make server (client) fails when running mksvr (mkcli) after applying 32-bit binaries in a Linux 64-bit environment

    • Modified CFLAGS to add -m64, -m32 according to -64, -32 options on Linux. Does not apply when using -u option.

    • mkcli and mksvr based on 32bit Linux ignore the -64 option and only support -m32.

    • Related issue: IMS 176821

  • Fixed the issue where the remote node would fail with an option error when using the *tmboot -o [clopt] option

    • Fixed the issue where tmboot -o [clopt] option would fail with an option error on remote nodes.

    • If you use that option, it will be a permanent change, not a temporary option change.

    • When using this option, it has been modified to replace the existing clopt rather than continue to be added to it.

    • Fixed the issue where the string in tmboot -o was not reflected on the backup server when a main failure occurred while configuring the backup environment.

    • Related issue: IMS 253579

3.5. TDL

  • Fixed the issue where the process would terminate without rollback when an error occurred during the update or commit phase in shared or master mode

    • Fixed the issue where the process would terminate without rollback if an error occurred during the update or commit phase in shared or master mode.

    • Related issue: IMS 193767

  • Fixed the phenomenon where core occurs when tdlcall() is called on another node after calling txbegin or tdlstart during tdlupdate in a multi-node environment (MASTER or SHARED)

    • Fixed the phenomenon where Core occurs when a request comes in from another node during tdlupdate and the library is called.

    • The phenomenon of TDL_OPEN_ERROR error occurring when tdlupdate is called when MODE=SHARED and LRUNDIR options are specified has been fixed.

    • Related issue: IMS 194264

  • Fixed the issue where all tpcall processing failed when executing tdlupdate

    • Fixed the issue where TDL_OPEN_ERROR occurred when calling a module that is updated with tdlupdate with tdlcall.

    • Fixed the issue where TDL_ENOLIB occurs when calling other modules with tdlcall that are not updated with tdlupdate.

    • Related issue: IMS 195098

  • Fixed the phenomenon of not performing backup file synchronization when MAXMODULE is changed when executing tdlinit -b

    • After executing the tdlinit –b command, the number of registered libraries decreased when querying tdlshm. After changing MAXMODULE and executing the tdlinit –b command, synchronization of backup files was performed after the rehashing operation.

    • When calling tdlcall() from tpsvrinit(), an internal infinite loop occurred, consuming 100% of the CPU. The issue was fixed by adding defensive logic to prevent the infinite loop when calling tdlcall().

    • Fixed the issue where the link would be broken when the linked list related information was overwritten with the old value during the rehashing process when executing the tdlinit -b command after changing MAXMODULE.

    • Related issue: IMS 199203

  • Fixed the 'no such' error when using tdlclean -M func -m lib

    • Fixed the 'no such' error that occurred when executing the tdlclean -M func -m lib command on the SUN platform.

    • Related issue: IMS 256396

3.6. Domain Gateway

  • Fixed the issue where Core crashed when performing IRT synchronization for remote activation information on Cousin Gateway

    • Fixed the issue where Core would crash when performing IRT synchronization on remote activation information of Cousin Gateway and your remote was not connected.

    • Related issue: IMS 202624

3.7. TCP gateway

  • Fixed the issue where the SVR9999 error message was not printed in slog

    • Fixed the issue where TCPGW would not send slog messages to TMM when a ping check timeout occurred in a situation where there were no service requests, when performing periodic ping checks with the CLOPT -x option.

    • Related issue: IMS 121367

  • Fixed the issue of duplicate UIDs being issued

    • Modified to prevent duplication of uid.

    • If all uids within the specified range are currently in use, it has been modified to return -1 with the message "uid is full" and exit.

    • Related issue: IMS 126677

  • Fix tcpthr gw handler startup delay and clean up tcpgw(thr) version log

    • The phenomenon of it taking 4 to 10 seconds to start when starting the Handler process has been fixed.

    • Fixed the issue where startup was delayed when executing the tmboot -s tcpgwhdr1(handler) command in server mode.

    • Version information was removed when starting tcpgwlsn (Listener process), clihdrshm (Clishm process), and handler.

    • When starting the Handler process, slog and ulog version information were removed.

    • When starting tcpgw, version information is removed from slog and ulog.

    • Related issue: IMS 209033

3.8. Tuxedo Gateway

  • Fixed the issue where fail-over failed when CLOPT="-n" was set

    • Fixed the issue where a timeout occurred instead of failover when calling after the main domain of Tuxedo was shut down after the tuxgw main/backup connection was established when the clopt -n option was set.

      • Modified to immediately attempt to connect to the backup when the connection to the main is lost.

      • If the number of outbound connections is insufficient, it has been modified to attempt to reconnect to the remote gateway at the gw check interval time or nliveinq time interval.

      • We modified it so that if a user sends a request while the connection is not yet properly established, a TPENOREADY error is returned.

    • Fixed the issue where a timeout occurred when calling a service after the Tuxedo backup domain was terminated while only the backup was connected after the main/backup settings were set.

    • Related issue: IMS 105512

  • Fixed the abnormal termination of tuxgwa when the connection with TUXEDO was terminated

    • Fixed a buffer mishandling issue in tuxgw when printing Data dropped, which would cause the following log to print a disconnected state with Tuxedo.

      2088 remote gateway is closed before sending data.
    • Related issue: IMS 155400

  • Fixed the part where tuxgwa aix misinterpreted the domain name length

    • Fixed the issue where tuxgwa aix misinterpreted domain name lengths.

    • Related issues: IMS 156055, IMS 155400

  • Fixed the issue where TUXEDO_ASYNC type st -p avg time was displayed incorrectly

    • When receiving a tuxgw_async response from CLH, svctime information was not calculated, but the variable storing svctime was not initialized, resulting in garbage values being output. This has been fixed. The output value is always 0.

    • Related issue: IMS 202198

  • Fixed the issue where the type was displayed as PRIM even when connected as a backup when executing the gwi tuxgw command

    • When executing the gwi tuxgw command, if connected with BACKUP_RGWADDR, the type is modified to be displayed as 'BACK'.

    • Related issue: IMS 211057

3.9. Java Gateway

  • Fixed an abnormal termination issue when setting the JEUSGW CLOPT -D2 or -D3 option

    • Fixed the issue where abnormal termination occurred when setting the JEUSGW CLOPT -D2 or -D3 option.

    • Related issue: IMS 127689

  • Fixed the TPETIME error when executing tprecv after calling tpconnect() when connecting from webt to jeusgw

    • Fixed the issue where JEUSGW would release rgwi after processing a tpconnect reply received from CLH, and would not respond to tpreturn thereafter.

    • Related issue: IMS 152185

3.10. RQ

  • Fixed the TPEMATCH error when tpdeq is used

    • The phenomenon of abnormal termination when performing tpdeq when the length of the text is 1800 bytes or more has been fixed.

    • Related issue: IMS 121199

3.11. RPC

  • Fix the type of the function that receives char[][] type as an argument when supporting Delphi xe in tmaxrpc idlc

    • In case of supporting Delphi xe in tmaxrpc idlc, the type of the function that receives char[][] type as an argument was modified.

    • Related issue: IMS 131289

  • Fixed the issue where an error should occur when performing SQL insert on the tmaxrpc server, but the error is now processed normally.

    • When using Dynamic SQL, update/delete/insert has been modified to be processed as EXEC SQL EXECUTE.

    • When precompiling tbr.tbc with tbpc, the INSERT_NO_DATA_ERROR=YES setting was added to modify the situation so that an error occurs when the number of reflected rows in sqlca.sqlerrd[2] is 0 when performing an insert.

    • When specifying the environment variable TMAX_PRB_RPC_NODATA_ERROR=Y option, a function to force error processing when the number of rows in sqlca.sqlerrd[2] is 0 in update, delete, and insert situations has been added.

    • The Tibero RPC library has been modified to output the ORACLE part and error code in the userlog log contents.

    • Related issue: IMS 162408

  • Fixed the rpc module in accordance with the IPv6 patches on tpgetpeername

    • tpgetpeername was patched for IPv6, but certain parts of the rpc module were not changed accordingly, which has been corrected.

    • Related issue: IMS 170239

  • Fixed the phenomenon of string type being passed in unicode format when calling tmaxrpccli.dll in Delphi xe

    • Since Delphi 2009, strings are managed as wide strings, and problems arise when converting to PAnsiChar because wide is not converted to dbcs. When generating Delphi source with the idlc -clang delphi command, strings are converted to PAnsiChar(AnsiString()) format.

    • The PAnsiChar(AnsiString()) part of tmaxrpc_put_nstr_pas() was removed and modified to pass the Variant type as is.

    • The PAnsiChar(AnsiString()) part of tmaxrpc_get_char_arr_pas() was removed and modified to pass as WideString(UnicodeString) type.

    • Related issue: IMS 186024

  • Added missing -ltbxa option to _DBLIB in tbrenv.mk

    • Added missing -ltbxa option to _DBLIB in $TMAXDIR/tmaxrc/tbrenv.mk.

    • Related issue: IMS 234606

3.12. Others

  • Fixed a duplication error when compiling two libraries that include tmaxapi.h together

    • Fixed the issue where a duplication error occurred when compiling two libraries that include tmaxapi.h together.

    • Related issue: IMS 131990

  • Fixed the issue where libtmaxgwmt.so would not send messages to slog

    • The phenomenon in which error messages output from libraries of the libtmaxgw series were only recorded in ulog and not in slog has been fixed.

    • Related issue: IMS 152540

  • Fixed the issue where libtmaxgw would terminate abnormally after outputting an error during argument parsing

    • The phenomenon of abnormal termination after error output during argument analysis in libtmaxgw has been fixed.

    • Related issue: IMS 178376