Tmax 5 SP2 Fix#2

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

1. 추가 기능

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

1.1. ENGINE

  • 다른 노드의 COUSIN 서버의 상태 정보 통지를 CLH가 담당하도록 변경하는 기능 추가

    • COUSIN으로 묶여 있는 멀티 노드 환경에서 리모트 노드에서 로컬 노드로 스케줄링될 때 CLH 비정상 종료나 특정 상황으로 인해 COUSIN 서버의 상태 정보가 NOTREADY가 되어 호출될 때 TPNOREADY 에러가 나는 문제가 발생하였다. 기존에는 다른 노드의 COUSIN 서버의 상태 정보 통지를 TMM이 담당하고 이 통지는 서버와 TMM의 연결이 맺어졌을 때만 이루어진다. 이를 CLH가 담당하도록 변경하는 기능을 추가하였다. 기동 과정에서 CLH 부하가 많이 발생할 수 있으므로 적용할 때 고려해야 한다.

    • CLHOPT = " -c"

      이 기능을 사용하려면 모든 노드에 위 설정해야 한다.

    • 관련 이슈 : IMS 82476

  • NON_PERSISTENT RQ 기능 추가

    • RQ의 기존 구조는 항상 PERSISTENT로 동작한다. enque되는 메시지들을 항상 파일에 기록하여 유실이 없다는 의미이다.

      특정 업무에서는 queue 기능을 원하지만 파일에 기록을 원하지 않는 경우도 있을 수 있다. 그래서 tpenq_ctl 함수를 호출하는 경우 기본 동작은 파일에 기록하지만 flag를 적용할 때 메모리에만 저장하는 기능을 추가 하였다.

    • 환경설정 RQ 절 MAX_MEMQCOUNT 항목에 최대 저장할 수 있는 메시지의 갯수를 설정할 수 있다.

    • TMQCTL의 flags에 TPRQS_NON_PERSISTENT로 설정할 경우 메시지를 파일에 기록하지 않고 메모리에만 기록한다.

    • 관련 이슈 : IMS 85811

  • SEED 기반 암복호 기능 추가

    • 환경변수 설정

      Tmax의 환경설정에서 암호화된 부분을 처리하는 모든 모듈들이 공통된 설정을 적용받도록 하기위해 환경변수 설정이 필요하다.

      tmboot 수행 전에 다음과 같이 환경변수들을 export한다.

      환경변수 내용

      TMAX_TENC_CIPHER

      Tmax 환경설정 파일에서 사용가능한 SEED 기반 암복호화 유틸리티 관련 설정이으로 암호화 방식을 지정한다.

      SEED 이외의 값을 설정하거나 설정하지 않으면 기존 암호화 방식으로 처리된다.

      TMAX_TENC_KEYFILE

      비밀키 파일의 위치를 지정한다. 암호화 방식이 SEED 일 경우에는 반드시 필요하다.

    • tencrypt : SEED 기반 암복호화 기능 추가

      SEED 사용을 위한 비밀키를 생성하는 -g 옵션을 추가하였고 -e 옵션은 기존 사용법과 동일하다.

      항목 설명

      -e 문장 [-d]

      암호화할 문장을 입력한다.

      tencrypt -e ORACLE_XA+Acc=P/scott/tiger+SesTm=6

      사용하면 다음과 같이 화면에 출력된다.

      Please insert the following text in the configuration file "OPENIFNO" field.
      [@@QEAzMWU4Y0lOYXd2Y2lkSzdpTW1lL0F4U0d1NCswekkxSFlaMjJweld
      OTERaM2ptVT0jQEBvNVJPVUE9PQ==@@]

      그러면 OPEINFO 필드에 [] 안의 내용물을 copy한다.

      OPEINFO = "@@QEAzMWU4Y0lOYXd2Y2lkSzdpTW1lL0F4U0d1NCswekkx
      SFlaMjJweldOTERaM2ptVT0jQEBvNVJPVUE9PQ==@@"

      -d 옵션을 같이 사용할 경우 복호화된 결과도 함께 출력한다.

      -g

      SEED 사용을 위해서 모든 모듈 및 노드에서 공통적으로 사용하는 비밀키가 저장된 파일이 생성된다.

      비밀키 파일을 생성해야만 암복호화가 가능하며, 비밀키를 변경하면 암호화 과정을 다시 수행해야 한다. 멀티 노드에 적용하는 경우에는 똑같은 비밀키가 적용되도록 하기 위해서, 생성된 비밀키 파일의 내용을 복사해서 다른 노드에도 적용해야한다.

      암호화 방식이 SEED가 아닌 기존 방식의 경우 비밀키 파일을 생성하지 않는다.

    • tmslib/svrlib에서의 암복호화

      tmax_tencrypt()를 추가하였다. 빌드할 때 libtencrypt 라이브러리를 링크해야 한다. tencerrno 변수는 전역변수로 thread-safe하지 않다.

      • 프로토타입

        #include <usrinc/tencrypt.h>
        int tmax_tencrypt(char *src, int srclen, char **dest, int *destlen, int mode)
      • 파라미터

        파라미터 설명

        src

        암호화 또는 복호화하려는 경우 입력 데이터의 주소값을 지정한다.

        srclen

        입력 데이터의 길이를 지정한다. 0을 지정하면 내부적으로 strlen()을 호출하여 사용한다.

        dest

        암호화 또는 복호화가 수행된 후 출력 데이터의 버퍼 주소를 넘겨받을 주소값을 지정한다. 내부에서 버퍼를 메모리 할당하여 리턴하며, 함수 호출 이후 해당 주소에 대해서 free()를 호출해줘야 한다.

        destlen

        암호화 또는 복호화가 수행된 후 출력 데이터의 길이

        mode

        src를 암호화하려는 경우 TENC_ENCRYPT를 src를 복호화 하려는 경우 TENC_DECRYPT를 지정한다. TENC_ENCRYPT 일 경우 src의 평문 최대 길이는 255자까지 제한한다.

      • 반환값

        반환값 설명

        0

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

        -1

        함수 호출에 실패한 경우이다. tencerrno에 에러 코드가 설정된다. 설정가능한 값은 tperrno와 동일하다.

      • 오류

        tmax_tencrypt()가 정상적으로 수행되지 않을 경우 tperrno에 다음 값 중 하나가 설정된다.

        에러 코드 설명

        [TPEPROTO]

        암복호화 수행 시 비밀키 파일을 로드하지 못했다.

        [TPEINVAL]

        암복호화 수행 시 입력 데이터가 올바르지 않거나 NULL이다.

        [TPEOS]

        메모리 할당이 실패했다.

        [TPELIMIT]

        암호화 수행 시 생성된 암호문이 허용 가능한 크기를 초과했다.

      • 예제

        #include <stdio.h>
        #include <string.h>
        #include <usrinc/tencrypt.h>
        
        int main(int argc, char **argv)
        {
            int n, len;
            char *cipher, *plain;
        
            if (argc < 2)
                return 1;
        
            cipher = plain = NULL;
        
            n = tmax_tencrypt(argv[1], strlen(argv[1]), &plain, &len, TENC_ENCRYPT);
            if (n < 0)
                printf("ENC failed. error = %d\n", tencerrno);
            else
                printf("ENC [%s] ==> [%s][%d]\n", argv[1], plain, len);
        
            n = tmax_tencrypt(plain, len, &cipher, &len, TENC_DECRYPT);
            if (n < 0)
                printf("DEC failed. error = %d\n", tencerrno);
            else
                printf("DEC [%s] ==> [%s][%d]\n", plain, cipher, len);
        
            free(cipher);
            free(plain);
            return 0;
        }
      • 빌드

        cc test.c -o test -I$TMAXDIR -L $TMAXDIR/lib64 -ltencrypt
    • 관련 이슈 : IMS 86574

  • CLHQTIMEOUT을 서버별로 선택 적용할 수 있는 항목 추가

    • 현재 CLHQTIMEOUT은 노드에 설정하는 값으로 해당하는 노드에 포함된 서버는 모두 이 값을 따르게 된다. IGNORE_CLHQTIMEOUT가 Y로 설정될 경우 CLHQTIMEOUT을 무시하도록 기능을 추가하였다.

    • 관련 이슈 : IMS 89604

  • Multiple RM에 DB2 지원

  • Term License 기능 제공

    • Tmax의 License에서 일정 기간만큼 사용 가능한 Term License 기능을 추가하였다.

    • 관련 이슈 : IMS 97968

  • Tmax 클라이언트 이외의 접속에 대한 60초 대기 시간 수정 기능 추가

    • CLHOPT 항목에 "-s sec" 옵션 추가

      CLH에서는 클라이언트 접속 후 60초 동안 TPSTART 메시지를 수신하지 못하면 해당 클라이언트의 연결을 강제로 종료시킨다. 해당 옵션을 사용하는 경우 기본값인 60초 대신 지정한 sec 시간으로 적용된다.

    • TMAX_TPSTART_TIMEOUT 환경변수 추가

      클라이언트에서는 tpstart()를 호출하는 경우 connect 이후에 TPSTART 메시지 송수신 대기 시간인 TMAX_TPSTART_TIMEOUT 환경변수를 추가했다. 이 환경변수를 지정하지 않으면 기본값인 60초 동안 대기한다.

    • 관련 이슈 : IMS 80005

  • jesgw -h 1 -R IGN인 경우 JEUSGW를 기동할 때 TLM에서 해당 트랜잭션들을 보관하지 않고 삭제하는 오류가 있어 TLM에서 JEUS type의 게이트웨이에서 pending된 트랜잭션을 계속해서 보관하도록 수정

  • IPCPERM=650 후 기동할 때 Tmax에서 디렉터리를 생성할 때 user에 x권한이 없어서 하위 파일을 생성할 수 없는 문제 수정

    • 서버가 최초에 기동했을 때 clopt에 -e, -o 로 남는 로그의 파일 권한이 환경 파일의 ipcperm을 따라가지 않게 되어 있었다. 환경변수 TMAX_APPLY_IPCPERM이 y 나 Y로 설정되었을 경우 ipcperm을 설정을 따르도록 옵션이 추가되었다.

    • 관련 이슈 : IMS 86434

  • 서버의 clopt 옵션에 -c 옵션 추가

    • 날짜를 변경할 때 ulog 파일 FD가 자동으로 close된다. 단, UCS의 경우 tpschedule(0)일 경우 FD 종료 기능이 동작하지 않는다.

    • 관련 이슈 : IMS 94321

