XPLATFORM-667 - Incremental Code Regeneration
|
The ADM code generator has been enhanced to provide the option of incremental code generation for faster build times. This is the default mode. Source code won't be re-generated on each build unless model XML file or some of its imports changed. Maven plugin(s) can control this through incrementalBuild configuration parameter. To disable new ADM code generator change detection mechanism, useBasicDeltaDetection configuration parameter can be set to true . This feature causes some additional metadata to be written to the generated source folder root to track model changes. |
|
XPLATFORM-893 - Non commit-queue playback of large transactions from the transaction log
|
This release improves synchronization of large transactions to a backup by negating the need to queue up transactions from a transaction log prior to replicating them to a backup. This |
|
XPLATFORM-1181 - Rationalize trace emitted by exception in start recording and stop recording to be similar
|
Prior to this release, the trace that is output by a failure to start recording on an environment provider is different from the trace output on a failure to stop recording on an environment provider. This release rationalizes both to be treated in the same fashion by wrapping exception in a RuntimeException with the detail message: "Application ('<enginename') environment provider faulted with error [" + e.toString() + "] on transaction commit."
|
The resulting exception is handled as an unhandled event loop exception in the engine which results in the engine being stopped with the RuntimeException as the cause. |
|
XPLATFORM-1182 - Handle exceptions thrown by waypoint listeners to be LogExceptionAndContinue
|
Prior to this release, if a waypoint listener throws an exception, it was treated in the same manner as when platform code throws a runtime exception i.e. treated as a fatal error. This release changes this behavior to not treat exceptions thrown by a waypoint listener to be fatal but rather to trap the exception, log it and continue |
|
XPLATFORM-1186 - Validate message key length in AEP during message send
|
Prior to this release, X supported validation of a maximum resolved message key length when nv.sma.maxResolvedKeyLength was set to a value greater than 0. When set this would validate the length of a resolved key that had variable components (such as ORDERS/${Region}) but not for static channel keys. Otherwise, if the validation was not done during dynamic key resolution and the key length exceeded the maximum length supported for a messaging provider, then it was up to the provider to validate and throw the exception at the time the message is actually sent (which occurs after return from the message handler of the application that sent). Since the key is provided by the application and key substitution is performed using application supplied configuration, a resolved message key of an invalid length is technically an application exception and should be handled per the AppExceptionHandlingPolicy. This release adds a validation of the resolved message key length when the environment property 'nv.sma.validatemessagekey=true'. This validation is performed during the AEP engine's sendMessage() method and is done regardless of whether key is static or dynamic. If the validation fails, the method throws a runtime exception back to the application. As long as the application lets this exception be thrown back from the message handler from where sendMessage() was invoked, X will handle the exception using the AppExceptionHandlingPolicy. The validation performed on message key length validates the length of the key against the global max key length specified by the environment property 'nv.sma.maxresolvedkeylength' or the key length supported by the binding itself. For example, the Solace binding only supports a max key length of 250 characters so even if 'nv.sma.maxresolvedkeylength' is not set that limit will be enforced. Otherwise if 'nv.sma.maxresolvedkeylength' is set and is less than 250 characters then that limit will be enforced instead. The default value for nv.sma.validatemessagekey is false. If not specified and nv.sma.maxResolvedKeyLength=true then the former behavior of only validating the key for variable channel keys still applies though it is deprecated and may be removed in a future release. See Also: |
|
XPLATFORM-1187 - Validate empty key level in AEP during message send
|
Prior to this release, X validated that channel key substitution did not yield empty channel key levels when nv.sma.allowEmptyKeyField was not set to true, but this validation was only performed for channel keys that had variable components. Otherwise, if the validation was not done during dynamic key resolution and the key contained empty levels then it was up to the provider to validate and throw the exception when the message is actually sent which occurs after return from the message handler of the application that sent the message. Since the key is provided by the application and key substitution is performed using application supplied configuration, a resolved message key with an empty level is technically an application exception and should be handled per the AppExceptionHandlingPolicy. This release adds a validation checks for empty channel key levels for all channel keys when the environment property 'nv.sma.validatemessagekey=true' unless nv.sma.allowemptykeyfield=true. This validation is performed during the AEP engine's sendMessage() method. If the validation fails, the method throws a runtime exception back to the application. As long as the application lets this exception be thrown back from the message handler from where sendMessage() was invoked, X will handle the exception using the AppExceptionHandlingPolicy.
The default value for nv.sma.validatemessagekey is false. If not specified and nv.sma.allowemptykeyfield=false then the former behavior of only validating the key for variable channel keys still applies though it is deprecated and may be removed in a future release. See Also: |
|
XPLATFORM-1223 - General performance improvements in ODS store
|
This release implements the following performance improvements to the ODS store. - Replace the use of read-write locks with lock free concurrency mechanisms.
- Reduce buffer copies in serializing commit packets.
- Faster data structures.
|
|
XPLATFORM-1257 - Add setValue and append methods for byte [] to XString
|
This release adds the ability to initialize and append to an XString using byte arrays: //Initialize an xstring to 'mile':
xstring.setValue("smiles".getBytes(), 1, 4);
|
See: - XString.setValue(byte\[\]) (http://build.neeveresearch.com/core/javadoc/SNAPSHOT/com/neeve/lang/XString.html#setValue(byte\[\]))
- XString.setValue(byte\[\], int, int) (http://build.neeveresearch.com/core/javadoc/SNAPSHOT/com/neeve/lang/XString.html#setValue(byte\[\], int, int))
- XString.setValue(char\[\], int, int) (http://build.neeveresearch.com/core/javadoc/SNAPSHOT/com/neeve/lang/XString.html#setValue(char\[\], int, int))
- XString.append(byte\[\]) (http://build.neeveresearch.com/core/javadoc/SNAPSHOT/com/neeve/lang/XString.html#append(byte\[\]))
- XString.append(byte\[\], int, int) (http://build.neeveresearch.com/core/javadoc/SNAPSHOT/com/neeve/lang/XString.html#append(byte\[\], int, int))
- XString.append(char\[\], int, int) (http://build.neeveresearch.com/core/javadoc/SNAPSHOT/com/neeve/lang/XString.html#append(char\[\], int, int))
|
|
XPLATFORM-1280 - Unclear exception when wrong xml namespace is specified for an ADM model
|
When <model> tag in ADM model XML has incorrect xmlns attribute, a better human-readable error will be displayed instead of default cryptic W3C error code "cvc-elt.1". |
|
XPLATFORM-1290 - Add numSentAcks stat to Bus Binding Stats
|
This release enhances Talon to record stats for the number of acks sent upstream by a message bus binding for inbound messages. The new statistic is now printed along with aep engine stats trace and emitted via server heartbeats. The following is example of engine stats trace with new Acks line: [Bus Manager (myapp.mybus)]
In.........{
...Msg{10,000,000(0) 0(0) 0(0) 0(0) 0(0) 0(0) 0(0)}
...Ack{10,000,000(0) 0(0)}
...Pkt{0(0) 0(0)}
...Stab{10,002,734(0) 0(0) 0(0) 0(0) 0(0)}
}
|
The 'Ack' line takes the format of <acksSentTotal>(ackSentInterval)(ackRateTotal,AckRateInterval) Additionally, server heartbeat SrvMonAppBusBindingStats have been change to add a new numSentAcks field that reports the number of acks sent through a bus binding. |
|
XPLATFORM-1298 - Improved facilities for detecting "too late" config initialization
|
This release introduces new diagnostic trace to detect cases where the runtime environment is accessed prior to it being initialized with the full set of platform configuration. This is particularly helpful for customers that use ther own configuration mechanisms to initialize the runtime, because in that scenario it is possible that some platform components may be initialized prior to such configuration being applied. The new diagnostic options must be enabled with the following properties being set as System properties on the process' command line or as environment variables by replacing the '.' with '_'. Property Name | Description |
---|
nv.env.warnonearlyaccess=true | This property allows tracing of access to the runtime environment before it has been initialized. When set to true a warning message will be traced to System.err to flag possible premature access to the environment. This is useful in cases where a component is created and sources configuration before the environment has been fully initialized Property Name: "nv.env.warnonearlyaccess" Default value: false |
| nv.env.dumponearlyaccess=true | This property allows dumping a stack trace on access to the runtime environment before it has been initialized. When set to true a stack dump will be traced to System.err to flag possible premature access to the environment. Property Name: "nv.env.dumponearlyaccess" Default value: false |
| nv.env.warnonreinit=true | This property allows tracing when the runtime environment has been reinitialized. When set to true a warning message will be traced to System.err to flag possible occurences of the environment being inadvertently reinitialized. Property Name: "nv.env.warnonreinit" Default value: false |
| nv.env.dumponreinit=true | This property allows dumping a stack trace when the runtime environment has been reinitialized. When set to true a stack dump will be traced to System.err to flag possible occurences of the environment being inadvertently reinitialized. Property Name: "nv.env.dumponreinit" Default value: false |
|
For the most up to date usage of these constants: See also: UtlConstants Javadoc |
|
XPLATFORM-1316 - Enhance UtlTime to support epoch offset timestamps.
|
This release changes the timestamps returned by UtlTime.now() to represent the number of microseconds since the Epoch (1970-01-01 UTC). This allows such timestamps to be more meaningfully displayed as a date string and allows them to be better compared against System.currentTimeMillis(). As a measure of the number of microseconds from the epoch the timestamp only has millisecond resolution and is based on the resolution supported by System.currentTimeMillis(). The delta timestamp between subsequent calls remains at microsecond level resolution. Returning epoch relative time is controlled by the property nv.time.useepochoffset=true|false. The property can be set to false to disable epoch based timestamps. Compatibility Notes: UtlTime.now() now returns the the microseconds since the Epoch. In prior releases with native time disabled ... the timestamp was returned as System.nanoTime() / 1000. With this change, this will no longer be the case. |
|
XPLATFORM-1322 - ADM Rewrite model namespace and directives
|
ADM code generator plugins will rewrite model XML that is output to target/classes. Directives will be persisted to include any external directives passed directly to plugin. Model namespace will be persisted as well if namespace is overridden (by setting it through plugin). New XML is formatted with readable indentation, but some white space from original XML may not be preserved. |
|
XPLATFORM-1328 - Add config.xml and descriptor.xml as valid filenames to be interpreted as an X-DDL configuration file
|
Prior to this release, the X Platform interpreted <NVROOT>/conf/platform.xml or <NVROOT>/conf/xplatform.xml as DDL based platform configuration files. This story adds <NVROOT>/conf/config.xml and <NVROOT>/conf/descriptor.xml also as valid DDL based platform configuration files. config.xml takes precedence over_descriptor.xml_ which precedence over the other two filenames. |
|
XPLATFORM-1330 - Set default value of detachedPersist to false in DDL
|
Prior to this release, detached store persistence was enabled by default. This release changes it to be attached by default. |
|
XPLATFORM-1331 - Set application autoStart to be true by default in the DDL
|
Prior to this release, the application autoStart parameter in the DDL was false by default. This release changes it to be true by default. |
|
XPLATFORM-1332 - Set Talon XVM (Server) IO thread affinity in a DDL to be "0" by default
|
Prior to this release, the affinity of a IO thread of an XVM defined in a DDL was not set. This release defaults it to "0" |
|
XPLATFORM-1339 - Change disposeOnSend default to true
|
Prior to this release, the AEP engine's disposeOnSend configuration parameter defaulted to false. This release changes the default value of this parameter to true |
|
XPLATFORM-1340 - Make lock free pool concurrency configurable
|
Prior to this release, lockless pool concurrency was automatically enabled if and only if thread affinitization is enabled. There are situations in which a user would want to switch on lockless pool concurrency event when not switching on thread affinitization e.g. for zero garbage operation. This release adds a new configuration parameter, nv.pool.enablelockfreeconcurrency, that, if configured (to true or false), will take precedence over using thread affinitization as the means to determine whether lockless pool concurrency should be enabled or not. |
|
XPLATFORM-1341 - Enable native IO when optimized for throughput
|
Prior to this release, native IO was enabled for links when nv.optimizefor=latency unless the user explicitly set the nativeio property on the link descriptor. This story sets native IO to be true also when nv.optimizefor=throughput (unless set on the link descriptor in which case that continues to take precedence) |
|
XPLATFORM-1344 - Default Solace Binding to enforce max key length of 250 characters
|
This release enhances the Solace binding to validate that the resolved message key length does not exceed 250 characters during send calls when nv.sma.validatemessagekey is set to true. This validation is done in addition to the existing validation based on the value of nv.sma.maxresolvedkeylength which will apply when set to a value less than 250. |
|
XPLATFORM-1345 - Solace message bus binding should set TCP_NODELAY according to nv.optimizefor
|
This release improves the solace binding to set tcp_no_delay to true when the nv.optimizefor=latency, and to false when nv.optimizefor=throughput unless a value is explicitly set in the binding descriptor. Compatibility Notes: With this change it is no longer necessary to set tcp_no_delay if the above auto tuning is in effect. |
|
XPLATFORM-1348 - AepEngine should emit AepEngineStoppingEvent before engine is stopped
|
As of this release the AepEngine will not emit an AepEngineStoppingEvent prior to stopping the engine. This adds greater visibility into the engine lifecycle and is also can be used by an application to augment handling of whether channel joins are preserved. See Also: Aep Engine Lifecycle Compatibility Notes: Applications that declare handlers for IAlertEvent or ILifecycleEvent should consider whether additional processing is required for this event. |
|
XPLATFORM-1351 - Add ability to configure and engine's message and state factories in the DDL
|
This release introduces the ability to configure an application's messaging and state factories via DDL. Prior to this change applications using Talon directly were required to programatically register such factories. See Also: - DDL message factories (https://docs.neeveresearch.com/display/KB/DDL+Schema+Reference#DDLSchemaReference-<factories>)
- [DDL state factories|https://docs.neeveresearch.com/display/KB/DDL+Schema+Reference#DDLSchemaReference-<factories>.2
- AepEngine.registerFactory()
|
|
XPLATFORM-1353 - Allow setting AppExceptionHandlingPolicy in DDL
|
This release allows setting the AppExceptionHandlingPolicy in DDL config for example: <apps>
<app name="MyApp" mainClass="com.MyApp">
<appExceptionHandlingPolicy>LogExceptionAndContinue</appExceptionHandlingPolicy>
</app>
</apps>
|
Note that setting the app exception handling policy programatically on the engine or its descriptor will override the value specified in DDL. |
|
XPLATFORM-1356 - Enhance AEP Engine to output whether detached pool washing is enabled
|
Prior to this release, the AEP engine did not output whether detached pool washing is enabled or not in its config trace (i.e. when nv.aep.trace=config). This story adds this additional information to the engine's config trace |
|
XPLATFORM-1357 - Enhance AepEngine config option to provide option to control subscription removal on graceful shutdown.
|
This release adds a new configuration option to an AepEngine to allow the application to control whether channel joins are preserved on shutdown. The engine's default behavior on graceful shutdown is to "leave" channels meaning underlying subscriptions are removed ... this new configuration property allows this behavior to be changed. See: The behavior set for preserveChannelJoinsOnStop can additionally be overridden at runtime by setting a different value on the AepEngineStoppingEvent (See AepEngineStoppingEvent.html.setPreserveChannelJoins).
|
|
XPLATFORM-1367 - Set network link trace level on link descriptor
|
Prior to this release, a user could only set network link trace level at a global level by using X/SLF4J mechanisms to configure the trace/logging level for the nv.network.link logger. This release adds the ability to set the trace level using the "trace" link descriptor parameter. For application cluster replication links, this parameter can be included in the <linkParams> element of the application store's <clustering> element in the X DDL configuration file. For example, the following sets an app's cluster replication link's trace level to config. <storage enabled="true">
<clustering enabled="true">
<linkParams>trace=config</linkParams>
</clustering>
</storage>
|
|
|
XPLATFORM-1368 - Enable network link statistics using link descriptor
|
Prior to this release, a user could only enable network link statistics trace at a global level by setting the nv.link.network.stats.interval parameter to a positive value (indicating the interval at which link stats are output to the nv.link.network.stats logger). This release adds the ability to enable statistics output and set the statistics output frequency using the "statsinterval" link descriptor parameter. Once enabled, the network link will output statistics to the nv.link.network.stats trace logger. For application cluster replication links, this parameter can be included in the <linkParams> element of the application store's <clustering> element in the X DDL configuration file. For example, the following enables and sets an app's cluster replication link's statistics output interval to 1 second. <storage enabled="true">
<clustering enabled="true">
<linkParams>statsinterval=1</linkParams>
</clustering>
</storage>
|
|
|
XPLATFORM-1371 - "warning: dep-ann deprecated item is not annotated with @Deprecated" in ADM generated source
|
This release improves ADM generated source to include @Deprecated annotation in addition to the the javadoc annotations which avoids compiler warnings. |
|
XPLATFORM-1375 - Direct Binding should populate preWireTs and postWireTs when message latency stats are enabled.
|
Prior to this release if the direct binding was not configured with stampiots=true in its descriptor preWireTs and postWireTs would not be populated, this release additionally enables wire timestamp capture when nv.msg.latency.stats=true is enabled making allowing the full set of latency statistics to be computed. |
|
XPLATFORM-1376 - Rationalize UnhandleMessageEventHandling in Direct binding
|
This release enhances the Direct Binding to emit UnhandledMessageEvent to emit UnhandledMessageEvents in the same manner as the platform's other built in bus bindings. |
|
XPLATFORM-1385 - Exception subscribing to solace should show channel name and subscription.
|
This release improves the Solace binding to append channel and topic name to exceptions related to subscribe and unsubscribe operations to make issue easier to diagnose. |
|
XPLATFORM-1406 - Provide javadoc for com.neeve.util
|
This release provides javadoc for the com.neeve.util package which contains some utilities that are pertinent to the end user. Not all apis in the util package are intended for use by end users, so users should check the class level javadoc to check if APIs are supported prior to using them. |
|
XPLATFORM-1410 - Separate create and open of a discovery cache
|
Prior to this release, the act of instantiating a discovery cache automatically opened the cache too. This prevented the use case where a user could create and open a cache and just tap into the event stream to obtain the full, lossless picture of what is happening in the cache. This is because event handlers could only be created after the creation of the cache which was too late since events could start streaming in immediately after create completes. This release provides a mechanism by which the user can decouples the creation and opening of the cache to allow the act of create->addEventHandler->open to get all events happening on the cache without loss |
|
XPLATFORM-1411 - Support entity creation before addition to the discovery cache
|
Prior to this release, a user of a discovery cache could only get the entity added to the cache after the addition is complete. There are situations where a user would like to know the entity before addition to the cache. To support this requirement, this release implements the create() method that creates a new DiscoveryEntity and a add() that accepts discovery entity for addition. This allows for a user to get a reference to the entity before it is added to the cache |
|
XPLATFORM-1412 - Discontinue support for ODS store auto open
|
Prior to this release, the ODS store automatically opened the store during creation and provided a flag to override that behavior. This release discontinues support for this flag and, by default, does not open the store during create. This means that direct users of the store API must create the store and then explicitly open it |
|
XPLATFORM-1417 - Enhance discovery cache to return "JVM shutting down" exception when calls made during JVM shutdown
|
Prior to this release, the discovery cache returned IllegalStateException if a method is invoked on a closed closed cache. During JVM shutdown, it is possible for the JVM shutdown hook thread to close the cache while other threads are concurrently accessing the cache. The other threads do not expect the cache to be closed and so the IllegalStateException results in an ugly stack trace. This occurs particularly in the ODS store when JVM shutdown occurs while store membership changes are in progress. This release adds a new exception to the discovery cache - EDiscoveryJVMShuttingDownException - that the store traps and ignore thus eliminating the stack traces. |
|
XPLATFORM-1430 - Unsubscribing from a loopback bus channel doesn't remove messages.
|
This release enhanced the loopback bus binding to ensure that message queued for a client are removed when a loopback channel is left and later rejoined. Prior to this release it was possible for messages queued prior to leaving the channel would be redelivered on subsequent rejoin. |
|
XPLATFORM-1432 - Create diagnostic log on transaction log corruption
|
This release enhances the transaction log to create a diagnostic dump to a temporary file when corruption is detected. This file can be used by Neeve support to diagnose issue related to transaction log corruption. ...Corrupted packet dump written to /temp/PktLogCorruption7801847786289107932.dump
Failed to open '/usr/local/myapp/rdat/myapp': 8
...***** Recovery log 'C:\temp\XPLATFORM-1428\rdat\market.log' is corrupt [com.neeve.pkt.log.EPktLogCorruptException: 8].
...***** ...[preamble=[ver=1 checkpoints=0], recoverableEntries=9909, recoverableLength=4111137]
|
Note: This dump will be emitted even in cases where transaction log corruption can be repaired by setting repair flag on the transaction log being opened. In many cases such 'corruption' is harmless: there is always the chance that an ungraceful shutdown of an engine will leave partially written records at the end of a transaction log which is not a cause for concern for a properly configured application. |
|
XPLATFORM-1461 - Add additional EventMultiplexer stats to server heartbeats
|
This release adds the following additional stats to server heartbeats for an engine's input event multiplexer: - scheduleQueueSize: the number of events scheduled and awaiting dispatch
- maxConcurrency: the maximum number of feeder queues for the multiplexer
- lastDecongested: the index of the last feeder queue decongested.
See: ISrvMonAppEventMultiplexerStats |
|
XPLATFORM-1472 - Display X License info at Talon Server Startup
|
This release changes Talon Server startup to display the X License details at launch: [License]
Issued To: Acme Co
Type: Production
Expires : Never
|
This can be suppressed by launching the server with -Dnv.license.hide=true. |
|
XPLATFORM-1475 - Allow affinitization and naming of Solace reactor threads.
|
This release provided the ability to affinitize the solace reactor (receiving I/O thread) on the first message receipt. To affinitize the consumer thread specify "consumer_cpu_affinity_mask=n" on the bus binding descriptor url. In addition, and regardless of whether or not the thread is affinitized, the name of the thread will be suffixed with X-SMA-BusName to make it easier to correlate to a given message bus. If the binding is not configured to use a single session then the thread suffix will additionally include "-IN" or "-OUT" to distinguish between the two sessions. |
|
XPLATFORM-1486 - Add (official) support for delayed and priority message injection in the AepEngine
|
This release adds support for injecting a message into an engine with a delay. Prior to this release injecting a message into an engine could be accomplished using the multiplexMessage methods on the engine. This release deprecates the multiplexMessage methods in favor of the new injectMessage methods. See: AepEngine.injectMessage Compatibility Notes: This release deprecates the AepEngine.multiplexMessage methods in favor of AepEngine.injectMessage methods. Applications that use these methods should change to use injectMessage instead. |
|
XPLATFORM-1492 - Improve Stats Dump Tool to display interval histograms for all series stats.
|
This release improves the Stats Dump Tool to dump both interval and running stats for series (latency) stats to allow better interval based analysis. |
|
XPLATFORM-1493 - Improve output format of GC stats in Stats Dump Tool.
|
This release improves stats dump tool output to prefix GC stats with "GC: " to make it clear that it is GC stats being shown and additionally prints the collector name for each set of stats on its own line to facilitate better grepping based on the collector name. |
|
XPLATFORM-1512 - Disallow importing an ADM model with incompatible encoding
|
This release implements a code gen time check in the ADM Code Generator to test if an imported model was generated with a different encoding type than the the importing model. This check is only enforced if the imported model is resolved from the classpath and was generated with 3.4 or newer. |
|