Tmax 5 SP2 Fix#4

본 장에서는 Tmax 5 SP2 Fix#4에 추가 기능과 변경 기능 그리고 버그 패치에 대해 간략히 설명한다. 상세한 설명은 관련 안내서를 참고한다.

1. 추가 기능

본 절에서는 추가된 주요 기능에 대해 설명한다.

1.1. ENGINE

  • suspend -s 시 asqcount 증가하지 않도록 수정

    • suspend -s로 서비스를 막았을 경우 CLH에서 블록된 해당 서비스에 의해 asqcount가 증가하지 않도록 수정하였다.

    • suspend -s로 서비스를 막았을 경우 해당 서버가 종료되어도 블록된 정보를 유지하도록 변경하였다.

    • 관련 이슈 : IMS 138006

  • 라이선스 발급기에서 hostname을 256자까지 처리할 수 있도록 변경

    • 환경설정 파일의 NODE 절 HOSTNAME을 256자까지 지원한다. NODENAME은 16자 제한이 그대로 있기 때문에 16자 이상의 경우 반드시 HOSTNAME을 함께 지정해야 한다.

    • 관련 이슈 : IMS 150028

  • Tmax 환경설정 SERVER 절에 TPRETURN 옵션 추가

    • 서비스 타임아웃이 발생하여 tpsvctimeout() 함수 안에서 tpreturn()하는 경우에 소스 코드에 정의된 인자값을 무시하고 환경설정에 정의된 값을 강제로 설정한다.

    • SERVER 절에 TPRETURN 옵션 설정에 다음의 값을 추가한다.

      항목 설명

      FAIL

      TPFAIL 인자를 강제로 설정한다.

      EXIT

      TPEXIT 인자를 강제로 설정한다.

      DOWN

      TPDOWN 인자를 강제로 설정한다.

      NONE

      소스 코드에 정의된 값을 그대로 사용한다.

    • 관련 이슈 : IMS 171100

  • Tmax 기동 시에 CLL, CLH가 TMM에 register됐을 때 로그 추가

    • Tmax 엔진 중에 CLH와 CLL이 기동 과정에서 TMM과 연결되었을 때 로그를 추가했다.

      TMM3069 CLH (%d) registered, fd = %d, pid = %d [TMM5207]
    • 관련 이슈 : IMS 172080

  • tmboot를 통해 서버 기동 시 tpsvrinit()이 완전히 종료될 때까지 다른 서버 프로세스를 기동시키지 않고 대기하는 기능 추가

    • SERVER 절의 각 서버별로 BOOTWAIT 설정을 추가하였다. 옵션 값을 Y로 설정한 서버가 기동 중에 tpsvrinit()에서 비정상 종료되는 경우 tmboot는 다음 서버 프로세스 기동을 진행한다.

    • 다음은 추가된 인자값에 대한 설명이다.

      인자값 설명

      N

      tmboot를 기동할 때 대기 옵션(-w, -W, -d, -D)을 지정하는 경우 서버 프로세스가 기동을 완료하고 tpsvrinit() 수행 직전에 다음 프로세스의 기동을 수행한다. (기본값)

      Y

      tmboot를 기동할 때 대기 옵션(-w, -W, -d, -D)을 무시하고 해당 서버 프로세스의 tpsvrinit() 수행이 완료된 이후에 다음 서버 프로세스의 기동을 수행한다.

    • 관련 이슈 : IMS 206674

  • CLHOPT -q 옵션 추가

    • 서버의 RESTART 설정이 Y일 경우 NODE 절에 모든 서버 프로세스가 다운되었을 때 호출한 서비스는 큐잉되어 있다가 서버가 정상 기동되었을 때 처리될 수 있는 기능을 추가하였다.

    • q 옵션을 사용하지 않을 경우는 기본적으로 큐잉을 하지 않는다.

    • 사용 예시

      *NODE
      CLHOPT = "-q"
    • 관련 이슈 : IMS 224522

  • tpsvrinit과 tpsvrdone에서 timeout 설정인 TSKILLTIMEOUT 기능 추가

    • SERVER 절에 TSKILLTIMEOUT=1~255(기본값:0) 설정이 추가되었다.

    • 서버 프로세스가 기동 후에 TMM에 register될 때부터 tpsvrinit이 끝날 때까지 걸린 시간이 config에 등록한 TSKILLTIMEOUT 시간을 초과하게 되면 서버 프로세스를 강제로 kill시킨다.

    • tpsvrdone이 시작했을 때부터 서버 프로세스가 TMM에 unregister할 때까지 걸린 시간이 TSKILLTIMEOUT를 초과하게 되면 TMM이 해당 서버 프로세스를 강제로 kill시킨다.

    • 관련 이슈 : IMS 183715

  • 다른 노드로 스케줄링된 요청에 대해서 상대노드 장애 시 에러 응답 받는 기능 추가

    • DOMAIN 절, NODE 절에 CLHRRCHK=Y/(N) 옵션을 추가하였다.

    • 설정값을 Y로 지정하는 경우 CLH에서 tpcall, tpacall, tprecvfromcli 요청에 대해서 다른 노드로 스케줄링될 경우 해당 노드의 장애를 감지하여 에러(TPESVRDOWN)가 발생되도록 추가하였다.

      설정하지 않거나 설정값을 N으로 지정하는 경우 다른 노드로 요청했으나 다른 노드가 down 상태로 CLH 통신이 불가능한 경우 무한대기를 타는 현상이 발생할 수 있다.

    • 관련 이슈 : IMS 193880

  • tpadvertise 요청에 대한 queue 기능 추가

    • 서로 다른 서버 프로세스에서 동시에 tpadvertise()를 호출시 하는 현상이 발생하였다.

    • tpadvertise 요청에 대한 queue 기능을 추가하여 동시에 다수의 tpadvertise 요청을 순차적으로 처리할 수 있도록 하였다.

      queue purge time은 기본값은 5초이며, TMMOPT에 -a sec으로 원하는 시간 지정이 가능하다. -a 옵션을 설정하지 않으면 기본값인 5초가 설정되며 -a sec를 설정하는 경우 sec 이상 큐잉될 경우 purge되고 tpadvertise()에 TPEQPURGE 에러 코드가 설정된다. slog에는 purge 관련 로그는 남지 않는다.

    • 사용 예시

      *NODE
      TMMOPT = "-a 10"
    • 관련 이슈 : IMS 244386

  • Tmax CLOUD 라이선스 기능 추가

    • CLOUD 타입용 라이선스를 발급하는 경우 CPU 수, hostname을 체크하지 않고 라이선스 기간을 기준으로 체크하도록 동작한다.

    • 라이선스를 발급하는 경우 start date, expiration date를 설정하여 이를 기준으로 라이선스를 체크하게 된다. expiration date 한달 이전부터 slog에 알림 로그를 출력하고 만료할 때 경고 로그를 출력한다. 만료일 이후에는 Tmax를 기동하지 않는다.

    • 다음은 tmadmin licinfo 정보 예제이다.

      ###############################################
       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
    • 관련 이슈 : IMS 247239