1.2. 클라이언트/서버

  • TIP SERVER stat 정보조회기능 추가

    • TIP_SECTION을 SVR 또는 SERVER로 설정했을 경우 tmadmin의 st -v와 같은 서버 정보조회가 가능하다.

    • 관련 이슈 : IMS 80456

  • 멀티노드 환경에서 서버 프로세스의 spri를 얻을 수 있는 API 추가

    • tmax_get_my_unique_spri_in_domain

      • 프로토타입

        int tmax_get_my_unique_spri_in_domain();
      • 예제

        #include <usrinc/tmaxapi.h>
        ...
            int spri;
            printf("service is started!\n");
        
            spri=tmax_get_my_unique_spri_in_domain();
            printf("spri = %d\n", spri);
    • tmax_make_unique_spri_in_domain

      • 프로토타입

        int tmax_make_unique_spri_in_domain(int nodeno, int spri);
      • 예제

        #include <usrinc/tmaxapi.h>
        ...
            TMAXSVRINFO *info;
            printf("service is started!\n");
        
            info = (TMAXSVRINFO *)malloc(sizeof(TMAXSVRINFO));
            if(info == NULL) {
                    tpreturn(TPFAIL, -1, NULL, 0, TPNOFLAGS);
            }
        
            tmax_my_svrinfo(info);
            spri=tmax_make_unique_spri_in_domain(info->nodeno, info->spri);
            printf("spri = %d\n", spri);
    • 관련 이슈 : IMS 88194

1.3. RQ

  • RQ에 POD 기능 추가

    • TMSNAME 필드에 "POD"를 입력한 경우 RQ가 POD로 동작을 수행한다. tpenq 요청에 대해서만 기동을 수행한다.

    • 관련 이슈 : IMS 85795

  • RQS에 DEQ ACK 기능 추가

    • DEQ할 때 바로 RQS에서 없어지는 것이 아닌 ACK를 요청해야 없어지는 기능 추가하였다.

    • TMQCTL의 exp_time을 설정할 때 DEQ 이후 주어진 시간 이후까지 응답이 오지 않는다면 Q element가 다시 DEQ할 수 있는 상태로 돌아간다. 설정하지 않았다면 SLOG에 기록하지 않는다.

    • TMQCTL의 flags를 설정할 때 다음과 같이 동작한다.

      flags 설명

      TPRQS_AUTOACK

      DEQ하는 경우 별도로 ACK을 주지 않아도 RQS에서 삭제되도록 한다.

      TPRQS_NOAUTOACK

      DEQ하는 경우 RQS에서 삭제되지 않도록 한다.

      TPRQS_ACK_SUCCESS

      CTL에 해당하는 Q element를 ACK을 주어 삭제하도록 한다.

      TPRQS_ACK_FAIL

      DEQ하는 경우 RQS에서 삭제되지 않도록 한다.

    • 관련 이슈 : IMS 85499

  • RQ에 user callback function 호출할 수 있도록 기능 추가

    • AnyLink 게이트웨이에서 deq_time을 정해서 줄 경우 RQ가 다운되면 deq_time을 reset해야 지연 없이 처리될 수 있다. 그러나 RQ가 다운되고 기동되는 것을 AnyLink 게이트웨이가 알 수 없기 때문에 보정해 줄 수 없는 문제가 있다. AnyLink 게이트웨이가 down되는 경우 또한 deq_time이 초기화되기 때문에 순서를 보장할 수 없는 상황도 발생할 수 있다.

      deq_time 적용을 AnyLink 게이트웨이가 아니라, RQ에서 할 수 있도록 한다. RQ가 deq_time을 스스로 결정할 수 없기 때문에 deq_time을 적용할 때 callback 함수를 호출하여 AnyLink 라이브러리를 호출할 수 있도록 한다.

      RQS가 기동하는 환경변수에 다음과 같이 설정한 후 사용할 수 있다.

      RQ_DEQTIME_CALLBACK=libanme.so

      이 설정이 있으면 해당하는 라이브러리를 dlopen하고 Callback 함수를 호출하여 deq_time을 적용한다.

    • 사용법

      • 프로토타입

        int compute_rq_deqtime(TMQCTL *ctl, char *dp, int datasize);
      • 파라미터

        파라미터 설명

        ctl

        - * deq_time : 함수 작성을 할 때 구조체 내의 deq_time에 기록하도록 작성해야 한다. (단위 : 초)

        dp

        검사할 메시지 전문의 포인터이다.

        datasize

        메시지의 길이이다.

      • 반환값

        반환값 설명

        1

        deq_time 계산에 성공한 경우 반환값이다.

        0

        Callback 함수로 전달된 데이터에 AnyLink 헤더의 매직 넘버가 존재하지 않거나 일치하지 않을 경우 반환값이다. (AnyLink 엔진 이외의 서비스에서 RQ를 호출했을 때를 가정)

        -1

        처리 중 에러가 발생한 경우 반환값이다.

      • 관련 함수

        tpenq_ctl(), tpenq()

    • 관련 이슈 : IMS 85795

1.4. 도메인 게이트웨이

  • TMM이 비정상 종료될 때 도메인 게이트웨이도 종료되는 CLOPT -m 옵션 추가

    • -m 옵션을 설정하면 SERVER 절의 MAC = Y 기능과 동일하게 TMM이 비정상 종료하면 tmgw(nt)도 따라서 종료한다.

    • 관련 이슈 : IMS 88835

  • 도메인 게이트웨이 루핑방지 기술 해제기능 추가

    • TMAXNONTX Type으로 연결된 멀티 도메인 환경에서 게이트웨이에서 올라온 요청이 게이트웨이와 COUSIN으로 묶인 서비스를 호출할 경우 COUSIN으로 묶인 게이트웨이로는 스케줄링하지 않는다. CLHOPT -k 옵션을 사용할 경우 이를 허용하여 COUSIN으로 묶인 게이트웨이로 스케줄링하는 기능을 추가하였다. 참고로 TMAX Type으로 연결된 환경일 경우 기본적으로 COUSIN으로 묶인 게이트웨이로 스케줄링한다.

    • 관련 이슈 : IMS 89623

1.5. Java 게이트웨이

  • JEUS, JEUS_ASYNC GATEWAY 로그레벨 동적 변경 기능 추가

    • GATEWAY 절의 CLOPT에 -D 옵션을 tmadmin의 setopt로 동적 변경이 가능하도록 기능을 추가하였다.

    • 예제

      $$1 tmax (tmadm):  setopt -gw gwname -D loglevel
    • 관련 이슈 : IMS 91590

  • JEUSGW CLOPT에 -H 옵션을 설정하면 WebT에서 JEUSGW로 보내는 ping에 대한 로그가 남지 않는 기능 추가

1.6. Tuxedo 게이트웨이

  • Tuxedo 게이트웨이 기능 개선

    • Tuxedo 게이트웨이와 Tuxedo를 연결할 때 Tuxedo 7.2 이상에서 -t 옵션을 적용하지 않아도 동작하는 기능이다. 이 옵션을 지정하지 않으면 Tuxedo에서 -t 옵션을 반드시 지정해야 한다.

    • 관련 이슈 : IMS 97823

1.7. TCP 게이트웨이

  • tcpgw CLOPT 옵션 추가

    • tcpgw CLOPT 옵션

      옵션 설명

      [-XCHK_UID]

      get_msg_info()에서 REMOTE_REQUEST로 리턴하는 상황에서 info->uid에 설정한 값이 허용 범위(16777215)를 넘어서는 경우 해당 메시지를 drop시킨다.

        (E) SVR6226 UID(16777216) range is exceeded in get_msg_info [HLINK9060]
        (E) SVR6228 msg discarded due to user routine error in get_msg_info : 0 10 [HLINK9065]

      [-XCHK_END_SIZE]

      check_end_msg()에서 수신 데이터보다 리턴한 데이터 크기가 클 경우 해당 메시지를 drop시킨다.

        (E) SVR6227 user routine error: returned size(23) is larger than its orginal size(12) in chk_end_msg [HLINK9062]
        (E) SVR6228 msg discarded due to user routine error in chk_end_msg : 0 12 [HLINK9064]
    • 관련 이슈 : IMS 99925

1.8. 유틸리티

  • racer -c 기능확장

    • racdr -c 옵션에서 tmboot, tmdown, cfl, gst 이외의 명령어 사용 가능하도록 -e 옵션 기능추가하였다.

      항목 설명

      [ -e ]

      -c 옵션에서 허용하지 않는 명령들을 실행할 수 있도록 한다. -c 옵션 앞에 지정해야 한다. 명령이 실행될 때 해당 노드에서 셸 프로그램에 의해 명령이 수행될 필요가 있을 경우에는 -w 옵션을 함께 사용한다.

      [ -c 명령어 ]

      racd에서 명령을 실행한다.

      -c 옵션 이후의 파라미터들은 모두 명령행의 파라미터로 간주한다. 따라서 racdr의 다른 옵션들을 지정할 때 반드시 -c 옵션 앞에 지정해야 한다. 명령은 tmboot, tmdown, cfl, gst 만 허용된다. 그 외의 명령이나 셸 스크립트를 수행하려면 -e 옵션을 지정해야 한다.

      주의해야 할 사항으로, tmboot, tmdown의 경우 racd에서 명령을 실행할 때 명령행 파라미터의 끝에 내부적으로 사용하는 옵션을 추가한다. 만약 반드시 인자를 지정해야 하는 옵션을 마지막 파라미터로 사용하면서 인자를 지정하지 않는 경우에 의도하지 않는 동작을 할 수 있으므로 주의해야 한다.

      예를 들어 "racdr -c tmboot -d" 명령을 수행하면 원래는 tmboot의 잘못된 파라미터를 사용한 것(-d 옵션은 인자를 반드시 입력해야 한다)이므로 에러가 출력되는 것이 정상인데, racd에 의해 수행될 때는 -d 뒤에 추가된 옵션에 의해서 이상한 값을 처리하여 명령이 실행될 수 있다. 따라서 명령어를 입력할 때 파라미터 입력에 세심한 주의가 필요하다.

    • 예제

      $ racdr -n $RMTNAME -ec cp $RMTDIR/config/node3.m $RMTDIR/config/node3.m.cp
    • 관련 이슈 : IMS 86668

  • racdr -s 옵션을 사용할 때 백업 파일이 생성되지 않도록 하는 기능 추가

    • -s 옵션을 사용하면서 -r 옵션이 지정된 경우 백업 파일을 생성하지 않는 기능을 추가하였다.

    • 예제

      $ racdr -n $RMTNAME -s backupfile -d 3 -r
    • 관련 이슈 : IMS 86668

  • racdr -ec 옵션을 사용할 때 wild card character(*) 같은 셸 명령을 사용할 수 있게 하는 옵션 기능 추가

    • -ec로 명령어를 전송할 때 명령어에 '*' 문자가 포함될 경우 -w or -W 옵션을 사용하여 원하는 결과를 얻을 수 있다.

      항목 설명

      [ -w ]

      -e, -c 옵션을 통해 명령을 실행할 때 셸 프로그램을 통해서 실행되도록 한다.

      기본적으로 사용되는 셸은 "sh" 프로그램이다. 다른 셸 프로그램을 사용하려면 이 옵션 대신 -W 옵션을 사용한다.

      명령의 파라미터에 와일드카드 문자를 사용하는 경우에는 와일드카드 문자 그대로 racd로 전달하기 위해서 반드시 명령 또는 명령행의 파라미터를 작은따옴표(' ')로 감싸줘야 한다.

      [ -W 셸프로그램 ]

      -e, -c 옵션을 통해 명령을 실행할 때 지정한 셸 프로그램을 통해서 실행되도록 한다.

      ksh, tsh, bash 등의 사용하고자 하는 셸 프로그램 이름을 인자로 지정한다.

    • 예제

      $ racdr -n $RMTNAME -w -ec ls $RMTDIR/config/'backupfile*'
      $ racdr -n $RMTNAME -W ksh -ec ls $RMTDIR/config/backupfile'*'
    • 관련 이슈 : IMS 97793

  • mksvr를 수행할 때 svct/svctab.c 파일 사용하지 않는 기능 추가

    • mksvr -d 옵션으로 빌드시에 기존의 svctab.c을 참조하지 않고 서비스를 빌드할 수 있도록 한다. 기존 환경 설정의 영향을 받지 않고 독립적으로 서비스를 동적 등록할 때에 사용한다.

    • 관련 이슈 : IMS 79919

