Back to home page

Enduro/X

 
 

    


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