Phase 1: 실동작 Enduro/X + PostgreSQL XA 매입 슬라이스
- Enduro/X 7.0.12 소스빌드 이미지(-DENABLE_POSTGRES=ON, libndrxxaecpg XA 스위치) - docker-compose: postgres(max_prepared_transactions=100) + endurox app - ECPG XA 서비스 3종: ACQUIRE→RECONCILE→SETTLE (tpservice + EXEC SQL) - 클라이언트 tpbegin/tpcall체인/tpcommit → tmsrv 2PC(prepare/commit) 원자 커밋 - 검증: 서비스 AVAIL, 커밋 row(status=S) psql 확인, 롤백 시 무잔존, pg_prepared_xacts=0 - 규명된 런타임 요건: sysctl fs.mqueue.*, ulimit msgqueue/nofile, XA open-str JSON - docs/architecture.md, README, service-catalog 설계 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
commit
e6e29e6b5d
19 changed files with 1005 additions and 0 deletions
31
app/conf/app.ini
Normal file
31
app/conf/app.ini
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
[@global]
|
||||
NDRX_CLUSTERISED=1
|
||||
NDRX_CMDWAIT=1
|
||||
NDRX_CONFIG=${NDRX_APPHOME}/conf/ndrxconfig.xml
|
||||
NDRX_DMNLOG=${NDRX_APPHOME}/log/ndrxd.log
|
||||
NDRX_DPID=${NDRX_APPHOME}/tmp/ndrxd.pid
|
||||
NDRX_DQMAX=100
|
||||
NDRX_IPCKEY=44100
|
||||
NDRX_LDBAL=0
|
||||
NDRX_LEV=5
|
||||
NDRX_LOG=${NDRX_APPHOME}/log/xadmin.log
|
||||
NDRX_MSGMAX=100
|
||||
NDRX_MSGSIZEMAX=56000
|
||||
NDRX_NODEID=1
|
||||
NDRX_QPATH=/dev/mqueue
|
||||
NDRX_QPREFIX=/acq
|
||||
NDRX_RNDK=0myWI5nu
|
||||
NDRX_SRVMAX=10000
|
||||
NDRX_SVCMAX=20000
|
||||
NDRX_TOUT=90
|
||||
NDRX_UBFMAXFLDS=16000
|
||||
NDRX_LIBEXT=so
|
||||
NDRX_ULOG=${NDRX_APPHOME}/log
|
||||
FIELDTBLS=acq.fd
|
||||
FLDTBLDIR=${NDRX_APPHOME}/ubftab
|
||||
|
||||
[@debug]
|
||||
; * - goes for all binaries not listed below
|
||||
*= ndrx=5 ubf=1 tp=5 file=
|
||||
xadmin= ndrx=5 ubf=1 tp=5 file=${NDRX_APPHOME}/log/xadmin.log
|
||||
ndrxd= ndrx=5 ubf=1 tp=5 file=${NDRX_APPHOME}/log/ndrxd.log
|
||||
55
app/conf/ndrxconfig.xml
Normal file
55
app/conf/ndrxconfig.xml
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
<?xml version="1.0" ?>
|
||||
<endurox>
|
||||
<appconfig>
|
||||
<sanity>1</sanity>
|
||||
<brrefresh>5</brrefresh>
|
||||
<restart_min>1</restart_min>
|
||||
<restart_step>1</restart_step>
|
||||
<restart_max>5</restart_max>
|
||||
<restart_to_check>20</restart_to_check>
|
||||
<gather_pq_stats>Y</gather_pq_stats>
|
||||
</appconfig>
|
||||
<defaults>
|
||||
<min>1</min>
|
||||
<max>1</max>
|
||||
<autokill>1</autokill>
|
||||
<start_max>20</start_max>
|
||||
<pingtime>100</pingtime>
|
||||
<ping_max>800</ping_max>
|
||||
<end_max>30</end_max>
|
||||
<killtime>1</killtime>
|
||||
</defaults>
|
||||
<servers>
|
||||
<!-- XA transaction manager for RM1 = the ECPG/PostgreSQL resource.
|
||||
XA env (NDRX_XA_*) is inherited from the shell (see setapp.sh). -->
|
||||
<server name="tmsrv">
|
||||
<srvid>40</srvid>
|
||||
<min>1</min>
|
||||
<max>1</max>
|
||||
<sysopt>-e ${NDRX_APPHOME}/log/tmsrv-rm1.log -r -- -t1 -l${NDRX_APPHOME}/tmlogs/rm1 -m10</sysopt>
|
||||
</server>
|
||||
|
||||
<!-- The three ECPG XA services. Separate binaries so the in-chain
|
||||
tpcall()s (ACQUIRE->RECONCILE->SETTLE) hit distinct server
|
||||
processes (avoids single-server self-call deadlock) while sharing
|
||||
one global transaction across their DB branches. -->
|
||||
<server name="acqacquire">
|
||||
<srvid>100</srvid>
|
||||
<min>1</min>
|
||||
<max>1</max>
|
||||
<sysopt>-e ${NDRX_APPHOME}/log/acqacquire.log -r</sysopt>
|
||||
</server>
|
||||
<server name="acqreconcile">
|
||||
<srvid>110</srvid>
|
||||
<min>1</min>
|
||||
<max>1</max>
|
||||
<sysopt>-e ${NDRX_APPHOME}/log/acqreconcile.log -r</sysopt>
|
||||
</server>
|
||||
<server name="acqsettle">
|
||||
<srvid>120</srvid>
|
||||
<min>1</min>
|
||||
<max>1</max>
|
||||
<sysopt>-e ${NDRX_APPHOME}/log/acqsettle.log -r</sysopt>
|
||||
</server>
|
||||
</servers>
|
||||
</endurox>
|
||||
Loading…
Add table
Add a link
Reference in a new issue