35
Tmax Programming Guide (RCA) Copyright © 2000 TmaxSoft Co., Ltd. All Rights Reserved

Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA)

Copyright © 2000 TmaxSoft Co., Ltd. All Rights Reserved

Page 2: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 1

Copyright Notice Copyright©2000 TmaxSoft Co., Ltd. All Rights Reserved. TmaxSoft Co., Ltd. 대한민국 서울시 강남구 대치동 946-1 글라스타워 18 층 우)135-708 Restricted Rights Legend This software and documents are made available only under the terms of the TmaxSoft License Agreement and may be used or copied only in accordance with the terms of this agreement. No part of this document may be reproduced, transmitted, or translated in any form or by any means, electronic, mechanical, manual, or optical, without the prior written permission of TmaxSoft Co., Ltd. 소프트웨어 및 문서는 오직 TmaxSoft Co., Ltd.와의 사용권 계약 하에서만 이용이 가능하며, 사용권 계약에 따라서 사용하거나 복사 할 수 있습니다. 또한 이 매뉴얼에서 언급하지 않은 정보에 대해서는 보증 및 책임을 지지 않습니다. 이 매뉴얼에 대한 권리는 저작권에 보호되므로 발행자의 허가 없이 전체 또는 일부를 어떤 형식이나, 사진 녹화, 기록, 정보 저장 및 검색 시스템과 같은 그래픽이나 전자적, 기계적 수단으로 복제하거나 사용할 수 없습니다. Trademarks Tmax, WebtoB, WebT, and JEUS are registered trademarks of TmaxSoft Co., Ltd. All other product names may be trademarks of the respective companies with which they are associated. Tmax, WebtoB, WebT, JEUS 는 TmaxSoft Co., Ltd.의 등록 상표입니다. 기타 모든 제품들과 회사 이름은 각각 해당 소유주의 상표로서 참조용으로만 사용됩니다. Tmax Programming Guide (RCA)

Document Edition Date Version

TMRD-0107-04-400 Jan 7, 2006 Tmax 4.0

Tmax 제품은 아래 표와 같습니다. 본 서는 Tmax Standard 와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을 포함하고 있습니다.

Tmax Standard TP Function + 2 Phase Commit

Page 3: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 2

Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway, TCP/IP Service Gateway

Page 4: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 3

이 책에 관하여…

RCA Development Guide 는 Tmax Client Library 를 사용할 수 없는 기존 통신 프로그램이나 PDA 등을 Tmax System 과 연결을 지원하는 RCA 모듈의 설치 및 환경 설정방법을 설명해준다. 사용자는 RCA 모듈을 통해 Tmax System 에서 제공하는 서비스를 이용할 수 있을 뿐 아니라 Tmax 가 제공하는 장애대책 기능과 관리기능도 사용할 수 있게 된다. 누구를 위한 책인가? 이책은 Tmax 도입전의 통신프로그램을 계속 활용하려고 하거나 PDA 에 대한 서비스를 제공하고자 하는 개발자들을 위한 정보를 제공한다. 이책의 완전한 활용을 위해서는 통신 프로토콜과 Multi-thread 에 관련된 프로그래밍 능력을 필요로 한다.. 어떻게 사용하는가? 1. 개요 : RCA 의 기본 개념에 대해 설명한다. 2. 구조 : RCA 의 내부적인 구조와 전송경로를 설명한다. 3. 운영 방법 : RCA 와 Tmax System 을 연동하는 운영법을 설명한다. 4. 환경변수 : RCA 를 이용하기 위해 설정해야 하는 환경변수에 대해 설명한다. 5. 특징 : RCA 의 특징에 대해 설명한다. 6. Install : 각 Platform 에 제공되는 파일들과 이를 Tmax 의 환경파일에 설정하는 방법을 설명한다. 7. RCAH Customizing : 개발자가 RCAH 를 프로그래밍 할 때의 유의사항이다. 8. RCAH 예제 : Solaris 2.7 에서 TCP/IP 로 Client 와 연결하는 RCAH 의 실제 예이다. 9. 에러 메시지 : RCA 를 사용하면서 발생할 수 있는 에러 메시지들이다. 관련서 Tmax Reference Manual 규약

규 약 설 명

Page 5: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 4

{ } [ ] |

( ) Numeric

String Literal

필수 항목 옵션 항목 지정된 여러 개의 값 중 배타적인 선택 구분자 디폴트 값 숫자 abc 형태의 문자열 “abc” 형태의 문자열

Page 6: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 5

차 례

1 개요.............................................................................................. 7

2 구조.............................................................................................. 8

2.1 서버 모드................................................................................................................. 8

2.1.1 클라이언트 모드............................................................................................... 9

3 운영 방법................................................................................... 10

3.1 개괄........................................................................................................................ 10

3.2 운영 방식............................................................................................................... 10

3.3 기동 및 종료.......................................................................................................... 13

3.4 모니터링................................................................................................................. 14

4 환경 변수................................................................................... 16

5 특징............................................................................................ 18

5.1 멀티 포트 지원 ...................................................................................................... 18

6 장애 대책................................................................................... 20

6.1 RCA API ............................................................................................................. 21