1.9. 관리도구

  • admnoti 기능 추가

    • tmadmin에서 TCS, UCS, RDP 서버로 이벤트를 전송할 수 있는 기능 추가하였다.

      tmadmin에서 지정된 서버들에게 이벤트를 요청하면, 해당 서버들은 사용자가 지정한 callback 함수를 호출하여 이벤트를 처리한다. callback 함수가 등록되지 않았다면 이벤트는 무시된다.

      tmadmin master mode에서 동작하며 -l 또는 -n 옵션을 지정하지 않으면 RACD에 의해 모든 노드로 같은 요청이 전달되므로 주의한다.

    • 사용방법

      admnoti는 다음 옵션들을 지원한다.

      admnoti [-a | -g svgname | -v svrname | -p spri | -P pid] [notification message]
      옵션 설명

      [-a]

      모든 서버 프로세스에게 이벤트를 전송한다.

      [ -g svgname]

      svgname에 속하는 모든 서버 프로세스에게 이벤트를 전송한다.

      [-v svrname]

      svrname에 해당하는 모든 서버 프로세스에게 이벤트를 전송한다.

      [-p spri]

      해당 spri의 서버 프로세스에게 이벤트를 전송한다.

      [-P pid]

      해당 pid의 서버 프로세스에게 이벤트를 전송한다.

      [notification message]

      콜백함수에 전달할 메시지를 입력한다. (선택 옵션)

    • 함수 정의

      사용자는 TPADMNOTI 타입으로 callback 함수를 정의한다.

      • 프로토타입

        #include <usrinc/tmaxapi.h>
        typedef int (__EXPORT *TPADMNOTI)(int reqno, int len, char *args);
      • 파라미터

        파라미터 설명

        reqno

        tmadmin의 an 명령 요청에 대한 순번이다.

        len

        notification message의 문자열 길이이다.

        args

        notification message 문자열이 저장된 버퍼이다. 해당 버퍼는 리턴되면 서버 라이브러리에 의해 free된다.

      • 반환값

        반환값 설명

        0 이상

        이벤트 처리 결과가 성공인 경우이다.

        음수

        이벤트 처리 결과가 실패인 경우이다.

      • 관련 함수

        tpregancb(), tpunregancb()

    • 함수 등록

      tpregancb() 함수를 통해 callback 함수를 등록한다. callback 함수를 등록하지 않으면 수신한 이벤트를 무시한다.

      • 프로토타입

        #include <usrinc/tmaxapi.h>
        int __EXPORT tpregancb(TPADMNOTI);
      • 파라미터

        파라미터 설명

        TPADMNOTI

        TPADMNOTI 타입의 callback 함수를 지정한다. 기존에 등록된 callback 함수가 있다면, 지정한 callback으로 변경된다.

      • 반환값

        반환값 설명

        1

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

        -1

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

      • 오류

        tpregancb()가 정상적으로 수행되지 않을 경우 tperrno에 다음 값 중 하나가 설정된다.

        에러 코드 설명

        [TPEINVAL]

        callback에 지정된 함수 주소가 잘못되었다.

    • 함수 해제

      tpunregancb() 함수를 통해 기존에 등록된 callback 함수를 해제한다. 이후 수신한 이벤트는 무시한다.

      • 프로토타입

        #include <usrinc/tmaxapi.h>
        int __EXPORT tpunregancb();
      • 반환값

        반환값 설명

        1

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

        -1

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

      • 오류

        tpunregancb()가 정상적으로 수행되지 않을 경우 tperrno에 다음 값 중 하나가 설정된다.

        에러 코드 설명

        [TPEPROTO]

        등록된 callback 함수가 없다.

      • 예제

        #include <stdio.h>
        #include <stdlib.h>
        #include <string.h>
        #include <usrinc/atmi.h>
        #include <usrinc/tmaxapi.h>
        
        int admnoti(int reqno, int len, char *args);
        
        TOUPPER(TPSVCINFO *msg)
        {
            int        i;
        
            printf("TOUPPER service is started!\n");
            printf("INPUT : data=%s\n", msg->data);
        
            for (i = 0; i < msg->len; i++)
                msg->data[i] = toupper(msg->data[i]);
        
            printf("OUTPUT: data=%s\n", msg->data);
        
            tpreturn(TPSUCCESS,0,(char *)msg->data, 0,0);
        }
        
        UNREG(TPSVCINFO *msg)
        {
            int        ret;
        
            printf("UNREG service tpunregancb is started!\n");
            ret=tpunregancb();
        
            printf("tpunregancb ret = %d\n",ret);
            sprintf(msg->data,"%d",ret);
        
            tpreturn(TPSUCCESS,0,(char *)msg->data, 0,0);
        }
        
        
        int tpsvrinit(int argc, char *argv[])
        {
           if (tpregancb(admnoti) < 0)
            {
                printf("callback reg error\n");
            }
        }
        
        int admnoti(int reqno, int len, char *args)
        {
           printf("callback reqno[%d] \n",reqno);
           return 0;
        }
    • 관련 이슈 : IMS 80093

  • st -p로 조회할 때 한 줄로 출력하는 -j 옵션 추가

    • st -p -x, st -p -d를 사용할 때 여러 라인에 나오는 항목들을 한 줄에 나오도록 기능을 추가하였다.

    • 사용 방법

      st -p -j
      st -p -x -j
      st -p -d -j
      st -p -d -x -j
    • 관련 이슈 : IMS 83120

  • RQ의 누적 COUNT를 볼 수 있는 기능

    • rqs -s qname으로 조회할 때 Accumulated queue activities가 보이도록 수정하였다.

    • 사용 방법

      $$1 tmax (tmadm): rqs -s rq1
         --------------------------------------------------------
         Number of queue entries of RQ [rq1]
         --------------------------------------------------------
               request         0
               reply           1
               fail            0
         --------------------------------------------------------
         Accumulated queue activities
         --------------------------------------------------------
               request enqueued        0
               request dequeued        0
               reply enqueued          10
               reply dequeued          0
         --------------------------------------------------------
    • 관련 이슈 : IMS 84700

  • 모든 RQ의 상태를 리스트 형태로 출력 기능 추가

    • rqs -a로 조회할 때 모든 RQ의 상태를 리스트 형태로 출력한다.

    • 사용 방법

      $$1 tmax (tmadm): rqs -a
              rq1 RDY 0 0 0 0 0 5 5
      total count : 1
    • 관련 이슈 : IMS 84700

  • 서비스의 TXTIME 동적 변경 기능 추가

    • set 명령어로 SERVICE 절의 TXTIME 동적 변경되도록 기능을 추가하였다.

    • 사용 방법

      $$1 tmax (tmadm): set -s svcname txt value
    • 관련 이슈 : IMS 91590

  • cfg -s할 때 TXTIME 출력 옵션 기능 추가

    • cfg -s할 때 TXTIME이 출력되는 -x 옵션을 기능을 추가하였다.

    • 사용 방법

      $$1 tmax (tmadm): cfg -s -x, cfg -s svcname -x, cfg -s -x svcname
    • 관련 이슈 : IMS 91590

  • notify_reconnect_clh 기능 추가

    • Tmax를 운영 중에 특정 서버 프로세스가 특정 CLH에 연결을 맺지 못하는 상황이 발생할 수 있다. 이 경우 자동으로 연결을 못 맺을 경우 수동으로 특정 서버 프로세스에 특정 CLH 연결을 맺도록 해주는 명령어를 기능을 추가하였다.

    • 사용 방법

      $$1 tmax1 (tmadm): notify_reconnect_clh clh index spr index
    • 관련 이슈 : IMS 96544

  • RUN 상태의 서버프로세스의 스케줄링 경과시간을 확인할 수 있는 -d 옵션 추가

    • 서버 프로세스를 조회(st -p -d)할 때 서버 프로세스가 RUN 상태일 때 경과시간이 표시된다. 그 외의 상태일 경우 '-'로 표시된다. 반드시 st -p와 함께 사용해야 한다.

    • 예제

      $$1 tmax1 (tmadm):  st -p -d
      $$1 tmax1 (tmadm):  st -p -x -d
    • 관련 이슈 : IMS 44140

  • 트랜잭션 처리 기능 추가 : txc / txr / txq [-t upper xid / lower xid]

    • 게이트웨이로부터 시작된 트랜잭션에 대해서 로컬에 pending이 존재하는 상황에서 장애에 의해서 로컬이 재기동한 경우 리모트에서 decision을 받아오지 못해 여전히 pending으로 남아 있고, 리모트에서도 재시도를 하지 않는 트랜잭션은 정리하기가 어려워 리모트로부터 시작된 pending 트랜잭션에 대해서 조회/commit/rollback 기능이 추가되었다.

    • ID의 첫 부분은 upper xid, 두 번째 부분은 lower xid, 세 번째 xid는 bqual no이다.

      • 조회 (txq -t)

        $$1 tmaxi9 (tmadm): txq -t
        --------------------------------------------------------------------------------
        XID                          svgno RXID                        gwname
        --------------------------------------------------------------------------------
        00000000:00032088:00000000   3     05000403:00000001:00000000  gw1
        00000000:00032089:00000000   3     00000102:00000001:00000000  gw1
      • commit

        $$4 tmaxi9 (tmadm): txq -t
        --------------------------------------------------------------------------------
        XID                          svgno RXID                        gwname
        --------------------------------------------------------------------------------
        00000000:0002d088:00000000   3     09090906:00000001:00000000  gw1
        $$5 tmaxi9 (tmadm): txc -t 0 2d088
        XID 00000000:0002d088:00000000 svgno 3.
        Are you really want to commit?(n|y) y
        txcommit completed. Please monitor by txquery -t 0 2d088
      • rollback

        $$4 tmaxi9 (tmadm): txr -t 0 00032088
        $$4 tmaxi9 (tmadm): XID 00000000:00032088:00000000 svgno 3.
        Are you really want to roll back?(n|y) n
        txrollback was canceled
    • 관련 이슈 : IMS 97235