1.2. 클라이언트/서버

  • tpgetsvglist_bynode(), tpgetnodelist() API 추가

    • 특정 노드에 존재하는 서비스 그룹으로 tpcallsvg() 요청을 할 때 해당 API의 svgno 인자에 넣을 값을 검색하기 편리하게 하기 위해 제공한다.

    • 관련 이슈 : IMS 144454

    [tpgetsvglist_bynode()]

    지정한 서비스를 제공하는 서버 그룹 중에 지정한 노드명에 해당하는 서버 그룹 목록을 가져온다. tpgetsvglist()와 동일하지만, 노드명 인자에 따라 서버 그룹 목록의 내용이 달라진다.

    • 프로토타입

      struct svglist *tpgetsvglist_bynode(char *nodename, char *svc, long flags);
    • 파라미터

      파라미터 설명

      nodename

      svc에 지정한 서비스를 제공하는 노드명을 입력한다.

      NULL을 입력할 경우 tpgetsvglist()와 동일한 동작을 수행한다.

      잘못된 노드명을 입력하는 경우 TPEINVAL 또는 TPENOENT 오류가 발생한다.

      svc

      서비스명을 입력한다.

      flags

      현재는 사용되지 않는다.

    • 반환값

      에러가 발생하면 NULL을 반환하고 tperrno에 상황에 해당하는 값이 설정된다. 그렇지 않으면 서비스 호출에 실패한 서버 그룹 리스트를 struct svglist에 설정하여 반환한다.

      반환값 설명

      NULL이 아닌 값

      함수 호출에 성공한 경우이다. 지정한 노드명에 해당하는 서버 그룹 목록이 리턴된다.

      NULL

      함수 호출에 실패한 경우이다. tperrno에 에러 코드가 설정된다.

    • 예제

      #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()]

    현재 접속된 Tmax 시스템의 노드의 목록을 가져오는 함수이다. 이때 반환된 nodelist 구조체의 주소는 메모리 해제를 수행해서는 안된다.

    • 프로토타입

      struct nodelist *tpgetnodelist()
    • 반환값

      에러가 발생하면 NULL을 반환하고 tperrno에 상황에 해당하는 값이 설정된다. 그렇지 않으면 서비스 호출에 실패한 서버 그룹 리스트를 struct svglist에 설정하여 반환한다.

      반환값 설명

      NULL이 아닌 값

      함수 호출에 성공한 경우이다. 노드들의 리스트가 담긴 구조체 리스트를 리턴한다.

      NULL

      함수 호출에 실패한 경우이다. tperrno에 에러 코드가 설정된다.

    • 예제

      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 추가

    • 클라이언트가 종료되었을 때 UCS 서버에서 이를 감지하고 후속 작업을 할 수 있는 API를 제공한다.

    • 관련 이슈 : IMS 146611

    [CliWatcherCallback()]

    클라이언트 종료를 통지받을 콜백함수이며, 사용자가 함수를 작성한 뒤 tpsetcliwatcher 함수의 callback 인자에 넣어준다. 콜백함수가 호출되는 시점은 tpschedule()이 호출되고 클라이언트의 종료 이벤트가 감지되는 시점에 호출된다.

    • 프로토타입

      typedef void (*CliWatcherCallback)(int clid, int reason, void *args);
    • 파라미터

      파라미터 설명

      clid

      종료된 클라이언트의 clid이다.

      reason

      클라이언트가 종료된 원인을 명시한다.

      tmaxgw_setcliwatcher()의 경우 요청을 했으나 CLH에서 감지 못하는 경우에도 이 콜백함수를 통해 응답을 준다.

      args

      tpsetcliwatcher()나 tmaxgw_setcliwatcher()에서 사용자가 정의한 args 변수의 값이다. 사용자 정의 데이터를 전달하는 용도로 사용된다. 해당 args를 사용할 때는 반드시 메모리 할당/해제에 주의해야 한다.

    • 예제

      #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()]

    clid에 대응하는 클라이언트가 종료될 때 콜백함수가 호출되도록 설정한다. 클라이언트가 접속한 CLH에 등록하는 과정이 끝나야 리턴된다. 콜백함수가 호출되는 시점은 tpschedule()이 호출되고 클라이언트의 종료 이벤트가 감지되는 시점이다.

    • 프로토타입

      int tpsetcliwatcher(int clid, CliWatcherCallback callback, void *args, int flags);
    • 파라미터

      파라미터 설명

      clid

      tpgetclid() 등으로 확인한 클라이언트의 id를 입력한다. 클라이언트가 아닌 서버 등의 clid를 입력하면 TPEINVAL 에러가 발생한다.

      callback

      클라이언트가 종료될 때 통지받을 함수를 위의 CliWatcherCallback 타입으로 생성하여 입력한다.

      args

      클라이언트가 종료될 때 콜백함수가 호출될 때 인자로 받을 변수를 입력한다. 사용자가 자유롭게 정의할 수 있다.

      flags

      현재 사용되지 않는다.

    • 반환값

      반환값 설명

      1

      함수 호출에 성공한 경우이다.

      -1

      함수 호출에 실패한 경우이다. tperrno에 에러 코드가 설정된다.

    • 예제

      #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()]

    tpsetcliwatcher()으로 등록한 clid에 대해서 종료 이벤트 감지를 취소한다. tpclrcliwatcher() 함수가 호출되고 나면 클라이언트가 종료되었을 때 더이상 콜백은 호출되지 않는다.

    • 프로토타입

      int tpclrcliwatcher(int clid, void **pargs, int flags);
    • 파라미터

      파라미터 설명

      clid

      종료 이벤트 감지를 취소할 clid를 입력한다.

      pargs

      tpsetcliwatcher()에서 입력한 args 변수의 값을 되돌려준다.

      flags

      현재 사용되지 않는다.

    • 반환값

      반환값 설명

      1

      함수 호출에 성공한 경우이다.

      -1

      함수 호출에 실패한 경우이다. tperrno에 에러 코드가 설정된다.

    • 예제

      #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);
      }
  • tpgetcliinfo() API 추가

    • Tmax 시스템에 접속된 클라이언트 중 clid에 해당하는 클라이언트의 정보를 얻어 오는 tpgetcliinfo() 함수를 추가하였다.

    • 관련 이슈 : IMS 129894

    [tpgetcliinfo()]

    • 프로토타입

      #include <tmadmin.h>
      int tpgetcliinfo(int clid, struct tmadm_cliinfo_body *info)
    • 파라미터

      파라미터 설명

      clid

      조회할 clid이다.

      info

      clid와 일치하는 클라이언트의 정보가 담기는 곳이다.

    • 반환값

      반환값 설명

      1

      함수 호출에 성공한 경우이다.

      -1

      함수 호출에 실패한 경우이다. tperrno에 에러 코드가 설정된다.

      반환한 struct tmadm_cliinfo_body의 내용은 다음과 같다.

      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;
      };
  • libsvrucsmt.a 라이브러리 추가

    • UCS의 usermain에서 처리하는 비지니스 로직을 멀티 스레드로 동작하도록 libsvrucsmt.a 라이브러리를 추가하였다.

    • 관련 이슈 : IMS 140461

  • XA 서버 그룹의 서버에서 DB Stub library를 링크하지 않아도 XA 처리하는 기능 추가

    • DB를 설정한 XA 서버 그룹에 속하는 서버가 해당 DB의 xa stub 및 db client library를 링크하지 않는 경우에 라이브러리 로딩이 실패하여 xa_switch_t 심볼을 찾지 못하는 문제를 해결하기 위해 서버 프로그램을 변경하지 않고 사용자가 명시한 라이브러리들을 모두 로드하는 기능을 추가하였다.

    • 서버 그룹 타입이 MTMAX(MultipleRM 기능) 타입, STMAX, TMAX 타입 모두 아래의 동작 순서에 따라 xa_switch_t 심볼을 탐색한다.

      1. 자기 자신의 프로그램 이미지에 _tmax_xasw_init() 함수가 존재하는지 확인한다.

      2. RM 설정파일에 SVRGROUP 절의 DBNAME 항목과 동일한 이름의 설정에서 라이브러리 목록을 추출한다.

      3. RM 파일이 없거나 SVRGROUP 절의 DBNAME 항목과 동일한 설정이 없는 경우 내부적으로 정의된 라이브러리 목록을 추출한다.

    • $TMAXDIR/config/RM 설정 파일 정의 방법

      RM 파일에 Tmax 환경설정의 DBNAME과 일치하는 항목이 있으면 해당 라이브러리를 동적으로 로딩하여 사용한다.

      각 라인마다 다음 형식으로 작성한다.

      DBNAME:library[,library]
      항목 설명

      DBNAME

      SVRGROUP 절의 DBNAME 항목에 정의한 이름과 동일한 이름으로 설정한다.

      library

      로드할 라이브러리 이름을 명시한다. 하나 이상의 라이브러리를 로드할 경우 콤마(,)를 통해 여러 개를 정의한다.

    • RM 파일 예제)

      ORACLE:oras
      ORACLE_ALL:clntsh,oras
      ORACLE_FULL:libclntsh.so,liboras.so
      TIBERO:tbs
      TIBERO_ALL:tbxa,tbs
      TIBERO_FULL:libtbxa.so,libtbs.so
    • 관련 이슈 : IMS 160532

1.3. 관리도구

  • discon 기능 추가

    • 16진수 clid로 discon이 가능하다.

    • 사용 방법

      $$1 tmax1 (tmadm): ds [-h clhno] [-f] { -d clid }
      항목 설명

      { -d clid }

      해당 clid를 가진 클라이언트와의 연결을 해제한다.

    • slog에 출력되는 값들 8자리 16진수로 수정하였다.

    • MAXQCOUNT에 의한 에러에 clid 값을 추가하였다.

    • ci 결과로 qpcount, emcount가 출력되도록 수정하였다.

      항목 설명

      qpcount

      queue에서 purge된 메시지들의 개수이다.

      emcount

      queue 안에 있는 메시지들이 max 값에 도달한 횟수이다.

    • 관련 이슈 : IMS 147989

  • ci -P 명령어를 통해 qpcount와 emaxcount 정보를 받아오는 옵션 수정

    • ci -P 명령어를 통해 qpcount와 emaxcount 정보를 받아오도록 옵션을 수정하였다.

    • 사용 방법

      $$1 tmax1 (tmadm):  ci [-P]
      항목 설명

      [-P]

      포트 번호 정보와 qpcount, emaxcount 정보를 추가로 출력한다.

    • 관련 이슈 : IMS 153093

  • service 수행 시간을 microsecond 단위로 볼 수 있도록 기능 추가

    • tmadmin 상에서 microsecond 단위의 svc 수행 시간들을 출력하도록 기능이 추가되었다.

    • svclog, svcrpt에서 출력되는 svc 수행시간들을 소숫점 이하 6자리까지 표현되도록 기능이 추가되었다.

    • 관련 이슈 : IMS 175917

  • rbs -o 옵션 추가

    • 서버 프로세스가 여러 개 기동되어 있더라도 old_file에 해당하는 서버 프로세스들을 모두 suspend→down→cp→boot→resume→reboot 시키는 기능을 추가하였다.

    • 사용 방법

      $$1 tmax1 (tmadm): rbs [-o] new_file old_file
      항목 설명

      [-o]

      old_file에 해당하는 서버 프로세스들을 전부 종료시킨 후 new_flie에 해당하는 서버 프로세스들로 모두 재기동시킨다.

      new_file

      새 파일명을 지정한다.

      old_file

      사용 중인 파일명을 지정한다.

    • 관련 이슈 : IMS 176487

  • st -e [-s | -d | -C | -S] 옵션 추가

    • tpsubscribe에 의해 CLH가 관리하고 있는 subscription 정보를 출력한다.

    • tmadmin st 명령어 usage를 추가하였다.

    • 사용 방법

      $$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]

      확장 옵션 [-s | -d | -C | -S]에 대한 자세한 내용은 Tmax Administration Guide를 참조한다.

    • 예제

      $$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
      -----------------------------------------------------------------
    • 관련 이슈 : IMS 187951

1.4. 유틸리티

  • fdlc webt용 필드키 클래스 생성 시 기능 강화

    • 필드넘버가 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]
    • 지원하지 않는 필드타입에 대해서 에러를 출력하도록 수정하였다.

      (E) FDLC3004 input error : line(24) invalid or unsupported field type: fml32 [FDLC0130]
      (E) FDLC3005 no output generated due to previous errors [FDLC0003]
    • 옵션없이 fdlc를 수행할 경우 usage를 출력하도록 수정하였다.

    • [-k] 옵션을 추가하여 [-h] 옵션으로 지정한 Java 파일 이름으로 클래스 또는 인터페이스 이름을 생성한다. 이때, [-jc|-ji] 및 [-h] 옵션과 함께 사용하지 않으면 에러가 발생하도록 수정하였다.

    • [-i] 옵션에 지정한 텍스트 파일의 이름을 헤더의 주석에 출력한다.

    • tuxinc/fml.h 헤더에 다음과 같은 사항을 추가로 정의하였다.

      typedef int FLDOCC32;
    • 관련 이슈 : IMS 192391