7 설치............................................................................................ 23

7.1 구성........................................................................................................................ 23

7.2 환경 파일 수정 ...................................................................................................... 23

7.3 rcad 모듈 작성 및 준비 ....................................................................................... 24

8 RCAH Customizing.................................................................. 25

9 RCAH 예제 ............................................................................... 26

Page 7: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 6

10 에러 메시지 .......................................................................... 32

Page 8: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 7

1 개요

RCA 는 Raw Client Agent 로서 Tmax Client Library 를 사용할 수 없는 기존 통신 프로그램과 TCP/IP 소켓으로 연결하여 Tmax System 에서 제공하는 서비스를 이용할 수 있도록 지원 하는 Agent 이다.

RCA 는 Multi Thread 방식으로 처리되며 각각의 thread 는 Tmax 클라이언트에 해당한다. 따라서 기동될 thread 의 개수는 Tmax 시스템의 라이센스를 고려하여 설정하여야 한다. 또한 RCA 에서는 POSIX thread 가 사용되며 kernel 레벨 thread 로써 시스템에 의하여 스케쥴링된다. 따라서 멀티 CPU 환경에서 보다 효과적으로 처리될 수 있다.

이러한 서버로서의 기능 외에 3.8.14 버전에서는 리모트 소켓 프로그램에서 연결 요청을 기다리고 RCAH 의 각 쓰레드에서 연결을 요청하는 클라이언트 모드가 추가 되었다.

이 자료를 쉽게 이해하고 활용하기 위해서는 Tmax 시스템에 대한 기본적인 이해와 클라이언트 프로그래밍에 대한 숙지가 필요하므로 이에 대한 배경 지식이 없는 경우에는 Tmax Programming Guide ( C ) 를 참고하기 바란다. 이 문서에서 언급하는 내용은 Tmax 4.0 을 바탕으로 작성되었다.

Page 9: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 8

2 구조

RCA 는 사용자의 접속을 제어하는 RCAL ($TMAXDIR/bin/rcal)과 사용자의 로직과 함께 생성되는 RCAH, 그리고 관리 tool 인 rcastat 와 rcakill 로 구성되어 있다. RCAL 은 최대 500 개의 RCAH 를 구동할 수 있으며, 하나의 RCAH 내에는 최대 60 개의 thread 를 가질 수 있다. 따라서 한 RCA 모듈은 최대 500 * 60 = 30000 개의 client 를 지원한다.

2.1 서버 모드

RCAL 는 TCP/IP 구조로 보면 서버 프로세스에 해당된다. 즉, 상대 통신 프로그램에서 들어오는 연결을 기다리며 반대로 RCAL 에서 상대 통신 프로그램으로 연결은 하지 않는다. RCAH 는 Tmax Client Thread Library($TAMXDIR/lib/librcah.so)와 사용자가 작성한 Client 프로그램(“8.RCAH 예제” 참조)이 결합하여 생성되는 실행 파일이다. 또한 RCAH 는 Multi Thread 방식으로 처리되며 한 Thread 가 하나의 Tmax Client 에 해당 한다. 즉 하나의 Client 프로그램(RCAH)이 Thread 수 만큼

RCAL

RCAH

RCAH

RCAH

TMAX SYSTEM

Thread Pool

Client

Client

Client TCP/IP 통신

RCA

Page 10: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 9

Tmax System 과 연결을 맺어 서비스를 제공 한다. 이와 같이 Multi Thread 방식으로 처리되기 때문에 전역 변수 혹은 static 변수의 사용에 대한 주의가 필요하다.

관리 tool 인 rcastat 를 통해서 RCA configuration 정보와 현재 RCA 에 접속한 클라이언트 수 등을 모니터링할 수 있으며 RCA 를 종료하고자 하는 경우 RCA 가 사용하는 자원을 제거하기 위하여 rcakill 을 제공하고 있다.

2.1.1 클라이언트 모드

클라이언트 모드는 서버 모드와는 다르게 리모트 소켓 프로그램에서 연결 요청을 기다리고 RCAH 의 각 쓰레드에서 연결을 요청하는 방식이다.

리모트 소켓 프로그램과 연결이 이루어지면 서버 모드나 클라이언트 모드나 RCA 동작은 동일하다. 하지만 클라이언트 모드일 경우에 RCAL 는 리모트 연결 요청을 기다리지 않는다.

단, 각 쓰레드 main 프로그램은 서버 모드와 클라이언트 모드가 다르다.

Thread Pool

TMAX SYSTEM

RCAHClient

RCAHClient

RCAHClient

TCP/IP 통신

Page 11: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 10

3 운영 방법

3.1 개괄

RCA 를 운영하기 위해 먼저 RCAH 를 생성해야 한다. 사용자는 thrinit(), thrmain(), thrdone()의 루틴을 구현하여 RCAH 라이브러리와 링크하여 RCAH 실행 파일을 만든다. 이와 같이 생성된 실행 파일은 RCA_DIR 에 존재해야 한다.

