Release Date: Tuesday, May 24, 2016
Release Highlights
Compatibility Notes
ADM Compatibility Level: 3.1.0 (what's this?) THIS IS A CHANGE FROM THE 3.1 RELEASE WHICH HAD A LEVEL OF 3.0.0 ... CODE GENERATED WITH THIS RELEASE WILL NOT BE API COMPATIBLE WITH PRIOR VERSIONS OF THE PLATFORM.
The following issues have compatibility implications:
- XPLATFORM-1020 - Add Inbound/Outbound Message Logging Failure handling policies.
- XPLATFORM-1208 - Field interest registration
- XPLATFORM-69 - License Key Generation & Enforcement for platform
- XPLATFORM-935 - Validate DDL configuration file against DDL XML schema
- XPLATFORM-1109 - Upgrade Tanuki version to 3.5.25
- XPLATFORM-1110 - Change nvx-jms to an optional platform module distinct from nvx-core-all
- XPLATFORM-1166 - Ignore messages received while binding is closing
- XPLATFORM-1154 - MessageMetadata serializes XString with null value as empty String instead of null
Change Log
- New Feature
- XPLATFORM-1000 - Implement @Configured annotation for injecting XRuntime configuration values
- XPLATFORM-1020 - Add Inbound/Outbound Message Logging Failure handling policies.
- XPLATFORM-1021 - Allow received messages on an unjoined channel to be dispatched to app on a catch all channel.
- XPLATFORM-1092 - Allow finer grained control over cpu spinning
- XPLATFORM-1171 - Allow setting Message Key, Message Bus Name and Message Channel on inbound messages
- XPLATFORM-1207 - Allow core-maven-plugin to not add generated source and resource folders to project
- XPLATFORM-1208 - Field interest registration
- XPLATFORM-1214 - Implement Aep Message Filtering
- XPLATFORM-1221 - Detached Cluster Replication Dispatch PREVIEW
- Improvement
- XPLATFORM-586 - Add numEventsProcessed stat to server heartbeats app stats.
- XPLATFORM-777 - Enable configuration of queuing wait strategy for detached sends and dispatch in the Solace messaging binding
- XPLATFORM-1098 - Create an option to disable native file i/o
- XPLATFORM-1107 - Implement event creation ordered priority event scheduling
- XPLATFORM-1151 - Ensure that topic is surfaced in UnhandledMessageEvent from Solace Binding
- XPLATFORM-1155 - Improve solace binding exception text to be more descriptive.
- XPLATFORM-1161 - Add SMA provider agnostic messageId field to UnhandledMessageEvents
- XPLATFORM-1162 - Add payload and metadata blobs to UnhandledMessageEvent's backing message
- XPLATFORM-1202 - Auto create trace log files
- XPLATFORM-1204 - Allow specifying initialLogLength as a float for inbound/outbound logger in DDL
- XPLATFORM-1210 - Keep transaction batch open if non-transaction event is not end of batch
- XPLATFORM-1213 - Add numMsgsSourced to server heartbeats.
- Change
- XPLATFORM-69 - License Key Generation & Enforcement for platform
- XPLATFORM-935 - Validate DDL configuration file against DDL XML schema
- XPLATFORM-1109 - Upgrade Tanuki version to 3.5.25
- XPLATFORM-1110 - Change nvx-jms to an optional platform module distinct from nvx-core-all
- XPLATFORM-1132 - Rename P2P binding to direct binding and add alias to p2p for backwards compat
- XPLATFORM-1138 - Change server group to optional in x-ddl with a default value of 'default'
- XPLATFORM-1140 - Trap errors in AEP message trace logging
- XPLATFORM-1166 - Ignore messages received while binding is closing
- Bug
- XPLATFORM-1091 - NullPointerException in QueryEngine on query with select on only unindexed monotonic fields selected
- XPLATFORM-1097 - File write fails when native file I/O is enabled, but native i/o buffers are disabled.
- XPLATFORM-1106 - NullPointerException during Map replacement operation leaves Map in inconsistent state
- XPLATFORM-1108 - Topic Sanitation does not work as expected.
- XPLATFORM-1129 - AepEngine.getEngineTime() should always return System.getCurrentTimeMillis() when not on dispatch thread.
- XPLATFORM-1154 - MessageMetadata serializes XString with null value as empty String instead of null
- XPLATFORM-1172 - NullPointerException in DiscoveryCacheShutdownHook
- XPLATFORM-1192 - TLT archive extraction can fail with apache compress 1.1
- XPLATFORM-1193 - AepUnhandledMessageEvent not dispatched when event pooling is enabled
- XPLATFORM-1198 - AepChannelDownEvent not dispatched to application
- XPLATFORM-1199 - A message type handler processes messages from only one channel
- XPLATFORM-1206 - Solace JNI binding doesn't report UnhandledMessageEvent when solace message is missing payload
- XPLATFORM-1209 - IndexOutOfBoundsException when attempting to grow the buffers in serialize context
New Feature
XPLATFORM-1000 - Implement @Configured annotation for injecting XRuntime configuration values |
This release provides the ability to do basic injection of XRuntime configuration values into objects provided objects. See Annotation Driven Config TALON |
XPLATFORM-1020 - Add Inbound/Outbound Message Logging Failure handling policies. |
This release adds two new failure handling policies for failures persisting messages to an application's inbound or outbound message logs:
Prior to this release, failures emanating from the inbound or outbound message loggers were trapped and an error was traced to trace logs along with dispatching either an AepInboundLogExceptionEvent or AepOutboundLogExceptionEvent which the application could trap and optionally stop the engine on its own. With the introduction of the 2 new policies, the above trace and exception events are still emitted, but now an AepEngine can be configured to either shutdown with StopEngine or to stop logging with StopLogging policies. There is no longer an option to simply ignore the exception because in most cases such failures are permanent and continued attempts to log new messages typically just result in repeated trace and alerts. X-DDL (platform.xml) XML configuration See DDL Configuration (https://docs.neeveresearch.com/display/KB/DDL+Schema+Reference#DDLSchemaReference-<inboundMessageLogging) for more details. Programmatic Configuration Compatiblity Notes: The default policy on either an inbound message logging failure or outbound message logging failure is to shutdown the engine. Additionally, an outbound message logging failure policy of StopEngine will cause outbound logging failures to unsolicited senders whereas before the engine would trap the exception. TALON |
XPLATFORM-1021 - Allow received messages on an unjoined channel to be dispatched to app on a catch all channel. |
This release introduces the ability to configure message buses with a single 'catch all' channel. When a bus configured with a catch all channel receives a message with no channel specified, or on a channel that doesn't exist or is not joined, the catch all channel is used to dispatch the message. A channel is denoted as being the buses catch all channel by assigning it a channel id of 32767 (Short.MAX_VALUE). If a bus channel is not explicitly configured by the application with the catch all channel id, the message bus can be configured to create one automatically by setting the bus descriptor property 'auto_add_catchall_channel=true' in which case the bus will automatically add a channel called 'CATCHALL' for use as a catch all channel. See also: |
XPLATFORM-1092 - Allow finer grained control over cpu spinning |
This release provides additional knobs that can be used to control cpu spinning. Prior to this release when nv.optimizefor was set to 'latency' or 'throughput' disruptor event processor threads would assume 'BusySpin' or 'Yielding' wait strategies. In some situations this behavior is not desirable. New Knobs
See Also:
|
XPLATFORM-1171 - Allow setting Message Key, Message Bus Name and Message Channel on inbound messages |
This release adds the ability to configure message bus binding to set the message bus, message channel name, and message key on inbound messages. The message bus and channel can be set in the inbound message by setting the global environment property 'nv.sma.setbusandchannelonreceipt=true' or on a bus by bus basis by adding the bus descriptor property 'set_bus_and_channel_on_receipt=true' in the bus url. For buses that support transport of the message key (topic), the message key can be set on inbound messages by setting the global property 'nv.sma.setkeyonreceipt=true' or on a bus by bus basis by setting 'set_key_on_receipt=true'. For the solace binding, this property is equivalent to the now deprecated property 'set_topic_in_inbound_msg'. See also: |
XPLATFORM-1207 - Allow core-maven-plugin to not add generated source and resource folders to project |
This release adds the ability to avoid attaching the generated source directory or model source folder to a Maven project from nvx-core-maven-plugin: ADM BUILD/INFRASTRUCTURE TOOLS |
XPLATFORM-1208 - Field interest registration |
This release implements the ability for user to register the set of fields in a message that they are interested in. This results in only those fields that are registered in being deserialized thus allowing for faster deserialization. To utilize this feature, the user needs to register field interest via a static setFieldInterest() method generated for each message type. This method is currently only generated for X-Buffer encoded messages Messages generated with this change are NOT compatible with older versions of the X runtime. |
XPLATFORM-1214 - Implement Aep Message Filtering |
This release introduces the ability to set a MessageViewFilter on an AEPEngine to filter live messages prior to starting a transacton or dispatch to user handlers. A message filter does not apply to messages replicated by a peer or recovered from disk. Filtered messages are acknowledged, and are not logged to a transaction logs. Effects of a MessageFilter: Filtered messages
Monitoring Message filtering occurs prior to dispatching to application registered message handlers or pre or post dispatch handlers. Filtered message contribute to numEventsProcessed, numMsgsReceivedBestEffort, numMsgsReceivedGuaranteed and numMsgsSourced. TALON |
XPLATFORM-1221 - Detached Cluster Replication Dispatch PREVIEW |
Prior to this release, network read, de-serialization of the packetize form of a store commit entry and dispatch of the deserialized object to the engine multiplexer is done by the network reader thread. This story adds the capability to perform this activity by a dedicated thread. This can considerably improve overall system throughput. The following parameters on the store descriptor control this functionality: detachedDispatch
dispatcherQueueDepth
dispatcherCpuAffinityMask
dispatcherQueueWaitStrategy
The name of the dispatcher thread is "X-ODS-Native-Dispatcher-<storename>.<membername> ADVISORY Post release, a threading issue was identified with this feature that can cause issues when a Backup instance loses its connection to the primary. Consequently, this feature should not be used in production until this issue has been fixed. Issue Id: XPLATFORM-1242 |
Improvement
XPLATFORM-586 - Add numEventsProcessed stat to server heartbeats app stats. |
This release adds the numEventsProcessed to server heartbeats. This stat complements the numEventsRcvd statistic and is incremented once event processing has completed. This stat can be used to tell if there are events currently being processed. TALON |
XPLATFORM-777 - Enable configuration of queuing wait strategy for detached sends and dispatch in the Solace messaging binding |
Prior to this release, the wait strategy for the detached send and dispatch queues are hard coded. This release makes them configurable.
Permissible wait strategies are as follows:
The above values can be set in the bus binding descriptor in a case insensitive manner. Setting a value other than any of the above will cause the binding to throw an exception during the binding open. SOLACE BINDING |
XPLATFORM-1098 - Create an option to disable native file i/o |
This release adds the ability to disable native file io by setting nv.file.usenative=false. HUMMINGBIRD |
XPLATFORM-1107 - Implement event creation ordered priority event scheduling |
This release enhances the ordering guarantees for scheduled events such that events scheduled with the same delay are scheduled in order of event creation. For applications that use AepEngine.scheduleMessage this means that 2 events scheduled with the same delay (including high priority, negative delay) will be scheduled in the order the calls were made to the engine. This also applies to Hornet's MessageInjector interface which is just a thin wrapper around scheduleMessage. TALON |
XPLATFORM-1151 - Ensure that topic is surfaced in UnhandledMessageEvent from Solace Binding |
Prior to this release, not all UnhandledMessageEvents emitted by the Solace message bus binding would include the topic from which the message was received via UnhandledMessageEvent.getMessageKey(). This release closes those gaps and populates the received topic when it is available. STATS AND ALERTS |
XPLATFORM-1155 - Improve solace binding exception text to be more descriptive. |
To assist in troubleshooting, we should make exception text for inbound message handling faults more descriptive:
SMA SOLACE BINDING |
XPLATFORM-1161 - Add SMA provider agnostic messageId field to UnhandledMessageEvents |
This release improves the UnhandledMessageEvent that is emitted by a message bus binding on receipt of a message it can't handle to include the message provider specific message id via getMessageSMATransportMessageId() along with a corresponding field in its backing message event SrvMonUnhandledMessageMesssage available via getTriggeringMessageSMATransportMessageId(). The SMA transport specific message ID may be supplied by bindings for which there is a notion of a unique identifier for a message. A null value means that either the binding doesn't support the notion of such an id or that that the id wasn't available. STATS AND ALERTS TALON |
XPLATFORM-1162 - Add payload and metadata blobs to UnhandledMessageEvent's backing message |
This release makes available the serialized metadata and payload blobs on the UnhandledMessageEvent emitted by message bus bindings on receipt of a message that can't be handled. When available these fields can be used to persist or quarantine the message via its backing SrvMonUnhandledMessageMessage because they allow the message to be reconstituted providing the values are not themselves corrupted. STATS AND ALERTS TALON |
XPLATFORM-1202 - Auto create trace log files |
Prior to this release, the X the trace logging machinery does not automatically create log directories. This release implements auto creation of trace log directories. |
XPLATFORM-1204 - Allow specifying initialLogLength as a float for inbound/outbound logger in DDL |
This release allows setting inbound and outbound initial log lengths of less than 1Gb in the platform.xml by relazing x-ddl.xsd to accept a float rather than an integer for initialLogLength. CONFIGURATION |
XPLATFORM-1210 - Keep transaction batch open if non-transaction event is not end of batch |
Prior to this improvement events injected into an AepEngine's event loop that were not part of a transaction batch would result in the user's transaction batch being committed. The primary reason for the old behavior was to prevent the batch from languishing in an open state. The old behavior can have a detrimental impact on throughput if interleaved not transaction events frequently terminate transaction batches prematurely. The new behavior now only closes and commits the transaction batch if there aren't further events ready from processing in the input queue that could potential contribute to the transaction batch. |
XPLATFORM-1213 - Add numMsgsSourced to server heartbeats. |
This release adds the AepEngine stat, numMsgsSourced to monitoring heartbeats - before it was only collected and reported in aep engine stats trace. Sourced messages apply only to messages not received from directly from a message bus they include:
The total number of messages received by the engine can be computed by adding numMsgsRcvdBestEffort + numMsgsRcvdGuaranteed + numMsgsSourced. STATS AND ALERTS |
Change
XPLATFORM-69 - License Key Generation & Enforcement for platform |
As of this release licensing is enforced by the platform. Without a valid license the JVM will exit when using platform libraries. To obtain a license you may:
You can install your license in your application's runtime environment and/or as an application resource and/or by placing it in the user home folder of the user running the JVM of the platform Installing the license in your application's environment
Installing your license as an application resource Installing your license in your home directory A few points to note 2. License enforcement is performed when using most libraries distributed with the platform, a failure to find a valid license file will result in System.exit(1) being called which will terminate the JVM. 3. If multiple environment variables/system properties with the above name(s) are set, then the following rules apply:
4. A license installed in the application's runtime environment will take precedence over a license installed as an application resource. 5. A license installed as an application resource will take precedence over a license installed in the user's home directory. Compatiblity Notes: As of this release the JVM will exit if using platform libraries without a valid license for the platform. TALON |
XPLATFORM-935 - Validate DDL configuration file against DDL XML schema |
This release enables validation of x-ddl (platform.xml) by the VMConfigurer and DdlXMLParser. Prior to this release validation was not done which could cause configuration errors to go unnoticed. Though not recommended, validation can be disabled by specifying the System Property nv.ddl.schema.validate=false. NOTE: this must be set as a System property, not an XRuntime property or ddl property Prior to this change schema validation errors in platform.xml would be ignored without causing errors, this release validates x-ddl by default which could cause validation failures on application startup. TALON |
XPLATFORM-1109 - Upgrade Tanuki version to 3.5.25 |
This version upgrades Core X to use Tanuki v3.5.25 from 3.5.19 If your application also uses Tanuki check this could introduce a version conflict. Such applications should also update the Tanuki version if so. TALON |
XPLATFORM-1110 - Change nvx-jms to an optional platform module distinct from nvx-core-all |
This release separates out the JMS binding from the core platform and packages it separately in its own nvx-jms.jar separately from nvx-core-all. Users of the jms binding must explicitly add the nvx-jms dependency. Users of the jms binding must now explicitly add the nvx-jms.jar as a dependency as it is no longer bundled with nvx-core-all or references as a transitive dependency. For maven users this amounts to declaring: |
XPLATFORM-1132 - Rename P2P binding to direct binding and add alias to p2p for backwards compat |
This release changes the name of the 'p2p' message bus binding to use the friendlier 'direct' binding moniker. The 'p2p' provider prefix in the bus descriptor is deprecated, but can still be used, so both of the following are valid descriptors for a specifying a direct binding descriptor: direct://orderprocessingapp p2p://orderprocessingapp though support for the latter may be dropped in a future release. DIRECT BINDING |
XPLATFORM-1138 - Change server group to optional in x-ddl with a default value of 'default' |
This release changes the group attribute on the server element in x-ddl.xsd to be an optional attribute. When not specified the server's group will default to "default". |
XPLATFORM-1140 - Trap errors in AEP message trace logging |
This release changes handling of message trace logging exceptions to be non fatal. Prior to this release such exceptions would result in the shutdown of the engine. With this release message trace logging errors are trapped and result in the emission of a AepMessageTraceLoggingExceptionEvent (a new AlertEvent). For applications running in a Talon server, this event will be backed by a SrvMonMessageTraceLoggingExceptionMessage. An exception in trace logging usually is indicative of a problem with the message being logged, and are often times serious, but the reasoning behind this change is that if the problem with the message is serious that it will cause a failure at a later point in the transaction pipeline. Applications that would like to treat message trace logging errors as fatail may add a handler for the AepMessageTraceLoggingExceptionEvent and stop the engine. TALON |
XPLATFORM-1166 - Ignore messages received while binding is closing |
This release changes the behavior of message receipt during message bus binding close. Prior to this change, it was possible that when a message is received in the middle of close, that the message's channel would have been un-joined or closed leading to either a "channel not joined" error "channel not found" error which depending on the binding implementation would result in either an UnhandledMessageEvent or error being logged to the trace logs. This release formally introduces a Closing state to SMA bindings and channels and specifies that when in a Closed, Closing or Failure state that bindings ignore messages received. Such messages are not acknowledged by the binding leaving them eligible for redelivery. This change introduces a 'Closing' value to com.neeve.sma.MessageBusBinding.State and com.neeve.sma.MessageChannel.State. Applications that explicitly test for binding or channel state should make sure they account for the new states. Note: the added stats do not extend to the the server monitoring models (heartbeats, lifecycle and alerts). SMA |
Bug
XPLATFORM-1091 - NullPointerException in QueryEngine on query with select on only unindexed monotonic fields selected |
Fixes a NullPointerException that can occur in transaction log queries when selecting on fields that are monotonic and unindexed: java.lang.NullPointerException at com.neeve.query.impl.QueryPlanImpl.addStep(QueryPlanImpl.java:1638) at com.neeve.query.impl.QueryOptimizer.and(QueryOptimizer.java:690) at com.neeve.query.impl.QueryOptimizer.createPlan(QueryOptimizer.java:456) at com.neeve.query.impl.QueryOptimizer.createPlan(QueryOptimizer.java:407) at com.neeve.query.impl.QueryEngineImpl.execute(QueryEngineImpl.java:615) at com.neeve.rog.impl.log.RogLogQueryEngineImpl.execute(RogLogQueryEngineImpl.java:161) TOOLS |
XPLATFORM-1097 - File write fails when native file I/O is enabled, but native i/o buffers are disabled. |
Prior to this fix disabling native buffers (-Dnv.buffermanagement.usenative=false) would cause persisting to a transaction log to fail when native I/O is enabled because the native implementation requires using native buffers. This fix forces creation of a native buffer for use with transaction logs when native file I/O is enabled even if native buffers have been disabled. HUMMINGBIRD TALON |
XPLATFORM-1106 - NullPointerException during Map replacement operation leaves Map in inconsistent state |
Fixes an issue where if a StringMap, IntMap or LongMap put() operation that is replacing an existing value fails it can leave the map in an inconsistent state that will yield the following exception on a subsequent put() for that the same key: java.lang.IllegalArgumentException: node does not have a fid at com.neeve.rog.impl.RogContainerNode.removeChild(RogContainerNode.java:319) at com.neeve.rog.impl.RogStringMap.put(RogStringMap.java:164) This fix also adds additional diagnostic trace around failures during map updates, particularly around recording the removal of the previous value in the store's transaction log. TALON |
XPLATFORM-1108 - Topic Sanitation does not work as expected. |
Fixes a regression in cleaning channel keys when nv.sma.cleanMessageKey is enabled. This fix ensures that non letter/digit characters are replaced with an '_' when the property is enabled. |
XPLATFORM-1129 - AepEngine.getEngineTime() should always return System.getCurrentTimeMillis() when not on dispatch thread. |
Fixes AepEngine.getEngineTime() to only return the the current message processing time for EventSourcing applications if the calling thread is the engine's dispatch thread. Prior to this fix it would return the current message processing time regardless of the thread calling the method which can lead to an inconsistent time when called by a non dispatch thread. |
XPLATFORM-1154 - MessageMetadata serializes XString with null value as empty String instead of null |
This fix improves SMA MessageMetadata serialization/deserialization to differentiate between a channel name being null and empty. Prior to this change setting SMA with an channel name that is null would result in deserialization of that metadata producing a channel name that is an empty String. Recipients that decode SMA metadata should be aware that if the channel name is set to null on the sending side the encoded length of the channel name will be set to -1 when there is a null value. Prior to this change a null channel name set by an X sender would result in a 0 length string with an encoded length of 0. SMA |
XPLATFORM-1172 - NullPointerException in DiscoveryCacheShutdownHook |
Fixes a race condition in which shutting down a JVM and creating and starting discovery can lead to a NullPointerException in the DiscoveryCache shutdown hook. DISCOVERY |
XPLATFORM-1192 - TLT archive extraction can fail with apache compress 1.1 |
This release updates the dependency version of commons-compress from 1.1 to 1.3. This resolves an issue that can occur extracting transaction log archives that contain large transaction log files and/or many archive entries. See COMPRESS-129 TOOLS |
XPLATFORM-1193 - AepUnhandledMessageEvent not dispatched when event pooling is enabled |
Fixes a bug in which the flag indicating whether an event had been handled was not being reset when an event is recycled to a pool which could cause an AepEngine not to dispatch an AepUnhandledMessageEvent to an application with no event handler for a message when pooling is enabled. TALON |
XPLATFORM-1198 - AepChannelDownEvent not dispatched to application |
The AepChannelDownEvent was not getting dispatched to the application on binding failure even if the application has an AepChannelDownEvent handler. This release fixes this issue. |
XPLATFORM-1199 - A message type handler processes messages from only one channel |
Prior to this release, if the same message type is transmitted through two different channels, only the messages from the channel that dispatched the first message to the handler will continue to dispatch messages to the handler while messages from the other channel will be dropped. This release fixes this issue |
XPLATFORM-1206 - Solace JNI binding doesn't report UnhandledMessageEvent when solace message is missing payload |
This release fixes an issue in the Solace JNI binding where an unrecognized solace payload type would not be reported to the application as an UnhandledMessageEvent SOLACE BINDING |
XPLATFORM-1209 - IndexOutOfBoundsException when attempting to grow the buffers in serialize context |
This release fixes an ArrayIndexOutOfBoundsException that can occur during cluster replication when output buffer sizes are grown. |