Name
ex_env — Enduro/X Environment configuration
DESCRIPTION
Enduro/X uses set of environment variables which are an initial environment
for the application domain. There is a set of parameters related to the system,
prefixes, Posix Queue mount points, and various system limits. The next step
to the configuration is application domain configuration, in ndrxconfig.xml and debug.conf
(or Common-Configuration respectively).
Mandatory Env. Variables
- 
NDRX_NODEID=NODE_ID
- 
    Cluster Node ID. Should be within 1..32.
- 
NDRX_CLUSTERISED=1|0
- 
    Do we work in cluster mode or not? 1 - yes, we are in cluster.
    0 - no, we are not in cluster.
- 
NDRX_LDBAL=LOAD_BALANCE_PERCENT
- 
    if LOAD_BALANCE_PERCENT is 0 = means process all locally,
    if value is set to 100 = process all on remote servers (if svc
    available on remote server). 70% means, process 30% locally
    70% remotely.
- 
NDRX_TOUT=TIME_OUT_IN_SECONDS
- 
    Global tpcall() timeout, if not called with TPNOTIME flag.
    If process will not return in this time, then TPETIME error
    will be returned.
- 
NDRX_ULOG=ULOG_PATH
- 
    Writable system path where to write user logs. Significant
    system events as well as userlog(3) output is written
    to file ULOG.YYYYMMDD, where YYYYMMDD corresponds to the current
    date. This directory also typically is used to output any process
    related Enduro/X logs, from internal logging
    (topics ndrx and ubf) or from user logging (tp topic)
    performed by tplog(3) or by ndebug.h macros. Logfile names
    are configured at [@debug] section in common-configuration ini
    file or in ndrxdebug.conf(5) configuration file.
- 
NDRX_QPREFIX=APP_PREFIX
- 
    Prefix used for POSIX IPC resources (shm and queue).
- 
NDRX_SVCMAX=MAX_SERVICES
- 
    This determines the maximum number of services supported by instance.
    The less is number, then less shared memory is used. However for
    performance reason, number should be much bigger (3-4 times) than
    actual estimated service count. Bigger number might speed up linear
    hashing, i.e. it will be less likely that hash will collide.
- 
NDRX_SRVMAX=MAX_SERVERS
- 
    Maximum number of servers that will be supported. This affects the
    -i flag. Server ID. The max server id will be MAX_SERVERS-1.
- 
NDRX_CONFIG=FULL_PATH_TO_CONFIG_FILE
- 
    This shows the full path to usual ndrxconfig.xml.
- 
NDRX_QPATH=QUEUE_MOUNT_POINT
- 
    Full path to directory where POSIX Queue is mounted.
- 
NDRX_SHMPATH=SHARED_MEM_MOUNT_POINT
- 
    Full path to POSIX Shared memory mount point.
- 
NDRX_CMDWAIT=NDRXD_COMMAND_WAIT_SECS
- 
    Number of seconds for which ndrxd(8) process periodically waits on command queue
    between the checks. For SystemV mode, accuracy of this setting is 200ms.
    Additional note: the command wait time actually is lowest value between the
    NDRXD_COMMAND_WAIT_SECS and time left till the next <sanity> cycle run,
    configured in ndrxconfig.xml(5).
- 
NDRX_DPID=PATH_TO_NDRXD_PID_FILE
- 
    This is full path to ndrxd PID file.
- 
NDRX_RNDK=APP_DOMAIN_RANDOM_KEY
- 
    Random key to indentify the processes beloning to
    this app domain (i.e. used in ps ef).
- 
NDRX_IPCKEY=SYS_V_SEMAPHORE_KEY
- 
    System V Semaphores key number. Used for shared memory locking.
    POSIX semaphores are not used here, because they are not unlocked if process
    dies during acquired semaphore. For System V shared memory IPCKEY+0..20
    different keys may be used for shared memory. For System V semaphores IPCKEY+0..20
    range is used.
- 
NDRX_MSGMAX=MAX_MSGS_PER_QUEUE
- 
    Posix queue config attrib. Max number of messages that can be put in one queue.
- 
NDRX_DQMAX=NDRXD_ACCESS_Q_MSG_MAX
- 
    Enduro/X ATMI daemoni ndrxd access Q size. Bigger is better.