thrinit()은 해당 thread 가 처음 기동될 때 불려지며, thrmain()은 새로운 client socket 이 연결될 때 해당 socket fd 와 port 번호를 인수로 사용해서 호출된다. ($TMAXDIR/usrinc/rca.h 의 RCAINFO 구조체 참조) thrdone()은 해당 thread 가 종료될 때 호출된다. 따라서 일반적으로 thrinit() 부분에서 Tmax 시스템과의 연결을 처리하며 thrdone()에서는 Tmax 시스템과의 연결 해제를 처리한다.

RCAH 컴파일시 주의할 점은 usrinc/rca.h 가 다른 어떤 Tmax 헤더파일들보다 먼저 include 되어야 한다는 것이다. RCA 생성방법에 대한 자세한 내용은 “7 장 RCAH customizing” 과 “8 장 RCAH 예제”를 참조하기 바란다.

RCA 를 종료하고자 하는 경우에는 사용하는 MODE 에 따라 차이가 있다. RCA 가 Tmax 시스템과 다른 노드에서 운영되는 REMOTE MODE 에서는 RCA 를 별도의 명령어로 기동시켜야 함으로 강제종료 또는 rcakill 을 사용하여 종료한다. 반면 RCA 가 Tmax 시스템과 같은 노드에서 운영되는 LOCAL MODE 에서는 rcakill 을 사용하여 RCA 를 종료시키거나 Tmax 시스템 명령어인 tmdown 으로 RCA 도 함께 종료시킬 수 있다.

3.2 운영 방식

RCA 는 두가지 방식(LOCAL MODE, REMOTE MODE)으로 운영될 수 있다.

Page 12: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 11

첫째, LOCAL MODE 의 경우에는 Tmax System 과 RCA 모듈이 같은 노드에 있으며, 통합 관리가 필요한 경우에 사용한다. RCAL 을 하나의 Tmax 서버 형태로 등록하며 tmboot/ tmdown 명령으로 제어가 가능해진다. 따라서 LOCAL MODE 에서 RCA 가 실행 될 경우에는 RCAL 이 Tmax System 과 연결되어 별도의 실행이나 종료 명령어 없이 tmboot 나 tmdown 으로 기동 및 종료된다. 또한 Tmax System 과는 파이프 통신을 한다. tmboot 명령어에 의해 기동된 RCAL 은 RCA_DIR 환경 변수를 읽어서 통신용 파이프와 RCAH 실행 파일의 위치를 찾는다. RCA_DIR 은 환경 파일에 지정된 파일로부터 읽어 들인다. 만약 RCA_DIR 환경 변수가 정의 되지 않은 경우에는 해당노드 Tmax System 의 APPDIR 을 RCA_DIR 로 사용한다. 따라서 RCAL 은 RCA_DIR 디렉토리에 통신용 파이프를 생성하며 RCAH 를 기동시킨다. 즉, RCA 의 등록은 Tmax 시스템 서버 프로세스와 동일한 방법으로 처리하며 관리는 Tmax 시스템 클라이언트와 동일한 방법을 처리한다.

[그림 1] 동일 노드에서 수행하는 방식

RCAL 을 등록하는 방법은 일반 서버 프로세스를 등록하는 방법과 유사하다. 다음과 같이 rcal 이라는 이름을 가진 SYS_SVR type 의 서버 프로세스를 등록해주면 된다. (mode 가 local 이라는 것은 자동적으로 인식된다). 주의할 점은 RCAL 프로세스는 한 개만 기동될 수 있다. 왜냐하면 두개 이상의 프로세스가 기동되면 같은 포트를 사용하게 되기 때문이다.

*SERVER

rcal SVGNAME = svg1, SVRTYPE = SYS_SVR,

CLOPT = "-n rcah -f /tmax/rca.env", MIN = 1

tmboot/tmdown 시에 사용할 서버이름을 rcal 이외 다른 이름으로 하고 싶은 경우에는 아래와 같이 지정하면 된다.

RCAL

RCAH

TMAX SYSTEM

Thread Pool

Client

Node 1

Page 13: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 12

*SERVER

RCASVR SVGNAME = svg1, TARGET = "rcal",

SVRTYPE = SYS_SVR,

CLOPT = "-n rcah -f /tmax/rca.env", MIN = 1

-n: RCAH 실행파일의 이름을 지정해주는 것. default 는 "rcah”

-f : RCA 에서 사용할 환경파일을 지정. default 는 없음

-f 옵션으로 설정될 파일은 RCA 를 동작시키기 위한 기본적인 정보로서 올바른 동작을 보장하기 위해서는 RCA 를 기동시키 전에 설정해야 한다. 이에 대한 자세한 내용은 “4 장 환경 변수”를 살펴 보기 바란다. LOCAL_MODE 의 경우 RCA 는 Tmax 시스템의 서버 프로세스 형태로 제어될 수 있기 때문에 관리가 편리하며 Tmax 시스템과 스트림 파이프를 통해서 연결되기 때문에 REMOTE MODE 의 경우보다 빠른 데이터 송수신의 효과를 볼 수 있다.