1.5. TDL

  • TDL MODE=SHARE 설정 시 shared object를 NFS가 아닌 local 디렉터리에서 관리하는 기능 추가

    • 멀티 노드 환경에서 TDL을 MODE=SHARED로 사용하는 경우 shared object를 local 디렉터리에서 관리하는 기능을 추가하였다.

    • 다음은 tdl.cfg 환경설정에 추가된 옵션 예제와 설명이다.

      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
      항목 설명

      SMODDIR

      mod 디렉터리 경로를 지정한다. (기본값: $TDLDIR/mod)

      SRUNDIR

      run 디렉터리 경로를 지정한다. (기본값: $TDLDIR/run)

      LRUNDIR

      local run 디렉터리 경로를 지정한다. tdlcall() 명령을 호출하는 경우 해당 경로에서 shared object를 load하여 프로그램을 호출한다. 값을 설정하지 않으면 해당 기능을 사용하지 않는다.

      KEEPEXT

      tdlinit를 수행하는 경우 SMODDIR 디렉터리에서 이 옵션에 설정된 확장자를 가지는 파일을 SRUNDIR 디렉터리로 복사할 수 있도록 허용한다.

      COPY

      파일을 복사하는 방법을 지정한다. COPY 옵션의 지정 가능한 값으로 DMA가 추가되었다. 해당 옵션은 sendfile()과 같은 zero copy 기능을 이용하여 파일을 복사한다. 현재 해당 기능을 사용할 수 있는 환경은 Linux(kernel 2.6.33이상), SUN 플랫폼만 가능하다.

      NODELIST

      MODE=SHARED 환경에서 동기화 대상의 노드를 선택적으로 지정하는 기능이다. 값을 지정하지 않는 경우 기본적으로 Tmax 환경설정이나 racfile 설정파일에 정의된 모든 노드를 동기화 대상으로 한다. 최대 100개의 노드까지 지정 가능하며 다수의 노드를 지정할 때는 콤마(,)로 구분한다.

      MASTERNODENO

      MODE=SHARED 환경에서 MASTER로 동작할 노드를 지정한다. 기존에는 Tmax 환경설정에 정의된 노드의 순서 번호(0번부터 시작)를 지정하였으나, 노드명을 입력받을 수 있도록 개선되었다.

      TDLNAME

      TDLNAME이 지정되어 있으면 로그를 출력할 때 TDLNAME을 앞에 붙여준다.

    • 다음은 local 디렉터리를 사용하는 경우 TDL 유틸리티의 기본 동작 방침이다.

      • tdlinit를 수행할 때 마스터 노드는 tdl.cfg의 'BACKUP' 항목에 지정된 파일이 존재하지 않으면 모든 노드에 대해서 SMODDIR에서 SRUNDIR로 라이브러리를 등록하며 공유 메모리 초기화 작업을 수행한다. KEEPEXT 옵션에 따라 SRUNDIR의 파일들은 삭제되지 않으며, SMODDIR에서 SRUNDIR로 파일 및 라이브러리가 복사될 때 해당 확장자의 파일들도 함께 복사된다.

      • tdlupdate를 수행할 때 마스터 노드는 SMODDIR에서 SRUNDIR로 지정한 라이브러리를 새로운 버전으로 추가하거나 또는 KEEPEXT에 지정된 확장자의 파일들을 복사한다.

      • tdlclean를 수행할 때 마스터 노드는 tdlclean -m, -M 옵션을 호출하는 경우 해당 라이브러리를 SRUNDIR 경로에서 삭제하고 공유 메모리에서도 모듈 정보를 삭제한다.

      • 위의 모든 TDL 유틸리티 동작이 완료되면 SRUNDIR 디렉터리의 모든 파일을 LRUNDIR에 동기화한다.

    • tdlshm를 사용하는 경우 각 노드별로 출력 헤더부분에 LRUNDIR의 경로를 출력하는 기능을 추가하였다.

    • 모든 tdl.cfg 옵션의 항목값에 환경변수가 지정된 경우 치환하는 기능을 추가하였다.

    • 관련 이슈 : IMS 191363

  • tdlclean 성능 향상 옵션 -f 추가

    • 기존의 tdlclean의 동작 방식이 $TDLDIR/run에 있는 라이브러리들을 일일이 nm을 통해 심볼들을 추출하여 TDL 공유 메모리에 있는 최신 라이브러리/함수와 비교를 하는 방식이어서 실행속도가 느린 문제점이 있었다.

    • tdlclean -f 옵션을 사용하는 경우 run에 있는 라이브러리 정보를 힙 메모리에 모두 등록한 후 한번에 TDL 공유 메모리에 있는 최신 라이브러리의 함수들과 비교한다. -N, -m, -M 옵션과 함께 사용할 수 없다.

    • 사용 방법

      $ tdlclean -f
    • 관련 이슈 : IMS 138434

  • tdlgetseqno()를 호출하는 경우 TDL의 Global seqno(마지막 tdlupdate 시간)가 아닌 가장 최신 시간을 채번해주는 기능 추가

    • 각 노드(리전)별로 별도의 TDL 시스템을 사용하는 경우 tdlstart()가 호출된 상태에서 다른 region으로 tpforward, tpcall 등이 수행되면 callee region의 프로세스에서는 자신의 TDL 환경의 Global seqno가 더 최신이더라도 caller region의 TDL 환경의 Global seqno가 적용되면서 서로 정합성을 맞추기 어려워질 수 있다.

      이러한 문제를 해결하기 위해 tdl.cfg에 다음 옵션이 추가되었다.

      GSEQNOTIME=[Y|N]
      항목 버전

      Y

      채번할 때 호출 시점의 시간을 가져온다. 무조건 Global Seqno를 채번하는 것이 아닌 tdlgetseqno() 호출 시점의 시간과 서로 비교하여 더 큰 번호를 채번해주도록 하는 기능이다.

      N

      채번할 때 TDL의 Global Seqno를 가져온다. (기본값)

    • 관련 이슈 : IMS 140634

  • SHARED 사용하는 경우 TDL 유틸리티의 기본 동작 방침 추가

    • 모든 노드는 동일한 TDLDIR 환경변수 및 동일 위치의 tdl.cfg 환경설정 파일을 사용한다.

    • MASTER로 지정된 노드에서만 mod, run 디렉터리의 파일을 복사하거나 삭제한다.

    • 모든 노드에서는 자기만의 TDL 공유 메모리를 생성, 관리한다. 그러나 모듈의 버전 정보는 모든 노드가 동일하게 적용된다. (MODE=MASTER,SLAVE 동작과 동일)

    • TDL 공유 메모리에 대한 백업 파일을 강제로 생성, 관리한다.

    • 관련 이슈 : IMS 144058

  • tdlshm 수행 시 백업 파일을 대상으로 정보를 출력하는 기능 추가

    • tdlshm를 수행하는 경우 -b 옵션, -B 옵션으로 백업 파일을 대상으로 정보를 출력하는 기능을 추가하였다.

    • 다음은 추가된 옵션에 대한 설명이다.

      항목 버전

      -b

      tdl.cfg의 'BACKUP' 항목에 정의된 파일의 정보를 출력한다.

      -B 백업 파일 경로

      지정한 백업 파일의 정보를 출력한다.

    • 관련 이슈 : IMS 199203

  • tdlshm을 통해 SHM과 백업 파일을 비교하는 기능 추가

    • tdlshm를 수행하는 경우 -a 옵션, -B 옵션으로 백업 파일을 대상으로 정보를 출력하는 기능을 추가하였다.

    • 다음은 추가된 옵션에 대한 설명이다.

      항목 버전

      -a

      tdl.cfg의 'BACKUP' 항목에 정의된 파일과 공유 메모리의 정보를 비교하여 다른 부분이 발생하면 출력한다.

      -a -B 백업 파일 경로

      지정한 파일과 공유 메모리의 정보를 비교하여 다른 부분이 발생하면 출력한다. (옵션 지정 순서는 상관없음)

    • 비교할 때 동일하다면 마지막 라인에 SUCCESS를 출력하고, 동일하지 않다면 다른 부분에 대한 정보와 다른 부분에 대한 개수(header 개수, module 개수, index개수)를 출력한다.

      • 성공 예)

        $ 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
      • 실패 예)

        $ 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]
    • 관련 이슈 : IMS 199203

  • TDL 백업 파일의 정합성 검증 기능 추가

    • tdl.cfg에서 BACKUPCRC=(Y)|N 옵션(crc check 기능의 활성화/비활성화 조정) 추가하였다. BACKUPCRC의 기본값은 Y로 설정하지 앟는 경우 해당 기능은 켜진다.

    • 백업 파일의 뒷부분에 crc 정보를 저장하기 위해 추가 공간을 사용한다.

    • tdlinit, tdlupdate, tdlsync를 수행하는 경우 백업 파일에 crc 정보를 기록한다.

    • tdlinit -b, tdlshm -b(또는 -a)를 수행하는 경우 백업 파일에서 crc check, linked list check 기능을 강화하였다.

    • tdlupdate를 수행하는 경우 성능문제를 위해 crc를 백업 파일의 구간별로 계산하여 저장하고 비교한다(256개의 함수마다 1crc 계산 수행). 한 라이브러리에 저장된 다수의 함수들은 저마다 hash 결과가 다르기 때문에 한 번 tdlupdate를 수행할 때 다수의 crc 계산이 필요하다.

      tdlupdate 수행속도가 옵션을 활성화할 때 crc 계산으로 인해 기존 대비 50% 느려질 수 있다. BACKUPCRC의 기본값은 Y이므로 불필요한 경우 N으로 설정한다. 만약 백업 파일이 생성된 상태에서 위 옵션을 변경하는 경우 백업 파일의 정합성이 깨질 수 있으므로, 상태 변경 이후에 반드시 tdlsync를 호출하여 crc 정보를 최신으로 변경해야 한다.

    • 관련 이슈 : IMS 199203

1.6. TCP 게이트웨이

  • Ping Trycount 추가

    • CLOPT ="-X PING_RETRY=count" 옵션을 추가하여 count 만큼 ping retry를 허용한다.

    • 예를 들어 다음과 같이 설정하면, 총 3번 ping timeout을 허용하고, 다음 번 ping timeout이 발생하는 경우 연결이 끊긴다.

      CLOPT="-X PING_RETRY=3"
    • 관련 이슈 : IMS 190984

  • IGW 전용 get_timemsg_info() 추가

    • IGW에서만 사용하는 함수로 trace log의 interval 항목에서 사용된다. (일반 유저는 사용 불가)

    • 관련 이슈 : IMS 219340

1.7. RPC

  • TMAX_PRB_RPC_BLOB_NULL=Y 환경변수 추가

    • BLOB 및 LongRaw 타입을 조회하는 경우 길이가 0(null)이면 더이상 데이터 처리를 진행하지 않고 해당 요청을 에러로 리턴하는 현상이 있었다.

    • TMAX_PRB_RPC_BLOB_NULL=Y 환경변수를 지정하면 null의 경우에도 서비스를 정상 처리되도록 기능을 추가하였다.

    • 관련 이슈 : IMS 173317

1.8. 기타

  • tmax config 파일에 환경변수 설정 시 cfl 수행시 환경변수를 반영하도록 기능 추가

    • config 파일을 읽는 시점에 환경변수로 지정된 부분을 값으로 치환하는 기능을 추가하였다. 환경변수 포맷은 $site 형태만 지원한다.

    • 적용 가능한 파일은 Tmax 설정 파일(*.m), TDL 설정파일 (tdl.cfg)이다.

    • 사용 예시

      <tdl.cfg>

      SMODDIR=${TDLDIR}/mod
      SRUNDIR=${TDLDIR}/mod
      LRUNDIR=${TMAXDIR}/localrun
    • 관련 이슈 : IMS 213850

  • 클라이언트가 종료되었을 때 CustomGateway 서버에서 이를 감지하고 후속 작업을 할 수 있는 API 추가

    • 프로토타입

      typedef enum {
         CWRC_END,      /* client가 tpend()를 호출하고 종료함 */
         CWRC_ABEND,    /* client가 비정상 종료함 */
         CWRC_INVALID,  /* 입력한 clid가 잘못되어 있어서 감지 안함 */
         CWRC_NOWATCH,  /* clh의 메모리 부족으로 인해 clid 감지 안함 */
         CWRC_NORMAL    /* 사용하지 않음 */
      } 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);
    • 관련 이슈 : IMS 151939

2. 변경 기능

본 절에서는 변경된 주요 기능에 대해 설명한다.