- 
NDRX_MSGSIZEMAX=NDRXD_ACCESS_Q_MSG_MAX
- 
    Max message size (in bytes). The value is limited to the operating system limits
    of the maximums size of the POSIX queues message size. For example on Linux
    kernel 3.13 it is possible to set message size to 10 Megabytes. Also the message
    size denotes the internal buffer sizes for XATMI message processing.
    If message size max is set to less than 64KB,
    then buffer size is defaulted to 64KB.
    This parameter also affects the opening/creation of the message queue. As the
    message size is specified in mq_open() attributes.
- 
NDRX_APPHOME=FULL_PATH_TO_APPDOMAIN_INSTANCE_DIR
- 
    This is full path to application (not an Enduro/X directory it self) root directory.
- 
NDRX_HOME=FULL_PATH_TO_ENDUROX_ROOT_DIRECTORY
- 
    Full path to Enduro/X installaction directory.
- 
NDRX_DEBUG_CONF=FULL_PATH_TO_DEBUG_CONFIG_FILE
- 
    This sets full path to debug configuration file.
- 
NDRX_DEBUG_STR=DEBUG_STRING
- 
    Debug configuration for binary according to ndrxdebug.conf(5) syntax,
    binary name is not required e.g. "ndrx=5 tp=5 file=/tmp/log". This overrides
    any other configuration settings specified in configuration files for the
    process.
- 
NDRX_UBFMAXFLDS=MAX_NUMBER_OF_UBFFIELDS
- 
    Max number of UBF fields. Used for hashing. Bigger number is better.
    The max number is number is 33554432 (25 bit).
- 
NDRX_DMNLOG=FULL_PATH_TO_NDRX_DMNLOG
- 
    The full path to ndrxd log file. Used by shell scripts.
- 
NDRX_DMNLEV=LOG_LEVEL_OF_NDRXD
- 
    Log level of ndrxd. From 1..5. 5 is max. Used by shell scripts.
- 
NDRX_LOG=FULL_PATH_TO_XADMIN_LOG_FILE
- 
    Full path to xadmin log file. Used by shell scripts.
- 
NDRX_LEV=LOG_LEVEL_OF_XADMIN
- 
    Log level of xadmin. From 1..5. 5 is max. Used by shell scripts.
- 
NDRX_XA_RES_ID=XA_RESOURCE_ID
- 
    XA API two phase commit resource id.
    Must be set if using distributed transactions. Valid value is in range
    of 1..255.
- 
NDRX_XA_OPEN_STR=XA_OPEN_STRING
- 
    This is open string for two phase commit XA driver.
    Must be set if using distributed transactions.
- 
NDRX_XA_CLOSE_STR=XA_CLOSE_STRING
- 
    This is close string for two phase commit XA driver. This is optional,
    NDRX_XA_OPEN_STR will be used if not set.
- 
NDRX_XA_DRIVERLIB=ENDUROX_XA_DRIVER_LIB
- 
    This is full path to Enduro/X shared library which loads the XA api.
- 
NDRX_XA_RMLIB=RESOURCE_MANAGER_SPECIFIC_DRIVER
- 
    This is full path to resource manager’s specific driver (shared library).
    Must be set if using distributed transactions.
- 
NDRX_XA_LAZY_INIT=LAZY_INIT_FLAG
- 
    Set to 1 if XA sub-system should be initialized on first transactions.
    If not set, then defaulted to 0, meaning initialize XA sub-system on
    executable startup.