둘째, REMOTE MODE 는 RCA module 을 Tmax System 과는 별도로 관리하고 싶을 때 사용하는 것으로 일반 Tmax client 모듈과 동일한 방식 (TCP/IP socket)으로 tmax 에 접속한다. 즉, TMAX_HOST_ADDR, TMAX_HOST_PORT, TMAX_BACKUP_ADDR, TMAX_BACKUP_PORT, TMAX_CONNECT_TIMEOUT 등을 사용하여 접속한다. REMOTE MODE 의 경우에는 RCAL 를 별도로 구동시켜야 한다. 실행 방법은 다음과 같으며 이와 같은 방법을 LOCAL MODE 에 대해서는 적용할 수 없다.

$ rcal -n RCAH_NAME -f ENV_FILE -m MODE

-n : RCAH 실행파일의 이름을 지정해주는 것 default 는 "rcah”

-f : RCA 에서 사용할 환경파일을 지정 default 는 없음

-m : local/remote mode 를 선택. MODE 는 0 또는 1 을 설정할 수 있다.

0 을 설정하면 remote mode, 1 을 설정하면 local mode(Tmax 376 에서는 지원하지 않음)가 된다. default 는 remote mode 인 0 이다.

-n 과 -f 옵션은 LOCAL MODE 인 경우와 동일하며 환경 변수에 대한 자세한 내용은 “4 장 환경 변수”를 살펴 보기 바란다.

Page 14: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 13

[그림 2] 다른 노드에서 수행하는 방식

3.3 기동 및 종료

RCA 는 Multi Thread 클라이언트로써 기동되어 처리된다. REMOTE MODE 인 경우에는 관리자가 직접 기동 시켜주어야 하지만 LOCAL MODE 인 경우에는 Tmax 시스템의 서버 프로세스의 형태로 등록되기 때문에 Tmax 시스템과 함께 기동 및 종료될 수 있으며 일반 서버 프로세스와 같이 tmdown -s 옵션을 사용하여 별도로 기동 및 종료될 수도 있다.

$ tmdown -s rcal

$ tmboot -s rcal

RCAL 이 RCAH 를 구동 시키다 실패한 경우 (RCAH 를 생성한 후 5 초가 지나서도 어떤 RCAH 도 RCAL 에 등록하지 않는 경우)는 RCAL 이 에러 메시지와 함께 종료된다. (에러 번호 [RCAL0002]).

RCA 모듈은 기동되면서 thrinit() 루틴을 호출한다. 따라서 일반적으로 thrinit() 부분에 초기화에 관한 내용을 설정한다. thrinit()에서 설정하게 되는 초기화에 관한 대표적인 내용이 Tmax 시스템과 연결을 맺는 것이다. 따라서 RCAH 에 속하는 각각의 thread 는 기동과 동시에 Tmax 시스템과 연결을 맺고 클라이언트의 요청이 발생하는 시점에는 서비스만을 처리하게 된다. 실질적인 서비스 처리는 thrmain() 부분에 설정하게 된다.

RCA 모듈이 종료되면 thrdone() 루틴을 호출하게 된다. 따라서 이 루틴에서는 자원 해제와 같은 최종적인 작업을 처리한다. thrdone()에서 설정하게 되는 자원 해제의 대표적인 경우는 Tmax 시스템과 연결을

RCAL

RCAH

TMAX SYSTEM

Thread Pool

Client

Node 2 Node 1

Page 15: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 14

해제하는 것이다. 이 경우 주의할 점은 Tmax 시스템을 down 시키는 경우에는 thrdone()에서 Tmax 시스템에 관련된 함수 호출은 이루어질 수 없다. 왜냐하면 Tmax 시스템에게 RCA 는 클라이언트 프로세스 형태로 관리되기 때문에 Tmax 시스템은 종료 시에 RCA 와의 연결을 별도로 관리하지 않기 때문이다.

RCA 는 장애 대책을 지원하기 위해(“5. 특징”에서 “RCAL 장애”의 경우에 대한 내용 참조) tmdown 으로 정상적으로 시스템을 다운시킨 경우에도 공유 메모리가 삭제되지 않는다. 만약 공유 메모리를 삭제하길 원한다면 rcakill 명령어로 RCA 를 다운시키면 된다.

3.4 모니터링

RCA 는 Tmax System 입장에서는 클라이언트 프로세스로 관리되기 때문에 Tmax System 관리툴인 tmadmin 으로 모니터링 할 수 없다. 따라서 RCA 를 모니터링하기 위해서 rcastat 라는 별도의 툴을 제공한다. 이 툴을 통해서 관리자는 현재 RCA 의 configuration 을 확인할 수 있으며 현재 RCA 에 접속한 클라이언트의 수 등을 모니터링 할 수 있다. 사용방법은 다음과 같다.

Usage: rcastat [-h] [-p pid] [-n rcah_no] [-k shmkey]

-h : 도움말 보기

-p : pid 를 통한 특정 rcah 에 대한 상태 정보를 출력

-n : rcah 번호를 통한 특정 rcah 에 대한 상태 정보를 출력

-k : RCA 가 사용하는 공유 메모리 키 값

