Release Date: Wednesday, June 21, 2017

Release Highlights

  • Bug Fixes and Stability Improvements.

Compatibility Notes

ADM Compatibility Level: 3.4.1 (see ADM Compatibility Matrix) The Adm Compatibility level last changed in Core X  3.4.373 release

Change Log

Improvement

XPLATFORM-1688 - Unchecked exception preparing UnhandledMessageEvent should be caught

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

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

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.

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

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

Change

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

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.

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

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.

Bug

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

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

java.lang.IllegalArgumentException: source and dest buffers offsets and copy length must be >= 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.

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

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.

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

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.

XPLATFORM-1707 - XString.charAt can return wrong value

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.

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

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.

#
# 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]<1,18855,perf4.neeveresearch.com> 20170522-19:27:25:022 (dbg)...[MsgChannel<sender.default@nvx-perf-sma(Solace)>]  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
#
<1,18855,perf4.neeveresearch.com> 20170522-19:27:25:022 (dbg)...[MsgChannel<sender.default@nvx-perf-sma(Solace)>]  leaving channel
# An error report file with more information is saved as:
# /home/root/work/nvx-perf-3.7-SNAPSHOT/hs_err_pid18855.log
<1,18855,perf4.neeveresearch.com> 20170522-19:27:25:022 (dbg)...[MsgChannel<sender.default@nvx-perf-sma(Solace)>] 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

This fix requires picking up the latest native libraries 3.5.19

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

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:

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)

XPLATFORM-1726 - Transaction log corruption can occur with XVM stats enabled

The 3.6.74 release introduced additional stats to track the allocated file size of an engine's transaction logs. Under the covers the implementation of this feature makes a call to RandomAccessFile.length() to retrieve the current size of the file. This can cause a problem because of a JDK Bug in RandomAccessFile which can cause the length() call to erroneously move the file pointer. If this bug occurs it can result in transaction log entries being written to an incorrect location in the log. This release works around the JDK bug by using a different file instance to retrieve the size of the transaction log file.

As part of this fix, additional assertions were added to transaction log write and flush logic to validate the file pointer has not been modified.