Release Date: Wednesday, August 02, 2017

Release Highlights

  • Improved memory usage for embedded entity array fields in Xbuf.
  • Microsecond resolution timestamps in transaction logs.
  • Support for Application Triggered Rollback.

 

Compatibility Notes

ADM Compatibility Level: 3.8.0 (see ADM Compatibility Matrix) The Adm Compatibility level last changed in Core X 3.7.163

(warning) This release introduces new features in ADM generated code that require new platform APIs, Consequently code generated with this version of the platform cannot be run with older versions of the platform.

(warning) The following issues have compatibility implications:

Change Log

New Feature

XPLATFORM-757 - Application Triggered Rollback

This release provides the ability for applications to rollback states changes and outbound message to application defined "savepoints".

See AEP Transactions for details.

XPLATFORM-1757 - Add enqueueTs timestamp to MessageView and persist it in transaction logs

This release now records the time at which Messages are enqueued on an application's input queue. EnqueueTs is set for any message queued for an application including those received from a message a bus or injected by the application. Like preProcessingTs and outTs, the timestamp is recorded in microseconds. A message's getEnqueueTs() accessor returns the value in milliseconds since the epoch and its getEnqueueTsMicros() returns the value in microseconds since the epoch.

Like preProcessingTs, enqueueTs is set on the Primary application instance and is persisted in transaction logs and replicated to backup instances. It is not updated when recovering from a transaction log or on the backup.

Improvement

XPLATFORM-1766 - Improve memory footprint of entity array deserialization for XBUF messages

Prior to this release, entities in an entity array in an XBUF message were deserialized into objects during the deserialization phase of message receipt. Bursty traffic containing a large number of messages with a large number of entities in the message's entity arrays could result in a large number of entities being in-flight before they are added to their pools. This can result in large pool sizes effectively resulting in large working heap set size even though the active working set of the heap during steady state is a small fraction of the heap.

This release fixes this issue. It does so by holding the serialized form of the entity arrays contained in a message until actual access of the entities. The entities are deserialized on demand on invocation of the generated getXXX() entity array accessor or the next() method of the generated getXXXIterator() entity accessor method.

A few points to note related to this change

  • This change does not affect the behavior of an entity array's generated setter methods
  • An entity array's getXXX() generated accessor continues to not be a zero garbage accessor. However, with this change, the amount of garbage generated by this method will increase. The increased garbage is released to the garbage collector immediately after the invocation of the getXXX() method as soon as the caller releases its reference to the returned entities.
    Compatibility Notes:

     

    Code generated by versions prior to 3.7 will continue to work with the 3.7 runtime. However, in such a configuration, the getXXXIterator() will not be zero garbage. Messages need to be regenerated using 3.7 code generator for the getXXXIterator() to be zero garbage

3.7 generated code is not compatible with earlier versions of the X runtime.

XPLATFORM-1770 - Reduce log level of solace queue provisioning warnings to info level

 

This release changes the level of the following solace warning messages to info rather than warn:

The solace session does not have endpoint management capability. Assuming queue '<queuename>' is already provisioned.
No queue name supplied. Guaranteed message receipt is disabled.

XPLATFORM-1772 - Solace binding should not display warning messages about known binding properties

Common (non solace specific) bus binding properties such as 'auto_add_catchall_channel' are currently flagged by the solace binding by logging a warning indicating that the properties are unknown solace properties that will be ignored and not passed to the underlying solace layer.

Because these properties are valid properties for configuring the generic portion of the binding logging warnings is not necessary.

XPLATFORM-1773 - Solace binding should not display warning messages about known discovery properties

When solace is used as a discovery provider discovery properties such as 'maxEntityAge' are currently flagged by the solace binding by logging a warning indicating that the properties are unknown solace properties that will be ignored and not passed to the underlying solace layer.

Because these properties are valid properties when solace is is used as a discovery provider logging warnings is not necessary.

Change

XPLATFORM-1648 - Add nvx-adm-maven-plugin to replace nvx-core-maven-plugin

This release deprecates the nvx-core-maven-plugin and provides a new plugin nvx-adm-maven-plugin to replace it. nvx-core-maven-plugin continues to be supported, but is likely to be dropped in a future release, so users should update their poms to use nvx-adm-maven-plugin instead.

 

Compatibility Notes:

 It is recommend that usage of nvx-core-maven-plugin in maven poms be replaced with nvx-adm-maven-plugin

XPLATFORM-1758 - Change to record preProcessingTs and outTs to microsecond precision in transaction logs.

This release changes the resolution of the preProcessingTs and outTs timestamps stored in transaction logs to use a microsecond resolution timestamp obtained from UtlTime#nowSinceEpoch(). The existing timestamps accessors getPreProcessingTs() and getOutTs() continue to return a millisecond resolution timestamp for backwards compatibility; this change adds additional accessors getPreprocessingTsMicros() and getOutTsMicros() to return the number of microseconds since the epoch.

Thus one can query the timestamps in either resolution with the TransactionLogTool as follows:

SELECT simpleClassName, enqueueTs, enqueueTsMicros, preProcessingTs, preProcessingTsMicros, outTs, outTsMicros FROM logs
|Entry.simpleClassName|                  enqueueTs|     enqueueTsMicros|            preProcessingTs|preProcessingTsMicros|                      outTs|         outTsMicros|
+---------------------+---------------------------+--------------------+---------------------------+---------------------+---------------------------+--------------------+
|NewOrder             |2017-08-01 12:10:46.583 PDT|    1501614646583108|2017-08-01 12:10:46.583 PDT|     1501614646583118|                           |                   0|
|OrderEvent           |                           |                   0|                           |                    0|2017-08-01 12:10:46.585 PDT|    1501614646585182|
+---------------------+---------------------------+--------------------+---------------------------+---------------------+---------------------------+--------------------+

Compatibility Notes:

 As these timestamps are stored in transactions logs, this change required a bump in their serialization version. Consequently, transaction logs created with this version can not be read by earlier versions of the platform.

Bug

XPLATFORM-1752 - Backup shuts down with last transaction when primary killed before messages replicated

 

This release resolve a regresion in Talon that cause the backup instance to shutdown gracefully if a primary crashes before replicating any new transactions to the backup.