This is major strategic release. Major changes in this release is that, there is no more requirements of the large process stack are. Now Enduro/X uses dynamic allocated memory for internal buffer management. To keep the performance levels high, Enduro/X employs Fast Pool Allocator (FPA) which caches certain sizes of allocated memory blocks, so that lot of malloc() calls are eliminated. Previously new thread stack size was based on message size factor estimations. Now NDRX_THREADSTACKSIZE environment variable is used for this purposes (and if not sent default 8M is used). Other news is that this version implements more compliant build tools, including buildserver, buildclient and buildtms tools. Now buildserver generates the main() entry points of the server processes. Also when generating, main function, automatic service advertise is provided too. Build tools includes '-r' flag for static XA resource manager symbol application, thus for these cases libndrxxatmsx.so driver shall be used to use built-in xa switch handler.
New version of Enduro/X supports XATMI dispatcher multi-threading, supports callbacks of tpsvrthrinit() and tpsvrthrdone() via _tmstartserver(). Enduro/X event dispatching server tpevsrv is upgraded to multi-thread support via mindispatchthreads/maxdispatchthreads settings.
With this release Data Dependent Routing (DDR) support has been introduced. With DDR service call priority handling is added (only for Linux and FreeBSD), as well auto-transactions are added for XATMI services. See ndrxconfig.xml(5) manage for configuration details.
This version introduces new framework - Latent Command Frameworks - which allows to publish certain commands in shared memory and Enduro/X libraries processes these commands at debug points (which are in many places in Enduro/X). The published command checking is done very efficiency and does not introduce any overhead. With help of these commands now in the real-time logging configuration for processes can be changed and also loss-less logrotate can be performed. Framework allows for developers to publish custom commands to processes via plugin interface and such new API commands as: ndrx_lcf_func_add(), ndrx_lcf_xadmin_add(). With this LCF framework new shared memory segment is open by Enduro/X at startup. After the shutdown the shared memory segment is kept open (but all command data is reset). To fully remove all shared memory segments, use xadmin down -y command.
UBF Buffer now is optimized for BFLD_STRING field handling. The UBF buffer internally caches the string length, previously any iteration over the UBF buffer made strlen() for each string field occurrence, now cached length is used.
Generic System V mode has been reworked. Instead of previously using internal unnamed was utilized on every timed message processing. Now System V time-out scanning thread wakes ups every NDRX_SCANUNIT milliseconds, checking for queue thread time-out. This boost performance for System-V as no other internal message roundtrip is needed, but now periodic wakups are performed by XATMI processes for time-out scanning.
Thanks to IBM AIX extension now polling on System-V queues are performed in the same fashion as it is done on Linux.
Due to poor performance, and fact that no customers are using GPG-ME bridge traffic encryption, this functions is removed from the tpbridge process.
PDF documentation is removed from build processes, and binary distributions which includes documentation release, now includes HTML only documents.
For better analysis, logging is moved to microseconds format.
With this release, new endurox-connect version 2.5.x is released, which includes Distributed Transaction orchestration API over the web services. endurox-connect v2.5.x is not compatible with earlier Enduro/X versions.
- BF_LENGTH/F_LENGTH value is changed from 32 to 64 (Max UBF field length)
- _tmstartserver() added arguments to tmsvrargs_t for p_tpsvrthrinit/p_tpsvrthrdone
- UBF buffer format changes due to string len caching. Thus any binary blob saved from previous Enduro/X version will not work in new version (if there are string fields)
- If server processes are started by _tmstartserver(), then there might be possible segmentation fault, as new Enduro/X version probes for tmsvrargs_t for p_tpsvrthrinit/p_tpsvrthrdone fields. If _tmstartserver() was not used, then there are no ABI changes to this aspect.
- If programs were using Enduro/X logging framework via ndebug.h provided macros, applications needs to be re-built. This also applies to any modules which were using endurox-go.
Feature #547 - BFLD_STRING shall store cached string length internally
Support #553 - Move tpexport/tpimport to dynamic memory
Feature #545 - Add call descriptor ranges for conversational IPC, avoid fast cd reuse
Feature #540 - Threadpool optimizations for waiting for free slot
Feature #218 - buildserver support for automatic server advertise
Feature #368 - xadmin start dead process detailed reason infos
Feature #398 - MINDISPATCHTHREADS and MAXDISPATCHTHREADS
Feature #440 - AIX Message queue poll feature
Feature #463 - System V queue interface optimizations
Feature #497 - Allow tpacall with TPNOREPLY to be executed from tpsrvinit()
Feature #511 - Move logs to microsecond format
Feature #539 - Thread pool shall use spinlocks for protecting internal counters
Bug #542 - tpgetrply for same thread multiple active call descriptors might drop call descriptor if reading the reply for different active all descriptor
Feature #549 - Moved to dynamic memory instead of stack allocation
Bug #576 - tmqueue at startup might get race conditions and create folder likes: ./QSPACE1/prepared/prepared
Feature #577 - tpbridge -i should accept host names too
Bug #580 - ini config duplicate key values in same section might cause memory leak
Support #582 - Move packaged documentation to HTML format
Support #562 - macos slow xadmin stop
Bug #575 - Binary with atmictx client starting first and only after server may cause to go out of shared memory mode
Bug #584 - server <sysopt>, <appopt> and cpmsrv client cmdline string argument quote issues
Support #585 - Remove gpg-me support for bridge traffic encryption
Support #558 - bridge overload
Bug #560 - tpcall() with TPETIME does not cancel the message
Support #557 - xadmin output updates
Bug #486 - if using tpacall() mixing with tpcall() may cause to drop pending async responses
Support #657 - System-V mode service semaphore locking algorithm review
Feature #416 - exbench Enduro/X benchmark tool experimental release
Feature #286 - async logger and latent command framwork (LCF)
Bug #608 - xadmin cli failures
Support #633 - Bboolev with fields longer than 511 chars might get invalid results
Feature #655 - Static analysis of the source
Feature #401 - DDR for services
Support #611 - Excompat cleanup, leave only used fields
Feature #594 - Add support for TPEXIT flag
Feature #613 - ndrxconfig.xml shall allow no-entities - flatten the XML
Support #623 - Bridge clock adjustment improvements
Feature #598 - svqids and svsemids shall work in similar way as shms. Added headers for shms command