- 
NDRX_XA_FLAGS=XADMIN_XA_FLAGS
- 
    Special for XA sub-system. It is semicolon separated tags with values.
    currently tags RECON, NOJOIN and NOSTARTXID are defined.
    RECON tag defines the number of attempts
    of xa_close()/xa_open() and doing xa_start() again in case if original
    xa_start() failed (the ATMI call tpbegin()) - for example firewall have been
    closed the connection. The format for the tag is:
    RECON:<comma separated list of error codes e.g. 4,-8,* - any err>:<number
    of attempts>:<sleep between attempts milli-sec>[:<non_start_error codes for retry>]'
    example: RECON:*:3:100, meaning reconnect (do xa_close()/xa_open())
    on any xa_start error, do the 3x attempts, sleep 100 milliseconds between attempts.
    Flag RECON for other XA calls that xa_start() would also perform reconnects,
    but that would be applied to XAER_RMFAIL errors only by default. To change
    the list of error codes for xa_prepare, xa_commit, xa_rollback, xa_recover,
    xa_forget retries, set the comma seperated list of codes in non_start_error position.
    With NOJOIN indicates that XA Switch does not support TMJOIN mode.
    With NOSTARTXID indicates that transaction session does not start with
    identifier, but only when process disconnects from transaction, it is possible
    to give transaction id for work which has been done to database. NOSUSPEND
    flag can be used to configure particular resource that transaction is not
    suspended when tpcall(3) is issued from process which uses given resource
    manager. BTIGHT flag together with NOJOIN flag ensures that tight branching
    is used. By default Enduro/X writes branch id in gtrid and bqual parts
    equally. With BTIGHT flag set, gtrid is not changed for particular
    RMID, but only branch qualifier bqual will be updated to contain the actual
    branch identifer.
    Flag FSYNC ensures that tmsrv(8) log contents at commit decision are
    written to disk with fsync(). FDATASYNC ensures that tmsrv(8) commit decision
    is written to disk with fdatasync(). DSYNC ensures that tmsrv
    commit decision log file is synchronized with file-system directory structure
    (i.e. fsync() is performed on log file directory). In case if using tmqueue(8)
    then these flags also affect that the way how messages are persisted to disk.
    Note that FSYNC, FDATASYNC and DSYNC may significantly slow down
    the distributed transaction processing.
- 
NDRX_NRSEMS=NDRX_NRSEMS
- 
    Number of semaphores used for protecting shared memory, when Enduro/X
    running in poll() mode. The minimum is recommended something about 7.
    Every service name in shared memory is hashed and semaphore protecting
    the service is calculated by modulus of NRSEMS. This affects NDRX_IPCKEY
    semaphore, by giving the more occurrences in array. The first array entry
    is used by normal Enduro/X operations, and the others 2..1+NRSEMS is
    used by poll() mode service protection. Default value is 30.
- 
NDRX_MAXSVCSRVS=NDRX_MAXSVCSRVS
- 
    Max number of servers can advertise same service. This is used only in
    poll() and SystemV mode.
    The number affects the size of shared memory used for services. Bigger number causes
    more memory to be used for service registry. If the number of servers goes over this number
    for one service, the service entry will be ignored. Default is 30.
- 
PATH=PATH
- 
    This is not Enduro/X specific env variable. But Enduro/X distribution bin
    directory should be included in system PATH env. variable.
- 
FLDTBLDIR=FULL_OR_RELATIVE_PATH_OF_UBF_FIELD_DIRS
- 
    This is colon separated list of directories where .fd files are located. I.e. UBF field definitions.
- 
FIELDTBLS=COMMA_SEPERATED_LIST_OF_FIELD_FILES
- 
    This is comma separated list of field files found in FLDTBLDIR.
- 
NDRX_CCONFIG=NDRX_COMMON_CONFIG_FILE
- 
    If this is set then, all above configuration is read from specified ini
    file in NDRX_COMMON_CONFIG_FILE in [@global] section. The Enduro/X config
    driving unit is able to merge configuration from multiple config files,
    and you can set higher priority files by in NDRX_CCONFIG1, NDRX_CCONFIG2
    NDRX_CCONFIG3, NDRX_CCONFIG4, NDRX_CCONFIG5. Basically NDRX_CCONFIG
    is lowest priority and NDRX_CCONFIG5 is highest priority. The specified
    configuration file can be directory, in that case Enduro/X will search for
    files with mask *.ini, *.cfg, *.conf, *.config files. All will be loaded
    in alphabetical order.
- 
NDRX_CCTAG=NDRX_COMMON_CONFIG_TAG
- 
    This is basically subsection used for Enduro/X configuration sections
    [@global], [@debug], [@queue]. If the variable is set, then Enduro/X will
    lookup at process startup for sections like [@global/YOUR_TAG], etc. CC tag
    can contain multiple sections, for example server1/RM2. Enduro/X will lookup
    the variables in each section [@global/server1] and [@global/RM2] for setting
    up the system.