2.1. ENGINE

  • ASQCOUNT가 설정되있을 때 MAXQCOUNT를 0으로 설정 못하도록 변경

    • 기존에는 매뉴얼대로 MAXQCOUNT는 1 이상으로만 설정 가능했으나, 큐잉을 하나도 하지 않고 바로 에러를 리턴할 경우를 위해 설정을 변경하였다(IMS 125009에서 MAXQCOUNT 설정 1 미만으로 설정 못하도록 변경하였으나 위와 같은 조건을 추가하였다).

    • 관련 이슈 : IMS 179576, IMS 125009

  • epoll log 로그레벨 변경

    • DEBUG1 레벨로 지정된 epoll log를 DEBUG4 레벨로 변경하였다.

    • 관련 이슈 : IMS 172747

  • 멀티 백업 우선순위 개선

    • 백업 서버 기동순서를 백업에 정의한대로 수행하되 앞선 노드가 살아있으면 백업 서버를 기동하지 않도록 수정하였다.

    • TMMOPT "-S sec"로 설정하는 경우 TMM을 기동할 때 자신의 노드가 백업 설정상의 원본 서버 그룹이 아니더라도 모든 노드와 연결시도를 해보고, -S 설정한 시간이 지나도 자신보다 백업 순서가 우선하는 노드가 NRDY일 경우 자신의 노드에서 백업 서버를 기동한다.

    • TMMOPT -D 옵션(auto failback)에 대해서 앞선 노드가 살아나면 해당 노드에 대해서 자신이 수행하고 있는 백업 서버를 모두 종료하도록 수정하였다.

    • 서버 프로세스 기동 중에 SVR_DOWN_REQUESTED, MAX_SPR_REACHED 등의 에러가 발생하고 나서 boot timeover 에러가 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 172747

  • TMMOPT -S, -D옵션 동작 방식 변경

    • IMS 172747 이슈에서 TMMOPT -D 옵션이 기존의 auto failback 기능에 더해서 기본 timeout 시간인 1초 후에도 main과 연결되지 않으면 자신이 백업을 수행하도록 변경되었다.

    • -S 옵션은 -D 옵션을 사용했을 경우 기본으로 설정되는 timeout 시간 (1초) 을 변경하는 기능으로 추가되었다. IMS 199091 이슈에서 -S 옵션은 -D 옵션이 설정되어 있어야만 동작하도록 수정되었다.

    • 이번 릴리즈에 -D 옵션과 -S 옵션이 서로 독립적으로 동작하도록 변경하였다. -D 옵션은 기존의 auto failback 기능만 동작하고 -S 옵션은 해당 초단위 시간이 흐른 뒤에도 메인 서버가 떠 있지 않으면 백업 서버를 기동하는 기능만 동작하도록 변경하였다.

      select에 주어지는 시간은 NLIVEINQ와 -S 옵션 값 중 더 작은 수가 배정되므로, NLIVEINQ 값이 S 옵션 인자값보다 작을 경우 S 값으로 지정해 준 초만큼 지난 후에 백업 서버가 기동하는 것이 아닐 수 있다. 예를 들어 NLIVEINQ가 2이고, -S 옵션 값이 5라면 보통 6초 뒤에 백업이 시작되게 된다.

    • 관련 이슈 : IMS 201892

  • TSM이 SVCTIME에 도달하지 않은 수행 중인 프로세스를 kill시키는 현상 개선

    • CLH가 2개 이상인 환경에서 서버 큐잉이 발생할 경우 SVCTIME에 도달하지 않은 수행 중인 프로세스를 TSM(tmapm)이 kill시키는 현상이 발생하였다.

    • shm을 추가하여 서버가 서비스 시작시간을 shm에 기록하도록 하여 Multi-clh 큐잉 상황에서도 실제 수행된 시간을 정확히 측정되도록 개선하였다.

    • 위 기능개선으로 TSM이 오동작 하는 현상이 발생하지 않게 된다. SHMKEY + 5 키값으로 shm을 추가하였다.

    • 관련 이슈 : IMS 221987

2.2. 클라이언트/서버

  • tmax_get_db_usrname 함수에 TIBETO_TYPE 추가

    • tmax_get_db_passwd, tmax_get_db_tnsname, tmax_get_db_usrname 함수 타입에 TIBERO_TYPE을 추가하였다.

    • 관련 이슈 : IMS 185450

  • client 측에서도 tmax_make_unique_spri_in_domain() 함수를 호출할 수 있도록 개선

    • tmax_make_unique_spri_in_domain() API를 서버, 클라이언트 모두 사용할 수있도록 변경하였다.

    • 관련 이슈 : IMS 207027

  • tpspracall 함수의 큐잉 및 TPBLOCK flag 기능 지원

    • tpspracall이 큐잉되도록 하고, flag의 TPBLOCK 기능이 동작하도록 개선하였다.

    • 클라이언트가 연결한 CLH가 맞는데 spr이 NOT_READY인 경우 기존에는 TPENOENT를 리턴해 주고 있었으나, 이를 TPENOREADY로 변경하였다.

    • MULTICLH=N인 서버는 tpspracall() api는 지원하지 않으며, 클라이언트가 연결한 CLHi와 요청한 spr의 clhi를 비교하여 맞지 않을 경우 기존에는 TPENOENT를 리턴해주고 있었으나 TPEPROTO 에러를 리턴하도록 변경하였다.

    • 관련 이슈 : IMS 154095

  • HP플랫폼에서 RM 파일에 간단한 이름 형식으로 라이브러리 지정시 {lib}name{.sl}을 로드하는 방식 개선

    • HP 플랫폼에서 RM 파일에 간단한 이름 형식으로 라이브러리를 지정하는 경우 {lib}name{.sl}을 로드하게 되는데 Oracle이나 Tibero 라이브러리는 .sl이 아닌 .so 형식으로 제공하여 라이브러리를 로드하지 못하는 현상이 있었다.

    • HP 플랫폼에서는 {lib}name{.sl} 파일을 못 찾을 경우 {lib}name{.so}를 로딩하도록 개선하였다.

    • 관련 이슈 : IMS 239931

2.3. 유틸리티

  • tmadmin에서 libtermcap 대신 libncurses를 참조하도록 수정

    • tmadmin에서 libtermcap 대신 libncurses를 참조하도록 수정하였다. (Linux용 ncpu 64bit 빌드)

    • 관련 이슈 : IMS 169868

  • (E) FDLC3009 Field number is too big 문구 개선

    • 필드넘버가 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]
    • 관련 이슈 : IMS 192354

  • racd, twagent에서 libtermcap 대신 libncurses를 참조하도록 수정

    • racd와 twagent에서 libtermcap 대신 libncurses를 참조하도록 수정하였다.

    • 관련 이슈 : IMS 203185

  • 컴파일러 없이 tmaxlibver 사용하도록 개선

    • nm으로 ProdVer로 시작하는 심볼이 존재하는지 체크하여 해당 정보를 출력하도록 개선하였다.

    • 사용 방법

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

  • tmboot -s svr -k ksvr에서 ksvr를 MAX까지 기동시킬 수 있도록 개선

    • tmboot -s -k를 수행하는 경우 TMM에 의해 추가 기동된 spr가 존재한다면 MAX를 넘지 않는 선까지 추가 기동하도록 개선하였다.

    • tmboot -S를 수행하는 경우 min 개수만큼 spr 기동시키도록 개선하였다. (불가할 경우 max까지는 보장)

    • 관련 이슈 : IMS 164518

  • racd에서 수행한 tmdown, tmboot, cfl, tdl 명령이 대기시간 변경 및 racd -t 옵션 추가

    • racd에서 tmdown, tmboot의 명령어 실행한 뒤 종료할 때까지 대기하는 시간을 20초에서 기본 60초로 변경하고, cfl, tdl의 요청은 완료할 때까지 무제한 대기하도록 수정하였다.

    • racd의 tmdown, tmboot의 기본 대기 시간에 대해서 옵션 -t sec를 추가하였다. (음수 지정하는 경우 무제한 대기, 1 이상의 값 지정하는 경우 해당 시간만큼만 대기, 0 지정 불가)

    • racd에서 명령 실행 중에 타임아웃이나 에러가 발생하면 cfl, tmboot, tmdown, racdr 유틸리티에서 이와 관련된 내용을 출력하도록 수정하였다.

    • cfl에서 SIGPIPE가 발생하더라도 이를 무시하도록 수정하였다.

    • 관련 이슈 : IMS 176734

  • tmdown/tmboot -t tms_name 옵션이 전체 svg의 tms_name에 대해 적용되도록 변경 및 -G 옵션 추가

    • tmboot/tmdown -t tms_name을 수행하는 경우 tms_name이 여러 서버 그룹에 같은 이름이 존재할 경우, 같은 이름의 tms는 모두 동작하도록 수정하였다. Tmax 5 SP2 Fix3 이하 버전에서는 tms_name을 갖는 첫 svg만 동작하였다.

    • 다음의 명령어가 추가되었다.

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

      tmboot/tmdown -G 옵션 뒤에 svg_name을 입력하면 해당 하는 svrg의 tms가 하나 기동/종료한다. -k 옵션과 같이 사용 가능하며 -k 옵션의 동작은 -t tms_name [-k]를 사용하는 경우와 동일하다.

    • 관련 이슈 : IMS 197005

2.4. TDL

  • TDL MODE=SHARE 설정 시 멀티 노드 환경에서 일부 노드가 죽어도 tdlupdate가 성공하도록 수정

    • MASTERNODENO로 지정한 노드가 내려가 있으면(racd가 기동되지 않을 경우도 포함) Tmax 환경설정의 노드절 순서상 다음 번호의 노드가 마스터 노드의 역할을 대신 하도록 수정하였다.

    • RACFILE을 지정할 경우 해당 설정 파일에 지정된 다음 번호의 노드가 처리한다. 만약 순서에 따른 노드들마저 내려가 있을 경우 연속된 다음 번호의 노드에게 마스터 노드 역할이 위임된다.

      예를 들어 Tmax 환경설정에 3개의 노드가 지정되어 있고, MASTERNODENO=0으로 설정되어 있을 경우에 첫 번째 노드가 죽어 있을 경우 첫 번째 노드의 racd로 요청을 전달할 수 없으므로, 그 다음 두 번째 노드로 tdlupdate를 요청하게 된다. 만약 처음부터 두 번째 노드에서 tdlupdate가 실행되었다면 자신이 마스터 노드가 되어 동작한다.

    • tdlupdate가 여러 번 수행되는 동안 장애로 내려가 있던 노드는 tdlinit만 수행하면 가장 최신 상태로 복구되며, 별도의 tdlupdate를 수행할 필요가 없다.

    • 관련 이슈 : IMS 166178

  • tdl.cfg 파일에 LOGDIR 옵션

    • Tmax 5 SP2에서 TDL의 로깅 시스템이 Tmax와 통합되면서 tdl.cfg의 LOGDIR이 삭제되었다. TMAX_DEBUG, TMAX_ERRLOG 환경변수를 지정해야만 하며, TDL뿐만 아니라 모든 유틸리티의 로그가 기록되는 문제가 있어 LOGDIR 기능을 다시 사용 할 수 있게 변경하였다.

    • 사용 방법

      LOGDIR=[ absolute path | relative path ]
    • TDL 유틸리티의 로그들을 지정한 파일에 기록한다. 절대 경로를 지정하는 경우 해당 경로의 디렉터리에 tdllog.yyyymmdd 형식의 파일로 로깅하고 상대 경로로 지정하는 경우 $TDLDIR 하위의 지정한 디렉터리에 위와 동일한 형식의 파일로 로깅한다.

      • 형식

        유틸리티명.노드명.pid.HHMMSS(시간):(로그레벨) 에러코드 메시지 내용 [서비스코드]
      • TDLUPDATE.node2.6784.153157:(I) TDLUTIL0083 newlib3.5b4452dd updated successfully [TDL0443]
    • 관련 이슈 : IMS 166178

  • tdlcallva2 함수에서 허용 가능한 파라미터의 개수를 기존의 10개에서 127개로 증가

    • tdlcallva2 함수에서 허용 가능한 파라미터의 개수를 기존의 10개에서 127개로 증가시켰다.

      int tdlcallva2(char *libname, char *funcname, long urcode, int flags, int rettype, void *retval, int argc, …);
    • 해당 개선 이후 libcli*, libsvr* libtdlcall*의 파일 크기가 2배 가량 증가하였다.

    • 관련 이슈 : IMS 211438