2. 변경 기능

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

2.1. ENGINE

  • svg의 load 값 동적 변경 개선

    • COUSIN을 설정한 서버 그룹을 최초 음수로 설정하는 경우 운영 중 tmadmin의 set -g svg ld 1처럼 동적 변경을 시도할 때 원하는 load 값으로 스케줄링되지 못하는 현상과 COUSIN을 설정한 서버 그룹을 최초 0 이상 값에서 음수로 운영 중 tmadmin의 set 명령어로 동적 변경 시도시 tmadmin에서 실패를 리턴하는 현상이 있다.

      tmm에서는 음수 => 다른 값, 다른 값 => 음수로 변경되는 경우에도 CLH가 정상 스케줄링할 수 있도록 shared memory의 svc 영역의 svgno에 올바른 값을 설정하도록 변경하였고, tmadmin에서는 음수(-1, -2, -3)로 변경할 수 있도록 제약을 해제하였다.

    • 관련 이슈 : IMS 94898 , 83463

  • 멀티 노드 환경에서 tpgetrply을 수행할 때시 간이 0.03 ~ 0.04초 걸리는 현상에 대해 성능을 개선

    • NODE절의 CLHOPT에 -y 옵션을 추가하였다. 연결되는 소켓에 대해서 setsockopt (TCP_NODELAY...) 로 호출된다.

    • 관련 이슈 : IMS 90859

2.2. 관리도구

  • "discon -c cld_id -f" 옵션을 사용할 때 NRDY 상태이더라도 종료시킬 수 있도록 변경

    • tmadmin에서 비정상적으로 연결된 NRDY 상태의 클라이언트를 종료시키기 위해 discon 명령을 사용할 때 "discon -c cli_id -f"를 호출해도 연결이 종료되지 않았다. "discon -c cld_id -f" 옵션을 사용할 때 NRDY 상태이더라도 종료시킬 수 있도록 기능을 변경하였다.

    • 관련 이슈 : IMS 80005

2.3. 바이너리

  • libtmaxcfl.so 라이브러리 제거

    • libtmaxcfl.a static 라이브러리만 배포하도록 변경되었다.

    • 관련 이슈 : IMS 87275

3. 버그 패치

3.1. ENGINE

  • 다이나믹 서버 타입으로 동작시킬 때 에러

    • 다이나믹 서버 타입으로 동작시킬 때 아래와 같은 에러가 발생하지 않도록 수정하였다.

      • tmadmin rbs 및 restart 기능에서 DYN_SVR_TYPE을 고려 안하던 것을 수정하였다.

      • snmp에서 svr 정보와 spri 정보 얻어오는 부분 DYN_SVR_TYPE을 고려 안하던 것을 수정하였다.

      • twagent에서 svr 정보와 spri 정보 얻어오는 부분 DYN_SVR_TYPE을 고려 안하던 것을 수정하였다. (Tmax WebAdmin)

      • clh에서 spracall 호출하는 경우 DYN_SVR_TYPE을 고려 안하던 것을 수정하였다. (tpspracall 함수)

      • svrlib, tmm에서 chtrc 기능에 DYN_SVR_TYPE을 고려 안하던 것을 수정하였다. (chtrc 기능)

      • tmm에서 spri를 종료하는 경우DYN_SVR_TYPE일 때 잘못 사용하던 것을 수정하였다. (tmadmin API를 통해 tmdown 요청하는 경우)

      • tmm에서 clh가 재기동되었음을 spri에 알릴 때 DYN_SVR_TYPE을 고려 안하던 것을 수정하였다.(CLH 재기동 또는 notify_reconnect_clh 명령어)

    • 관련 이슈 : IMS 82021

  • Tmax 엔진을 재기동할 때 TMM0190 에러로그가 나오는 문제

    • TMM이 재기동 프로세스들을 관리하는데 재기동 명령을 할 때에는 큐에 ENQUEUE 하나 재기동 완료되면 서버 프로세스는 제대로 DEQUEUE하지만 엔진 프로세스들은 DEQUEUE를 하지 않는 문제를 수정하였다. 다른 엔진 프로세스를 종료할 때에도 동일한 문제를 수정하였다.

    • 관련 이슈 : IMS 84528, 96336

  • CFGADD로 서버를 동적 추가한 이후 다른 노드의 COUSIN으로 묶인 서비스 호출이 안되는 현상 수정

    • cfgadd를 실행할 때 자신이 속해 있지 않은 COUSIN의 svri 정보가 shm의 svc쪽에 업데이트되지 않아서 발생한 현상을 수정하였다.

    • 관련 이슈 : IMS 84649

  • DYN 서버로 설정 후 COUSIN 묶은 환경에서 부하가 발생할 때 CLH 비정상 종료현상

    • CLH에서 COUSIN 구성에서 다른 노드로 스케줄링이 실패 후 리스케줄링 과정에서 DYN_SVR_TYPE 서버 인덱스를 잘못 참조하던 문제를 수정하였다.

    • 관련 이슈 : IMS 84659

  • POD 서버를 tmdown -S로 종료시키면 기동 안하는 문제 수정

    • POD 서버를 tmdown -S로 종료시키면 해당 POD 서버로 서비스 요청이 있을 때 자동으로 기동해야되나 기동되지 않던 문제를 수정하였다.

      아래와 같이 POD 서버가 기도할 때 ASQCOUNT 설정에 의해 기동하는 것과 구분되는 로그를 추가하였다.

      (I) TMM3060 SVR (svr2) is started due to POD, pid = 20364 [TMM0299]
    • 관련 이슈 : IMS 84685

  • tpconnect를 호출할 때 큐잉되는 경우 maxconv_node 설정 개수에 도달하지 않아도 TPELIMIT 에러가 발생하는 현상

    • tpconnect를 호출할 때 해당 요청이 서버 큐에서 대기하는 경우 처음에는 maxconv_node 설정까지 동시 요청이 처리되다가 그 이후부터 한 건만 처리되고 나머지 동시 요청에 대해서는 TPELIMIT 에러가 발생하며 큐잉이 발생한 횟수만큼 동시 처리가능한 개수가 줄어는 현상을 수정하였다.

    • 관련 이슈 : IMS 88519

  • SERVER 절 MAC 항목 설정대로 동작하지 않는 현상

    • SERVER 절의 MAC=N 설정을 하여도 MAC=Y와 동일하게 동작하는 현상을 MAC 설정에 따른 동작만 수행하도록 수정하였다.

    • 관련 이슈 : IMS 89155

  • tmdown을 수행할 때 CLH가 비정상 종료되는 현상 수정

    • tmdown을 수행할 때 서버 down이 수행될 때에 잘못된 svri(-1)을 참조하여 발생한 버그를 수정하였다.

    • 관련 이슈 : IMS 89976

  • TMM으로 비정상적인 메시지가 들어 올 경우(port scan) 등 TMM이 비정상 종료하는 현상

    • 메시지를 읽어 메시지가 Tmax에서 사용하는 메시지인지 구분(MAGIC NUMBER)하는 로직을 추가하여 비정상 종료 현상을 수정하였다.

    • 관련 이슈 : IMS 90293

  • CLH를 kill로 여러 번 반복 종료시킨 이후 재기동된 후 tmadmin ci로 조회할 때 Hang 걸리는 현상

    • CLH가 재기동되면서 서버가 동시에 연결될 경우 epoll 관련 정보를 정상 정리하지 못하면서 무한 루프 수행하는 버그를 수정하였다.

    • 관련 이슈 : IMS 90861

  • CLH가 비정상 종료되어 서버에서 SIGPIPE가 발생될 때 서버가 비정상 종료되는 현상 수정

    • CLH가 비정상 종료되어 서버에서 SIGPIPE가 감지될 때에 CLH의 fd를 정리하는 과정에서 잘못된 fd 값을 참조하는 문제를 수정하였다.

    • 관련 이슈 : IMS 90944

  • cllblock 동적 변경할 때 적용 안되는 문제 수정

    • 설정 파일에 cllblock을 Y로 설정하고 cllblocktime을 지정하지 않고 부팅 후 tmadmin set 명령으로 cllblock을 N으로 동적 변경할 때 블록이 풀리지 않는 문제를 수정하였다.

    • 관련 이슈 : IMS 92065

  • SERVER 절 CLOPT -m 옵션이 부정확한 문제 수정

    • 서버 프로세스의 메모리 사용량 측정을 각 플랫폼의 상황에 맞게 수정하였다. Linux, HP-UX, SUN 플랫폼은 VSZ 값을 기준으로 동작하고 AIX 플렛폼은 RSS 값을 기준으로 동작한다.

      유저 서버 프로그램을 10번 호출할 때마다 서버 프로그램의 메모리를 체크하여 -m 옵션에 설정된 크기보다 더 많이 사용되면 서버 프로그램을 종료하고 재시작한다. (단위: KB)

    • 관련 이슈 : IMS 92210

  • zLinux (s390x)에서 SQ 설정 이후 기동할 때 Hang 현상

    • SQ를 설정한 이후 기동할 때 Hang 현상을 수정하였다.

    • 관련 이슈 : IMS 93335

  • MKSVR COUSIN 그룹의 경우 SVCTIME 변경이 안되는 현상

    • mksvr의 -T 옵션을 이용하여 service timeout을 변경할 대 recompile후 multinode에서 COUSIN 그룹에 속하는 서버를 재기동했을 때는 반영이 안되는 현상을 수정하였다.

    • 관련 이슈 : IMS 79032

  • tmdown -g나 tmdown -A를 시작할 때부터는 새로운 서버가 접속하지 못하도록 수정

    • tmdown -g나 tmdown -A로 특정 서버 그룹이나 서버들에 대해서 종료하는 순간 asqcount나 서버 비정상 종료로 인해서 새로운 서버가 기동할 경우 정상적으로 tmdown이 되지 못하는 현상을 수정하였다.

    • 관련 이슈 : IMS 98268

  • DDR로 설정하여 호출하는 경우 CLH가 sigbus 발생하면서 죽는 현상 수정

    • FIELD Buffer에 대해서 STRING을 비교하는 부분에서 key 값을 가져오는 부분이 잘못되어서 수정하였다.

    • 관련 이슈 : IMS 82888

  • tpforward GW irt 버그 수정

    • tpforward한 서비스가 COUSIN - GW로 설정되어 있는 경우 GW가 connect가 되지 않은 상태인 문제를 수정하였다.

      1. tpforward 호출

      2. CLH 가 첫 번째 GW로 스케줄링

      3. 첫 번째 GW가 연결되어 있지 않으므로 실패 응답

      4. CLH가 실패 응답 수신 후 COUSIN에 설정된 다음 GW로 스케줄링 처리 실패

    • 메시지에 대해서 free 후 사용하면서 다음 GW로 잘못된 메시지를 전달하여 GW에서 메시지에 대해서 오류 처리를 하는 현상을 수정하였다.

    • 관련 이슈 : IMS 89623

  • mksvr 컴파일된 서버 프로세스 타임아웃이 발생하는 경우 TPENOENT 에러 발생

    • mksvr로 빌드된 서비스가 svctime 초과로 timeout이 발생해서 재기동(TPEXIT)하는 경우 해당 시점에 간헐적으로 서버 큐에서 대기 중이던 요청이 TPENOENT 에러가 발생하는 현상이 발생하였다.

    • mksvr로 빌드된 서버가 비정상 종료로 재기동되는 경우에는 동적 등록된 서비스를 삭제하지 않도록 수정하였다.

    • tmadmin을 통해서 서버 프로세스 개수가 0개인 서버에 속하는 동적 등록된 서비스들을 삭제하는 기능을 추가하였다.

      (멀티노드의 COUSIN , COUSIN 아닌 경우도 모두)

      명령 : > cleandynsvc(cleands) [-s svcname]
    • 관련 이슈 : IMS 86678

  • CLH losssvc를 호출할 때 비정상 종료 현상

    • losssvc 서비스를 호출할 때 메시지를 새로운 버퍼에 복사하여 지정된 서비스로 호출하게 된다. 이 때 복사된 메시지 버퍼에 부가적인 정보가 추가되면서 버퍼를 깨트리는 문제이다. 새로운 버퍼를 할당할 때 부가정보에 대한 여유공간을 갖도록 수정하였다.

    • 관련 이슈 : IMS 101112

  • 멀티 노드 cousin/backup을 구성할 때 secondary 노드의 서버 기동 순서가 main과 동일하게 기동되도록 수정

    TMM.13807.175634:(I) TMM0211 General Infomation : CFGADD started [TMM0902]
    
    TMM.13807.175634:(I) TMM0211 General Infomation : CFGADD request cancelled [TMM0910]
  • ENVFILE을 사용할 때 큰따옴표(" ") 안에 내용이 인식하도록 수정

    • ENVFILE에 지정하는 환경변수 파일에서 환경변수 값에 등호(=) 문자가 들어있을 경우 아래와 같은 에러가 발생하였다.

    • 관련 이슈 : IMS 97888

  • CLH 비정상 종료 현상 수정

    • CLH가 TMM과의 채널이 종료되면 강제 종료되도록 수정하였다.

      CLH에서 메모리 부족으로 인해 TMM과의 채널을 종료하는 경우에 TMM에서는 CLH가 비정상 종료되었음으로 인지하고 새로운 CLH를 기동시키게 된다. 그러나 기존 CLH가 정상적으로 동작 중인 상태라서 새로 기동된 CLH는 port listen을 못하게 되면서 10분 동안 멈춰 있다가 이후 CLH 비정상 종료하는 현상 발생하였다.

    • CLH port 사용 중인 경우 10분후 자동 종료되로록 수정하였다.

      위 상황에서 새로 기동된 CLH가 tcp socket listen에 실패해도 기동 과정을 계속 진행했으나, 앞으로는 실패할 때에 강제 종료되도록 한다.

    • 관련 이슈 : IMS 95652

  • TMS의 TMSRECOVERY가 Y일 경우 트랜잭션이 Hang이 걸리는 현상 수정

    • Linux 32Bit 환경에서 파일을 2GB 이상 쓰게 되면 SIGXFSZ 시그널이 발생해서 TMM이 종료되어 64Bit와 동일하게 파일 크기 제한을 해제하였다.

    • 관련 이슈 : IMS 90824

  • Linux 32bit 환경에서 로그 파일이 사이즈 2기가 제한 해제

    • Linux 32Bit환경에서 파일을 2BG 이상 쓰게 되면 SIGXFSZ 시그널이 발생해서 TMM이 종료되어 64bit와 동일하게 파일 크기 제한을 해제하였다.

    • 관련 이슈 : IMS 88836,89347

  • Oracle RM 서버가 여러 번 재기동됐을 때 xa_open이 원인을 알 수 없이 실패하는 경우가 발생 이에 대한 보완 옵션이 추가되었다.

    • 서버는 CLOPT 절, TMS는 TMSOPT 절에 -J와 함께 숫자를 지정하면 xa_open이 처음 실패한 시간에서 지정한 수 이상 초가 지나면 재기동된다.

      MAXRSTART 수에 포함되지 않으며, 아래와 같은 로그가 남는다.

        (I) TMM0211 General Infomation : server closed due to (CLOPT:-J) : SVR, pid = 29037 [TMM0197]
        (I) TMM3004 SVR (svr2xa) is restarted the 0th time (MAXRSTART = 5) [TMM0166]
    • 관련 이슈 : IMS 85419

  • jesgw -h 1 -R IGN인 경우 JEUSGW를 기동할 때 TLM에서 해당 트랜잭션들을 보관하지 않고 삭제하는 오류가 있어 TLM에서 JEUS type의 게이트웨이에서 pending된 트랜잭션을 계속해서 보관하도록 수정

  • 동일 NODE 내에서 2개 이상의 SVRGROUP을 COUSIN으로 설정할 때 tmdown / tmboot를 수행할 때 첫 번째 svri의 서버(primary 서버그룹)만 기동/종료되는 현상 수정

    • tmboot -S 옵션은 동일 노드 내 COUSIN 서버 그룹의 동일 서버 모두 각각 MIN 개수만큼 기동한다.

      tmdown -S 옵션은 동일 노드 내 COUSIN 서버 그룹의 동일 서버 모두가 종료된다.

    • 서버 라이브러리의 tmadmin() API의 TMADM_BOOT, TMADM_DOWN 명령과 관련된 스팩을 변경하였다.

      • tmboot/tmdown의 -S 옵션과 같은 의미의 TMADM_USFLAG 가 추가되었다.

      • TMADM_SFLAG 대신 TMADM_USFLAG를 사용할 경우에는 struct tmadm_boot의 args.count에 값을 지정하지 않는다.

      • TMADM_USFLAG와 TMADM_GFLAG를 함께 지정하는 경우 해당 서버 그룹의 서버들만 적용된다.

    • 다음은 tmadmin()의 TMADM_BOOT, TMADM_DOWN에서 사용가능한 flags 조합이다.

      flags 설명

      TMADM_SFLAG

      -s 옵션과 동일하다. count를 지정해야 한다.

      TMADM_SFLAG |

      TMADM_GFLAG

      s -g 옵션과 동일하다. count를 지정해야 한다.

      TMADM_TFLAG

      -t 옵션과 동일하다. count를 지정해야 한다.

      TMADM_USFLAG

      -S 옵션과 동일하다.

      TMADM_USFLAG |

      TMADM_GFLAG

      -S -g 옵션과 동일하다.

      위의 모든 경우 |

      TMADM_FFLAG

      -i 옵션과 동일하다. TMADM_DOWN에서만 사용이 가능하다.

    • 관련 이슈 : IMS 79295