- 
NDRX_XADMIN_CONFIG=XADMIN_CONFIG_FILE
- 
    This variable is used by xadmin read the specific configuration file with
    xadmin’s settings. Variable is optional.
- 
HOME=UNIX_USER_HOME_DIR
- 
    This variable is used by xadmin to search for per user configuration file
    when xadmin is started. In home directory search for configuration is done
    by $HOME/.xadmin.config. This file is used in case if NDRX_XADMIN_CONFIG
    is missing. Variable is optional.
- 
VIEWDIR=NDRX_VIEW_DIR
- 
    This is colon separated list of directories where to search VIEW compiled
    object files. The access to these directories are done only once operations
    with views are performed.
- 
VIEWFILES=NDRX_VIEW_FILES
- 
    Comma separated list of VIEW object files (typically with extension .V).
    Object files are produced by view compiler viewc(8).
- 
NDRX_PLUGINS=NDRX_PLUGINS
- 
    This is semicolon separated string which denotes the list Enduro/X
    plugins which needs to be loaded at any XATMI program startup. Following plugins
    are provided with Enduro/X: libcryptohost.so - cryptography key by hostname.
- 
NDRX_SILENT=SILENT_SETTING
- 
    If environment variable is present (and set to Y), the xadmin tool
    will not print banner header at startup.
- 
NDRX_XADMINTOUT=XADMIN_TOUT
- 
    This override of NDRX_TOUT configuration for xadmin queue operations.
    This timeout is used for certain calls to ndrxd (for example startup,
    shutdown, service listing, etc). Also it is used for communication
    with XATMI servers like cpmsrv and tmsrv. This is number of seconds,
    the value must be greater than 0. If parameter is set, then this will
    enable timeout control for communication with ndrxd daemon, if parameter
    is not set, the code will work in legacy mode, meaning that list calls
    to ndrxd will never get timeout.
- 
NDRX_SVPROCNAME=SERVER_PROC_NAME
- 
    Server process name exported by ndrxd at XATMI server process boot time.
    The name is server name extracted from "<server>" tag attribute name.
- 
NDRX_SVCLOPT=SERVER_COMMAND_LINE
- 
    Server process command line. Generated and exported at the moment of XATMI
    server boot. If no command line options are passed to XATMI server, then
    libatmisrv tries to extract the parameter from this environment variable
    before failing, due to missing command line arguments.
- 
NDRX_SVPPID=SERVER_PARENT_PID
- 
    Parent process PID of server process. This process basically is the one
    which is booted by ndrxd. In case if server definition contains some
    wrapper processes (or scripts), then this basically is different than value
    of the real XATMI server. This variable is used by XATMI server library
    to report both PIDs to the ndrxd, the parent PID and the real process PID.
- 
NDRX_SVSRVID=SERVER_PROCESS_ID
- 
    This is XATMI server id set in <srvid> tag. The variable can be used
    for example is wrapper scripts to modify some resources used by process.
    For example if booting something like Tomcat app server, the admin TCP ports
    can be adjusted by this environment variable in order to avoid conflicts for
    booting multiple instances.
- 
NDRX_SVQREADERSMAX=MAX_SIMULTANEOUS_READERS
- 
    This configuration parameter set the maximum parallel readers for System V
    to Posix queues mapping tables. The number is used for read-write locks,
    thus the number sets the simultaneous readers, but during that time the
    write thread needs to wait for all readers to finish up the mapping when
    the writer will step in and all readers will wait. If the number is bigger
    read will be performed better when many processes are used, but that could
    lead to write starvation, and writes (opening queues) may become slow.
    System V queues acquires one more semaphore resource from the NDRX_IPCKEY+1.
    Thus this semaphore is used read/write mode to protect the SystemV-to-Posix
    and Posix-to-SystemV mapping tables.
    The default value for this parameter is 50. This parameters is also used
    when processes accesses services shared memory in System-V or EMQ mode for
    protecting the round-robin selector.