2.5. 도메인 게이트웨이

  • TmaxDomainGateway에 대한 alive check 기능 강화(미반영)

    • IMS 197126 이슈에서 리모트 도메인 게이트웨이(remote domain gateway)가 불능 상태에 있을 경우 도메인 게이트웨이에서 리모트로 alive check가 실패하여 채널을 종료하고 다시 채널을 재연결했으나, 해당 채널이 정상적인 상태인지 alive check하기 전에 거래들이 해당 채널로 전달되어 거래가 실패하는 현상이 발생하였다.

      tmgw, tmgwnt에서 remote channel(inbound, outbound)이 연결된 이후에 alive check를 통해서 응답을 받기 전까지는 해당 채널을 REGISTERED 상태로 변경해서, 해당 채널로 스케줄링이 되지 않도록 변경하는 패치가 이루어졌다.

    • IMS 256311 이슈에서 위 패치의 영향으로 인해 remote channel(outbound)이 연결이 되지 않은 상태에서 첫 번째 호출할 때 TPENOREADY 에러가 항상 발생하는 오류가 발견되었다. IMS 145674 패치가 반영된 상태에서 해당 오류를 수정하기 어렵다고 판단되어 IMS 197126 패치를 롤백하여 Tmax 5 SP2 Fix4 릴리즈에 미반영한다.

    • 관련 이슈 : IMS 197126, IMS 256311

2.6. Tuxedo 게이트웨이

  • tuxgw 접속 종료 시 에러 로그에 포트 번호 추가 및 ulog에 시간 출력 개선

    • tuxgw 접속 종료 시 ulog에 출력되는 slog 메시지에서 시간이 출력되도록 개선하였다.

      (E) GATEWAY2062 remote gateway closed: 192.168.5.142:PORT [TUXGW0307]
    • 관련 이슈 : IMS 145674

2.7. RQ

  • RQ 처리 사이즈를 100만건에서 200만건으로 증가

    • RQ 처리 사이즈를 100만건에서 200만건으로 증가시켰다. (총 ‭2097152‬개까지 enq 가능)

    • enq를 수행하는 경우 더 이상 메시지가 들어갈 공간이 없으면 발생하던 TPESVCFAIL 에러를 TPEQFULL 에러 메시지로 변경하였다.

    • 2097152‬개 이상의 enq 요청이 들어왔는데 deq가 되지 않고 있는 상황에서 발생하는 TPEQFULL slog는 3초마다 아래와 같이 발생 횟수를 출력한다. (발생 횟수는 누적해서 카운트하고 있지 않고, 3초마다 초기화 수행)

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

2.8. 기타

  • tuxinc/fml.h에 typedef int FLDOCC32 추가

    • tuxinc/fml.h 헤더에 다음과 같은 사항을 추가로 정의하였다.

      typedef int FLDOCC32;
    • 관련 이슈 : IMS 192376

3. 버그 패치

본 절에서는 버그 수정된 내용에 대해 설명한다.

3.1. ENGINE

  • 백업 설정 서버가 중복 기동되는 문제 수정

    • 이미 백업 서버가 기동 중임을 나타내는 상태를 별도로 관리하여 문제를 수정하였다.

    • 관련 이슈 : IMS 136637

  • cfgadd 메시지가 다른 메시지와 순서가 섞일 경우의 오동작 문제 수정

    • cfgadd가 실행되고 있을 때 다른 여러 가지 메시지가 TMM과 CLH 사이에 전송이 되는 경우 타이밍에 따라 엔진에서 블록 현상이 일어나고 magic number error가 발생하는 문제가 있어 메시지가 명확히 구분 처리되도록 수정하였다.

    • 관련 이슈 : IMS 136977

  • Active & Backup 상황에서 Auto Fail-Back 적용 또는 미적용 시 거래 장애 발생 수정

    • active 노드의 fail-back 에러 코드를 출력하도록 간헐적으로 백업 노드의 서버들이 자동으로 종료되지 않는 현상있었다. 백업 노드에서 기동 중인 active 노드로 먼저 연결이 되는 비정상 케이스에서 active 노드가 종료될 수 있도록 수정하였다.

    • 관련 이슈 : IMS 148443

  • 멀티 노드 백업 환경에서 main이 죽지 않았음에도 불구하고 백업이 수행되는 현상 수정

    • backup_startup_timeout의 기본값이 1로 설정되어 있어서 -D 옵션을 설정해 주지 않아도 멀티 노드 백업 환경에서 1초 동안 다른 노드와 연결이 되지 않으면 스스로 백업을 수행하는 현상이 있었다.

    • backup_startup_timeout 기본값을 0으로 수정 후 -D 옵션이 켜져야만 값을 1로 바꾸도록 수정하였다.

    • backup_startup_timeout 시간을 조절할 수 있는 옵션인 -S 옵션 역시 -D 옵션을 줘야만 적용되도록 수정하였다.

    • 관련 이슈 : IMS 199091

  • tprelay로 호출한 서비스 정상 수행 되지 않는 현상 수정

    • ctx 정보에 담긴 clid 정보가 정합성이 맞지 않을 때 CLH0709 에러가 나면서 tprelay 서비스 실패하는 현상이 있었다. ctx 정보에 crc 항목 추가하여 tprelay 할 때 해당 항목을 검사 후 일치하지 않으면 TPEMATCH(23) tperrno 셋팅 후 함수를 종료하도록 수정하였다.

    • 관련 이슈 : IMS 200708

  • CLOPT에서 cflag를 설정하면 자정이 지난 후 svrlog들이 터미널에 출력되는 현상 수정

    • clfag를 설정하면 자정이 넘어가는 순간 로그가 더 이상이 파일에 기록되지 않고 터미널에 출력되는 현상이 있었다. 자정이 넘어가면 화면에 출력하게 하는 로직을 삭제하였다. 만약 파일이 삭제되었다면, select가 깨어난지 1분 후에 새로운 클라이언트 요청이 있을 경우 파일이 새로 생성되도록 수정하였다. 그 외에도 5분에 한번씩 정기적으로 select가 깨어나는데, 이때 파일이 존재하지 않을 경우 새로 만드는 기능을 추가하였다.

    • 관련 이슈 : IMS 201658

  • NRDY 상태의 노드에 있는 서버 프로세스에게 tpspracall 수행 시 CLH가 비정상 종료하는 현상 수정

    • NRDY 상태의 노드에 서로 다른 caller에서 에러 응답을 두 번 주면서 전송 버퍼가 double free되는 현상이 있었다. 에러 응답을 2번 수행하지 않도록 로직을 수정하였다.

    • 관련 이슈 : IMS 206023

  • 멀티 노드 환경에서 tipsvr가 기동되지 않는 현상 수정

    • tip svr가 기동된 채로 다이나믹 서버가 기동되면서 아직 tip svr가 기동되지 않은 다른 노드에게 tip svr를 함께 advertise하면서 오류가 발생했다. 다이나믹 서버가 기동 될 때 tip svr는 제외하고 advertise하도록 수정하였다.

    • 관련 이슈 : IMS 206806

  • 멀티 노드 Tmax에서 특정 노드 시스템 종료 시 tpgetactivesvr API Hang 현상 수정

    • 멀티 노드 환경에서 리모드 노드의 시스템이 비정상 종료되는 경우 Remote clh로부터 응답을 받을 때까지 무한대기하는 현상을 수정하였다.

    • 관련 이슈 : IMS 221149

  • CONV 서버로 tpsprcall() 호출 시 응답받지 못하는 현상 수정

    • CONV=B 옵션은 대화형 채널 요청을 한 서버가 다른 서버로 넘겨줄 때를 가정하고 패치한 것으로 서버간에 대화형 채널을 넘겨줄 때는 tpforward를 반드시 호출할 것을 가정하고 있다.

    • CONV = O (OPEN)을 추가해 서버 라이브러리에서 CONV=O인 경우 tpsprcall(), tpconnect() 요청에 따라 tpreturn()를 수행하는 경우 정상적으로 처리되도록 수정하였다.

    • CONV=Y인 설정에서 tpsprcall()이 리턴되더라도 정상적으로 TPEPROTO 에러가 발생하도록 수정하였다.

    • CONV=B 설정에서 tpconnect()가 안되는 현상을 수정하였다.

    • 관련 이슈 : IMS 152775

  • TSM에서 서비스가 실제 서비스 타임이 지나지 않았는데도 kill을 하는 현상 수정

    • TSM에서 서비스가 실제 서비 스타임이 지나지 않았는데도 kill을 하는 현상을 수정하였다.

    • 관련 이슈 : IMS 123310

  • Cousin Svrgroup의 tmdown 요청 이후에 Extern Server에서 프로토콜 변경으로 인한 오동작 수정

    • TMM에서 구버전 프로토콜로 요청이 들어올 경우 이를 체크해서 최대한 호환성을 제공하도록 수정하였다.

    • 관련 이슈 : IMS 128417

  • tmm log thread 사용 시 비정상종료 현상 수정

    • main-thread와 통신 부분에서 인터럽트 받을 경우 재처리하도록 수정하였다.

    • NULL 포인터 체크하여 로깅을 수행 못하도록 수정하였다.

    • 관련 이슈 : IMS 142910

  • CLH에서 다른 노드의 CLH에게 서버 기동을 알릴 때 Core 발생 현상 수정

    • clh의 패치 버전을 확인하는 부분에서 이미 free한 msgtype으로 검증을 시도하는 부분을 수정하였다.

    • 관련 이슈 : IMS 151131

  • 동적으로 mutlclh=N인 서버 추가 시에 clh0에만 접속하는 현상 수정

    • 동적으로 MULTICLH=N 설정을 가진 서버를 추가하면 서버가 clh0번으로만 접속하는 현상을 수정하였다.

    • MULTICLH=N인 서버를 cfgadd 후 기동한 후 ASQCOUNT에 의해서 추가 기동되지 않는 현상을 수정하였다.

    • 관련 이슈 : IMS 151341

  • AIX에서 TMM이 무한루프를 도는 현상 수정

    • pollset_ctl 함수 호출에 실패하는 경우 실패가 EAGAIN이나 EINTR에 의한 것이 최대 5번까지 재시도하며 아래 로그가 발생하도록 수정하였다.

      (E) TMM0209 internal error : pollset_ctl failure
    • 관련 이슈 : IMS 154357

  • Linux에서 TMMOPT -g 옵션 설정 시 TMM CPU가 100%되는 현상 수정

    • Linux에서 TMMOPT -g 옵션을 설정하는 경우 TMM CPU가 100%되는 현상을 수정하였다.

    • 관련 이슈 : IMS 172041

  • 트랜잭션이 시스템에 의해 rollback된 상태에서 트랜잭션 처리 오류 수정

    • 트랜잭션이 시스템에 의해 rollback된 상태에서 트랜잭션에 포함된 다른 서비스가 요청될 때 다른 XID로 트랜잭션이 처리되는 현상을 수정하였다.

    • 관련 이슈 : IMS 175850

  • CLH가 완전히 기동하지 않은 상태에서 클라이언트가 접속을 시도하는 경우 비정상 종료하는 현상 수정

    • CLLCONNLB = "LC"설정일 때 CLH가 완전히 기동하지 않은 상태에서 클라이언트가 접속을 시도하는 경우 비정상 종료하는 현상을 수정하였다.

    • 관련 이슈 : IMS 181211

  • Tmax WebT 구헤더로 암호화 전송 시 clh 비정상 종료 및 데이터가 깨지는 현상 수정

    • 클라이언트(WebT 포함)에서 encryption 기능과 구헤더 버전을 사용할 경우 Tmax에서 구헤더를 신헤더로 변환하는 과정에서 발생하는 오류를 수정하였다.

    • 관련 이슈 : IMS 210748

  • TMMOPT -t 1 설정 시 tmm _pollset_poll이 다수 호출되어 CPU가 올라가는 현상 수정

    • TMMOPT -t 1로 설정하는 경우 tmm _pollset_poll이 다수 호출되어 CPU가 올라가는 현상을 수정하였다.

    • 관련 이슈 : IMS 210775

  • tpsvrdone() 내부에서 tpcall() 시 blocktime이 지나서 tpsvrdone()이 종료되는 시점에 해당 요청들이 처리 현상 수정

    • FD 16384 버전의 TCS 타입의 서버에서 tmdown으로 종료될 때 tpsvrdone() 내부에서 tpcall()을 호출하면 해당 서비스들이 호출되지 않고 막혀있다가 tpcall()의 blocktime이 지나서 tpsvrdone()이 종료되는 시점에 해당 요청들이 처리되는 현상을 수정하였다.

    • 관련 이슈 : IMS 210775

  • TMMOPT -g 설정후 tmdown시 tmm core 발생 수정

    • log thread 안에서 pthread_detach()를 수행하는 문제로 인해 main-thread에서 pthread_join()이 실패하면서 thread가 종료할 때까지 대기하지 않고 공유 메모리를 detach하여 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 211008

  • 타임아웃 이후 CLH간 Call 분배 불균형 수정

    • 타임아웃 이후 reboot할 때 항상 clh1번에서부터 call 요청 처리되어 clh 간 call 불균형 현상을 수정하였다.

    • 관련 이슈 : IMS 217600

  • 노드3 구성에서 cousin으로 묶인 서버간에 forward 시 TPERDOWN 에러 발생 현상 수정

    • 노드 3개 중 3개는 svr1이 cousin으로 묶여 있고, 2개는 svr2가 cousin으로 묶여 있는 상황(노드1의 svr1과 svr2는 다운)에서 svr1이 svr2로 forward할 때 TPERDOWN 에러가 발생하는 현상을 수정하였다.

    • 클라이언트에서 tpstart를 수행하는 경우 _rolling_down_fail 플래그를 초기화해주는 코드가 없어 한번 TPERDOWN 에러가 발생하면 재접속하여도 계속 발생하는 문제를 수정하였다.

    • 관련 이슈 : IMS 235214

  • (E) CLL0110 signal 25 catched, ignored 메시지 삭제

    • 셸 등으로 Tmax를 기동하여 아직 셸이 끝나지 않은 상황에서 터미널 사이즈를 변경(창 크기 변경)하면 WINCH 시그널을 캐치하고 로그를 출력하고 무시한다. CLL과 TMS에만 발생하고 다른 프로세스에서는 발생하지 않아 일관성을 위해 해당 메시지가 출력되지 않게 삭제하였다.

    • 관련 이슈 : IMS 222484

  • 멀티 노드 백업 구조에서 tmdown -i 직후 tmboot 시 종료가 완료되지 않았던 백업 서버가 register되는 현상 수정

    • svr가 TMM에게 register할 때 TMM의 pid 비교해서 현재 TMM의 pid가 아니면 해당 서버에게 register fail을 리턴하도록 수정하였다.

    • 관련 이슈 : IMS 236688

  • 3노드 멀티 노드 구성에서 노드 장애후 복구시 TMM간 연결 문제 수정

    • 특정 노드의 TMM을 SIGSTOP 이후 SIGCONT 시 연결을 하지 못하거나 장기간 연결이 되지 않는 현상을 수정하였다.

      TMM SIGSTOP은 일반적이지 않은 상황이므로 이후 특이한 현상이 발생할 수 있으나 Tmax에서 모든 케이스에 대해서 예측하고 정상 동작을 보장하기 어렵다. 관리자의 조작 실수나 네트워크를 테스트할 때 유의해야 한다.

    • node0, node1, node2 멀티 노드 구성에서 node 1을 재기동할 때 node2에서 TMM3008 로그 수초간 발생되며 node1 ,node2간 연결이 안되는 현상을 수정하였다.

    • 관련 이슈 : IMS 240894

  • mksvr로 빌드된 COUSIN 서버가 기동 시 TMM 비정상 종료 현상 수정

    • mksvr로 빌드된 COUSIN 서버가 기동할 때 TMM이 비정상 종료되는 현상을 수정하였다.

    • 관련 이슈 : IMS 232490

  • TMMOPT -R count 설정 시 NLIVEINQ sec 주기로 체크하지 못하는 현상 수정

    • TMMOPT -R count로 설정하는 경우 NLIVEINQ sec 주기로 count만큼 체크 후 백업 서버를 기동하지 않는 현상을 수정하였다.

    • 관련 이슈 : IMS 256237

  • MAXSRP가 1700 이상이고 백업이 Linux(특정 커널)일 경우 main 노드가 tmdown -i 로 종료 시 백업 노드의 TMM 비정상 종료 현상 수정

    • 서버 프로세스 상태를 체크하는 로직에서 등록되지 않은 서버 프로세스의 tproc 배열에 접근해서 SIGSEGV가 발생하는 현상을 수정하였다.

    • 커널 3.10.0-514에서만 발생하였고 상위 커널인 3.10.0-1062에서는 발생하지 않는다. 구 커널 2.6.18에서도 발생하지 않는다.

    • 관련 이슈 : IMS 236688

