X Platform Documentation Portal

Release Notes

X Platform Documentation Portal

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Adding missing release note for XPLATFORM-1390

...

Table of Content Zone
maxLevel3
minLevel1
outlinefalse
locationtop
stylecircle
typelist
printabletrue

New Feature

Anchor
XPLATFORM-757
XPLATFORM-757
XPLATFORM-757 - Application Triggered Rollback

div
classreleaseNote

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

See AEP Transactions for details.

Align
alignright
Status
subtlefalse
colourYellow
titleTalon

Anchor
XPLATFORM-1058
XPLATFORM-1058
XPLATFORM-1058 - Add Message Type latency stats to server heartbeats.

div
classreleaseNote

This release provides the ability to include message type latency stats in xvm heartbeats. To include message type latency stats in hearbeats the stats must be enabled for the corresponding app and the server must be configured to emit them:

Code Block
xml
xml
<apps>
  <app name="my-app" mainClass="com.acme.MyApp">
    <captureTransactionLatencyStats>true</captureTransactionLatencyStats>
    <captureMessageTypeStats>true</captureMessageTypeStats>
  </app>
</apps>
<servers>
  <server name="my-xvm">
    <heartbeats enabled="true" interval="5">
      <collectSeriesStats>true</collectSeriesStats>
      <includeMessageTypeStats>false</includeMessageTypeStats>
      <tracing enabled="true"></tracing>
    </heartbeats>
  </server>
</servers>

See the DDL Schema Reference for more information

Align
alignright
Status
subtlefalse
colourYellow
titleStats and Alerts
Align
alignright
Status
subtlefalse
colourYellow
titleTalon

Anchor
XPLATFORM-1295
XPLATFORM-1295
XPLATFORM-1295 - Subscription sanitation feature

div
classreleaseNote

When using dynamic substitution for channel keys, we will replace non digit or letter characters with an '_' when resolving a topic using substitution values at runtime if nv.sma.cleanmessagekey == true. Prior to 3.7 X would not perform the same substitution on the subscribe side, which could lead to channels being subscribed to incorrect topics. As of 3.7, this substitution is also performed on the subscribe side by default if nv.sma.cleanmessagekey == true.
Compatibility Notes:

div
classreleaseNote
 

This change will replace non letter and digit characters in channel keys when 'nv.sma.cleanmessagekey=true'. To preserve the old behavior set 'nv.sma.cleanchannelfilter=false'

Align
alignright
Status
subtlefalse
colourYellow
titleSMA
Align
alignright
Status
subtlefalse
colourYellow
titleTalon
div

Anchor
XPLATFORM-1451
XPLATFORM-1451
XPLATFORM-1451 - Implement AEP option to ack on store commit.

div
classreleaseNote
 

This release introduces a new InboundEventAcknowledgementPolicy that allows configuring an AepEngine to acknowledge inbound messages after store commit instead of the default behavior of acknowledging received messages when all outbound messages have been acknowledged. Using a policy of OnStoreStability enables acknowledge on store commit and can improve pipelining throughput for window based messages providers such as Solace by decreasing the upstream acknowledgement time.