- 
NDRX_MSGQUEUESMAX=MAX_IPC_QUEUES
- 
    Max number of queues that can be mapped to System V sub-system. This parameter
    defines size for two shared memory chunks which names are <NDRX_QPREFIX>,shm,p2s
    and <NDRX_QPREFIX>,shm,s2p. The number defines number of queue entries in
    the table. The bigger the number, the better hashing is got and lookup is
    quicker, but more memory is used. The minimum number shall be equal to the
    number of queues that will be used on the system, but recommended number is
    something as twice it. Each queue entry requires about 168 bytes.
    The default value for this parameter is 20000.
- 
NDRX_CLTTAG=CLIENT_PROCESS_TAG
- 
    This is client process tag exported to cpmsrv(8) controlled processes.
    This value can be used also in ndrxconfig.xml(5)
    when formatting client process command line and log file names.
- 
NDRX_CLTSUBSECT=CLIENT_PROCESS_TAG
- 
    This is client process tag’s sub-section exported to cpmsrv(8)
    controlled processes. This value can be used also in ndrxconfig.xml(5)
    when formatting client process command line and log file names.
- 
NDRX_LIBEXT=SHARED_LIB_EXTENSION
- 
    This is shared library platform specific extension. For example Linux/AIX and
    Solaris would use "so". For MacOS it would be "dylib". Env variable is
    generated by provision script and it set in global variables.
- 
NDRX_NORMWAITMAX=NORM_WAIT_ATTEMPTS
- 
    This configures number of attempts for xadmin(8) (and tpadmsv(8)) commands
    to wait in case if command requires normal ndrxd(8) context, but process
    is in other context, for example starting or stopping. The default is 60.
    Between each attempt 1 second sleep is done.
- 
NDRX_FPAOPTS=POOL_MALLOC_OPTS
- 
    This flag allows configures Enduro/X Fast Pool Allocator. Pool Allocator is
    mechanism in Enduro/X core libraries to avoid calls to malloc() and free()
    system calls. Instead for memory block of sizes 256, 512, 1024, 2048, 4096
    and S ( NDRX_MSGSIZEMAX - system buffer) are allocated and cached
    (stored in linked list) when parked free. Thus
    at certain points Enduro/X requests for memory different sizes from FPA, the
    FPA library finds the first suitable size (may be bigger than request) and
    block is removed from list. When program does free the block, FPA returns it
    to linked list instead of freeing back to the system. Thus from OS perspective
    memory is still used. For each of the block sizes maximum number
    stored blocks are configured. The configuration is written
    in following form <block_size>:<stored_count>,…,<block_size_N>:<stored_count_N>.
    There is also defined special block size D. This means default. By setting
    this values, counts are changed for all sizes.
    The stored count can be set in value of 1..max_int.
    If set to special value M, then standard, then malloc is used directly.
    It is error to have other non valid number as count. If block
    size is not found then system, the userlog message is added, but error is
    not generated. The block sizes supports suffix K which multiplies
    the value by 1024. Default value is  256:25,512:15,1K:10,2K:10,4K:10,S:10.
    User might adjust these buffer sizes for multi-threaded apps, especially
    the system buffer (S). By increasing the numbers, there is higher possibility
    that process will permanently use more memory.
- 
NDRX_THREADSTACKSIZE=STACKS_SIZE_IN_KB
- 
    This is target stack size for new threads produced by Enduro/X. If value 0 is
    is specified, default OS new thread stack size is used. If value -1 is used,
    then threads produced by Enduro/X are configured by
    stack size which is set for the program main thread (i.e. current resource
    limit read by getrlimit(RLIMIT_STACK, …)). If the rlimit configured is set
    to unlimited, then Enduro/X sets thread stack size to 8192 (which is 8 megabytes).
    If parameter NDRX_THREADSTACKSIZE is not configured, default value
    8192 (8 megabytes) stack size is used.
- 
NDRX_SCANUNIT=SYSVTOUT_THREAD_SCAN_WAIT_MS
- 
    This flag is used by SystemV polling configuration, for others modes like
    epoll, poll, kqueue, emq, svapoll it is not used. The flag indicates
    how long time is spent (in milliseconds) on waits between scanning for
    System-V timeouts. The default value is 1000 and minimum is 1.