3.2. 클라이언트 / 서버

  • tpcall 수행 후 타임아웃 발생 시 TPGOTSIG 에러가 출력되는 현상 수정

    • TXTIME을 체크하여 만약 tx_timeout이 발생했다면 TXETIME 에러가 출력되도록 수정하였다.

    • 관련 이슈 : IMS 192335

  • acall callback이 호출됐음에도 불구하고 tpschedule 함수의 select에서 대기 중이던 현상 수정

    • acall callback이 호출됐음에도 불구하고 tpschedule 함수의 select에서 대기 중이던 현상을 대기없이 바로 깨어나도록 수정하였다.

    • 관련 이슈 : IMS 204663

  • tmadmin() 사용하여, tmax 서버를 suspend 하는 기능이 동작하지 않는 현상 수정

    • tmadmin() 함수를 사용하는 경우 TMADM_SUSPEND(cmd) 커맨드와 TMADM_VFLAG(opt)를 사용하여 Tmax 서버를 suspend시키는 기능이 정상적으로 동작하지 않는 현상이 있어 수정하였다.

    • TMADM_RESUME 커맨드도 동일한 문제가 있어 수정하였다.

    • 관련 이슈 : IMS 230198

  • tpadvertise한 서버가 재기동 시 이상동작 수정

    • tpadvertise한 서버가 비정상 종료 후 기동된 이후 동일한 서비스를 다시 tpadvertise하면 advertise되지 않는 문제를 수정하였다.

    • tpadvertise한 서버가 비정상 종료 후 기동되었을 때 status에는 READY로 출력되나 advertise를 한 서비스는 정상 수행되지 않는 문제를 수정하였다.

    • 관련 이슈 : IMS 224522

  • tprecvfromcli() 사용 시 요청한 상태에서 해당 노드가 연결이 종료되는 경우 무한대기를 타는 현상 수정

    • 클라이언트로 tprecvfromcli() 요청 후 응답을 주기 전에 해당 클라이언트가 종료될 경우 요청자에게 tprecvfromcli() 함수에서 TPECLOSE 에러를 주도록 수정하였다.

    • tprecvfromcli() 호출할 때 클라이언트가 종료된 상태이면 clh에서 TPECLOSE 에러를 리턴하도록 수정하였다.

    • tprecvfromcli() 호출 후 libsvr에서 응답을 수신하는 경우 seqno가 맞지 않으면 에러를 내도록 수정하였다.

    • tprecvfromcli()에 TPNOTIME flags 추가하였다.

    • tprecvfromcli()를 호출하는 경우 clid 값이 다른 노드의 클라이언트일 경우 해당 노드의 상태를 체크하여 노드가 다운된 상태일 경우 caller에 TPESVRDOWN 에러를 리턴하도록 수정하였다.

    • tpsendto(), tpsendtocli(), tprecvfromcli()에서 clid 값이 음수일 때 API에서 TPEINVAL 에러를 리턴하도록 수정하였다.

    • 관련 이슈 : IMS 193880

  • tpchkunsol()에서 블로킹되는 현상을 수정

    • tpchkunsol() 함수는 UNSOL 메시지들을 받으면 콜백함수를 메시지 별로 각각 호출하고 호출된 콜백함수의 개수를 리턴하는 함수이다. tpchkunsol() 함수를 호출하기 전에 이미 UNSOL 메시지를 받았다면 tpchkunsol() 함수를 호출하는 시점에 우선 저장해둔 버퍼에서 꺼내서 콜백함수를 호출한다. 그 후 clh로부터 받은 메시지가 있다면 소켓 버퍼에서 데이터를 읽는 데, 이 부분에서 UNSOL 타입 메시지를 받을 때까지 블로킹되도록 구현되어 있어서 이 부분을 바로 빠져나오도록 수정하였다.

    • 관련 이슈 : IMS 120817

  • 멀티 스레드 클라이언트에서 TMAX_TRACE 사용 시 Core 발생 현상 수정

    • 멀티 스레드 클라이언트에서 TMAX_TRACE를 사용하는 경우 Core 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 121250

  • tprecvfrom()에서 TPMSGDESC 인자 초기화 안하던 문제 수정

    • tprecvfrom()에서 TPMSGDESC 인자를 초기화하지 않는 문제를 수정하였다.

    • 관련 이슈 : IMS 127021

  • libclithr 라이브러리에서 컨텍스트 공유 시 tpreset() 호출 후 다른 스레드의 tpend에서 Core가 발생하는 현상 수정

    • tpreset()를 실행할 때 여러 스레드가 컨텍스트를 공유한 상황이라면 TPEPROTO를 발생하도록 수정하였다.

    • 관련 이슈 : IMS 138382

  • tpcall(TPNOTIME) 호출후 대기중 signal 수신 시 TPEOS 발생 현상 수정

    • TPSIGRSTRT flag가 설정되어 있으면 계속 응답을 기다리고, 설정이 없으면 TPGOTSIG 에러를 리턴하도록 수정하였다. tpcall, tpgetrply 등의 응답을 대기하는 함수에서 TPSIGRSTRT를 bitwise or 연산으로 지정하면 시그널을 수신하더라도 무시하고 다시 대기한다.

    • 환경변수 TMAX_PRB_1002=Y를 추가하였다. 설정할 때 TPSIGRSTART 여부와 상관없이 시그널을 받아도 무시하고 지정한 시간(TPNOTIME flag에 따라 다름)동안 대기한다.

    • 관련 이슈 : IMS 149444

  • 멀티 스레드 클라이언트에서 스레드가 Hang이 발생하는 오류 수정

    • 멀티 스레스 멀티 컨텍스트 환경에서 스레드 아이디가 4bytes 이상인 경우 그 이상 값이 잘린 채로 찾는 문제를 수정하였다.

    • 관련 이슈 : IMS 150129

  • STD_DYN 타입의 서버에 대한 tmadmin(TMADM_SPR_STAT..) 조회 시 잘못된 spri 값을 전달해 주는 문제 수정

    • STD_DYN 타입의 서버에 대한 tmadmin(TMADM_SPR_STAT..)을 조회하는 경우 잘못된 spri 값을 전달해 주는 문제를 수정하였다.

    • 관련 이슈 : IMS 154342

  • tpgetactivesvr API 사용 시 프로세스 메모리 증가 현상 수정

    • tpgetactivesvr API에서 두 번째 파라미터를 사용자 쪽에서 할당한 내용을 담게 해두었는데 해당 영역을 free하고 있지않아 memory leak이 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 155493

  • tpgetactivesvr 시 TPEINVAL 에러 현상 수정

    • IMS 155493 이슈의 memory leak 관련 패치를 진행하면서 outbuf 포인터 변수의 주소값이 NULL인지 체크하는 것이 아니라 포인터 변수 자체의 값이 NULL인지 체크하도록 변경되어서 매뉴얼의 동작과 다르게 TPEINVAL 에러가 발생하는 문제를 수정하였다.

    • 관련 이슈 : IMS 161409

  • 클라이언트에서 tpsubscribe()를 다수 호출하는 경우 클라이언트가 종료되는 시점에 subscribe 정보를 정리하는 과정에서 CLH의 User CPU 과점유 현상 수정

    • 클라이언트, 서버에서 tpsubscribe()를 호출하는 경우 이미 해당 클라이언트가 등록한 이벤트에 대해서 중복으로 등록할 수 있어서 과도하게 subscribe 정보가 CLH에 등록될 수 있다. subscribe 등록 및 해제 기능을 개선하여 CLH cpu 과점유 현상을 수정하였다. CLH의 일부 기능을 C ++03으로 구현하여 CLH 실행파일은 C ++관련 라이브러리들이 함께 링크된다.

    • tpsubscribe()를 수행하는 경우 API의 return 값인 SD 정보를 CLH에서 관리하도록 개선하였다.

    • tpsubscribe()를 수행하는 경우 return 값인 SD가 항상 10씩 증가하는 현상 1씩 증가하도록 수정하였다.

    • tpunsubscribe()를 호출하는 경우 인자로 넘겨준 SD에 해당하는 subscription을 삭제하도록 개선하였다. 기존에는 하나의 클라이언트/서버가 동일한 이벤트 이름을 중복으로 subscribe을 호출했을 때, tpunsubscribe 호출할 때 SD에 해당하는 이벤트 이름에 대해서 SD에 해당하는 subscribe 정보를 제거하지 않고 가장 먼저 발견되는 정보를 제거하는 문제가 있었다.

      클라이언트의 경우에는 별로 문제가 되지 않으나, 서버의 경우 post되었을 때 호출될 서비스명이나 RQ이름에 대해서 잘못된 subscription이 삭제될 수 있었다. 이번 버전에서 sd에 해당하는 정확한 subscription이 삭제되도록 개선하였다.

    • 관련 이슈 : IMS 161409

  • tprecvfromcli() 함수가 MINCLH 2 이상의 환경에서 동작하지 않는 현상 수정

    • 같은 노드의 다른 CLH에 접속한 clid로 tprecvfromcli()를 수행하는 경우에는 클라이언트에서 보낸 응답을 처리하지 못하는 문제를 수정하였다.

    • 클라이언트 라이브러리에 tpsendtosvr() 및 tpgetunsol()의 UNSOL_TPRECVFROMCLI를 추가하였다.

    • 관련 이슈 : IMS 206035

  • CLH 2개 이상일 경우 서비스를 호출한 CLH가 아닌 다른 CLH로부터 recv_fd를 수행하는 경우 tmax_recv_fd() 함수에서 blocking 되는 현상 수정

    • CLH로부터 recv_fd reply 이외의 메시지(동일 CLH의 경우 acall 응답, 다른 CLH의 경우 신규 요청)를 수신하는 경우 해당 메시지를 정상처리하도록 개선하였다.

    • 다른 CLH로부터 recv_fd를 수행하는 경우 STD 타입의 서버의 경우 해당 CLH가 recv_fd 요청을 받을 수 있도록 TMM에 RFD_SET 요청을 전달하도록 수정하였다.

    • 다른 CLH에서 해당 서버로 신규 요청을 스케줄링한 경우 해당 요청이 다음번 서비스 처리에서 정상 수행될 수 있도록 개선하였다.

    • 관련 이슈 : IMS 207607

  • tpsprio(), tpgprio() 기능이 정상동작하지 않는 현상 수정

    • tpsprio를 호출하여 서비스를 실행했음에도 우선순위가 적용되지 않고 호출 순서대로 SVC가 실행되면 문제가 발생되었다.

    • SVC 우선순위(PRIO)를 Tmax 환경파일을 통해 설정해두었지만 해당 SVC에서 tpgprio()를 실행할 경우 제대로된 값이 출력되지 않는 현상을 수정하였다.

    • 관련 이슈 : IMS 254541

  • libsvrmt.so 서버 호출 시 비정상 종료 현상 수정

    • STD_MT 서버 타입 호출 시 비정상 종료 현상 수정하였다.

    • 관련 이슈 : IMS 260033