3.2. 클라이언트 / 서버

  • tloglib를 사용할 때 심볼 에러 수정

    • tloglib를 사용하여 빌드할 때 심볼 에러가 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 81886

  • SYSMASTER에서 함수가 후킹되지 않는 문제

    • AIX에서는 컴파일할 때 후킹이 가능하도록 -G 옵션을 적용하였다.

    • 관련 이슈 : IMS 82140

  • libtmaxgw.so에서 순간적으로 많은 _errwork 함수를 호출할 때 TMM 연결이 끊기는 현상

    • libtmaxgw.so에서 순간적으로 많은 _errwork 함수를 호출할 때 TMM 연결이 끊기는 현상을 수정하였다.

    • 관련 이슈 : IMS 87275

  • SYSMASTER UCS 타입 GID 발급하도록 지원 영역 확장

    • SMSUPPORT=Y로 설정하였음에도 UCS type의 서버에서 다른 서비스를 호출할 때 GID가 발급되지 않는 현상 및 TCP_GATEWAY(CUSTOM_GW)로 부터 들어온 요청에 대해서 GID가 발급되지 않는 현상이 발생하여 이 타입에 대해서 지원하도록 수정하였다.

    • 관련 이슈 : IMS 89944

  • tpprechk 내부에서 tpsleep 사용할 때 동작 오류

    • tpprechk() 호출 시점이 해당 서버에 대한 공유 메모리 정보가 생성 이전이다. tpsleep()에서 로깅하는 부분에서 공유 메모리의 해당 server name에 접근해서 발생한 문제로 공유 메모리가 생성되기 이전 시점에 server name을 $svr로 표현하도록 수정하여 비정상 종료되지 않도록 수정하였다.

    • 관련 이슈 : IMS 90800

  • MultipleRm서 버에서 xa_start 도중에 에러가 발생하는 경우 이후 계속해서 TPETRAN 에러가 발생하는 현상

    • MultipleRm 서버에서 xa_start, xa_end 도중에 에러가 발생하는 경우 이후 모든 서비스 요청에 대해서 계속해서 TPETRAN 에러가 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 94261

  • TPNOBLOCK으로 tpgetrply를 실행할 때 TPETIME 발생 가능성 수정

    • TPNOBLOCK으로 tpgetrply를 호출했을 때 TPETIME 에러가 발생할 가능성을 수정하였다.

    • 관련 이슈 : IMS 95168

  • tpgetsprlist, tpspracall2 오류 현상 수정

    • tpgetsprlist, tpspracall2가 비정상 동작하는 현상을 수정하였다.

    • 관련 이슈 : IMS 98708

  • MulitipleRM 서버에서 pending transaction 남는 오류 수정

    • MulitipleRM 서버에서 tx_begin ~ tx_commit할 때 commit이 수행되지 않고 pending transaction 남는 오류를 수정하였다.

  • tpstart 호출하기 전에 tx_관련 API를 호출할 때 비정상 종료 현상

    • tpstart()를 호출하지 않거나 호출에 실패할 때 또는 tpend()를 호출한 다음에 다음 함수들을 호출하면 비정상 종료된다.

      tx_info, tx_set_commit_return, tx_set_transaction_control, tx_set_transaction_timeout,
      userlog , tpacall(TPNOREPLY), tpgetrply, tprecv, tpsend, tpdiscon
    • tpstart가 되어있지 않은 상태에서 호출할 때에는 TPEPROTO, TX_PROTOCOL_ERROR 에러가 발생하도록 수정하였다. 암호화 사용 여부에 따라 클라이언트 환경 파일에 암호화 설정해야 한다.

    • 관련 이슈 : IMS 66462

  • tmadmin API에서 tmax, tmaxnontx 게이트웨이 정보 조회 기능이 되지 않던 문제 수정

    • tmadmin API에서 tmax, tmaxnontx 게이트웨이 정보 조회 기능이 되지 않던 문제를 수정하였다.

    • 관련 이슈 : IMS 97276

  • 서버를 재기동할 때에 TPCONNECT msg가 dicard되는 현상 수정

    • 해당 메시지도 서버 큐에 저장하고 기동 이후 큐에서 꺼내 처리하도록 수정하였다.

    • 관련 이슈 : IMS 99557

  • libtmaxgwmt*가 Thread 버전으로 빌드되지 않은 오류

    • libtmaxgwmt*가 Thread 버전으로 빌드되지 않은 오류를 수정하였다.

    • 관련 이슈 : IMS 92399

  • tpcall() TPNOCHANGE flag 를 호출할 때 오류 수정

    • tpcall() TPNOCHANGE flag 를 호출할 때 tpreturn data(null)일 때 TPEOTYPE이 발생하는 현상을 수정하였다.

    • tpcall() TPNOCHANGE flag 를 호출할 때 서버가 기동되어 있지 않을 때 TPEOTYPE이 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 85588

  • client에서 시작한 대화형이 서버에서 클라이언트로 tpsend(TPEPROTO)할 때 클라이언트로 전송되지 않는 문제 수정

  • txtimeout가 발생할 때 tperrno가 TPESYSTEM으로 설정 되는 현상 수정

  • 멀티 스레드 사용 중 클라이언트의 tpend 부분에서 core 발생 현상 수정

    • tpend에서 트랜잭션 정보를 프리하는 부분에서 다른 스레드의 간섭으로 더블 프리가 발생하는 등으로 인해 간헐적으로 코어가 발생하는 현상이 발생하는 오류가 수정되었다.

    • 관련 이슈 : IMS 84808

  • 멀티 스레드 클라이언트 라리브러리를 사용할 때 오류 수정

    • tpend()를 호출할 때 리턴값이 -1인데, tperrno는 0으로 리턴되는 현상을 수정하였다.

    • TMAX_TRACE 로그 설정이 적용되지 않는 현상을 수정하였다.

    • libclithr.so 라이브러리에서도 출력되도록 수정하였다.

    • tmax_chk_conn(0) API를 호출할 때 정상적으로 연결되어 있음에도 불구하고 무조건 TPESYSTEM 에러가 발생하는 현상을 수정하였다.

    • tpstart() 함수에 성공한 이후 다른 API를 호출할 때 CLH와 클라이언트의 채널 연결 상태에 문제가 있어서 에러가 발생한 경우이다.

      에러발생 이후 tpend(), tpsetctxt(해당 ctxtid) 호출시 에러로 실패하는 현상을 수정하였다.

      • 에러 발생 이후 tpend(), tpsetctxt(해당 ctxtid)를 호출할 때 에러로 실패하는 현상이다. 이는 tpend()를 호출할 때 TPEPROTO 에러가 발생하던 현상을 정상 처리되도록 수정하였다.

      • tpsetctxt(해당 ctxtid)를 호출할 때 TPENOENT 에러가 발생하던 현상을 정상적으로 해당 context로 반영되도록 수정하였다.

      • 에러발생 이후 tpend()를 호출할 때 TPEPROTO 에러가 발생하면서 생기는 memory leak 현상을 수정하였다. (1회 발생시마다 약 1KB 정도 leak 발생) -> leak 현상 수정

      • 에러발생 이후 이후에 tpend()를 호출하지 않고 클라이언트 API를 호출할 때 TPECLOSE 에러가 발생하도록 수정하였다.

    • tpgetctxt() API에서 지정한 ctxtid를 공유하고 있는 스레드의 개수를 출력하는 기능을 추가하였다.

      ctxtid 변수에 값을 지정하고 flags에 TPFUNC를 설정해서 호출한다. 리턴값 음수이면 에러가 발생한 경우이고 0, 양수이면 현재 해당 context를 사용하고 있는 스레드의 개수이다.

      예) ctxtid = check_context_id;
          num = tpgetctxt(ctxtid, TPFUNC);
    • 하나의 context를 여러 스레드에서 tpsetctxt()로 공유하고 있는 상황에서 tpend()를 호출하 때 메모리가 free되면서 다른 스레드에서 비정상 종료되는 현상을 수정하였다.

    • 관련 이슈 : IMS 89118

  • 클라이언트 오류 수정

    • tpend에서 TPEPROTO가 발생할 때 Memoey leak이 발생할 수 있는 가능성을 수정하였다.

    • tpend 실행 후 tperrno가 잘못 세팅될 수 있는 부분을 수정하였다.

    • tpgetrply에서 에러가 발생할 때 tperrno = 0이 발생하는 현상을 수정하였다.

    • tpgetrply 실행할 때 tpetime이 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 94203

  • 도메인 소켓으로 연결된 클라이언트에게 tpsendtocli를 요청할 때 실패하고 TPENOREADY 설정되는 현상 수정

  • tpmcallx 반환값 중 f_list에 값이 채워지지 않는 현상 수정

  • tpgetsvglist()를 호출할 때 COUSIN이면서 LOAD=-1인 경우에 자기 노드의 서버 그룹만 리턴하는 현상 수정

  • tp_sleep()를 호출할 때 발생하는 간헐적으로 Hang 현상 수정

    • 인자로 입력한 시간이 select() 호출 전에 이미 timeout 발생했거나 인자가 음수 등일 경우 함수 호출 즉시 select에서 에러가 발생하고, read 함수로 들어가면서 hang이 발생한다. 서비스 함수에서 tp_sleep()을 호출할 때 TMM 이벤트를 감지하지 않도록 수정되었다.

    • CLOPT 옵션 : -i 추가

      UCS 타입 서버의 usermain() 함수 안에서 tp_sleep(), tp_usleep()이 호출되는 경우에 [-i] 옵션에 따라 동작이 달라진다.

      TMM 이벤트를 감지하지 않도록 수정되어 -i 옵션을 지정하지 않으면 TMM 이벤트를 감지하지 않고, 옵션을 지정하면 TMM 이벤트를 감지한다.

      usermain() 함수에서는 서비스 요청이나 tmdown 등의 이벤트 처리를 위해서 tpschedule()을 사용해야 한다. tp_sleep() 함수는 CLH 이벤트가 발생할 때까지 대기하는 함수인데, usermain() 안에서 이 함수를 사용하면 대기하게 되면서 tpschedule() 호출이 지연될 수 있다. 따라서 최근 패치 이전에는 TMM 이벤트도 함께 감지하도록 했으나, 이벤트 발생 이후에 TMM 이벤트를 내부적으로 처리하지 않기 때문에 AP 로직 구현에 따라서 CPU 과부하가 발생할 수 있었다. 최근 패치에서는 TMM 이벤트를 직접 처리해주도록 변경했으나, 이 방법 또한 문제의 여지가 있으므로 아예 tp_sleep()에서 TMM 이벤트를 감지하지도 처리하지도 않는 것이 안전하다.

      다만, tp_sleep()에서 대기하는 동안에 tmdown 요청 등이 들어오는 경우에는 TMM 이벤트를 감지하지 않아서 계속 대기상태에 있게 되는데, 명시적으로 -i 옵션을 지정하는 경우에만 TMM 이벤트를 감지하도록 해서 tpschedule() 을 통해 TMM 이벤트가 처리될 수 있도록 한다(AP로직에서 tp_sleep() 리턴값 2 이상의 경우에 tpschedule()을 호출하지 않으면 이후 tp_sleep()은 계속해서 TMM 이벤트가 발생하므로 반드시 tpschedule()을 호출해주어야 한다).

    • 관련 이슈 : IMS 87508

  • fbisfbuf() 함수를 사용할 때 오류 발생하는 현상 수정

  • tpgetcliaddr 함수를 사용할 때 코어 발생하는 현상 수정

    • IPv4 타입인데도 불구하고 sockaddr_in6 구조체를 사용하는 오류가 발생되었다.

    • 관련 이슈 : IMS 83605

  • FDL 함수에서 LONG 타입을 사용할 때 비정상 동작하는 현상 수정

    • 엔진은 64Bit비트 AP는 32Bit 환경에서 fbgetalloc_tu, fbgetalloc_tut 함수에서 LONG 타입을 사용할 때 비정상 종료하는 현상을 수정하였다.

    • 32bit 클라이언트에서 long에 -2를 fbput하고, 64bit 서버에서 LONG 타입에 fbget하면 양수가 출력되는 현상을 수정하였다.

      • 원인 : sign 부호를 저장하지 않고 (unsigned int)로 LONG 타입 변수에 값을 저장하기 때문에 음수든 양수든 모두 양수로 변환된다.

      • 해결 : sign 부호를 필드버퍼에 함께 저장하여 64bit 환경에서 fbget할 경우에 양수/음수 여부가 올바르게 변환되도록 수정하였다.

    • export TMAX_FDL_LONGSIGN=Y 를 지정해야 수정된 기능으로 동작한다.

    • 관련 이슈 : IMS 86928

  • 멀티 스레드 클라이언트에서 tmax_chk_conn 사용시 에러 발생하는 현상 수정

    • tpacall과 tpgetreply 사이에 tmax_chk_conn(0)를 사용할 때 TPESYSTEM 에러가 발생하는 현상을 수정하였다.

    • tpacall과 tpgetreply 사이에 tmax_chk_conn(1)를 양수로 사용할 때 Msg discarded 에러가 발생하는 현상이 수정되었다.

      (E) CLI 2008 tpcall reply arrived after timeout. Msg discarded : 2003 11 [CSC5708]
    • 관련 이슈 : IMS 83330

  • 정상적인 *_sdl.o 파일 대신 lib 아래 있는 sdl.o를 링크한 잘못된 서버의 경우 서비스를 호출할 때 hang 현상 수정

  • libtmaxcfl 는 static 라이브러리만 배포하도록 변경

    • libtmaxcfl의 static 라이브러리를 다른 executable들이 링크할때 심볼 문제가 발생되지 않는다.

    • 관련 이슈 : IMS 87275

  • tpstart 재연결 타임아웃이 제대로 동작하지 않는 현상 수정

    • tpstart 시 main 서버에 연결되지 않을 경우 재연결 타임아웃을 1초로 설정했음에도 1초 이전에 타임아웃이 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 99750