- 
NDRX_LCFREADERSMAX=NUMBER_OF_SEM_READERS
- 
    This is number of Latent Command Framework (LCF) read/write lock readers.
    Thus this number of processes
    may process LCF commands while concurrent write (publish to LCF shared memory)
    will wait for readers to complete. The default is 1000. The number should
    match the number of processes running in system. However it depends on the
    commands published, if commands are fast the number could be lower.
- 
NDRX_LCFMAX=NUMBER_OF_COMMAND_SLOTS
- 
    This is number of slots in shared memory used for LCF commands. The default is
    20. Number shall be kept low as high number will make all processes to scan
    throughout the array of commands when any command is published. This setting
    shall be used as per application instance and not for sub-section configuration.
    Also this setting affects the configuration shared memory size (NDRX_IPCKEY + 6).
- 
NDRX_LCFCMDEXP=NUMBER_OF_SECONDS
- 
    When new process is created, it scans and processes LCF commands at startup.
    This setting affects those commands for which -e is given. It sets the
    time frame within which after the command published it is processed. After
    this time command expires, and new processes does not run the command.
    Default value is 60.
- 
NDRX_LCFNORUN=COMMAND_RUN_FLAG
- 
    If variable variable is present and set to y or Y, the binary still connects
    to LCF/Configuration shared memory, but does not execute any of the LCF
    commands. Default is n. This can be useful in case if xadmin(8) needs to
    correct some invalid commands which might prevent to run xadmin by it self.
- 
NDRX_RTSVCMAX=SERVICE_COUNT
- 
    Number of service slots available in shared memory for <services> tag. Greater
    number gives better performance for linear hashing - less probability for collision.
    Default value is 1000.
- 
NDRX_RTCRTMAX=CRITERION_BUFFER_SIZE
- 
    This is number of bytes available for routing criterion storage. Default
    value is 102400 which corresponds to 100 KB. One <route> tag takes
    about 300 bytes and one range entry take about 64 bytes (by not including
    the string data which is dynamic length).
- 
NDRX_RTGRP=ROUTING_GROUP
- 
    This is routing group code. If environment variable is present for XATMI server
    process, then any service advertise and unadvertise will operate in bulk with
    original service name and additionally added suffix of "@<NDRX_RTGRP>". For
    example if having NDRX_RTGRP set to "G5" and process advertises service
    DEBIT, then in total two services will be advertise such as DEBIT and
    DEBIT@G5. Afterwards with <service/> and <route/> settings can be used
    to route the traffic between default service and service in group.
- 
NDRX_APIFLAGS=APIFLAGS
- 
    This is Enduro/X standard configuration string (e.g. comma separated)
    list of specific API configuration flages used by Enduro/X.
    Currently defined flags are: json_escape and ubf_ptrparse
    json_escape flag enables to escape non printable
    characters during the UBF 2 JSON conversation and vice versa.
    Escape is done on non printable charaters i.e. !(isprint() && !iscntrl()),
    and these are escaped with "\" + xx, where xx is hex number of the ASCII char.
    e.g. ASCII "space" would become "\20". The back-slash by becomes "\\".
    ubf_ptrparse enables Bextread(3) and Bextreadcb(3) functions to read
    BFLD_PTR pointers from input. By default buffer pointers for security
    reasons are not read. Flag ubf_dupfidok enables accepting duplicate field
    IDs during the mkfldhdr(3) processing (this is for Tuxedo compatibility).
- 
NDRX_NOPOLLEXCL=ANY_VALUE
- 
    If flag is set to any value (i.e. Y), and Enduro/X runs under AIX 7.3 or
    newer in svapoll mode, then this flag disables POLLEXCL flag usage for
    solving thundering herd issue. Also this setting disables setup of the
    POLLEXCL_POLICY=LIFE:ONE environment variable by ndrxd prior exec of
    new binary.
- 
NDRX_PGMAX=NUMBER_OF_GROUPS
- 
    This is number of process groups that can be registered in shared memory for
    <procgroups> tag. The default value for NUMBER_OF_GROUPS is 64.
    Minimum value is 0, which disables the process group functionality.
    If changing this setting, "xadmin down -y" cleanup after the shutdown
    is recommended, as this affects LCF shared memory size which might
    be present event in shutdown state.