3.3. 관리 도구

  • tmadmin clhsinfo 수행 시 노드 상태가 잘못 출력되는 현상 수정

    • tmadmin clhsinfo 명령을 수행하는 경우 올바르지 않은 상태를 표시하는 현상이 있어 수정하였다.

    • 관련 이슈 : IMS 202380

  • DomainGW의 tmadmin st -p -x의 min_time, max_time, avg 값이 잘못 나오는 현상 등 수정

    • TMAXNONTX GW에서 TIMEOUT이 발생하는 경우 TIMEOUT 동안의 시간이 tmadmin st -p -x 조회에서 반영이 안되던 문제를 수정하였다.

    • restat 명령어를 수행하는 경우 게이트웨이의 st -p 의 avg에 초기화되지 않는 현상을 수정하였다.

    • 게이트웨이가 트랜잭션 모드일 때 avg가 잘못 표기되는 현상을 수정하였다.

      기존 트랜잭션 모드로 요청하는 경우 트랜잭션 관련 요청 건과 서비스 요청 건의 합을 count로 포함하여 avg를 계산하였다. 서비스 요청 건에 대해서만 count하고 avg를 산정하도록 수정하였다.

    • 관련 이슈 : IMS 125216

  • tmadmin 후 ci 실행하면 core가 발생하면서 모든 접속된 클라이언트가 끊겨 버리는 현상 수정

    • IMS 147989 이슈에서 emaxcount와 qpcount 정보를 전달하기 위해 헤더 파일의 구조체를 변경하여 이전 버전들과 호환 문제가 발생하였다. 또한, clid 별로 구분하여 qpcount와 emaxcount를 집계하고 있었는데, clid 제한 범위와 Multi-clh 환경 등을 고려하지 않았다. IMS 147989 이슈에서 수정된 구조체를 이전 버전들과 호환되도록 수정하였다.

    • 관련 이슈 : IMS 151341

  • tmadmin st -t -x 수행 시 TMS 서버가 없으면 ADM0003 에러가 발생하는 현상 수정

    • tmadmin st -t -x 수행 시 TMS 서버가 없으면 ADM0003 에러가 발생하는데 에러를 출력하지 않도록 수정하였다.

    • 관련 이슈 : IMS 175706

  • rbs -s/S 시 st -s 상태가 BLK가 되는 현상 수정

    • rbs s/S 실행 이후 해당 서비스 또는 서버의 status가 BLK으로 남아 있는 현상을 수정하였다.

    • 관련 이슈 : IMS 206486

3.4. 유틸리티

  • tip으로 NRDY 상태인 svc를 조회 시 RDY로 나오는 현상 수정

    • svc index 계산이 잘못되어 MULTICLH = Y일 경우 svc의 상태가 제대로 출력되지 않는 오류를 수정하였다.

    • 관련 이슈 : IMS 193819

  • OPENINFO 절 암호화 사용 시 아무것도 입력하지 않아도 에러가 발생하지 않도록 수정

  • racd에 의해 기동된 tmadmin이 exit() 함수에서 무한루프에 빠지면서 종료되지 않는 현상 수정

    • tmadmin에서 종료 진행 중에 signal을 수신할 때 재귀적으로 exit()가 호출되지 않도록 수정하였다.

    • 관련 이슈 : IMS 129272

  • cfl 비밀번호 입력 시 notty 환경에서 입력 실패하는 현상 수정

    • crontab 등 notty 환경에서 cfl을 수행할 때 stdin으로부터의 입력을 제대로 처리하지 못하는 문제로 인해 아래와 같은 에러가 출력되는 현상을 수정하였다.

      (E) CFL0247 wrapped cipher text is too long : 5 > 256 [COM0706]
    • 관련 이슈 : IMS 149970, IMS 149156

  • User License 사용 시 tmboot에서 비정상 종료 발생 현상 수정

    • User License를 사용하는 경우 tmboot에서 Core 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 169168

  • tmdown -b -g 또는 tmdown -b -A 수행시점에 NRDY 상태의 서버에 대해서는 POD 서버에서 boot block 기능이 동작하지 않는 현상 수정

    • tmdown -b -S 옵션은 tmdown에서 TMM으로 요청하지 않는 문제를 수정하였다.

    • tmdowb -b -g, -A 옵션은 TMM에서 모든 서버들에 대해서 boot block을 적용하도록 수정하였다.

    • 관련 이슈 : IMS 174881

  • 멀티 노드에서 OPENINFO절 부분암호화 설정 후 cfl 시 9자리 이상 입력받을 경우 CFL3152 에러 현상 수정

    • 멀티 노드 환경에서 암호화된 password 값을 리모트에서 읽을 때 whitespace를 잘못 파싱하는 문제를 수정하였다.

    • 서버 그룹이 2개 이상일 경우 에러가 나는 현상을 수정하였다.

    • 한 OPENINFO 절에 *****이 여러 개일 때도 rcfl이 동작하도록 수정하였다.

    • 암호화 미입력 후 <Enter> 키를 쳤을 때 rcfl이 동작하는 않는 현상을 수정하였다.

    • 관련 이슈 : IMS 180449, IMS 257569

  • TIP 서버 boot 이후 boot되는 서버들이 tmboot -d 시간만큼 기동 지연되는 현상 등 수정

    • TIP 서버를 설정한 채로 tmboot -d 옵션으로 Tmax를 기동시키면 부팅이 지연되는 현상을 수정하였다.

    • HP에서 10개의 서버를 부트시키는데 총 1초가 걸리는 현상을 수정하였다.

    • 관련 이슈 : IMS 210889

  • Linux 64bit 환경에서 32bit 바이너리 적용 후 mksvr(mkcli) 실행 시 make server(client) fail 발생 현상 수정

    • Linux에서 -64, -32 옵션에 따라 CFLAGS에 -m64, -m32를 붙이도록 수정하였다. -u 옵션을 사용하는 경우 적용하지 않는다.

    • 32bit Linux 기반의 mkcli, mksvr은 -64 옵션을 사용하더라도 이를 무시하고 -m32만 가능하다.

    • 관련 이슈 : IMS 176821

  • tmboot -o [clopt] 옵션 사용 시 리모트 노드에서 옵션 에러로 실패하는 현상 등 수정

    • tmboot -o [clopt] 옵션을 사용하는 경우 리모트 노드에서 옵션 에러로 실패하는 현상을 수정하였다.

    • 해당 옵션을 사용하는 경우 일시적 옵션 변경이 아닌 영구적인 변경으루 수정하였다.

    • 해당 옵션을 사용하는 경우 기존 clopt에 계속 추가되는지 않고 교체하도록 수정하였다.

    • 백업 환경을 구성할 때 메인 장애가 발생하는 경우 백업 서버에 tmboot -o의 string이 반영되지 않는 현상을 수정하였다.

    • 관련 이슈 : IMS 253579