3.3. RQ

  • RQ POD 서버의 BACKUP을 기동할 때 mintms 때문에 계속 추가 기동하는 현상 수정

    • tmsname = "POD"로 설정할 때 노드의 비정상종료로 백업 서버 그룹이 기동될 때 POD 타입으로 설정한 RQS가 TMS로 인식되어 잘못된 mintms 설정때문에 많은 수의 서버를 기동시키려는 문제를 수정하였다.

    • 관련 이슈 : IMS 86561

  • RQ 서버 BACKUP을 구성할 때 문제점 수정

    • tmadmin에서 백업 서버 그룹의 노드에서 rqs -s를 조회할 때 조회가 안되는 현상을 수정하였다.

    • RQ 데이터 파일을 생성할 때 IPCPERM 설정을 따르도록 수정하였다.

    • 관련 이슈 : IMS 79429

  • RQ QSIZE를 16 이상, 4의 배수가 아닌 값을 설정할 때 RQ 파일이 복수될 때 RQ가 비정상 종료 현상

    • 파일을 생성할 때 QSIZE 값만큼 파일을 생성하지 않고, 실제 세그먼트 크기 * 개수 의 크기로 파일을 생성하도록 수정하여 기존 RQ 파일을 복구할 때에 오류가 발생하지 않도록 수정하였다.

    • 관련 이슈 : IMS 86561

  • RQ에 enq할 때 full이 발생할 경우 slog에 기록하도록 수정

    • tpenq를 수행할 때 RQ에서 qfull이 발생되어도 slog에 기록하지 않기 때문에 운영자는 알 수 없다. 그래서 tpenq에서 qfull이 발생할 때 slog에도 로그가 남도록 수정하였다.

      (W) RQS3027 RQ(rq이름) full [RQS0225]
    • 관련 이슈 : IMS 85795

  • RQS tpenq_ctl deq_time을 사용할 때 서비스 송신 전까지는 request queue에 저장되지 않는 현상 수정

    • RQS 내부적으로 서비스 송신 전까지는 메모리에만 메시지를 보관하고 있는 것이 문제를 tpenq_ctl 요청을 받으면 즉시 request queue에 저장하도록 수정하였다.

    • rqstat() 조회할 때에도 즉시 건수가 증가된다. 기존과 달리 아직 서비스가 요청되지 않는 것들도 건수에 집계된다.

    • 관련 이슈 : IMS 83488

  • RQS에서 사용자가 지정한 서비스로 qcall을 요청할 때 enq 요청이 들어왔던 CLH로 내보내도록 변경

    • RQS에서 서비스를 qcall 요청할 때 요청이 들어왔던 clh index로 내보내도록 수정하였다. 또한 해당 CLH 채널이 불능일 경우 fail-queue로 옮기도록 수정하였다.

    • 관련 이슈 : IMS 83488

  • RQS에서 rollbac할 때 TPENQ로 들어온 메시지가 정리 안되던 문제 수정

  • RQ transaction 처리 버그 수정

    • tx_begin(), tpenq_ctl(), tx_commit() 호출 중에 qfull이 발생할 때 tx_commit()에서 응답을 못받고 hang이 발생하는 현상을 수정되었다.

    • tpenq_ctl()하고 tx_commit() 도중 tpdeq_ctl()을 호출하면 dequeue되는 현상 및 reply count가 음수가 되는 현상을 수정되었다.

    • 관련 이슈 : IMS 84962,85971