See Ddl Config Reference (https://docs.neeveresearch.com/display/KB/DDL+Schema+Reference#DDLSchemaReference-\<inboundEventAcknowledgementPolicy\>)

Align
alignright
Status
subtlefalse
colourYellow
titleAEP
Align
alignright
Status
subtlefalse
colourYellow
titleSMA

Anchor
XPLATFORM-1515
XPLATFORM-1515
XPLATFORM-1515 - Allow messages sync() to be done by AepEngine at injection time

div
classreleaseNote

This release adds the ability to configure an AepEngine such that it calls MessageView.sync() on injected messages. This feature can save the AepEngine cpu cycles in cases where serializes the message for logging or replications.

See DDL Config Reference: syncInjectedMessages (https://docs.neeveresearch.com/display/KB/DDL+Schema+Reference#DDLSchemaReference-\<syncInjectedMessages\>) for additional details.

Align
alignright
Status
subtlefalse
colourYellow
titleAEP

Anchor
XPLATFORM-1527
XPLATFORM-1527
XPLATFORM-1527 - Add check for Orphan Subscriptions in Solace JNI Binding

div
classreleaseNote

This release ads the ability to enable solace binding orphan subscription checks introduced in 3.5 for JCSMP in the JNI binding.

See The Solace Binding documentation for more details.
Compatibility Notes:

div
classreleaseNote
 

When using JNI is it critical that you have the most up to date version of the nvx-native runtime (3.6.11).

Align
alignright
Status
subtlefalse
colourYellow
titleSolace Binding
div

Anchor
XPLATFORM-1591
XPLATFORM-1591
XPLATFORM-1591 - Capture wait times in thread stats

div
classreleaseNote
 

This release can now report the wait time in nanoseconds that threads spent waiting to do work. In this release wait times are reported for threads waiting for events passed through a disruptor. Monitoring tools can use the wait time to determine the amount of time in a sampling interval a thread has done no productive work which is a good indicator of its excess processing capacity.

Wait times are reported in heartbeats as part of SrvMonSysIndividualThreadStats and can also be traced by enabling trace in DDL:

No Format
&lt;servers&gt;
  &lt;server name="my-xvm"&gt;
    &lt;heartbeats enabled="true" interval="5"&gt;
      &lt;collectIndividualThreadStats&gt;true&lt;/collectIndividualThreadStats&gt;
      &lt;tracing enabled="true"&gt;
        &lt;traceThreadStats&gt;true&lt;/traceThreadStats&gt;
      &lt;/tracing&gt;
    &lt;/heartbeats&gt;
  &lt;/server&gt;
&lt;/server&gt;
No Format
[Thread Stats]
ID    CPU       DCPU    DUSER   CPU%  USER% WAIT% STATE           NAME
42    9.0m      10.3s   10.2s   100   99    90    RUNNABLE        X-STEMux-myapp-2 (aff=[2(s0c2t0)])

Where the above shows that the the my app event multiplexer is consuming 100% cpu, but 90% of that is spent spinning in a busy spin.

See SrvMonSysIndividualThreadStats Javadoc

Align
alignright
Status
subtlefalse
colourYellow
titleStats and Alerts

Anchor
XPLATFORM-1628
XPLATFORM-1628
XPLATFORM-1628 - Create getXXXTo(EmbeddedEntity) copying accessor

div
classreleaseNote

This release adds copying accessors for embedded entities to ADM generated messages and entities of the form getXXXTo(Entity target), and also creates copy() and copyInto(Entity target) methods on generated entities.

In Xbuf and Protobuf generated code the copy() operations preserve pass-through field value for received entities that have not been modified (a pass-through field is a field not defined in the generated code, but encoded on the wire by a sender). Additionally, in Xbuf generated code the copy is zero garbage.

Prior to this change applications could:

  • use the clone() method to copy an embedded entity in a zero garbage fashion, but does not preserve pass-through fields.
    or
  • use EmbeddedEntity.deserializeFrom(other.serializeToByteBuffer()); which preserves pass-through fields, but is not zero garbage.

The new copy() methods provide a way to do a pass-through field preserving copy that is also zero garbage.

See Xbuf Embedded Entities

Align
alignright
Status
subtlefalse
colourYellow
titleADM
Align
alignright
Status
subtlefalse
colourYellow
titleMessage Library

Anchor
XPLATFORM-1630
XPLATFORM-1630
XPLATFORM-1630 - Allow control over the initial backing buffer size for embedded Xbuf fields

div
classreleaseNote

This release provides the ability to globally configure the initial backing buffers size for embedded xbuf entities by setting the property:

Panel

nv.xbuf.fullyQualifiedClassName.initialbackingbuffersize

For example:

Code Block
none
none
titleSystem Property
-Dnv.xbuf.com.myapp.messages.Address.initialbackingbuffersize=32

or in DDL

Code Block
xml
xml
titleDDL
&lt;env&gt;
    &lt;nv&gt;
      &lt;xbuf&gt;
        &lt;com.myapp.messages&gt;
          &lt;Address.initialbackingbuffersize&gt;32&lt;/Address.initialbackingbuffersize&gt;
          &lt;Recipient.initialbackingbuffersize&gt;32&lt;/Recipient.initialbackingbuffersize&gt;
        &lt;/com.myapp.state&gt;
      &lt;/xbuf&gt;
  &lt;/nv&gt;
&lt;/env&gt;

To take advantage of this functionality code regeneration is required. When not configured, the default backing buffer size of 256 bytes will continue to be used.

Align
alignright
Status
subtlefalse
colourYellow
titleADM
Align
alignright
Status
subtlefalse
colourYellow
titleMessage Library

Anchor
XPLATFORM-1641
XPLATFORM-1641
XPLATFORM-1641 - Implement TransactionLogTool query based transaction repair.

div
classreleaseNote

This release adds a new 'rewrite' command to the TransactionLogTool which writes the contents of a query into new transaction logs. This command can be used to remove 'poison' transaction log entries to allow recovery in situations where the removal of the event doesn't affect recoverability of subsequent entries.

See Transaction Log Tool Command Usage

Align
alignright
Status
subtlefalse
colourYellow
titleTalon
Align
alignright
Status
subtlefalse
colourYellow
titleTools

Anchor
XPLATFORM-1647
XPLATFORM-1647
XPLATFORM-1647 - Add autoStopOnLastAppStop as a server config element in DDL.

div
classreleaseNote

This release adds the ability to configure the nv.server.autostop.onlastappstop using the new autoStopOnLastAppStop element in DDL.

See DDL Schema Reference (https://docs.neeveresearch.com/display/KB/DDL+Schema+Reference#DDLSchemaReference-\<autoStopOnLastAppStop\>)

Align
alignright
Status
subtlefalse
colourYellow
titleConfiguration
Align
alignright
Status
subtlefalse
colourYellow
titleTalon Server

Anchor
XPLATFORM-1650
XPLATFORM-1650
XPLATFORM-1650 - Add XVM admin command for triggering a thread dump

div
classreleaseNote

This story adds the ability to trigger a thread dump via a talon admin command (available through lumino or robin admin clients).

Align
alignright
Status
subtlefalse
colourYellow
titleTalon Server

Anchor
XPLATFORM-1651
XPLATFORM-1651
XPLATFORM-1651 - Add XVM admin command for triggering garbage collection

div
classreleaseNote

This story adds the ability to trigger garbage collection via a talon admin command (available through lumino or robin admin clients).

Align
alignright
Status
subtlefalse
colourYellow
titleTalon Server

Anchor
XPLATFORM-1657
XPLATFORM-1657
XPLATFORM-1657 - Add adminClientOutputQueueCapacity as a server config element in DDL

div
classreleaseNote

This release adds the ability to configure nv.server.adminclient.outputqueue.capacity via an adminClientOutputQueueCapacity element on the server in DDL.

See DDL Config Reference (https://docs.neeveresearch.com/display/KB/DDL+Schema+Reference#DDLSchemaReference-\<adminClientOutputQueueCapacity\>)

Align
alignright
Status
subtlefalse
colourYellow
titleConfiguration

Anchor
XPLATFORM-1662
XPLATFORM-1662
XPLATFORM-1662 - Add MessageBusBindingFailPolicy to DDL

div
classreleaseNote

This release makes the MessageBusBindingFailPolicy a DDL configurable option. See the DDL Reference (https://docs.neeveresearch.com/display/KB/DDL+Schema+Reference#DDLSchemaReference-\<messageBusBindingFailPolicy\>)

Align
alignright
Status
subtlefalse
colourYellow
titleConfiguration

Anchor
XPLATFORM-1663
XPLATFORM-1663
XPLATFORM-1663 - Add MessagingStartFailPolicy to DDL

div
classreleaseNote

This release makes the MessagingStartFailPolicy a DDL configurable option. See the DDL Reference (https://docs.neeveresearch.com/display/KB/DDL+Schema+Reference#DDLSchemaReference-\<messagingStartFailPolicy \>)

Align
alignright
Status
subtlefalse
colourYellow
titleConfiguration

Anchor
XPLATFORM-1742
XPLATFORM-1742
XPLATFORM-1742 - Implement ability to configure pools from DDL environment

div
classreleaseNote

This release provides experimental support for configuring pools at runtime via the environment or DDL config.

This can be achieved by setting properties of the form "nv.pool.<poolKey>.propertyName" where

poolKey is:
the name of the pool as reported in pool stats without the trailing pool ".<instanceId>" suffix.

propertyName is one of the bean properties on UtlPool.Params:

  • initialCapacity
  • maxCapacity
  • threaded
  • preallocate
  • detachedWash

For example, pool stats may show stats for the packet backing an XBuf generated message as "packet.MyMessageXbufPacket.71.1.216". The key to use for the pool would thus be "packet.MyMessageXbufPacket.71.1", and the pool could be configured for preallocation in DDL as:

Code Block
xml
xml
&lt;env&gt;
    &lt;!-- pool parameters --&gt;
    &lt;nv&gt;
      &lt;pool&gt;
        &lt;packet.MyMessageXbufPacket.71.1&gt;
           &lt;initialCapacity&gt;16384&lt;/initialCapacity&gt;
           &lt;preallocate&gt;true&lt;/preallocate&gt;
        &lt;/packet.MyMessageXbufPacket.71.1&gt;
      &lt;/pool&gt;
    &lt;/nv&gt;
&lt;/env&gt;
Align
alignright
Status
subtlefalse
colourYellow
titleHummingbird

Anchor
XPLATFORM-1743
XPLATFORM-1743
XPLATFORM-1743 - Implement ability to configure Xbuf pool parameters at runtime

div
classreleaseNote

This release introduced the ability to configure pools for xbuf generated messages and entities at runtime in the same way that initial backing buffer sizes can be configured (introduced in 3.5)

Pooling parameters for Xbuf can be configured as environment properties using nv.xbuf.<fullyqualifiedobjectname>.pool.<propertyName> where:

*propertyName* is one of the bean properties on UtlPool.Params:

  • initialCapacity
  • maxCapacity
  • threaded
  • preallocate
  • detachedWash

For example:

Code Block
-Dnv.xbuf.com.myapp.messages.MyEntity.maxCapacity=1024

or in the DDL environment section:

Code Block
xml
xml
&lt;env&gt;
  &lt;nv&gt;
    &lt;xbuf&gt;
      &lt;com.myapp.messages&gt;
        &lt;MyEntity&gt;
          &lt;initialbackingbuffersize&gt;32&lt;/initialbackingbuffersize&gt;
          &lt;pool&gt;
             &lt;maxCapacity&gt;1024&lt;/maxCapacity&gt;
             &lt;preallocate&gt;true&lt;/preallocate&gt;
          &lt;/pool&gt;
        &lt;/MyMessage&gt;
      &lt;/com.myapp.messages&gt;
    &lt;/xbuf&gt;
  &lt;/nv&gt;
&lt;/env&gt;

Runtime configuration done for xbuf pools takes lower precedence than the general pool configuration mechanism introduced in XPLATFORM-1742. The primary motivation for allow Xbuf pools to be configured in the above fashion

Align
alignright
Status
subtlefalse
colourYellow
titleXbuf

Anchor
XPLATFORM-1749
XPLATFORM-1749
XPLATFORM-1749 - Record per transaction latency stats

div
classreleaseNote

This release provides the ability to record message and transaction stats on per transaction basis in a transaction log file. At the expense of additional processing overhead, this provides a means by which more detailed analysis of transaction latencies can be performed than those emitted in histographical summary in server heartbeats.

See Also:

 

Align
alignright
Status
subtlefalse
colourYellow
titleAEP
Align
alignright
Status
subtlefalse
colourYellow
titleTalon

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

div
classreleaseNote

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.

Align
alignright
Status
subtlefalse
colourYellow
titleStats and Alerts
Align
alignright
Status
subtlefalse
colourYellow
titleTalon

Improvement

Anchor
XPLATFORM-1159
XPLATFORM-1159
XPLATFORM-1159 - Set more meaninful name for solace producer session threads.

div
classreleaseNote

This release provides better names for threads created by the solace API. The solace api doesn't provide a mechanism for specifying meaningful thread names. In previous releases the Neeve Solace binding would append "X-SMA-<busname>IN" to the solace reactor thread on receipt of the first message. This release now also sets appends "X-SMA<busname>-OUT" on receipt of the first ack to provide a more meaningful name to the producer session thread.

Align
alignright
Status
subtlefalse
colourYellow
titleSolace Binding

Anchor
XPLATFORM-1234
XPLATFORM-1234
XPLATFORM-1234 - Allow configuration of Xbuf desync policies

div
classreleaseNote

This release allows global configuration of xbuf generated types desync policy. The desync policy can now be globally configured via:

No Format
nv.xbuf.default.desyncpolicy=Copy

or on a type by type basis via:

No Format
nv.xbuf.typename.desyncpolicy=FrameFields

for example in DDL one might set:

Code Block
xml
xml
&lt;model&gt;
  &lt;env&gt;
    &lt;nv.xbuf&gt;

      &lt;default&gt;
        &lt;desyncpolicy&gt;Copy&lt;/desyncpolicy&gt;
      &lt;default&gt;

      &lt;com.acme.MyMessage&gt;
        &lt;desyncpolicy&gt;FrameFields&lt;/desyncpolicy&gt;
      &lt;/com.acme.MyMessage&gt;

    &lt;/nv.xbuf&gt;
  &lt;/env&gt;
&lt;/model&gt;

Where the valid values are one of Copy, FrameFields or FrameContainer.

This release also removes the restriction against calling getXXXUnsafe() for String fields when FrameFields is the desync policy which makes it possible to use FrameFields when application code uses Unsafe accessors.

Align
alignright
Status
subtlefalse
colourYellow
titleADM
Align
alignright
Status
subtlefalse
colourYellow
titleConfiguration
Align
alignright
Status
subtlefalse
colourYellow
titleMessage Library
Align
alignright
Status
subtlefalse
colourYellow
titleXbuf

Anchor
XPLATFORM-1644
XPLATFORM-1644
XPLATFORM-1644 - Change Solace binding to treat 0 length queue name as null

div
classreleaseNote

This release allows specifying a blank (empty string or whitespace) 'queue_name' solace bus descriptor property. When a blank value is provided it is interpreted to mean that a queue should not be used.

This is useful in situations in which a default queue name property is specified for a bus via DDL config, and one would like to override the binding not to use a queue.

Anchor
XPLATFORM-1654
XPLATFORM-1654
XPLATFORM-1654 - Add displayName attribute to Command, Argument,Option and RemainingArgs annotations

div
classreleaseNote

This release adds the ability to set displayName on the Command, Argument, Option and RemainingArgs annotations. Specifying a display name allows for a better presentation in UI tools such as Lumino

Align
alignright
Status
subtlefalse
colourYellow
titleTalon Server

Anchor
XPLATFORM-1676
XPLATFORM-1676
XPLATFORM-1676 - Enhance heartbeat thread stats to include affinitization and interval cpu usage

div
classreleaseNote

This release changes the XVM server stats thread to populate the heartbeat fields for individual thread stats with cpu usage, user mode cpu usage, affinitization information and the collection time in nanoseconds. These stats can be used by monitoring tools to determine the number of cycles the thread used in a sampling interval and can help to diagnose problems cpu affinitization configuration.

See SrvMonSysIndividualThreadStats Javadoc

Align
alignright
Status
subtlefalse
colourYellow
titleStats and Alerts

Anchor
XPLATFORM-1683
XPLATFORM-1683
XPLATFORM-1683 - Implement solace config parameter controlling SMA metadata version

div
classreleaseNote

This release provides the ability to set the property 'sma_metadata_version' on solace binding bus descriptors. This property can be used to control the version of the metadata to tag on the message. The solace binding currently defaults to metadata version 1, which does not include the transmitted message's type id. Setting it uses the current metadata version which does include the type id, but the metadata version used must be supported by all downstream receivers that deserialize it.

Align
alignright
Status
subtlefalse
colourYellow
titleSolace Binding

Anchor
XPLATFORM-1688
XPLATFORM-1688
XPLATFORM-1688 - Unchecked exception preparing UnhandledMessageEvent should be caught

div
classreleaseNote

This release improves error handling in the Solace binding to handle the case where there is an issue contructing an UnhandledMessageEvent. With this change:

  • If there is an error preparing the UME or enqueuing it for the engine to process,
    the binding now catches the exception and traces the error.
  • The binding is closed based on the value of failOnUnhandledMessageEvents

    Align
    alignright
    Status
    subtlefalse
    colourYellow
    titleSMA
    Align
    alignright
    Status
    subtlefalse
    colourYellow
    titleSolace Binding

Anchor
XPLATFORM-1700
XPLATFORM-1700
XPLATFORM-1700 - Deprecate IOBuffer.getBuffer() in favor of IOBuffer.takeBuffer()/releaseBuffer()

div
classreleaseNote

TBD

Anchor
XPLATFORM-1702
XPLATFORM-1702
XPLATFORM-1702 - Add IOElasticBuffer.getTo(..,IOBuffer,...)

div
classreleaseNote

This release adds the IOElasticBuffer.getTo(index, IOBuffer, bufferOffset, length) method to copy data from an IOElasticBuffer to an IOBuffer

Anchor
XPLATFORM-1705
XPLATFORM-1705
XPLATFORM-1705 - Enforce RogLog cannot be opened after closed

div
classreleaseNote

Prior to this release, the RogLog did not validate that the open-close-open sequence is not permitted on a log. This release adds that validation. From this release onwards, if one opens, closes and then tries to open a log again, it will throw an IllegalStateException

Anchor
XPLATFORM-1712
XPLATFORM-1712
XPLATFORM-1712 - Enhance Transaction Log Tool to surface objects in Remove entries.

div
classreleaseNote

XPLATFORM-1010 changed the store transaction log to include the serialized object being removed in Remove entries. This changes the TransactionLogTool and RogLog to surface the removed store objects in RogLog.Entry making the object content available for query.

Align
alignright
Status
subtlefalse
colourYellow
titleTalon
Align
alignright
Status
subtlefalse
colourYellow
titleTools

Anchor
XPLATFORM-1729
XPLATFORM-1729
XPLATFORM-1729 - Add ability to set compaction window size in TLT

div
classreleaseNote

The release provides the capability to set the compaction window size when using the transaction log tool's 'compact' command.

Align
alignright
Status
subtlefalse
colourYellow
titleTools

Anchor
XPLATFORM-1737
XPLATFORM-1737
XPLATFORM-1737 - XVM heartbeat logger should not be auto optimized to busy spin.

div
classreleaseNote

This release disables auto optimization of an XVM's binary heartbeat logger so that it doesn't busy spin when nv.optimizefor is latency or throughput.

Align
alignright
Status
subtlefalse
colourYellow
titleStats and Alerts

Anchor
XPLATFORM-1745
XPLATFORM-1745
XPLATFORM-1745 - Report pools stats in heartbeats on evicts or when the size hits a new high water mark

div
classreleaseNote

This release changes server heartbeats to include pool stats for a pool if size highwater mark has changed or if there are evicts in a given interval.

  • The size high water mark shows the most number of elements returned to the pool without being taken for use. Knowing the maximum size is useful in inferring whether pool MISSES that are not balanced by subsequent PUTs are the result of leaks.
  • Reporting evictions is useful in determining if a pools max capacity may be size too low.

    Align
    alignright
    Status
    subtlefalse
    colourYellow
    titleStats and Alerts
    Align
    alignright
    Status
    subtlefalse
    colourYellow
    titleTalon

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

div
classreleaseNote

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:

    div
    classreleaseNote
     

    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.

div

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

div
classreleaseNote
 

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

No Format
The solace session does not have endpoint management capability. Assuming queue '&lt;queuename&gt;' is already provisioned.
No Format
No queue name supplied. Guaranteed message receipt is disabled.
Align
alignright
Status
subtlefalse
colourYellow
titleSolace Binding

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

div
classreleaseNote

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.

Align
alignright
Status
subtlefalse
colourYellow
titleSolace Binding

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

div
classreleaseNote

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.

Align
alignright
Status
subtlefalse
colourYellow
titleDiscovery
Align
alignright
Status
subtlefalse
colourYellow
titleSolace Binding

Change

Anchor
XPLATFORM-1629
XPLATFORM-1629
XPLATFORM-1629 - Enhance Xbuf entity clone() to preserve pass-through fields.

div
classreleaseNote

This release changes the ADM generated clone() method for embedded entities and messages to preserve pass through fields by leveraging the new embedded entity copy() functionality introduced in 3.5.
Compatibility Notes:

div
classreleaseNote
 

This change required a bump in the ADM compatibility level from 3.4.1 to 3.5.0. Generated code with the version will not be compatible with earlier versions of the platform (or with code generated by earlier versions of the platform).

Align
alignright
Status
subtlefalse
colourYellow
titleADM
Align
alignright
Status
subtlefalse
colourYellow
titleMessage Library
div

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

div
classreleaseNote
 

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:

div
classreleaseNote
 

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

Align
alignright
Status
subtlefalse
colourYellow
titleADM
div

Anchor
XPLATFORM-1660
XPLATFORM-1660
XPLATFORM-1660 - Prevent usage of adaptive commit and replicate in parallel simulatenously

div
classreleaseNote
 

Usage of both adaptive transaction commit and parallel cluster replication is not supported. This release enforces this by disabling parallel cluster replication if an adaptive commit batch size is specified for the engine.

Align
alignright
Status
subtlefalse
colourYellow
titleAEP

Anchor
XPLATFORM-1666
XPLATFORM-1666
XPLATFORM-1666 - Change solace binding 'sender_cpu_affinity_mask' to 'detached_sends_cpu_affinity_mask'

div
classreleaseNote

This release changes changes the solace binding property for the detached sender cpu affinity mask from 'sender_cpu_affinity_mask' to 'detached_sends_cpu_affinity_mask' so that is is more consistent with the the other 'detached_sends_*' binding properties.

The old property is still honored when specified.

See SolaceBindingProperties javadoc
Compatibility Notes:

div
classreleaseNote
 

Applications are encouraged to update the solace binding property for the detached sender cpu affinity mask from ''sender_cpu_affinity_mask' to 'detached_sends_cpu_affinity_mask'

Align
alignright
Status
subtlefalse
colourYellow
titleSolace Binding
div

Anchor
XPLATFORM-1672
XPLATFORM-1672
XPLATFORM-1672 - Disallow environment provider registration when replicateInParallel is enabled

div
classreleaseNote
 

This changes modifies the AepEngine.registerEnvironmentProvider to throw an IllegalStateException if the engine is configured for parallel cluster replication. Parallel cluster replication cannot be used with environment providers because business logic must be executed to collect the environment data before replicating.

Align
alignright
Status
subtlefalse
colourYellow
titleAEP

Anchor
XPLATFORM-1685
XPLATFORM-1685
XPLATFORM-1685 - Make sparse population optimization the default for Xbuf

div
classreleaseNote

This release changes the code generation for Xbuf messages and entities to use the SPARSE_CONTENT optimization hint by default.

When this optimization is enabled the sync/desync code paths for the generated type uses a loop to loop through the type's fields syncing or desyncing generically. When the optimization is not enabled custom generated methods for sync/desync are used. Recent testing has shown that in recent JVMs that the generated methods can actually perform worse which has motivated this change.

This release also implements the ability to configure the optimization value globally by setting the XRuntime property:

No Format
nv.xbuf.default.optimizationhints=SparseContent|SparseInterest

... or on a type by type basis with:

No Format
nv.xbuf.&lt;classname&gt;.optimizationhints=None

where the optimizations hints are specified as a '|' delimited set of the values None, SparseInterest, and SparseContent.

Compatibility Notes:

div
classreleaseNote
 

To leverage the new optimization defaults, code regeneration is required. The newly generated code won't be compatible with older releases as it relies on new platform apis.

This change also removes the constants SPARSE_CONTENT and SPARSE_INTEREST from the generated types. The constants can now be found in com.neeve.xbuf.XbufOptimizations

Align
alignright
Status
subtlefalse
colourYellow
titleADM
Align
alignright
Status
subtlefalse
colourYellow
titleConfiguration
Align
alignright
Status
subtlefalse
colourYellow
titleXbuf
div

Anchor
XPLATFORM-1697
XPLATFORM-1697
XPLATFORM-1697 - Failure to get subscription over SEMP should throw exception on binding start.

div
classreleaseNote
 

This release changes the Solace binding to treat a failure to get subscriptions during subscription validation as a bus binding open failure that prevents an application from starting up. Prior to this change a failure to fetch subscriptions from the appliance would result in an exception being logged and bus binding open to continue successfully.

Align
alignright
Status
subtlefalse
colourYellow
titleSolace Binding

Anchor
XPLATFORM-1704
XPLATFORM-1704
XPLATFORM-1704 - Channel join failure in an AepEngine should be treated as a failure rather than a warning

div
classreleaseNote

This release changes the AepEngine to treat a failure to join a channel as a bus binding open failure. Prior to this change if a subscription could not be issued the AepEngine would log an exception and continue, allow the bus to be opened with potentially missing subscriptions.
Compatibility Notes:

div
classreleaseNote
 

This change may result in applications that used to successful start with missing to subscription to no longer startup.

Align
alignright
Status
subtlefalse
colourYellow
titleSMA
div

Anchor
XPLATFORM-1713
XPLATFORM-1713
XPLATFORM-1713 - "cannot find object to remove" error should be treated as non fatal store integrity failure

div
classreleaseNote
 

Prior to this change a failure to find an entity in the store when processing a replicated or recovered Remove event for an application using State Replication was treated as a fatal error. This release changes the store not to treat this as a fatal error.

Align
alignright
Status
subtlefalse
colourYellow
titleODS

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

div
classreleaseNote

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:

Code Block
sql
sql
SELECT simpleClassName, enqueueTs, enqueueTsMicros, preProcessingTs, preProcessingTsMicros, outTs, outTsMicros FROM logs
No Format
|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:

div
classreleaseNote
 

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.

Align
alignright
Status
subtlefalse
colourYellow
titleStats and Alerts
Align
alignright
Status
subtlefalse
colourYellow
titleTalon
div

Bug

Anchor
XPLATFORM-1390
XPLATFORM-1390
Image Added XPLATFORM-1390 - NullPointerException in CDC requires CDC restart

div
classreleaseNote

This release addresses the following NullPointerException that can occur in the CDC Processor:

No Format
java.lang.NullPointerException
        at com.neeve.rog.log.RogLogReader.toEntry(RogLogReader.java:401)
       at com.neeve.rog.log.RogLogReader.next(RogLogReader.java:561)
        at com.neeve.rog.log.RogLogCompactionReader.getNextStableCheckpoint(RogLogCompactionReader.java:225)
        at com.neeve.rog.log.RogLogCompactionReader.run(RogLogCompactionReader.java:391)
        at com.neeve.rog.log.RogLogCdcProcessor.run(RogLogCdcProcessor.java:169)

The above issue could occur on some operating systems / hardware as a result of entries not being fully flushed to disk and made visible to the CDC reader operating in another process. To remedy this situation the transaction log writer writing entries to disk has been changed not to write the underlying entry header information to disk until the the full entry has been serialized into the underlying disk write buffer ensuring that readers don't read partial entries.

Align
alignright
Status
subtlefalse
colourYellow
titleCDC
Align
alignright
Status
subtlefalse
colourYellow
titleTalon

Anchor
XPLATFORM-1635
XPLATFORM-1635
XPLATFORM-1635 - Transaction batch not closed because of EventMultiplexer wakeup event

div
classreleaseNote
 

This fix resolves an issue in which the scheduling events into an Aep Engine's input multiplexer queue can result in adaptively batched transactions not being closed if no new message events are received.

Align
alignright
Status
subtlefalse
colourYellow
titleAEP

Anchor
XPLATFORM-1649
XPLATFORM-1649
XPLATFORM-1649 - White space in returned app commands should not be trimmed.

div
classreleaseNote

The release fixes an issue in which app commands that returned String values had their contents trimmed of leading and trailing whitespace.
Compatibility Notes:

div
classreleaseNote
 

This release change command invocation not to strip whitespace from returned string values. This could have an impact on robin scripts that use the 'wait' or 'validate' commands.

Align
alignright
Status
subtlefalse
colourYellow
titleTalon Server
div

Anchor
XPLATFORM-1655
XPLATFORM-1655
XPLATFORM-1655 - Command annotation aliases are ignored by xvm

div
classreleaseNote
 

Prior to this release the XVM was ignoring aliases provided on @Command annotated methods. With this fix, commands can now be invoked using their aliases,

Align
alignright
Status
subtlefalse
colourYellow
titleTalon Server

Anchor
XPLATFORM-1667
XPLATFORM-1667
XPLATFORM-1667 - High memory usage / pool leaks when intializaing backup member with Xbuf messages containing a large number of embdedded entity fields.

div
classreleaseNote

This release fixes an issue in which Xbuf embedded entities were not being disposed when initializing a backup member from a primary member's transaction log.

Failing to dispose the entities during initialization can cause a lot of allocations to occur which can lead to significant garbage collection pauses.

Align
alignright
Status
subtlefalse
colourYellow
titleXbuf

Anchor
XPLATFORM-1670
XPLATFORM-1670
XPLATFORM-1670 - Normalize solace binding boolean properties to accept 1/true or 0/false

div
classreleaseNote

This release allows specifying boolean solace bus descriptor properties in either the JCMSP true/false format or the JNI 1/0 formats. The solace binding will now rationalize them appropriately depending on the value of the use_jni property.

Align
alignright
Status
subtlefalse
colourYellow
titleConfiguration
Align
alignright
Status
subtlefalse
colourYellow
titleSolace Binding

Anchor
XPLATFORM-1674
XPLATFORM-1674
XPLATFORM-1674 - "source and dest buffers offsets and copy length must be >= 0" seen in solace binding

div
classreleaseNote

This release fixes an issue in the Solace binding that can occur when detached dispatched is enabled. Prior to this fix, with detached dispatch enabled, it was possible that the the solace reactor thread would dispose the topic it dispatched to the detached dispatch thread before the detached dispatch thread copied it into the channel key field of the message being dispatched to the application.

Align
alignright
Status
subtlefalse
colourYellow
titleHummingbird
Align
alignright
Status
subtlefalse
colourYellow
titleSolace Binding

Anchor
XPLATFORM-1677
XPLATFORM-1677
XPLATFORM-1677 - AepEngine's auto created direct bus binding creates a spinning core.

div
classreleaseNote

Prior to this release, An AepEngines would automatically creates a direct bus binding with the same name as the application to avoid the need for boilerplate configuration. However when optimized for latency, this caused a bus manager with a BusySpin thread to be created which ties up an additional core.

Consequently, with this release auto creation of a direct binding has been disabled unless the runtime property nv.aep.autocreatedirectbus=true.

(lightbulb) Note that this change has no effect on applications that explicitly create a bus with the same name as the application.

Align
alignright
Status
subtlefalse
colourYellow
titleAEP

Anchor
XPLATFORM-1686
XPLATFORM-1686
XPLATFORM-1686 - UnhandledMessageEvent + source and dest buffers offsets and copy length must be >= 0

div
classreleaseNote

This release fixes the following exception in the solace binding when usejni=true&set_key_on_receipt=true&detached_dispatch=true

No Format
java.lang.IllegalArgumentException: source and dest buffers offsets and copy length must be &gt;= 0
	at com.neeve.util.UtlBuffer.copy(UtlBuffer.java:377)
	at com.neeve.io.IOElasticBuffer.putFrom(IOElasticBuffer.java:900)
	at com.neeve.lang.XString.copyInto(XString.java:1603)
	at com.neeve.rog.impl.RogDirectMetadata.setMessageKeyAsRaw(RogDirectMetadata.java:875)
	at com.neeve.rog.impl.RogNode.setMessageKeyAsRaw(RogNode.java:341)
	at com.neeve.sma.impl.MessageBusBindingBase.wrap(MessageBusBindingBase.java:446)
	at com.neeve.sma.impl.MessageChannelBase.onMessage(MessageChannelBase.java:656)
	at com.neeve.solace.SolaceMessageChannel.onMessage(SolaceMessageChannel.java:221)
	at com.neeve.solace.SolaceMessageBusBinding.dispatchMessage(SolaceMessageBusBinding.java:306)

Prior to this release it was possible that with detached dispatch enabled in the binding that the solace reactor thread would dispose the received topic prior to it be in copied into the message by the detached dispatch thread.

Align
alignright
Status
subtlefalse
colourYellow
titleSolace Binding

Anchor
XPLATFORM-1689
XPLATFORM-1689
XPLATFORM-1689 - Empty string dest pointer in solClient_msg_setDestination seen in solace JNI binding

div
classreleaseNote

This release resolves a bug in the solace JNI binding in which the jni portion of the binding can overwrite another memory location with a NUL (0x00) character.

This would occur when the solace JNI binding appends a NUL character at the end of topic string with a backing buffer size of exactly the topic length – in such a case the null character could overflow into the beginning of an adjacent memory buffer.

Align
alignright
Status
subtlefalse
colourYellow
titleSMA
Align
alignright
Status
subtlefalse
colourYellow
titleSolace Binding

Anchor
XPLATFORM-1706
XPLATFORM-1706
XPLATFORM-1706 - PreprocessingTs missing when reading 3.4 transaction log with 3.5 binaries

div
classreleaseNote

This release fixes a bug in which preProcessingTs is not read when reading transaction logs created with version 3.4 or earlier.

In the Talon version 3.5 the transaction log metadata serialization version was changed from 2 to 3. When a v2 version of the transaction log is read by 3.5 the metadata is converted to the v3, but this conversion was not reading the preprocessingTs field.

Align
alignright
Status
subtlefalse
colourYellow
titleTalon
Align
alignright
Status
subtlefalse
colourYellow
titleTools

Anchor
XPLATFORM-1707
XPLATFORM-1707
XPLATFORM-1707 - XString.charAt can return wrong value

div
classreleaseNote

Fixes a bug with XString when it is initialized from a java String and charAt is called prior to the java String being sync'd into its backing buffer. Prior to this fix charAt would return an incorrect value.

Align
alignright
Status
subtlefalse
colourYellow
titleHummingbird

Anchor
XPLATFORM-1708
XPLATFORM-1708
XPLATFORM-1708 - AEP Engine throws NPE when primary environment provider returns null on recording end (no data recorded)

div
classreleaseNote

Prior to this release, AEP Engine threw an NPE when a primary environment provider returned null on recording end i.e. if no data was recorded. This release fixes that issue.

Anchor
XPLATFORM-1710
XPLATFORM-1710
XPLATFORM-1710 - SIGSEGV JVM crash in solace JNI binding after error in send call.

div
classreleaseNote

This release fixes the following JVM crash in the Solace JNI binding related to freeing message memory after encountering a solace error code in send.

No Format
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f2288309512, pid=18855, tid=139786289620736
#
# JRE version: Java(TM) SE Runtime Environment (8.0_60-b27) (build 1.8.0_60-b27)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.60-b23 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C  [libsolclient.so.1+0xd6512]&lt;1,18855,perf4.neeveresearch.com&gt; 20170522-19:27:25:022 (dbg)...[MsgChannel&lt;sender.default@nvx-perf-sma(Solace)&gt;]  closing channel [state=Open, flags=0]
  solClient_msg_free+0x12
#
# Core dump written. Default location: /home/root/work/nvx-perf-3.7-SNAPSHOT/core or core.18855
#
&lt;1,18855,perf4.neeveresearch.com&gt; 20170522-19:27:25:022 (dbg)...[MsgChannel&lt;sender.default@nvx-perf-sma(Solace)&gt;]  leaving channel
# An error report file with more information is saved as:
# /home/root/work/nvx-perf-3.7-SNAPSHOT/hs_err_pid18855.log
&lt;1,18855,perf4.neeveresearch.com&gt; 20170522-19:27:25:022 (dbg)...[MsgChannel&lt;sender.default@nvx-perf-sma(Solace)&gt;] Closing channel...
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
./xperftool.sh
Note

This fix requires picking up the latest native libraries 3.5.19

Align
alignright
Status
subtlefalse
colourYellow
titleSolace Binding

Anchor
XPLATFORM-1711
XPLATFORM-1711
XPLATFORM-1711 - JsonMappingException: Incompatible ODS class: Unknown message view encoding: -1 (through reference chain: com.neeve.rog.log.Entry"contentEncodingType")

div
classreleaseNote

This release fixes an TLT issue that occur when dumping Remove entries from a State Replication log that resulted in the an exception like the following:

No Format
java.lang.RuntimeException: com.fasterxml.jackson.databind.JsonMappingException: Incompatible ODS class: Unknown message view encoding: -1 (through reference chain: com.neeve.rog.log.Entry["contentEncodingType"])
        at com.neeve.rog.log.RogLogUtil.dumpLogEntryJson(RogLogUtil.java:1403)
        at com.neeve.tools.TransactionLogTool.writeEntry(TransactionLogTool.java:2988)
        at com.neeve.tools.TransactionLogTool.writeEntry(TransactionLogTool.java:2978)
        at com.neeve.tools.TransactionLogTool.access$700(TransactionLogTool.java:93)
        at com.neeve.tools.TransactionLogTool$Next.execute(TransactionLogTool.java:270)
Align
alignright
Status
subtlefalse
colourYellow
titleTools

Anchor
XPLATFORM-1739
XPLATFORM-1739
XPLATFORM-1739 - Cstart and tleg1 transaction stats are incorrect.

div
classreleaseNote

This release fixes a regression in the cstart and tleg1 transaction latency stats that could cause them to report time spent waiting in the engine's input disruptor.

Align
alignright
Status
subtlefalse
colourYellow
titleStats and Alerts
Align
alignright
Status
subtlefalse
colourYellow
titleTalon

Anchor
XPLATFORM-1741
XPLATFORM-1741
XPLATFORM-1741 - Solace discovery descriptor with embedded protocol results in exception

div
classreleaseNote

This release fixes a bug in discovery over SMA in which a discovery descriptor containing slashes in the address portion (e.g. solace://tcp://solacehost:55555) results in the error "bus name cannot contain '/'"

Align
alignright
Status
subtlefalse
colourYellow
titleDiscovery
Align
alignright
Status
subtlefalse
colourYellow
titleSolace Binding

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

div
classreleaseNote

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.

Align
alignright
Status
subtlefalse
colourYellow
titleAEP
Align
alignright
Status
subtlefalse
colourYellow
titleODS
Align
alignright
Status
subtlefalse
colourYellow
titleTalon

Anchor
XPLATFORM-1777
XPLATFORM-1777
XPLATFORM-1777 - NPE 3.7 using setValuesFrom on XbufRepeatedLongFieldBuffer

div
classreleaseNote

This release fixes a regression that results in a NullPointerException when setting the value of an XbufRepeatedFieldBuffer from another XbufRepeatedFieldBuffer that has not been initialized:

Code Block
java
java
XbufRepeatedLongFieldBuffer destination = IOIEventMessage.createIOIMarketSegmentIDsFieldBuffer(1, true);
XbufRepeatedLongFieldBuffer source = IOIEventMessage.createIOIMarketSegmentIDsFieldBuffer(1, true);

destination.setValuesFrom(source); // &lt;-- Null Pointer Exception
No Format
java.lang.NullPointerException
at com.neeve.io.IOElasticBuffer.putFrom(IOElasticBuffer.java:944)
at com.neeve.xbuf.XbufRepeatedLongFieldBuffer.setValuesFrom(XbufRepeatedLongFieldBuffer.java:133)
Align
alignright
Status
subtlefalse
colourYellow
titleXbuf