특정 pid 혹은 rcah_no 가 지정되지 않는다면 RCA 에서 동작하고 있는 모든 RCAH 에 대한 정보를 출력하다. 공유 메모리 키 값이 지정되지 않는 경우에는 사용자 시스템 환경 변수에서 설정된 RCA_SHMKEY 값을 읽어 들이며 만약 시스템 환경 변수에도 설정되어 있지 않다면 디폴트 값(74565)이 사용된다. 만약 잘못된 키 값을 입력하는 경우에는 올바른 정보를 출력할 수 없다.

확인 가능한 시스템 configuration 은 RCAH 실행 파일과 통신용 파이프가 만들어질 디렉토리(rca_dir), 현재 사용되고 있는 모드(rca_mode), 사용

Page 16: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 15

가능한 포트 번호(rca_port), RCAL 의 이름(rcal_name), RCAL 의 pid(rcal_pid), RCAH 의 이름(rcah_name), RCA 에서 사용하고 있는 공유 메모리 키 값(shmkey), 공유 메모리 크기(shmsize), 사용되고 있는 RCAH 의 개수(#rcah), 그리고 하나의 RCAH 당 기동되어 있는 쓰레드 개수(thread per rcah)이다.

관리자는 rcastat 를 통해서 RCA 에 기동되어 있는 RCAH 별 pid 와 클라이언트의 수(#client)를 확인할 수 있다. rcah_no 는 RCA 내부적으로 관리되는 번호이며 각각의 RCAH 별로 별도의 값을 가진다.

$ rcastat

rcastat: RCA_SHMKEY env is not set, using default shmkey (74565)

------------------------------------------------

rca_dir: /user/tmax/server/

rca_mode: Local

rca_port: 8123

rcal_name: rca, rcal_pid: 1722

rcah_name: rcah

shmkey: 74565, shmsize: 4832

#rcah: 2, #thread per rcah: 60

------------------------------------------------

rcah_no pid #client

------------------------------------------------

0 1724 0

1 1723 0

------------------------------------------------

Page 17: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 16

4 환경 변수

RCA 에서 사용되는 환경 변수는 다음과 같다. 각 플랫폼에 맞게 설정하면 된다.

RCA_DIR : RCAH 가 설치되어 실행되는 홈 디렉터리의 절대 경로를 지정한다. RCAL 은 RCA_DIR 로 정의된 디렉토리에서 RCAH 를 찾아 실행 시킨다.

RCA_SHMKEY : RCAL 과 RCAH 프로세스 사이에서 정보 공유를 위해 사용하는 공유 메모리 Key 값 이다. 디폴트는 74565 이다.

RCA_NRCAH : RCAH 모듈의 수를 지정한다. 최대값은 500 이며 디폴트는 4 이다.

RCA_NTHR : RCAH 마다 관리해야 할 Thread 개수를 지정한다. 최대값은 60 이며 디폴트는 32 이다.

RCA_PORT : RCAL 이 기존 통신 프로그램(Client)으로부터 연결을 받아 들이고자 하는 포트 번호 이다. 포트는 최대 32 개 까지 지정이 가능하다. 이와 같이 멀티 포트를 지정하는 경우에는 다음과 같이 지정하면 된다.

RCA_PORT="9000 9001 9002 9003"

디폴트는 8899 이다.

LD_LIBRARY_PATH : LOCAL_MODE 인 경우에는 LD_LIBRARY_PATH 에 Tmax Library Path 를 추가해야 한다. 반면 REMOTE_MODE 의 경우에는 librcah.so 가 위치하는 디렉토리를 LD_LIBRARY_PATH 에 지정해 주어야 한다.

다음은 LOCAL_MODE 이며 korn shell 를 사용할 경우 .profile 내에 RCA 관련 환경 변수를 설정한 예제이다.

Page 18: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 17

<<.profile>> export RCA_DIR=/usr/tmax/appbin

export RCA_SHMKEY=79800

export RCA_PORT=2001

export RCA_NRCAH =5

export RCA_NTHR=25

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TMAXDIR/lib

Page 19: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 18

5 특징

5.1 멀티 포트 지원

RCA 는 다양한 형태의 클라이언트를 지원하기 위해 최대 32 개까지의 포트를 지정할 수 있다. 따라서 개발자는 포트별 로직을 구성함으로써 하나의 프로세스로써 보다 유연한 프로그램을 작성할 수 있다. 멀티 포트를 지정하는 방법은

RCA_PORT=”9000, 9001, 9002, 9003”

과 같이 지정하면 된다. 디폴트 값은 8899 이다.

프로그래밍 시에는 thrinit(), thrmain(), thrdone() 의 인자로 넘겨지는 값이 RCAINFO 구조체($TMAXDIR/usrinc/rca.h, 아래 참조)에 대한 포인터로서 이 구조체에서 가리키는 포트 번호를 토대로 포트별 로직을 구성할 수 있다.

/* ------ type definition ------ */

typedef struct {

int fd;

int portno;

int count;

int status1;

int status2;

void *user_data;

void *system_data;

} *RCAINFO;

구조체 필드 중에서 fd 는 클라이언트가 접속하여 생성된 TCP/IP 소켓이며 portno 는 이 때 사용된 포트번호이다. 이 경우라면 “9000, 9001, 9002, 9003”중에서 한 값이다. count 는 해당 쓰레드가 호출된 횟수이다.

Page 20: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 19

나머지 필드는 RCA 내부적으로 사용됨으로써 사용자가 조작해서는 안 되는 필드이다.

Page 21: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 20

6 장애 대책

6.1 RCAH 장애

개발자가 직접 작성한 프로그램에 의해서 생성되는 RCAH 는 프로그램 버그로 인하여 다운되는 경우가 발생할 수 있다. 이와 같은 경우 RCAH 에 클라이언트가 붙어 있는 상태에서 RCAH 가 죽으면 RCAL 이 RCAH 를 재기동 시킨다. 그러나 RCAH 에 클라이언트가 붙어 있지 않은 상황에서 RCAH 가 죽으면 재기동 시키지 않는다. 가장 빈번하게 발생할 수 있는 경우로서 이와 같이 RCAH 가 죽는 경우는 개발자가 작성한 프로그램에 의해 문제가 발생한 것이기 때문에 RCAH 에 대한 디버깅이 필요하다. 하지만 재기동된 RCAH 가 실패한 업무를 다시 수행하지는 않는다.

6.2 RCAL 장애

관리자의 실수로 인하여 RCAL 을 종료시키는(tmdown) 경우, RCAH 는 클라이언트가 접속되어 있는 한 계속 수행한다. 반면 클라이언트가 붙어 있지 않는 RCAH 는 RCAL 이 사라지면 자동으로 종료된다. 이를 위해 RCA 가 사용하는 공유 메모리는 RCAL 이 죽더라도 지워지지 않는다. 이를 제거하기 위해서는 사용자가 ipcrm 을 사용하여 제거해야 된다. 단 rcakill 을 사용하여 RCA 를 죽이는 경우에는 공유 메모리를 자동적으로 지워준다. 만약 RCAH 내의 thread 가 죽는 경우, restart 를 시킨다. 한편 클라이언트와의 접속이 해제되고 업무의 수행을 끝마치면 RCAH 도 종료된다. 하지만 RCAL 이 장애가 발생한 경우 새로운 클라이언트는 접속할 수 없다. 이 경우에는 RCAL 은 재기동시켜야 한다.

Page 22: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 21

7 RCA API

int tpsetfd(int fd) 리모트와 연결된 소켓을 등록하는 API: UCS 서버의 API 와 동일 리턴값: < 0 : 오류

int tpclrfd(int fd) 등록된 리모트 소켓을 해제하는 API: UCS 서버의 API 와 동일 리턴값: < 0 : 오류

int tpissetfd(int fd) 리모트 소켓에서 수신할 데이터가 잇는지 확인하는 API: UCS 서버의 API 와 동일 리턴값: > 0 : 데이터 수신 가능

int tpschedule(int sec) Tmax 와 클라이언트로 연결된 소켓과 리모트와 연결된 소켓에서 데이터를 수신 할 수 있는지 주어진 시간(초단위)동안 check 하는 API: UCS 서버의 API 와 동일 리턴값: -1 : 오류

0 : 시간 초과

1 : tmax 응답 메시지

2 : tmax unsold 메시지

3 : 리모트 메시지

int tpuschedule(int usec) Tmax 와 클라이언트로 연결된 소켓과 리모트와 연결된 소켓에서 데이터를 수신 할 수 있는지 주어진 시간(1/1000000)동안 check 하는 API: UCS 서버의 API 와 동일 리턴값: -1 : 오류

0 : 시간 초과

Page 23: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 22

1 : tmax 응답 메시지

2 : tmax unsold 메시지

3 : 리모트 메시지

int tpremoteconnect(char *host, int portno, int sec) 리모트와 TCP 로 연결하는 함수. Sec 가 주어지면 해당 시간동안 연결을 시도함, 시간 초과시 연결 오류 리턴값: < 0 : 오류 0 : 소켓 번호

int tpgetrcahseqno() Tmax API 인 tpgetsvrseqno API 와 동일하게, RCAH 프로세스 번호를 리턴함,이 번호는 RCAL 에서 순차적으로 부여한 번호임 리턴값: >= 0 : RCAH 프로세스 순서 번호

void * tpgetrcainfo() RCAH 의 쓰래드 정보 리턴값: RCA header 파일의 RCAINFO 에 대한 포인터

Page 24: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 23

8 설치

8.1 구성

제공되는 파일을 각각의 디렉터리에 알맞은 명칭으로 변경하여 복사한다. 아래의 예는 Tmax 3.7.6 을 기준으로 하였다.

Directory 파일명 제공되는 파일

$TMAXDIR/bin rcal rcal

$TMAXDIR/bin rcastat rcastat

$TMAXDIR/bin rcakill rcakill

$TMAXDIR/lib librcah.so librcah.so

$TMAXDIR/usrinc rca.h rca.h

8.2 환경 파일 수정

RCA 를 LOCAL_MODE 로 운영하는 경우에는 다음과 같이 config.m 파일에서 Server 절에 추가 하여야 한다.

*SVRGROUP

svg1 NODENAME = "tmax1"

*SERVER

RCASVR SVGNAME = svg1,

TARGET = "rcal",

SVRTYPE = SYS_SVR,

CLOPT = "-n rcah -f /tmax/rca.env", MIN = 1

Page 25: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 24

8.3 rcad 모듈 작성 및 준비

Customizing 된 rcah 를 RCA_DIR 에 정의된 디렉터리에 복사한다.

Page 26: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 25

9 RCAH Customizing

각 Site 마다 통신 프로그램(Client)과 RCA 사이의 통신 프로토콜이 다르기 때문에 프로토콜을 맞추어야 한다. 따라서 rcah 모듈에서 이 부분을 처리하는 int thrmain(RCAINFO info)을 개발자가 customizing 해야 한다. 이 function 은 thread 의 일부이기 때문에 작성시 MT-Safe 를 만족하도록 작성해야 한다.

rcah 에 대하여 좀더 자세히 보면 rcah 는 RCA_NTHR 에 정의된 값만큼 Thread 를 생성하고, Client 로부터 요청이 있으면 Thread Pool 에서 Thread 하나를 할당하여 기본적인 환경을 설정하고 클라이언트의 요청이 발생하는 시점에 사용자가 작성한 thrmain()을 호출 하는 방식으로 처리된다. thrmain()의 수행이 종료되면 클라이언트와 연결은 끊어지며 Thread 는 다시 Thread Pool 에 반환된다.

주의 사항 : 전역 변수 사용시 Write 할 경우는 RCAH 가 Multi thread 이기 때문에 Lock 처리를 반드시 해 주어야 한다.tmaxreadenv()를 사용할 경우 Memory 손실이 발생하므로 사용할 수 없다.

Page 27: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 26

10 RCAH 예제

다음은 Solaris 2.7 32 Bit 머신에서 테스트 한 샘플이다. TMAXDIR 환경 변수는 시스템에 설정되어 있는 것으로 간주한다.

<<Makefile>>

TARGET = rcah

LIBS = -lrcah -lpthread -lsocket

CFLAGS = -I$(TMAXDIR)

APOBJS = $(TARGET).o

TMAX_INCDIR = $(TMAXDIR)/usrinc

TMAX_BINDIR = $(TMAXDIR)/bin

TMAX_LIBDIR = $(TMAXDIR)/lib

OBJS = $(APOBJS)

.c.o:

$(CC) $(CFLAGS) -c $<

$(TARGET): $(APOBJS)

$(CC) $(CFLAGS) -L$(TMAX_LIBDIR) -o $(TARGET) $(OBJS)

$(LIBS) $(USERLIBS)

clean:

-rm -f *.o core $(TARGET)

<<rca.h>>

/* ------------------------- usrinc/rca.h --------------------- */

/* */

/* Copyright (c) 2002 TmaxSoft Co., Ltd */

Page 28: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 27

/* All Rights Reserved */

/* */

/* ------------------------------------------------------------ */

#ifndef _TMAX_RCA_H

#define _TMAX_RCA_H

#ifndef _TMAX_MTLIB

#define _TMAX_MTLIB 1

#endif

#include <usrinc/tmaxapi.h>

#ifndef _WIN32

#define __cdecl

#endif

/* ------ type definition ------ */

typedef struct {

int fd;

int portno;

int count;

int status1;

int status2;

void *user_data;

void *system_data;

} *RCAINFO;

#if defined (__cplusplus)

extern "C" {

#endif

#ifndef _TMAX_KERNEL

int thrmain(RCAINFO);

int thrinit(RCAINFO);

int thrdone(RCAINFO);

Page 29: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 28

#endif

#if defined (__cplusplus)

}

#endif

#endif

[rcah.c]

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <netdb.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <sys/un.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <pthread.h>

#include <errno.h>

#include <usrinc/rca.h>

struct msg {

int len;

char svcname[16];

};

int start_flag;

int

thrinit(RCAINFO info)

{

int n;

n = tpstart(NULL);

Page 30: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 29

if (n < 0) {

printf("RCA_%d: tpstart fail, tperrno = %d, errno = %d\n",

pthread_self(), tperrno, errno);

return -1;

}

start_flag = 1;

printf("RCA_%d: thrinit ok\n", pthread_self());

return 1;

}

int

thrdone(RCAINFO info)

{

if (start_flag) {

start_flag = 0;

tpend();

}

printf("RCA_%d: thrdone ok\n", pthread_self());

return 0;

}

int

thrmain(RCAINFO info)

{

struct msg header;

int n;

long len;

char *sndbuf;

char buf[8192];

buf[0] = 0;

#if _DEBUG

printf("RCA_%d: fd=%d, port = %d, count=%d\n", pthread_self(),

info->fd,

Page 31: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 30

info->portno, info->count);

#endif

n = read(info->fd, &header, sizeof(struct msg));

if (n != sizeof(struct msg)) {

printf("RCA_%d: read header fail = %d\n", pthread_self(), n);

return -1;

}

len = ntohl(header.len);

#if _DEBUG

printf("RCA_%d: len = %d, svcname = %s\n", pthread_self(),

len, header.svcname);

#endif

n = read(info->fd, buf, len);

if (n != len) {

printf("RCA_%d: read data fail = %d\n", pthread_self(), n);

return -1;

}

#if _DEBUG

printf("RCA_%d: data = %s\n", pthread_self(), buf);

#endif

/* ----------------------------------------------- */

if (!start_flag) {

n = tpstart(NULL);

if (n < 0) {

printf("RCA_%d: tpstart fail, tperrno = %d\n",

pthread_self(),

tperrno);

return -1;

}

start_flag = 1;

}

sndbuf = (char *)tpalloc("CARRAY", NULL, len + 1);

if (sndbuf == NULL) {

Page 32: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 31

printf("RCA_%d: tpalloc fail, tperrno = %d\n", pthread_self(),

tperrno);

return -1;

}

memcpy(sndbuf, buf, len);

n = tpcall(header.svcname, sndbuf, len, &sndbuf, &len, 0);

if (n < 0) {

printf("RCA_%d: tpcall fail, tperrno = %d\n", pthread_self(),

tperrno);

tpfree(sndbuf);

return -1;

}

memcpy(buf, sndbuf, len);

header.len = htonl(len);

tpfree(sndbuf);

/* ----------------------------------------------- */

write(info->fd, &header, sizeof(struct msg));

write(info->fd, buf, len);

return 0;

}

Page 33: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 32

11 에러 메시지

RCA 는 기본적으로 Tmax 클라이언트로 동작하기 때문에 Tmax 시스템에서 제공하는 함수를 사용하는 경우에 발생하는 에러 메시지는 Tmax Programming Guide ( C )를 참고하기 바라며 Tmax 시스템 전체적으로 공통적인 에러 메시지에 대해서는 중복되는 관계로 언급하지 않았다. 따라서 아래에서 찾을 수 없는 메시지에는 Tmax Error Message Manual 을 참고하기 바란다. 여기에서는 RCA 모듈에서만 나타나는 에러 메시지에 대해서 다룬다.

SVR0014 exec error: /user/tmax/appbin/rcah [No such file or

directory]

구분: FATAL

설명: 설정된 RCA_DIR 에서 RCAH 를 발견하지 못함

조치: 설정된 RCA_DIR 에 RCAH 실행 파일이 존재하는 지 확인

SVR0100: RCA_PORT env is not set: set to default port (8899)

구분: ERROR

설명: RCA_PORT 가 지정되지 않아 디폴트 값을 사용한다.

조치: 디폴트 값을 사용하는 경우에는 상관없지만 원하는 포트로 RCA 를 기동시키기를 원하는 경우에는 RCA_PORT 를 지정해야 한다.

SVR0209 unable to start RCAH

구분: FATAL

설명: RCAH 를 기동시키는 과정에서 에러 발생

조치: 1. 설정된 RCA_DIR 에 RCAH 실행 파일이 존재하는 지 확인

Page 34: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 33

2. RCAH 클라이언트 모듈 부분 thrinit() 루틴에 대한 타당성 확인

SVR3007: send to rcah error

구분: FATAL

설명: RCAL 이 RCAH 쪽으로 fd 를 전달하다가 에러 발생

조치: 기본적인 시스템 함수 사용에서 에러가 발생했으므로 시스템 환경 점검

SVR3003: rcah allocation error

구분: ERROR

설명: rcah 가 기동되어 있지 않은 상태에서 클라이언트의 요청이 도달한 상태

조치: 1. 클라이언트가 너무 빨리 접속하여 rcah 와 접속되지 못한 경우

2. rcah 가 모두 down 된 경우에는 rcah 의 클라이언트 모듈에 대한 타당성 점검

3. “send to rcah error”에러와 관련이 있을 수 있으므로 최종적으로 시스템 환경을 점검한다.

SVR3001: rcah is not ready yet

구분: WARN

설명: RCAH 가 기동되어 있지 않은 상태에서 클라이언트가 접속한 경우

조치: 시스템이 부팅중인 상태에서 서비스 요청이 발생하는 경우이거나 RCA 가 기동중인 상태에서 서비스 요청이 발생하는 것으로 볼 수 있으므로 시스템이 완전히 기동된 후 혹은 RCA 가 정상적으로 기동된 후에 서비스 요청이 발생할 수 있도록 조치한다.

SVR2016: register to RCAL errror

구분: FATAL

Page 35: Tmax Programming Guide RCA...Tmax Programming Guide (RCA) 2 Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway,

Tmax Programming Guide (RCA) 34

설명: RCAL 에 등록 실패

조치: RCAL 이 기동되어 있는 지 확인한다.

SVR0209: rcah shutdown

구분: ERROR

설명: RCAH 가 종료되는 경우

조치: RCAL 이 강제 종료되는 경우, RCAH 도 종료하게 되는 데 이 경우에 발생하는 에러로서 RCAL 이 종료되는 원인을 파악

SVR0019: no available thread slot

구분: ERROR

설명: 새로운 쓰레드를 등록하는 중에 에러가 발생

조치: 기동하려는 쓰레드가 RCA 기동시에 설정된 RCA_NTHR 개수를 넘는 경우에 발생

SVR0020: thread create error

구분: ERROR

설명: thread 생성 실패

조치: 시스템 자원 확인