3.4. 도메인 게이트웨이

  • Tmax 4 SP3 Fix9 이하의 버전과 Tmax 5 이상 버전으로 구성된 멀티 도메인 환경에서 스케줄링하지않는 오류 수정

    • Tmax 4 SP3 Fix9 이하의 버전과 Tmax 5 이상 버전으로 구성된 멀티도메인 환경에서 Tmax 4에서 Tmax 5의 게이트웨이와 COUSIN 묶인 서비스로 요청시 Tmax 5의 서비스가 NRDY 상태여서 TPENOREADY 발생하였다면 Tmax 5 서버스가 재기동되어도 계속 스케줄링하지 않는다. -k 옵션을 Tmax 5의 환경파일에 설정하면 서비스 NRDY 상태를 Tmax 4로 전송하지 않게 하여 스케줄링되지 않는 문제를 해결할 수 있다.

    • 관련 이슈 : IMS 89623

  • GATEWAY0209 internal error : no clh is available [TMGW0024] 에러 현상

    • 리모트로부터 들어온 요청에 대해서 CLH 로 서비스 요청시, 알맞은 CLH 채널을 선택하지 못하였을 경우 발생하는 로그로 G/W에서 CLH 채널 선택시 xid부분의 음수값 여부를 판단하여 올바른 값을 선택하도록 수정하였다.

    • 관련 이슈 : IMS 83169, 81275

  • tmgwnt domainIRT 요청 실패시 TPERDOWN 에러 발생 및 TMAX_BACKUP_ADDR 접속시도 현상

    • domain A와 domain B가 동일한 서버그룹/서버/서비스로 구성되어 있고 해당 서버 그룹과 tmgwnt가 COUSIN 설정이며 LOAD가 각각 -2, -3(cousin backup) 설정인 환경에서 두 도메인의 서버 그룹의 서버들이 모두 NRDY 상태일 경우, 서비스를 요청하면 1번의 요청에 대해서 tmgwnt로 11번 호출되다가 TPERDOWN 에러가 발생하고 TMAX_BACKUP_ADDR로 접속 시도하는 현상이 발생하였다.

    • TPERDOWN 에러가 나면서 TMAX_BACKUP_ADDR로 접속 시도하는 현상을 수정하였다.

    • st -s을 확인할 때 1번 요청에 11번 호출되는 현상을 수정하였다.

    • 로컬 도메인의 게이트웨이가 cousin group에 속하지 않고, 리모트 도메인의 cousin group에 속하는 서비스를 호출했을 때 리모트 도메인의 모든 서버 그룹들이 NRDY 상태인 경우에 에러 응답을 받을 때 위와 같은 TPERDOWN 에러를 수신하는 현상을 수정하였다.

    • 관련 이슈 : IMS 88775

  • tmaxgwnt에서 상대 도메인의 서비스가 재기동될 경우 스케줄링 못하는 문제 수정

    • Tmax 4.x와 Tmax 5.x 간의 도메인으로 구성된 경우 Tmax 5.x 대에서 COUSIN으로 구성된 서버와 게이트웨이가 NOTREADY/채널이 연결되지 않은 경우 재기동 메시지를 Tmax v4.x 대로 전송하여 메모리 누수가 생기는 현상이 발생하였다.

    • CLOPT의 -k 옵션을 사용하여 Tmax 5.x 대 도메인의 서비스의 상태 정보를 Tmax 4.x 대로 전송하지 않도록 하는 기능을 추가하였다.

      Tmax 5.x 대끼리 구성된 게이트웨이에서 설정할 경우 비정상동작을 하게된다.

    • 관련 이슈 : IMS 89623

3.5. Tuxedo 게이트웨이

  • Tuxedo 도메인 환경설정 MTYPE을 사용할 때 tuxgw에서 core 발생 오류 수정

    • MTYPE은 TUXEDO에서 로컬/리모트 도메인이 동일 Machine Type일 경우 encoding/decoding을 bypass하는 기능이다.

    • 관련 이슈 : IMS 81392

  • Tuxedo 도메일 게이트웨이(GWTDOMAIN)에서 아웃바운드로 FML buffer type 서비스를 요청할 때 tuxgw와 연결 강제 종료되는 오류 수정

    • Linux와 같은 little-endian 시스템에서 Tmax tuxgw에서 GWTDOMAIN으로 메시지를 전송할 때 FML buffer의 크기 관련 필드를 htonl해주는 코드가 누락되어서 잘못된 크기가 전달되었다. Tuxedo의 Patch Level None 버전에서는 정상동작했으나, Patch Level이 올라가면서 체크가 강화되면서 Tuxedo 도메인 게이트웨이에서 잘못된 헤더로 판단하고 tuxgw와의 연결을 강제로 종료하는 문제가 발생하였다.

    • 관련 이슈 : IMS 88345

3.6. Java 게이트웨이

  • JEUS GW의 CLOPT 의 CDATE 설정대로 동작하지 않는 오류 수정

3.7. TCP 게이트웨이

  • tcpgw -e, -o 옵션으로 로그 날짜 변경 후 최초 서비스가 인바운드일 경우 다음 날 로그가 이전 로그 파일에 기록되는 오류 수정

  • TCP 클라이언트 모드에서 백업을 설정할 때 환경설정 CLOPT 절 파싱 에러로 백업으로 호출이 되지 않는 오류 수정

  • tcpgw에서 -P, -r 옵션을 동시 설정하여 양방향 호출을 구성할 경우 동작하지 않는 오류 수정

    • 설정 예

      ex)
      tcpgw           SVGNAME = svg1,
                      MIN = 1, MAX = 1,CPC = 2,
                      SVRTYPE = CUSTOM_GATEWAY,
                      CLOPT = "-o $(SVR).out -e $(SVR).out -- -P 36254 -N 2 -r 192.168.1.86:31065(O) -n 2 -d 0"
    • 관련 이슈 : IMS 81637

  • check_end_msg()에서 수신 데이터보다 리턴한 데이터 크기가 작을 경우에 수신 데이터의 뒷 부분이 버려지는 오류 수정

3.8. TDL

  • 다른 두 라이브러리 내에 동일한 함수명이 존재할 경우 링크를 다르게 주었음에도 불구하고 한 함수명만 호출되는 오류 수정

    • dlopen의 mode flag가 RTLD_GLOBAL 로 설정되어 있어 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 82393

  • TDL 멀티 노드 환경에서 tdlupdate 라이브러리를 찾을수 없다고 나오는 오류 수정

    • tdlupdate할 때 사전에 mod 경로에 있는 라이브러리 정합성을 검사하는 로직이 잘못되어 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 82677

  • 모니터링을 위해 tdlshm -u s -m 사용시 core 발생하는 오류 수정

    • 모듈 인덱스 찾는 부분에서 이름값 주소를 잘못 전달하여 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 83539

  • urcode에 time(NULL), flags에 TDL_TRAN을 설정하여 tdlcall할 때 TDL_ENOLIB 발생하는 오류 수정

