Back to home page

Enduro/X

 
 

    


0001 # endurox
0002 
0003 ## Build (including atmi/ubf tests) status
0004 
0005 | OS   |      Status      | OS       |      Status   |OS       |      Status   |
0006 |----------|:-------------:|----------|:-------------:|----------|:-------------:|
0007 | AIX 7.1 |  [![Build Status](http://www.silodev.com:9090/jenkins/buildStatus/icon?job=endurox-aix7_1)](http://www.silodev.com:9090/jenkins/job/endurox-aix7_1/) |Centos 6|[![Build Status](http://www.silodev.com:9090/jenkins/buildStatus/icon?job=endurox-centos6)](http://www.silodev.com:9090/jenkins/job/endurox-centos6/)|FreeBSD 11|[![Build Status](http://www.silodev.com:9090/jenkins/buildStatus/icon?job=endurox-freebsd11)](http://www.silodev.com:9090/jenkins/job/endurox-freebsd11/)|
0008 |Oracle Linux 7|[![Build Status](http://www.silodev.com:9090/jenkins/buildStatus/icon?job=endurox-ol7)](http://www.silodev.com:9090/jenkins/job/endurox-ol7/)|OSX 11.4|[![Build Status](http://www.silodev.com:9090/jenkins/buildStatus/icon?job=endurox-osx11_4)](http://www.silodev.com:9090/jenkins/job/endurox-osx11_4/)|raspbian10_arv7l|[![Build Status](http://www.silodev.com:9090/jenkins/buildStatus/icon?job=endurox-raspbian10_arv7l)](http://www.silodev.com:9090/jenkins/job/endurox-raspbian10_arv7l/)|
0009 |SLES 12|[![Build Status](http://www.silodev.com:9090/jenkins/buildStatus/icon?job=endurox-sles12)](http://www.silodev.com:9090/jenkins/job/endurox-sles12/)|SLES 15|[![Build Status](http://www.silodev.com:9090/jenkins/buildStatus/icon?job=endurox-sles15)](http://www.silodev.com:9090/jenkins/job/endurox-sles15/)|Solaris 10|[![Build Status](http://www.silodev.com:9090/jenkins/buildStatus/icon?job=endurox-solaris10-sparc)](http://www.silodev.com:9090/jenkins/job/endurox-solaris10-sparc/)|
0010 |Solaris 11| [![Build Status](http://www.silodev.com:9090/jenkins/buildStatus/icon?job=endurox-solaris11_x86)](http://www.silodev.com:9090/jenkins/job/endurox-solaris11_x86/)|Ubuntu 14.04| [![Build Status](http://www.silodev.com:9090/jenkins/buildStatus/icon?job=endurox-ubuntu14)](http://www.silodev.com:9090/jenkins/job/endurox-ubuntu14/)|Ubuntu 18.04| [![Build Status](http://www.silodev.com:9090/jenkins/buildStatus/icon?job=endurox-ubuntu18)](http://www.silodev.com:9090/jenkins/job/endurox-ubuntu18/)|
0011 |RHEL/Oracle Linux 8| [![Build Status](http://www.silodev.com:9090/jenkins/buildStatus/icon?job=endurox-ol8)](http://www.silodev.com:9090/jenkins/job/endurox-ol8/)|AIX 7.2| [![Build Status](http://www.silodev.com:9090/jenkins/buildStatus/icon?job=endurox-aix7_2)](http://www.silodev.com:9090/jenkins/job/endurox-aix7_2/)|Ubuntu 20.04| [![Build Status](http://www.silodev.com:9090/jenkins/buildStatus/icon?job=endurox-ubuntu20)](http://www.silodev.com:9090/jenkins/job/endurox-ubuntu20/)|
0012 
0013 ## Overview
0014 
0015 Enduro/X is Open Source Middleware Platform for Distributed Transaction 
0016 Processing
0017 
0018 It is modern, micro-services based middleware for writing distributed, open
0019 systems (program consists of several executables) based applications. Thus 
0020 by using Enduro/X programmers do not have to worry about threads and concurrency 
0021 anymore, the load balancing and multi-CPU loading is done by Enduro/X middleware by it self,
0022 administrator only have to determine how many copies of particular services should
0023 be started. Of-course Enduro/X supports multi-threaded applications too, but now
0024 system architects have a choice either to design multi-threaded executables or
0025 just configure number of executables to start.
0026 
0027 For local inter-process-communication (IPC) Enduro/X uses kernel memory based Posix
0028 queues to avoid overhead of the TCP/IP protocol which is used in other middlewares
0029 or REST based micro-service architectures. Thus this approach greatly increases
0030 application speed, as kernel queues is basically a matter of block memory
0031 copy from one process to another (by contrast of 7 layers of TCP/IP stack and
0032 streaming nature of the sockets vs block copy). 
0033 
0034 Enduro/X provides SOA architecture for C/C++ applications and allows to cluster 
0035 application in fault tolerant way over multiple physical servers. 
0036 Enduro/X provides Oracle(R) Tuxedo(R) FML/FML32 library emulation, 
0037 including boolean expressions. Other Tuxedo specific APIs are supported, 
0038 such as tpforward() and work with distributed transactions (tpbegin(), 
0039 tpcommit(), etc.).
0040 
0041 Platform provides X/Open XATMI and XA interfaces/APIs for C/C++ applications. Enduro/X can 
0042 at some level can be considered as replacement 
0043 for Oracle(R) Tuxedo(R), Jboss Blacktie (Narayan), Hitachi OpenTP1 and other XATMI middlewares.
0044 
0045 Dual licensed under Affero General Public License Version 3 for use in Open
0046 Source project or Commercial license Acquired from Mavimax Ltd 
0047 (https://www.mavimax.com),
0048 
0049 EnduroX have bindings for:
0050 - Golang (client & server)
0051 - Java (client & server)
0052 - Python 3 (client & server)
0053 - PHP (client)
0054 - Perl (client & server)
0055 
0056 Enduro/X provides following features:
0057 
0058 * Standards based APIs - SCA, The Open Group XATMI
0059 Communication types - Synchronous, Asynchronous, Conversational, Publish/subscribe
0060 * Typed buffers
0061   * UBF (Unified Buffer Format) which provides emulation of Tuxedo's FML/FML32 
0062         format. UBF if high performance binary protocol buffer format. Buffer is 
0063         indexed by binary search on fixed data types. Types supported include BFLD_CHAR,
0064         BFLD_SHORT, BFLD_LONG, BFLD_FLOAT, BFLD_DOUBLE, BFLD_STRING, BFLD_CARRAY,
0065         BFLD_PTR, BFLD_UBF (recursive buffers), BFLD_VIEW
0066   * STRING buffer format.
0067   * CARRAY (byte array) buffer format.
0068   * JSON buffer format, automatic conversion between JSON and UBF available.
0069   * VIEW buffer (starting from version 5.0+). This offer C structure sending
0070         between processes in cross platform way. Also this allows to map UBF 
0071         fields to VIEW fields, thus helping developer quicker to develop applications, 
0072         by combining UBF and VIEW buffers.
0073 * Transaction Management - Global Transactions - Two-phase commit protocol - X/Open XA
0074 * Clustering - on peer-to-peer basis
0075 * Multi-threaded Event broker (also called publish and subscribe messaging)
0076 * System process monitoring and self healing (pings and restarts)
0077 * SOA Service cache. XATMI services can be cached to LMDB database. Resulting 
0078         that next call to service from any local client receives results 
0079         directly from cache (mainly from direct memory read).
0080 * Dynamic re-configuration
0081 * Custom server polling extensions
0082 * XATMI sub-system is able to work with out main application server daemon (ndrxd)
0083 * Main application server daemon (ndrxd) can be restarted (if crashed). 
0084         When started back it enters in learning mode for some period of time, 
0085         in which in gathers information about system, what services are running, 
0086         etc. After learning =-period, it starts to do normal operations
0087 * tpforward() call
0088 * ATMI server threads may become clients, and can do tpcall()
0089 * Extensive logging & debugging. Enduro/X logging can be configured per binary 
0090         with different log levels. As ATMI servers can be started outside of 
0091         appserver, it is possible to debug them from programming IDE or with 
0092         tools like valgrind.
0093 * For quality assurance project uses automated unit-testing and integration-testing
0094 * Built in ATMI service profiling.
0095 * Environment variables can be updated for XATMI server processes with 
0096         out full application reboot.
0097 * Generic client process monitor (cpm). Subsystem allows to start/stop/monitor 
0098         client executables. At client process crashes, cpm will start it back.
0099 * Starting with version 5.2 Enduro/X provides configuration data encryption feature, 
0100         so that software which is built on top of Enduro/X may comply with 
0101         Payment Card Industry Data Security Standard (PCI/DSS).
0102 * Application monitoring with TM_MIB interface. For example NetXMS.
0103 * XA Driver for PostgreSQL.
0104 * Fully functional buildserver, buildclient, buildtms tools.
0105 * Provides server entry point _tmstartserver().
0106 * Multi-threaded dispatcher support (mindispatchthreads/maxdispatchthreads),
0107         including support for tpsvrthrinit() tpsvrthrdone() callbacks.
0108 * Fast Pool Allocator - for performance reasons malloc results are cached, 
0109         so that blocks can be re-used instead of doing malloc again, thus Enduro/X
0110         is gaining overall performance.
0111 * Support of writing server daemons for multi-threaded servers 
0112         i.e. tpacall() to self advertised services during tpsvrinit().
0113 * Support of Data Dependent Routing for UBF buffers.
0114 * XATMI service auto-transactions are supported.
0115 * For Linux and FreeBSD platforms call priorities are supported.
0116 * Enduro/X logger now supports log-rotate calls (to re-open log handles) during
0117 the runtime.
0118 * Enduro/X logger now allows to change log levels on the fly for any Enduro/X
0119 related process.
0120 * Enduro/X provides Latent Command Framework (LCF), where developers via 
0121 plugin interface can publish CLI commands in xadmin tool, while any Enduro/X related
0122 program can receive such commands via callback and perform custom action.
0123 * Has tpsetcallinfo() and tpgetcallinfo() APIs.
0124 * Product is extensively documented.
0125 * Tool for automatic configuration migration from Oracle Tuxedo to Enduro/X.
0126 
0127 ![Alt text](doc/Endurox-product.jpg?raw=true "Enduro/x overview")
0128 
0129 # Load balancing
0130 
0131 ![Alt text](doc/endurox-load-balance.jpg?raw=true "Enduro/x service load 
0132 balancer")
0133 
0134 Supported operating system: GNU/Linux, starting from 2.6.12 kernel 
0135 (needed for POSIX Queues). Starting with Enduro/X Version 3.1.2 IBM AIX (6.1 and 
0136 7.1), 
0137 Oracle Solaris 11, MAC OS X (experimental) and Cygwin (experimental) 
0138 support is added. Supported compilers: gcc, LLVM clang, IBM xlC.
0139 
0140 - Build and installation guides are located at: www.endurox.org/dokuwiki
0141 
0142 - Support forum: http://www.endurox.org/projects/endurox/boards
0143 
0144 - Binary builds (RPMs & DEBs) for various platforms are here: 
0145 https://www.mavimax.com/downloads
0146 
0147 - Documentation available here: http://www.endurox.org/dokuwiki/doku.php
0148 
0149 - Source corss reference: http://www.silodev.com/lxr/source
0150 
0151 # Call/message forwarding
0152 
0153 ## Instead of doing calls to each server separately...
0154 
0155 ![Alt text](doc/exforward_tpcall.png?raw=true "Classical service orchestration")
0156 
0157 This is typciall way for example if doing micro-services with HTTP/REST. 
0158 You need to do the calls to each service separately. And that is extra 
0159 overhead to system (multiple returns) and the caller must orchestrate the all 
0160 calls.
0161 
0162 ## ...Enduro/X offers much effective way - tpforward() where request is 
0163 passed around the system
0164 
0165 ![Alt text](doc/exforward_forward.png?raw=true "Enhanced service 
0166 orchestration by forwarding the call")
0167 
0168 In this case the destination service orchestrates the system, it is up to 
0169 service to choose the next service which will continue the call processing. 
0170 The caller is not aware of final service which will do the reply back 
0171 (tpreturn()).
0172 
0173 Note that service after doing "tpforward()" becomes idle and can consume next 
0174 call.
0175 
0176 # High availability and self healing
0177 
0178 Enduro/X is capable of detecting stalled/hanged XATMI servers and gracefully 
0179 can reboot them. The ping times are configurable on per server basis. In case 
0180 if main daemon dies, it is possible to configure special XATMI server named 
0181 "tprecover" which monitors "ndrxd" and vice versa, ndrxd can monitor tprecover. 
0182 Thus if any of these services are not cleanly shut down, then system will 
0183 heal it self, and boot service/daemons back.
0184 
0185 The ndrxd learning mode is some period of time (configurable) in which ndrxd 
0186 will request all the system for active servers and their services, 
0187 to get back the view of the system and be in control. Note that system is able 
0188 to work even with out ndrxd, but at that time no server healing 
0189 and management will be done.
0190 
0191 ![Alt text](doc/server_monitoring_and_recovery.png?raw=true "Enduro/X high 
0192 availability facility")
0193 
0194 # Real time system patching
0195 
0196 It is possible to patch the Enduro/X system (update stateless XATMI servers) 
0197 without service interruption. This is achieved by following scheme:
0198 
0199 ![Alt text](doc/rt-patching.png?raw=true "Enduro/X real time patching")
0200 
0201 # Monitoring
0202 
0203 Enduro/X provides TM_MIB API for information reading. Out of the box NetXMS 
0204 monitoring suite uses this API to monitor application. Thus full featured
0205 monitoring is possible. Presentation here (video):
0206 
0207 [![Enduro/X monitoring with NetXMS](https://img.youtube.com/vi/ubJk27bjKGE/0.jpg)](https://www.youtube.com/watch?v=ubJk27bjKGE)
0208 
0209 # Performance
0210 
0211 Due to fact that Enduro/X uses memory based queues, performance numbers are 
0212 quite high:
0213 
0214 ## ATMI client calls server in async way (tpacall(), no reply from server)
0215 
0216 ![Alt text](doc/benchmark/04_tpacall.png?raw=true "Local tpcall() performance")
0217 
0218 
0219 ## Local one client calls server, and gets back response:
0220 
0221 ![Alt text](doc/benchmark/01_tpcall.png?raw=true "Local tpcall() performance")
0222 
0223 ## Multiple clients calls multiple servers
0224 
0225 ![Alt text](doc/benchmark/03_tpcall_threads.png?raw=true "Multiprocessing 
0226 tpcall() performance")
0227 
0228 ## Single client calls single server via network (two app servers bridged)
0229 
0230 ![Alt text](doc/benchmark/02_tpcall_network.png?raw=true "Network tpcall() 
0231 performance")
0232 
0233 ## Persistent storage (message enqueue to disk via tpenqueue())
0234 The number here are lower because messages are being saved to disk. 
0235 Also internally XA transaction is used, which also requires logging to stable 
0236 storage. This benchmark uses default Enduro/X setting for data
0237 flushing to disk which is fflush() Unix system call. Fflush() does not guarantee data
0238 consistence at power outage event. For fully guaranteed data consistence, 
0239 flags (FSYNC/FDATASYNC/DSYNC) can be set for XA resource. However expect much 
0240 lower TPS performance.
0241 
0242 ![Alt text](doc/benchmark/05_persistent_storage.png?raw=true "Network 
0243 tpenqueue() performance")
0244 
0245 
0246 ## Tpcall cache benchmark
0247 This benchmark shows the performance of cached XATMI service calls.
0248 
0249 ![Alt text](doc/benchmark/06_tpcache.png?raw=true "tpcall() cache performance")
0250 
0251 # Migration from Oracle Tuxedo to Enduro/X
0252 
0253 The migration is as simple as this (ideal scenario):
0254 
0255 * Re-build the source code against Enduro/X.
0256 * Migrate the configuration to Enduro/X format in seconds with [ubb2ex](doc/manpage/ubb2ex.adoc) tool.
0257 * Test migrated application.
0258 * Go live.
0259 * See full [migration_tuxedo](doc/migration_tuxedo.adoc) guide.
0260 
0261 Configuration migration example (ubb_config1 is Tuxedo UBB configuration file):
0262 
0263 ```
0264 $ ubb2ex ubb_config1 -P ./test_dir
0265 UBB2EX Tool
0266 
0267 Enduro/X 7.5.36, build Dec 17 2021 22:33:46, using epoll for LINUX (64 bits)
0268 
0269 Enduro/X Middleware Platform for Distributed Transaction Processing
0270 Copyright (C) 2009-2016 ATR Baltic Ltd.
0271 Copyright (C) 2017-2021 Mavimax Ltd. All Rights Reserved.
0272 
0273 This software is released under one of the following licenses:
0274 AGPLv3 (with Java and Go exceptions) or Mavimax license for commercial use.
0275 
0276 
0277 $ cd test_dir/user90/conf
0278 
0279 $ ls -1
0280 
0281 app.test1.ini
0282 ndrxconfig.test1.xml
0283 settest1
0284 
0285 $ source settest1
0286 
0287 $ xadmin start -y
0288 Enduro/X 7.5.36, build Dec 17 2021 22:33:46, using epoll for LINUX (64 bits)
0289 
0290 Enduro/X Middleware Platform for Distributed Transaction Processing
0291 Copyright (C) 2009-2016 ATR Baltic Ltd.
0292 Copyright (C) 2017-2021 Mavimax Ltd. All Rights Reserved.
0293 
0294 This software is released under one of the following licenses:
0295 AGPLv3 (with Java and Go exceptions) or Mavimax license for commercial use.
0296 
0297 * Shared resources opened...
0298 * Enduro/X back-end (ndrxd) is not running
0299 * ndrxd PID (from PID file): 57479
0300 * ndrxd idle instance started.
0301 exec cconfsrv -k C4Lwt7G4 -i 1 -e /tmp/test_dir/user90/log/cconfsrv.1.log -r --  :
0302         process id=57481 ... Started.
0303 exec cconfsrv -k C4Lwt7G4 -i 2 -e /tmp/test_dir/user90/log/cconfsrv.2.log -r --  :
0304         process id=57482 ... Started.
0305 exec tpadmsv -k C4Lwt7G4 -i 3 -e /tmp/test_dir/user90/log/tpadmsv.3.log -r --  :
0306         process id=57483 ... Started.
0307 exec tpadmsv -k C4Lwt7G4 -i 4 -e /tmp/test_dir/user90/log/tpadmsv.4.log -r --  :
0308         process id=57484 ... Started.
0309 exec tpevsrv -k C4Lwt7G4 -i 5 -e /tmp/test_dir/user90/log/tpevsrv.5.log -r --  :
0310         process id=57485 ... Started.
0311 exec tmsrv -k C4Lwt7G4 -i 8 -e /tmp/test_dir/user90/log/tmsrv.8.log -r -- -t1 -l /tmp/test_dir/user90/tmlogs/rm8 :
0312         process id=57491 ... Started.
0313 exec tmsrv -k C4Lwt7G4 -i 9 -e /tmp/test_dir/user90/log/tmsrv.9.log -r -- -t1 -l /tmp/test_dir/user90/tmlogs/rm8 :
0314         process id=57503 ... Started.
0315 exec tmqueue -k C4Lwt7G4 -i 40 -e /tmp/test_dir/user90/log/tmqueue.40.log -r -- -s1 -p10 -f10 :
0316 
0317 ...
0318 ```
0319 
0320 
0321 # Releases
0322 
0323 - Version 2.5.1 released on 18/05/2016. Support for transactional 
0324 persistent message queues. Provides APIs: tpenqueue(), tpdequeue() and 
0325 command line management tools. See doc/persistent_message_queues_overview.adoc, 
0326 doc/manpage/tmqueue.adoc, doc/manpage/xadmin.adoc, doc/manpage/q.config.adoc. 
0327 Use cases can be seen under atmitests/test028_tmq
0328 
0329 - Version 3.1.2 released on 25/06/2016. Added support for other Unix systems. 
0330 Currently production grade support is provided for following operating systems: 
0331 GNU/Linux, FreeBSD, IBM AIX and Oracle Solaris. MAC OS X and Cygwin versions 
0332 are 
0333 considered as experimental. FreeBSD installation guides are located at 
0334 doc/freebsd_notes.adoc, AIX install guide: doc/aix_notes.adoc, 
0335 Solaris install guide: doc/solaris_notes.adoc and OS X guide: 
0336 doc/osx_notes.adoc. Also with this version lot of core processing bug fixes are 
0337 made.
0338 
0339 - Version 3.2.1 released on 06/07/2016. Major UBF optimization. Now for each 
0340 data type memory offset is maintained. For fixed data types (short, long, char, 
0341 float, double) binary search is performend when field is read from buffer.
0342 
0343 - Version 3.2.2 released on 15/07/2016. Bugfixes for UBF binary search. Added 
0344 UBF benchmarking scripts and documents.
0345 
0346 - Version 3.3.1 released on 05/09/2016. Implemented common configuration engine 
0347 (can use ini files in alternative to environment variables, debug config and 
0348 persistent queue config).
0349 
0350 - Version 3.3.2 released on 01/10/2016. Works on TP logger, user accessible 
0351 logging framework. Set of tplog\* functions.
0352 
0353 - Version 3.3.5 released on 10/01/2017. Fixes for RPM build and install on 
0354 Red-hat enterprise linux platform.
0355 
0356 - Version 3.3.6 released on 12/01/2017. Fixes for integration mode, changes in 
0357 tpcontinue().
0358 
0359 - Version 3.4.1 released on 13/01/2017. New ATMI server flag for developer - 
0360 reloadonchange - if cksum change changed on binary issue sreload.
0361 
0362 - Version 3.4.2 released on 20/01/2017. Network protocol framing moved from 2 
0363 bytes to 4 bytes.
0364 
0365 - Version 3.4.3 released on 26/01/2017. Memory leak fixes for tmsrv and tmqueue 
0366 servers.
0367 
0368 - Version 3.4.4 released on 26/01/2017. Works on documentation. Fixes on 
0369 PScript.
0370 
0371 - Version 3.4.5 released on 14/02/2017. Fixes in generators.
0372 
0373 - Version 3.5.1 released on 03/03/2017. Updates on tpreturn() - more correct 
0374 processing as in Tuxedo, free up return buffer + free up auto buffer.
0375 
0376 - Version 3.5.2 released on 24/03/2017. Bug #105 fix. Abort transaction if it 
0377 was in "preparing" stage, and tmsrv loaded it from logfile. Meaning that caller 
0378 alaready do not wait for tpcommit() anymore and got inconclusive results, thus 
0379 better to abort. 
0380 
0381 - Version 3.5.3 released on 26/03/2017. Fixes for Solaris, Sun Studio (SUNPRO) 
0382 compiler
0383 
0384 - Version 3.5.4 released on 01/03/2017. Fixed bug #108 - possible CPM crash
0385 
0386 - Version 3.5.5 released on 23/03/2017. Works Feature #113 - mqd_t use as file 
0387 descriptor - for quick poll operations.
0388 
0389 - Version 3.5.6 released on 02/04/2017. Fixed issues with possible deadlock for 
0390 poll mode on bridge service calls. Fixed issuw with 25 day uptime problem for 
0391 bridges on 32bit platfroms - the messages becomes expired on target server. 
0392 Issues: #112, #145, #140, #139, #113
0393 
0394 - Version 3.5.7 release on 23/04/2017. Fixed Bug #148 (Bdelall corrupts ubf 
0395 buffer)
0396 Bug #110 (tpbridge does not report connection status to ndrxd after ndrxd is 
0397 restarted for recovery)
0398 
0399 - Version 3.5.9 released on 22/06/2017. Bug fix #160 - retry xa_start with 
0400 xa_close/xa_open. New env variable NDRX_XA_FLAGS, tag "RECON".
0401 
0402 - Version 4.0.1 released on 29/06/2017. Multi-threaded bridge implementation. 
0403 tpnotify(), tpbroadcast(), tpsetunsol(), tpchkunsol() API implementation.
0404 
0405 - Version 4.0.2 released on 19/07/2017. Fixed ndrxd core dump issue Bug #174.
0406 
0407 - Version 4.0.3 released on 26/07/2017. Fixes of #176 #178. NDRX_DUMP, UBF_DUMP 
0408 fixes.
0409 
0410 - Version 4.0.4 released on 29/07/2017. Feature #162 - added evt_mib.h
0411 
0412 - Version 4.0.5 released on 01/08/2017. Feature #180 - refactoring code towards 
0413 ISO/IEC 9899:201x standard.
0414 
0415 - Version 5.0.1 released on 21/08/2017. Feature #96 - Typed View support, Bug 
0416 #182 - fix in bridge protocol.
0417 
0418 - Version 5.0.2 released on 22/08/2017. Bug #183
0419 
0420 - Version 5.0.3 released on 22/08/2017. Bug #186
0421 
0422 - Version 5.0.4 released on 22/08/2017. Bug #186
0423 
0424 - Version 5.0.5 released on 27/08/2017. Bug #184, Bug #191, Bug #190, Bug #192, 
0425 Bug #193
0426 
0427 - Version 5.0.6 released on 28/08/2017. Bug #195
0428 
0429 - Version 5.0.7 released on 01/09/2017. Feature #161 - tmsrv database pings & 
0430 automatic reconnecting in case of network failures.
0431 
0432 - Version 5.0.8 released on 17/09/2017. Works on dynamic view access. #99, #206, 
0433 #207, #210
0434 
0435 - Version 5.0.9 released on 27/09/2017. (development) Works on #224
0436 
0437 - Version 5.0.10 released on 13/10/2017. (stable) Feature #232, Feature #231, 
0438 -O2 optimization by default
0439 
0440 - Version 5.1.1  released on 13/10/2017. (development) Feature #127, Bug #229, 
0441 Feature #230, Bug #234, Feature #244, Bug #243, Feature #248, Bug #240, Bug #238 
0442 
0443 - basically big message size support (over the 64K)
0444 
0445 - Version 5.1.2  released on 18/10/2017. (stable) Bug #250
0446 
0447 - Version 5.2.1  released on 18/12/2017. (development) Major work on support for PCI/DSS mandatory
0448 configuration encryption. Introduction of plugin architecture (currently used for
0449 crypto key providers). Implemented tpconvert() ATMI call. Now @global section for ini files are 
0450 read twice. Thus ini file can reference to previosly defined env/global variable. 
0451 Fixes: #261 Bug, #118 Feature, #237 Feature, #236 Bug, #245 Feature, #258
0452 Support, #259 Support, #255 Bug, #254 Bug.
0453 
0454 - Version 5.2.2 released on 21/12/2017. (stable) First stable version of Enduor/X 5.2. Rolled
0455 
0456 - Version 5.2.4 released on 22/12/2017. (stable) Fixed Bug #268.
0457 
0458 - Version 5.2.6 released on 02/01/2018. (stable) Happy New Year! Fixed Bug #269.
0459 
0460 - Version 5.2.8 released on 26/01/2018. (stable) Fixed Bug #274 - too many open files,
0461 when threaded logger using for multi-contexting (like go runtime)
0462 
0463 - Version 5.2.10 released on 27/01/2018. (stable) Feature #275 - allow to mask
0464 
0465 - Version 5.2.12 released on 27/01/2018. (stable) Feature #275 - fixes for server un-init (not critical)
0466 
0467 - Version 5.2.14 released on 03/02/2018. (stable) Feature #278 - new fields for compiled connection id
0468 
0469 - Version 5.2.15 released on 08/02/2018. (development) Feature #282 - new UBF api Baddfast()
0470 
0471 - Version 5.2.16 released on 09/02/2018. (stable) Feature #282 - new UBF api Baddfast(), finished
0472 documentation and added unit tests.
0473 
0474 - Version 5.3.2 released on 25/03/2018 (stable) Fixes on Feature #272, Bug #291, Feature #287, Bug #290, Support #279
0475 
0476 - Version 5.3.4 released on 26/03/2018 (stable) Feature #294, Bug #293
0477 
0478 - Version 5.3.5 released on 28/03/2018 (Development) Working progress on Feature #295
0479 
0480 - Version 5.3.6 released on 01/04/2018 (stable) Finished works on Feature #295
0481 
0482 - Version 5.3.8 released on 06/04/2018 (stable) Implemented Feature #299 - new flag TPNOABORT
0483 
0484 - Version 5.3.9 released on 09/04/2018 (development) Fixed Bug #300
0485 
0486 - Version 5.3.10 released on 10/04/2018 (stable) Fixed Support #301
0487 
0488 - Version 5.3.12 released on 12/04/2018 (stable) Support #302 - added last 8 chars of hostname to logfile
0489 
0490 - Version 5.3.14 released on 21/04/2018 (stable) Bug #306
0491 
0492 - Version 5.3.15 released on 23/04/2018 (development) Feature #307
0493 
0494 - Version 5.3.16 released on 16/05/2018 (stable) Bug #317
0495 
0496 - Version 5.3.17 released on 18/05/2018 (development) Feature #320 - cmdline tag for server in xml config
0497 
0498 - Version 5.3.18 released on 27/06/2018 (stable) Bug #325
0499 
0500 - Version 5.3.20 released on 10/10/2018 (stable) Backport Bug #321 fix to 5.3
0501 
0502 - Version 6.0.1 released on 18/11/2018 (development) Latvia's 100th anniversary. 
0503 Major work on System V queue support, works for Java support, lots of bugs fixed.
0504 Support #252, Feature #281, Feature #307, Support #310, Support #326, 
0505 Bug #330, Feature #331, Feature #333, Feature #334, Bug #338, 
0506 Bug #339, Bug #341, Bug #347, Support #350, Bug #351, Support #352, Bug #353
0507 
0508 - Version 6.0.2 released on 02/12/2018 (stable) Bug #355 and other stability issues fixed
0509 released with 6.0.1.
0510 
0511 - Version 6.0.3 released on 16/12/2018 (development) Bug #364, Bug #360. 
0512 Added new command "ps" for xadmin, so that unit tests have unified access to 
0513 processing listings across all supported OSes.
0514 
0515 - Version 6.0.5 released on 24/12/2018 (development) Feature #366
0516 
0517 - Version 6.0.6 released on 08/01/2019 (stable) Marking stable release
0518 
0519 - Version 6.0.8 released on 11/01/2019 (stable) Feature #372
0520 
0521 - Version 6.0.10 released on 13/01/2019 (stable) Support #373, Bug #374
0522 
0523 - Version 6.0.12 released on 16/01/2019 (stable) Bug #375, Bug #376
0524 
0525 - Version 6.0.13 released on 18/01/2019 (development) Feature #181
0526 
0527 - Version 6.0.14 released on 30/01/2019 (stable) Marking stable version
0528 
0529 - Version 6.0.15 released on 01/01/2019 (development) Feature #380 
0530 
0531 - Version 6.0.17 released on 02/01/2019 (development) Feature #382, Feature #367, Support #303, Feature #271
0532 
0533 - Version 6.0.19 released on 15/03/2019 (development) Bug #394, Feature #393
0534 
0535 - Version 6.0.21 released on 19/03/2019 (development) Feature #397
0536 
0537 - Version 6.0.23 released on 19/03/2019 (development) Additional work for Feature #397
0538 
0539 - Version 6.0.25 released on 22/03/2019 (development) Feature #396
0540 
0541 - Version 6.0.26 released on 25/03/2019 (stable) Support #400
0542 
0543 - Version 6.0.27 released on 30/03/2019 (development) Feature #402
0544 
0545 - Version 6.0.28 released on 11/06/2019 (stable) Feature #419
0546 
0547 - Version 7.0.10 released on 03/11/2019 (stable) Release notes are here: https://www.endurox.org/news/18
0548 
0549 - Version 7.0.12 released on 13/11/2019 (stable) Fixes on Bug #466
0550 
0551 - Version 7.0.14 released on 13/11/2019 (stable) Fixes on Feature #470, Support #471, Support #473, Support #475
0552 
0553 - Version 7.0.16 released on 16/11/2019 (stable) Fixes on Support #443, Support #493
0554 
0555 - Version 7.0.18 released on 17/01/2020 (stable) Fixes on Bug #412, Support #505
0556 
0557 - Version 7.0.20 released on 22/01/2020 (stable) Fixes on Support #502
0558 
0559 - Version 7.0.22 released on 31/01/2020 (stable) Feature #509
0560 
0561 - Version 7.0.24 released on 01/01/2020 (stable) Support #506
0562 
0563 - Version 7.0.26 released on 09/03/2020 (stable) Support #528, Support, #527, Support #524,
0564 Bug #523, Bug #521, Bug #515, Support #512, Bug #507, Support #503
0565 
0566 - Version 7.0.28 released on 12/03/2020 (stable) Bug #530, Feature #313, Feature #536
0567 
0568 - Version 7.0.30 released on 24/03/2020 (stable) Bug #537
0569 
0570 - Version 7.0.32 released on 29/03/2020 (stable) Bug #544
0571 
0572 - Version 7.0.34 released on 11/05/2020 (stable) Bug #501
0573 
0574 - Version 7.0.36 released on 25/06/2020 (stable) Feature #262
0575 
0576 - Version 7.5.1 released on 10/06/2020 (development) Feature #547, Support #553, Feature #545, Feature #540,
0577 Feature #218, Feature #368, Feature #398, Feature #440, Feature #463, Feature #497, Feature #511, Feature #539,
0578 Bug #542, Feature #549, Bug #576, Feature #577, Bug #580, Support #582
0579 
0580 - Version 7.0.38 released on 03/07/2020 (stable) Bug #565
0581 
0582 - Version 7.0.38 released on 03/07/2020 (stable) Bug #565, Bug #566
0583 
0584 - Version 7.0.40 released on 11/07/2020 (stable) Bug #570, Support #571
0585 
0586 - Version 7.0.42 released on 13/08/2020 (stable) Bug #572, Bug #578, Feature #581
0587 
0588 - Version 7.5.2 released on 18/08/2020 (stable) First release version. Support #585, Bug #584, Bug #575
0589 
0590 - Version 7.5.4 released on 21/09/2020 (stable) Feature #516, Bug #589, Support #590, Bug #592, Feature #588, Feature #598, Feature #594
0591 
0592 - Version 7.5.6 released on 2/11/2020 (stable) Feature #603
0593 
0594 - Version 7.5.8 released on 26/11/2020 (stable) Bug #610
0595 
0596 - Version 7.0.44 released on 27/11/2020 (stable) Feature #606
0597 
0598 - Version 7.0.44 released on 27/11/2020 (stable) Feature #606
0599 
0600 - Version 7.0.44 released on 27/11/2020 (stable) Feature #606, Support #611
0601 
0602 - Version 7.5.10 released on 27/11/2020 (stable) Feature #606
0603 
0604 - Version 7.5.12 released on 16/12/2020 (stable) Support #612, Support #611
0605 
0606 - Version 7.5.14 released on 21/12/2020 (stable) Feature #613
0607 
0608 - Version 7.0.46 released on 17/01/2021 (stable) Support #623
0609 
0610 - Version 7.5.16 released on 17/01/2021 (stable) Support #623
0611 
0612 - Version 7.5.18 released on 18/02/2021 (stable) Support #633
0613 
0614 - Version 7.5.20 released on 18/02/2021 (stable) Feature #213, Feature #286, Feature #401, Bug #608, Support #481, Support #644
0615 
0616 - Version 7.5.22 released on 15/02/2021 (stable) Feature #640, Support #657
0617 
0618 - Version 7.5.24 released on 11/04/2021 (stable) Bug #666, Support #667, Bug #675
0619 
0620 - Version 7.5.26 released on 11/04/2021 (stable) Bug #602, Support #671, Support #677, Support #673, Bug #624
0621 
0622 - Version 7.5.28 released on 30/05/2021 (stable) Support #634, Feature #699, Support #703, Bug #704, Feature #709, Feature #714,
0623 Feature #715
0624 
0625 - Version 7.5.30 released on 24/07/2021 (stable) Feature #717, Bug #719
0626 
0627 - Version 7.5.32 released on 08/07/2021 (stable) Support #721, Bug #725
0628 
0629 - Version 7.5.34 released on 10/09/2021 (stable) Feature #726, Feature #447, Bug #730, Support #729, Bug #734, Support #737
0630 
0631 - Version 8.0.1 released on 09/10/2021 (development) Support #63, Support #265, Support #753, Support #752, Bug #701, Feature #211, Support #753, Support #752,
0632 Feature #226, Bug #601, Feature #518, Support #622, Feature #517, Support #599, Support #554, Bug #555, Support #759, Bug #639, Support #267
0633 
0634 - Version 7.5.36 released on 16/12/2021 (stable) Support #742, Bug #745, Bug #747, Support #748, Bug #749, Bug #750, Bug #796
0635 
0636 - Version 8.0.4 released on 05/02/2022 (stable) Support #763, Feature #764, Support #765
0637 
0638 - Version 8.0.6 prepared on 07/03/2022 (stable) Feature #767, Support #768, Support #769, Bug #771
0639 
0640 - Version 7.0.48 released on 26/01/2021 (stable) Support #761
0641 
0642 - Version 7.0.50 released on 12/11/2022 (stable) Bug #794
0643 
0644 - Version 7.5.38 released on 12/11/2022 (stable) Bug #794, Bug #796, Bug #801
0645 
0646 - Version 8.0.2 released on 26/01/2022 (stable) Marking initial release
0647 
0648 - Version 8.0.4 released on 05/02/2022 (stable) Support #763, Feature #764, Support #765
0649 
0650 - Version 8.0.6 prepared on 07/03/2022 (stable) Feature #767, Support #768, Support #769, Bug #771, Feature #772, Bug #774, Bug #775
0651 
0652 - Version 8.0.8 prepared on 07/11/2022 (stable) Bug #789, Feature #792, Bug #794, Support #795, Bug #796, Bug #149,
0653 Bug #798, Bug #738, Support #448, Bug #125, Bug #202, Bug #799, Bug #801
0654 
0655 # Build configurations
0656 
0657 ## Configure make with: 
0658 
0659 $ cmake -DCMAKE_INSTALL_PREFIX:PATH=`pwd`/dist .
0660 
0661 ### Flags:
0662 
0663 - To enable System V message queue, pass '-DDEFINE_SYSVQ=ON' to cmake (applies
0664 to Linux only). Default on AIX and Solaris.
0665 
0666 - To enable poll() use instead of epoll() in Linux use '-DDEFINE_FORCEPOLL=ON'
0667 (applies to Linux only).
0668 
0669 - To force use emulated message queue, add '-DDEFINE_FORCEEMQ=ON' (applies to 
0670 Linux only). Default on Macos.
0671 
0672 - To disable GPG_ME, pass additional flag to cmake '-DDEFINE_DISABLEGPGME=ON'
0673 
0674 - To disable documentation building add '-DDEFINE_DISABLEDOC=ON'
0675 
0676 - To disable platform script building use '-DDEFINE_DISABLEPSCRIPT=ON'
0677 
0678 - To do release build, use '-DDEFINE_RELEASEBUILD=ON'
0679 
0680 - To log the memory allocation to user log add '-DNDRX_MEMORY_DEBUG=1' 
0681 
0682 - To trace of the Object-API use '-DNDRX_OAPI_DEBUG=1' 
0683 
0684 - To trace of the Semaphore handling use '-DNDRX_SEM_DEBUG=1' 
0685 
0686 - To enable test047 with Oracle PRO*C database access use '-DENABLE_TEST47=ON'
0687 Note that *proc* must be in path and ORACLE_HOME must be set. Also Oracle DB 
0688 libraries must be present in LD_LIBRARY_PATH (or equivalent environment for 
0689 target OS).
0690 
0691 - To force memory alignment usage, use '-DDEFINE_ALIGNMENT_FORCE=1', by default
0692 on for SPARC cpus.
0693 
0694 - To enable address sanitizer for GCC/Clang on supported hardware platforms,
0695 use '-DDEFINE_SANITIZE=1'
0696 
0697 - To enable PostgreSQL XA Driver build use '-DENABLE_POSTGRES=ON'
0698 
0699 - To disable PostgreSQL ECPG Driver build use '-DDISABLE_ECPG=ON' (for certain
0700 Operating systems ECPG, postgres-devel package is missing, thus let only pq
0701 driver to build)
0702 
0703 - To enable strict mutex checking on GNU platform, use '-DMUTEX_DEBUG=ON' (for
0704 GNU platforms only)
0705 
0706 - To force use AIX System V Polling on AIX and Linux (for Linux dev build only, non functional),
0707 add '-DDEFINE_SVAPOLL=ON'.
0708