3.5. TDL

  • shared, master 모드에서 update 또는 commit phase수행중 에러 발생시 rollback 없이 종료하는 문제 수정

    • shared, master 모드에서 update 또는 commit phase 수행 중 에러가 발생하는 경우 rollback 없이 종료하는 문제를 수정하였다.

    • 관련 이슈 : IMS 193767

  • 멀티 노드 환경(MASTER 또는 SHARED)에서 tdlupdate 도중에 txbegin, tdlstart 호출 후 다른 노드에서 tdlcall()이 호출되는 경우 core 발생하는 현상 등 수정

    • tdlupdate 중에 다른 노드로부터 요청이 들어와서 라이브러리를 호출하는 케이스에서 Core가 발생하는 현상을 수정하였다.

    • MODE=SHARED, LRUNDIR 옵션을 지정하는 경우 tdlupdate가 호출되는 시점에 TDL_OPEN_ERROR 에러가 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 194264

  • tdlupdate 실행하는 타이밍에 tpcall 처리가 모두 실패하는 현상 수정

    • tdlupdate로 업데이트하는 모듈을 tdlcall로 호출하는 경우 TDL_OPEN_ERROR가 발생하는 현상을 수정하였다.

    • tdlupdate로 업데이트하지 않는 다른 모듈을 tdlcall로 호출하는 경우 TDL_ENOLIB가 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 195098

  • tdlinit -b 수행 시 MAXMODULE 변경된 경우 백업 파일 동기화를 수행하지 않는 현상 등 수정

    • tdlinit –b 명령을 수행한 후 tdlshm를 조회할 때 등록된 라이브러리 개수가 줄어드는 현상이 발생하였다. MAXMODULE 변경 후 tdlinit –b 명령을 수행할 때 rehashing 작업 이후에 백업 파일에 대한 동기화를 수행하도록 수정하였다.

    • tpsvrinit()에서 tdlcall()을 호출하는 경우 내부적으로 무한루프가 발생하면서 CPU 100% 과점하는 현상이 발생하였다. tdlcall()을 호출하는 경우 무한루프에 빠지지 않도록 방어로직 추가하여 문제를 수정하였다.

    • MAXMODULE의 변경 후 tdlinit -b 명령을 수행할 때 rehashing 과정에서 linked list 관련 정보를 예전의 값으로 덮어쓰면서 연결이 깨지는 문제를 수정하였다.

    • 관련 이슈 : IMS 199203

  • tdlclean -M func -m lib 시 no such 에러 현상 수정

    • SUN 플랫폼에서 tdlclean -M func -m lib 명령을 수행할 때 no such 에러가 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 256396

3.6. 도메인 게이트웨이

  • Cousin Gateway의 리모트 활성화 정보에 대해서 IRT 동기화 수행 시 Core가 발생하는 현상 수정

    • Cousin Gateway의 리모트 활성화 정보에 대해서 IRT 동기화를 수행하는 경우 자신의 리모트가 연결되지 않은 상황일 때 Core가 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 202624

3.7. TCP 게이트웨이

  • SVR9999 에러 메시지가 slog에 출력안되는 문제 수정

    • TCPGW에서 CLOPT -x 옵션에 의해 주기적으로 Ping 체크를 하는 데, 서비스 요청이 없는 상황에서 Ping 체크 타임아웃이 발생하는 경우 TMM으로 slog 메시지를 전송하지 않는 문제를 수정하였다.

    • 관련 이슈 : IMS 121367

  • uid가 중복 발급되는 현상 수정

    • uid가 중복되지 못하도록 수정하였다.

    • 지정된 범위 내의 모든 uid가 현재 사용 중이면, "uid is full" 메시지와 함께 -1을 리턴하고 종료하도록 수정하였다.

    • 관련 이슈 : IMS 126677

  • tcpthr gw handler 기동 지연 수정 및 tcpgw(thr) 버전 로그 정비

    • Handler 프로세스를 기동하는 경우 start가 될 때까지 4초~10초 가량 걸리는 현상을 수정하였다.

    • 서버 모드일 때 tmboot -s tcpgwhdr1(핸들러) 명령을 수행하는 경우 기동이 지연되는 현상을 수정하였다.

    • tcpgwlsn(Listener 프로세스), clihdrshm(Clishm 프로세스), handler를 기동할 때 버전 정보를 제거하였다.

    • Handler 프로세스를 기동할 때 slog와 ulog 버전 정보를 제거하였다.

    • tcpgw 기동하는 경우 slog와 ulog에 버전 정보를 제거하였다.

    • 관련 이슈 : IMS 209033

3.8. Tuxedo 게이트웨이

  • CLOPT="-n" 설정 시 fail-over가 실패하는 현상 수정

    • clopt -n 옵션을 설정하는 경우 tuxgw 메인/백업 연결 이후 Tuxedo의 메인 도메인 종료 이후 호출하는 경우 fail-over가 되지 않고 타임아웃이 발생하는 현상을 수정하였다.

      • 메인과 연결이 끊어지면 바로 백업으로 연결을 시도하도록 수정하였다.

      • outbound 연결 개수가 충분하지 않을 경우 gw check interval 시간, 혹은 nliveinq 시간 간격으로 리모트 게이트웨이에 재연결을 시도하도록 수정하였다.

      • 아직 연결이 제대로 되어 있지 않은 상황에서 사용자가 요청을 보내면 TPENOREADY 에러를 리턴해 주도록 수정하였다.

    • 메인/백업설정 이후 백업만 연결된 상태에서 Tuxedo 백업 도메인 종료 이후 서비스를 호출할 때 타임아웃이 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 105512

  • TUXEDO와 연결이 종료되었을 경우 tuxgwa 비정상 종료 현상 수정

    • tuxgw에서 Tuxedo와 연결이 끊긴 상태를 출력하는 다음 로그를 발생시키는 Data dropped를 출력하는 과정에서 버퍼를 잘못 다루던 문제를 수정하였다.

      2088 remote gateway is closed before sending data.
    • 관련 이슈 : IMS 155400

  • tuxgwa aix에서 도메인명 길이 잘못 해석하는 부분 수정

    • tuxgwa aix에서 도메인명 길이를 잘못 해석하는 부분을 수정하였다.

    • 관련 이슈 : IMS 156055, IMS 155400

  • TUXEDO_ASYNC 타입 st -p avg 시간이 잘못 나오는 현상 수정

    • CLH에서 tuxgw_async 응답을 수신할 때 svctime 정보를 계산하지 않도록 처리했으나, svctime을 저장하는 변수 초기화를 안해서 쓰레기 값이 출력되는 현상을 수정하였다. 출력 값은 항상 0으로 출력된다.

    • 관련 이슈 : IMS 202198

  • gwi tuxgw 명령어 실행 시 백업으로 연결이 되어도 타입이 PRIM로 표시되는 현상 수정

    • gwi tuxgw 명령어를 실행할 때 BACKUP_RGWADDR으로 연결이 되어 있다면 타입이 'BACK’으로 표시되도록 수정하였다.

    • 관련 이슈 : IMS 211057

3.9. Java 게이트웨이

  • JEUSGW CLOPT -D2 또는 -D3 옵션 설정 시 비정상 종료되는 현상 수정

    • JEUSGW CLOPT -D2 또는 -D3 옵션을 설정하는 경우 비정상 종료되는 현상을 수정하였다.

    • 관련 이슈 : IMS 127689

  • webt 에서 jeusgw 로 연결하는 경우에 tpconnect() 호출 이후 tprecv 수행 시 TPETIME 에러 현상 수정

    • JEUSGW에서 CLH로부터 받은 tpconnect reply 처리 이후 rgwi를 해제해서 그 이후 tpreturn에 대한 응답을 못하는 현상을 수정하였다.

    • 관련 이슈 : IMS 152185

3.10. RQ

  • tpdeq 시에 TPEMATCH 발생 현상 수정

    • 전문길이가 1800Bytes 이상일 경우 tpdeq 수행할 때 비정상 종료하는 현상을 수정하였다.

    • 관련 이슈 : IMS 121199

3.11. RPC

  • tmaxrpc idlc에서 Delphi xe 지원 시 char[][] 형을 인자로 받는 함수의 타입을 수정

    • tmaxrpc idlc에서 Delphi xe를 지원하는 경우 char[][] 형을 인자로 받는 함수의 타입을 수정하였다.

    • 관련 이슈 : IMS 131289

  • tmaxrpc server에서 SQL insert 수행 시 에러가 발생해야 하는 상황에서 정상 처리되는 현상 수정

    • Dynamic SQL을 사용하는 경우 update/delete/insert는 EXEC SQL EXECUTE로 처리하도록 수정하였다.

    • tbpc로 tbr.tbc 프리컴파일을 수행하는 경우 INSERT_NO_DATA_ERROR=YES 설정을 추가하여 insert를 수행할 때 sqlca.sqlerrd[2]의 반영된 row 개수가 0인 상황에서는 에러가 발생하도록 수정하였다.

    • 환경변수 TMAX_PRB_RPC_NODATA_ERROR=Y 옵션을 지정할 때 update, delete, insert 상황에서 sqlca.sqlerrd[2] row 개수가 0인 경우 강제 에러 처리하는 기능을 추가하였다.

    • Tibero RPC 라이브러리에서 userlog 로그 내용에 ORACLE로 표기되는 부분 및 에러 코드를 출력하도록 수정하였다.

    • 관련 이슈 : IMS 162408

  • tpgetpeername이 IPv6 관련 패치에 따른 rpc 모듈 수정

    • tpgetpeername이 IPv6 관련 패치됐는데 rpc 모듈에서 그에 맞게 변경이 안된 부분을 수정하였다.

    • 관련 이슈 : IMS 170239

  • Delphi xe에서 string 타입을 tmaxrpccli.dll로 호출 시 unicode 형태로 전달되는 현상 등 수정

    • Delphi 2009 이후부터 string은 wide string 형태로 관리되며, PAnsiChar로 전환하는 경우 wide→dbcs로 변환되지 않기 때문에 문제가 발생한다. idlc -clang delphi 명령으로 Delphi 소스를 생성할 때 string은 PAnsiChar(AnsiString()) 형태로 변환하도록 수정하였다.

    • tmaxrpc_put_nstr_pas() 의 PAnsiChar(AnsiString()) 부분을 제거하고 Variant type 그대로 전달하도록 수정하였다.

    • tmaxrpc_get_char_arr_pas()의 PAnsiChar(AnsiString()) 부분을 제거하고 WideString(UnicodeString) type 그대로 전달하도록 수정하였다.

    • 관련 이슈 : IMS 186024

  • tbrenv.mk의 _DBLIB에 누락된 -ltbxa 옵션 추가

    • $TMAXDIR/tmaxrc/tbrenv.mk의 _DBLIB에 누락된 -ltbxa 옵션을 추가하였다.

    • 관련 이슈 : IMS 234606

3.12. 기타

  • tmaxapi.h를 include하는 라이브러리 두 개를 같이 컴파일하면 중복 오류가 나는 현상 수정

    • tmaxapi.h를 include하는 라이브러리 두 개를 같이 컴파일하면 중복 오류가 나는 현상을 수정하였다.

    • 관련 이슈 : IMS 131990

  • libtmaxgwmt.so에서 slog로 메시지를 보내지 않는 현상 수정

    • libtmaxgw 계열의 라이브러리에서 에러 메시지를 출력하는 경우 ulog에만 기록되고 slog에 기록되지 않는 현상을 수정하였다.

    • 관련 이슈 : IMS 152540

  • libtmaxgw에서 argument 분석 중에 에러 출력 이후 비정상 종료하는 현상 수정

    • libtmaxgw에서 argument 분석 중에 에러 출력 이후 비정상 종료하는 현상을 수정하였다.

    • 관련 이슈 : IMS 178376