3.9. RPC

  • RPC 컴파일할 때 오류 발생 수정

    • RPC 컴파일할 때 "Too many arguments specified for macro dce_dbgwrite" 오류 발생하여 tmaxrpc.h 가 수정되었다.

    • 관련 이슈 : IMS 82010

3.10. 유틸리티

  • twagent Core 로그 발생

    • webadmin 화면에서 로그 관리 메뉴 하위의 큰 용량의 파일을 클릭할 때 Core가 발생하는 문제를 수 정하였다.

    • 관련 이슈 : IMS 80424

  • tmdown -g할 때에 STD_DYN 서버가 종료되지 않는 현상

    • tmdown -g할 때에 STD_DYN 서버가 종료되지 않는 현상을 수정하였다.

    • 관련 이슈 : IMS 80748

  • tmadmin -n 리모트 노드(Linux 머신) 실행할 때 오류 발생

    • Unix와 Linux가 혼용된 멀티노드 환경에서 Unix에서 tmadmin -n Linux 머신에 명령할 때 socket connect error가 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 82830, 77024, 96522

  • 서버 프로그램에서 system(tmboot) 호출할 때 BOOT3007 오류 발생 현상

    • 서버 프로그램에서 system(tmboot)을 호출할 때 $TMAXDIR/config/tmconfig 파일이 아닌 $TMAXDIR/path/tmconfig 경로를 참조하도록 수정하였다.

    • 관련 이슈 : IMS 83216

  • tmdown -A 요청할 때 DYN_SVR_TYPE 서버는 종료되지 않던 문제 수정

    • tmboot -A, tmdown -A를 요청할 때 DYN_SVR_TYPE 서버는 종료되지 않던 문제 수정하였다.

    • 관련 이슈 : IMS 84576

  • tmapm가 사용할 때 모든 Tmax 엔진 및 서버 프로세스가 강제종료되는 현상이 발생

    • tmapm이 kill 스크립트를 호출할 때 pid를 0으로 설정하여 호출함으로 인해 모든 Tmax 엔진 및 서버 프로세스가 강제종료되는 현상을 수정하였다.

    • 관련 이슈 : IMS 89277

  • IDLC 바인딩/치환

    • 환경 변수(TMAX_RPC_BIND, TMAX_RPC_BIND2)를 통해 선택적으로 사용하도록 한다.

      • 원문이 '$ww_shipno’일 경우

        TMAX_RPC_BIND를 설정할 경우 : :ww_shipno
        TMAX_RPC_BIND를 설정할 하지 않을 경우 : '$ww_shipno'
      • 원문이 $ww_shipno[char]일 경우

        TMAX_RPC_BIND2를 설정할 경우 : :ww_shipno
        TMAX_RPC_BIND2를 설정할 하지 않을 경우 : $ww_shipno
    • 관련 이슈 : IMS 89687

  • uncfl한 파일로 cfl을 수행할 때 에러 발생 수정

    • hmsmsglive hmsmaxbulksize 값은 기본값을 변경, hmsmaxbulkthr range를 수정하였다.

    • 관련 이슈 : IMS 91233

  • 범위에서 벗어난 IPCPERM 값 설정후 cfl할 때 에러 메시지 오류

    • MIN, MAX 값이 잘못 표기되었던 것을 0600 ~0700로 표기되도록 수정하였다.

    • 관련 이슈 : IMS 97401

  • tmd STRUCT 타입을 호출할 때 응답버퍼가 찍히지 않는 현상

    • tmd STRUCT 타입을 호출할 때 응답버퍼가 찍히지 않는 현상을 수정하였다.

    • 관련 이슈 : IMS 97768

  • tmapm이 RUN 상태인 TMAXNONTX 타입 게이트웨이를 체크하는 현상

    • tmapm이 TCS, UCS 타입의 서버에만 체크하도록 수정하였다.

    • 관련 이슈 : IMS 96726

  • tmadmin 접속 에러 시 구체적인 원인 설명

    • tmadmin, tmboot, tmdown, libsvr, libtms 등 모든 tmm 접속 프로그램에서 접속 에러 시 에러 원인 설명없이 없다.

    • 접속 실패시 다음과 같이 구체적인 원인이 사용자 콘솔에 출력될 수 있도록 수정하였다.

      (E) ADM2045 failed to register to TMM : ADM_MAIN_STARTED [COM0615]
      (F) ADM3010 failed to register to TMM [ADM0015]
    • 관련 이슈 : IMS 100280

  • tmaxlibver 수행시 해당 라이브러리의 undefined symbol이 있으면 버전 확인이 불가능한 현상

    • tmaxlibver 내부적으로 매번 undefined symbol을 하드코딩하는 기존 방법에서 nm, ldd 등을 활용하여 동적으로 해당 라이브러리의 undefined symbol을 확인하고 자동으로 stub 파일에 해당 심볼들을 추가해서 빌드가 실패하지 않도록 기능을 개선하였다.

    • -c compiler , -u libc, -V 옵션을 추가하였다.

    • 관련 이슈 : IMS 99925, 101587

  • mksvr로 빌드된 서버를 tmdown 이후 cfadd 를 할 경우 에러 발생 하는 현상 수정

    • mksvr로 빌드된 서버를 tmdown할 경우 서비스 정보가 삭제되어 발생하는 오류를 수정하였다.

    • 관련 이슈 : IMS 85742

  • TDL 멀티노드 환경에서 tdlinit할 때 slave의 racd에서 SIGSEGV 발생하는 현상 수정

    • TMAX_LOGLVL=DEBUG4의 영향을 받아서 디버그 로그로 출력할 때 잘못된 주소값 사용하여 발생하는 오류를 수정하였다.

    • 관련 이슈 : IMS 95816

  • IPCPERM이 06XX로 설정된 Tmax가 기동 중인 상황에서 cfl을 수행하면 (F) CFL0091 shared memory get error 발생 현상 수정

    • cfl을 수행하면 0700 권한으로 확인해서 발생한 오류를 수정하였다.

    • 관련 이슈 : IMS 91204

  • racd를 이용하여 리모트노드를 tmboot시킬 때 stderr로 출력되는 내용이 전달안되는 현상 수정

3.11. 관리 도구

  • 멀티 CLH 환경에서 STD_DYN 타입의 서버 st -s 조회할 때 NRDY로 나오는 현상 수정

    • 멀티 CLH 환경에서 STD_DYN 타입의 서버 st -s 조회할 때 NRDY로 나오는 현상 수정하였다.

    • 관련 이슈 : IMS 85351

  • tmadmin cfg 명령어에 누락된 항목 수정

    • DOMAIN 절 maxsacall, maxcacall, maxconvn, maxconvs, domain_id, fdlversion, gwchkint, gwconnect_timeout

    • NODE 절 curclh, sprcount, tmscount, cpccount, loginsvc, cllbindip

    • SVRGROUP 절 curtms, tmsloglvl, loglvl

    • SERVER 절 target, ctx_ereply

    • 관련 이슈 : IMS 79983, 81187

  • TmaxCFGADD 게이트웨이가 있는 환경에서 cfgadd로 서버 그룹을 추가할 때 버그 수정

    • 환경 설정에 게이트웨이가 존재하고 cfl -i -a -o를 이용해서 환경설정을 추가하고 이때, 서버 그룹을 추가할 경우 다음의 에러가 발생하면서 실패하는 현상을 수정하였다.

      invalid cfgfile at SYSTEM SVRGROUP, old(TMAXGW) add(IV_GRP02) [ADM0431]
    • 관련 이슈 : IMS 101028

  • Timeout으로 인한 에러 응답할 때 사용자 헤더 덮어쓰는 현상 수정

  • LU62R POSTSVC로 유발된 중복 로깅 에러 수정

  • lu62rgw에서 데이터 수신 중 AP_DATA_INCOMPLETE 발생했을 때 기존 수신했던 데이터를 잃어버리는 현상 수정

  • lu62rgw에서 DTP를 설정할 때 두 번째 수신할 때 비정상 종료되는 현상

    • 두 번째 데이터를 수신할 때 내부적으로 관리하는 변수가 초기화되지 않아서 잘못된 배열 index를 참조하게 되어서 잘못된 메모리 주소에 접근하여 비정상 현상을 수정하였다.

    • 관련 이슈 : IMS 100643

  • lu62rgw에서 부하가 발생할 때 잘못된 크기의 버퍼를 참조하면서 비정상 종료

    • primary_rc가 셋팅되어 있으면 Tmax 에러코드가 아닌 해당 값을 리턴하도록 되어 있는데, 항상 Tmax 서비스로 응답이 전달되어야 하므로 primary_rc에 값이 셋팅되지 않도록 수정하였다.

    • 관련 이슈 : IMS 79965

  • lu62sgw 에러가 발생할 때 에러코드를 잘못된 값으로 셋팅하는 현상

    • lu62rgw에서의 각 스레드의 상태 정보를 정상적으로 관리하도록 수정하였다.

    • 관련 이슈 : IMS 100643

  • lu62r sysplex 도입에 따른 FQPLUNAME 동작의 차이

    • mainframe이 단일 장비여서 FQPLUNAME이 하나밖에 없었으나 sysplex 도입으로 Mainframe이 이중화 되면서 FQPLUNAME이 하나 이상으로 구성된 환경에서 mainframe을 내렸다 올린 이후 hostlink에서 mainframe의 요청을 제대로 처리하지 못하는 현상 이 발생하였다.

    • hkcfl에서 lu62rgw에 한해서, FQPLUNAME 항목을 다음과 같이 설정할 수 있도록 기능을 확장하였다.

      • FQPLUNAME 항목을 설정하지 않아도 hkcfl이 가능하도록 수정하였다. (기존에는 반드시 지정해야 하는 필수 옵션이었음)

      • FQPLUNAME 항목에 구분자 콤마(,)를 통해 하나 이상의 pluname을 지정할 수 있도록 하였다. (최대 32개까지 지정할 수 있음, 구분자 외에 공백이 들어가서는 안됨)

    • liblu62rgw 라이브러리에서는 구분자 콤마로 여러개의 FQPLUNAME 이 지정된 경우 각각의 FQPLUNAME 모두에 대해서 communication server에 attach notify를 받을 수 있도록 적용하였다.

    • libtmaxgwmt 라이브러리에서는 shared library의 경우 _init_header 함수의 심볼이 undifined 에러가 발생하는 현상을 수정하였다.

    • 관련 이슈 : IMS 101080

  • hkcfl 주석 문자를 이름에 사용할 때 SegFault 발생 현상 수정

    • 주석 문자인 해시기호(#)가 큰따옴표(" ")로 묶인 이름 안에 포함되어 있을 때 해시기호(#)의 뒷부분이 무시되면서 이름을 정상적으로 설정하지 못하는 부분을 수정하였다.

    • 관련 이슈 : IMS 85617