- 
NDRX_SGREFRESH=SINGLETON_GROUP_REFRESH_TIME
- 
    Defines the time in seconds by which the singleton group lock provider
    (exsinglesv(8)) must refresh (updated timestamp) in s hared memory
    to indicate that the group lock is verified and still valid.
    Default value is 60 seconds.
- 
NDRX_SGLOCKINC=NUMBER
- 
    Number by which exsinglesv(8) would increment ping lock
    counters. If group is normally locked, it increments on every
    check by 1. Thus if using tmsrv(8) in the singleton group
    NDRX_SGLOCKINC parameter value multiplied by exsinglesv(8) configuration
    parameter value chkinterval, sets the upper limit for global transaction
    time to stay in active/un-committed state, as when global transaction
    is started, ping lock counter is read, and at commit point,
    ping lock counter is also read from the group ping lock file. The counter
    difference must be less than NDRX_SGLOCKINC. Such check ensures
    that no parallel run of the tmsrv runs has happened during
    the transaction life-cycle. Default value is 3600. Note that
    too large value could spend the lock counters too fast, however
    counter is stored as long value having 31 or 61 bits of storage
    (depending on the platform).
- 
NDRX_PROCGRP_NO=PROCESS_GROUP_NUMBER
- 
    For XATMI server process or XATMI client process value is set to
    process group number, if process is part of process group.
    In ndrxconfig.xml(5)  XATMI server processes are added to processes
    group by setting group name in <procgrp> tag, and client processes
    are added to process group by setting group-name in procgrp attribute of
    the <client>/<exec> tag.
- 
NDRX_PROCGRP_LP_NO=PROCESS_GROUP_NUMBER
- 
    This environment variable is exported for lock provider processes
    (exsinglesv(8)) to indicate the group number for which given
    process manages the lock. Variable is set to process only in case
    if <procgrp_lp> tag is set to <server> in ndrxconfig.xml(5).
- 
NDRX_RESPAWN=RESPAWN_FLAG
- 
    The environment variable is exported to the process in case, if
    process is restarted after the process crash. For such case
    value 1 is present in variable. Note, that during normal
    start/sreload/reload-on-change operations this flag is environment
    variable is not set.
EXAMPLE
Sample configuration:
export FIELDTBLS=Exfields,fieldtab1.fd,fieldtab2.fd
export FLDTBLDIR=/enduro/tst1/tuxfbuf
export VIEWDIR=/enduro/tst1/views
export VIEWFILES=customer.V,card.V
export NDRX_DMNLEV=5
export NDRX_DMNLOG=/enduro/tst1/tmp/NDRXD
export NDRX_APPHOME=/enduro/tst1
export NDRX_CLUSTERISED=0
export NDRX_CMDWAIT=1
export NDRX_CONFIG=/enduro/tst1/conf/ndrxconfig.xml
export NDRX_DEBUG_CONF=/enduro/tst1/conf/ndrxdebug.conf
export NDRX_DPID=/enduro/tst1/tmp/ndrxd.pid
export NDRX_DQMAX=3000
export NDRX_HOME=/opt/endurox
export NDRX_IPCKEY=442000
export NDRX_LDBAL=0
export NDRX_LEV=5
export NDRX_LOG=/enduro/tst1/tmp/XADMIN
export NDRX_MSGMAX=100
export NDRX_MSGSIZEMAX=32000
export NDRX_NODEID=1
export NDRX_QPATH=/dev/mqueue
export NDRX_QPREFIX=/tst1
export NDRX_RNDK=jaUZwOlTqglSc
export NDRX_SHMPATH=/dev/shm
export NDRX_SRVMAX=10000
export NDRX_SVCMAX=600
export NDRX_TOUT=60
export NDRX_THREADSTACKSIZE=8192
export NDRX_UBFMAXFLDS=16000
export NDRX_ULOG=/enduro/tst1/logs
# XA 2PC SECTION, ORACLE DB
export ORACLE_SID=ROCKY
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export PATH=$PATH:ORACLE_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export NDRX_XA_RES_ID=1
export NDRX_XA_OPEN_STR="ORACLE_XA+SqlNet=ROCKY+ACC=P/endurotest/endurotest1+SesTM=180+LogDir=/tmp/xa+nolocal=f+Threads=true"
export NDRX_XA_CLOSE_STR=$NDRX_XA_OPEN_STR
# XA Static registration driver
export NDRX_XA_DRIVERLIB=$NDRX_HOME/lib/libndrxxaoras.so
# XA Dynamic registration driver
#export NDRX_XA_DRIVERLIB=$NDRX_HOME/lib/libndrxxaorad.so
export NDRX_XA_RMLIB=/u01/app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so.11.1
export NDRX_XA_LAZY_INIT=1
# XA SECTION, END
Common-config ini file sample configuration, assuming following settings in env:
export NDRX_CCONFIG=/enduro/tst1/conf/app.ini
export NDRX_CCTAG=server1/RM2
The configuration file might look like:
#
# Common variables, inherited for CCTAGs
#
[@global]
FIELDTBLS=Exfields,fieldtab1.fd,fieldtab2.fd
FLDTBLDIR=/enduro/tst1/tuxfbuf
VIEWDIR=/enduro/tst1/views
VIEWFILES=customer.V,card.V
NDRX_DMNLEV=5
NDRX_DMNLOG=/enduro/tst1/tmp/NDRXD
NDRX_APPHOME=/enduro/tst1
NDRX_CLUSTERISED=0
NDRX_CMDWAIT=1
NDRX_DPID=/enduro/tst1/tmp/ndrxd.pid
NDRX_DQMAX=3000
NDRX_HOME=/opt/endurox
NDRX_IPCKEY=442000
NDRX_LDBAL=0
NDRX_LEV=5
NDRX_LOG=/enduro/tst1/tmp/XADMIN
NDRX_MSGMAX=100
NDRX_MSGSIZEMAX=32000
NDRX_NODEID=1
NDRX_QPATH=/dev/mqueue
NDRX_QPREFIX=/tst1
NDRX_RNDK=jaUZwOlTqglSc
NDRX_SHMPATH=/dev/shm
NDRX_SRVMAX=10000
NDRX_SVCMAX=600
NDRX_TOUT=60
NDRX_UBFMAXFLDS=16000
NDRX_THREADSTACKSIZE=8192
NDRX_ULOG=/enduro/tst1/logs
#
# CCTAG section server1
#
[@global/server1]
NDRX_CONFIG=/enduro/tst1/conf/ndrxconfig.xml
#
# CCTAG section RM2
#
[@global/RM2]
# XA 2PC SECTION, ORACLE DB
NDRX_XA_RES_ID=1
NDRX_XA_OPEN_STR="ORACLE_XA+SqlNet=ROCKY+ACC=P/endurotest/endurotest1+SesTM=180+LogDir=/tmp/xa+nolocal=f+Threads=true"
NDRX_XA_CLOSE_STR=${NDRX_XA_OPEN_STR}
# XA Static registration driver
NDRX_XA_DRIVERLIB=${NDRX_HOME}/lib/libndrxxaoras.so
# XA Dynamic registration driver
#NDRX_XA_DRIVERLIB=${NDRX_HOME}/lib/libndrxxaorad.so
NDRX_XA_RMLIB=/u01/app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so.11.1
NDRX_XA_LAZY_INIT=1
# XA SECTION, END
#
# Debug section (no need for NDRX_DEBUG_CONF in CConfig case)
#
[@debug]
*= ndrx=0 ubf=0
[@debug/server1]
*= ndrx=5 ubf=0NOTES FOR ORACLE DB
Note that tmsrv run with multiple threads. Flag +Threads=true MUST be set in
NDRX_XA_OPEN_STR. Otherwise unexpected core dumps can be received from tmsrv.
NOTES FOR IBM AIX
For IBM AIX it is recommended that NDRX_THREADSTACKSIZE parameter is used.
If parameter is not set, Enduro/X tries to get new thread stack size from
getrlimit(RLIMIT_STACK, …) and is assigning current value to new thread.
Starting from AIX 7.2, it looks like AIX is summing these stacks and checks
against the ulimit -s (which is the same RLIMIT_STACK value), and thus
new threads fails to create, as total process stack limit is exhausted.