Diffusion Cloud 6.2 Release Notes

6.2.3 (12 Feb 2019)

Changes made to existing features at release 6.2.3

Replication: New fallback for failures when compacting the partition log (20117)

When compaction of the partition log fails, a second attempt will now be made using a new compacter, without any state carried over from previous compactions.

Bugs cleared at release 6.2.3

C Client: Double free possible when removing a value stream with remove_stream() (20094)

Addresses an issue where a double free can occur when removing a value stream.

C Client: Incomplete topic value from topics with compression enabled (20097)

Addresses an issue where topic values received from subscriptions returned incomplete values.

Console: Time series topics containing a single event can be subscribed to, but not displayed (20045)

When a time series topic only had a single event, it was not displayed correctly on the console. This is now fixed.

Replication: Value not preserved across multiple remappings (20109)

Errors were sometimes reported during compaction of the backup partition indicated that a delta had been found with no value or that a delta could not be applied. This caused compaction to fail and the server to shut down. This problem has now been resolved.

6.2.2 (5 Feb 2019)

Changes made to existing features at release 6.2.2

Logging: PUSH-000581 should contain the HTTP request that triggered the log message (19996)

If the server fails to handle an HTTP request, it logs a PUSH-000581 info message. The log message now includes the details of the HTTP request and the remote address.

Bugs cleared at release 6.2.2

.NET Client: The request of a cancelled task is still being sent to the server (19969)

An asynchronous request to the Diffusion server (such as AddTopicAsync for example) that got invoked with a canceled CancellationToken would send the request to the server before completing the returned task in a canceled state. This behavior has been changed now. Any asynchronous request that gets invoked with a canceled CancellationToken will immediately complete in a canceled state and NOT send the request to the Diffusion server.

C Client: unsubscribe_client function does not invoke callbacks (20047)

Addresses an issue where callback functions supplied to an unsubscribe_client() operation were not called. This has now been fixed.

Replication: PartitionMigrationWatcher NullPointerException when server starts (19988)

In previous releases, a server configured to use topic replication could occasionally fail to start. A NullPointerException originating from the PartitionMigrationWatcher.onNewOwner() method would be logged. The problem has been fixed in this release.

Replication: Wildcard Hazelcast map XML configuration generates invalid configuration (20044)

The use of wildcards to configure maps in the hazelcast.xml configuration file could cause clustering to fail. Diffusion modifies the configuration found in hazelcast.xml to ensure Hazelcast is optimized for Diffusion's use case. Hazelcast uses the same configuration object for all matching wildcard configuration - this results in the optimizations being merged, breaking Diffusion. This has been fixed by introducing appropriate deep copies of the configuration to prevent merging.

Replication: Hazelcast partition log compaction failure (20071)

Replication recovery was reporting an error during compaction that indicated a delta had been found with no value. This caused recovery to fail. This problem has now been resolved,

Server: Automatic topic removal subscription rules not evaluated in a timely fashion (20043)

In previous releases, a timing issue caused potential delays to automatic topic removal subscription when subscriptions were lost due to session closure. These delays were potentially large on systems where there was constant background activity but a low rate of new sessions. The issue has been resolved in this release.

6.2.1 (11 Jan 2019)

Changes made to existing features at release 6.2.1

.NET Client: Improved memory profile during connection loss (19949)

Previously, a connection loss under high load could cause a significant increase in memory usage due to the exceptions thrown by asynchronous methods. The behavior has now been changed to enable the garbage collector to clean up more memory during a connection loss and limit the increase in usage.

Apple Client: Conform CBOR NaN encoding for double and float (14399)

The CBOR encoder underlying the PTDiffusionJSON implementation now always generates the same sequence for floating point NaN, per the "canonical CBOR" notes in Section 3.9 of RFC 7049.

Apple Client: The web socket connection protocol now uses HTTP headers rather than URI parameters (19303)

The previous method of delivering connection parameters as URI parameters raised security concerns in some configurations. This change addresses these concerns by delivering connection parameters in the HTTP headers.

Web Server/HTTP: Maximum HTTP header size extended (19923)

The maximum size of an HTTP request header has been increased from 4K to 16K, preventing exceptions stating "HTTP header is too long at line ..."

Bugs cleared at release 6.2.1

.NET Client: Unsatisfiable PartialJSONs can be created (19677)

IPartialJSON.With<TValue>(string, TValue) and IPartialJSON.Without(string) would allow the same pointer to exist in "with" and "without". Now, if the given JSON pointer already exists in one list, it will be removed before being added to the other list.

.NET Client: Automatic reconnection does not free resources (19796)

Automatic reconnection of a client session did not close attempt threads properly, leaving them open and stuck in a waiting state. This has now been fixed.

.NET Client: Connection establishment can be stuck with high CPU (19834)

A websocket connection or reconnection could get stuck in a infinite loop during the handshake phase. This has now been fixed.

.NET Client: Closing a session during reconnection does not prevent further reconnection attempts (19904)

Closing a session during reconnection now correctly prevents any further reconnection attempts.

Apple Client: Fetch request for last values returns first values (19732)

Messages sent to the last: method on a PTDiffusionFetchRequest instance were incorrectly yielding the same result as those sent to the first: method. This has been fixed.

C Client: Incorrect error code for update streams with incompatible datatype (19726)

An "unknown error" code was returned to an update stream's error callback when the update stream was using an incompatible datatype. The correct error code, DIFF_ERR_INCOMPATIBLE_TOPIC, is now returned.

C Client: NULL should be returned when creating an update stream with a NULL constraint (19741)

NULL was not returned when an update stream was created with a NULL constraint. This has now been resolved.

C Client: Incorrect error codes for failed operations (19762)

Applications could receive unknown error codes for certain failed operations. This has now been resolved.

Configuration: Line and area graphs not generated from numeric topics (19766)

The console was unable to draw line or area graphs of data from numeric topics. This issue has been resolved.

Demos: Drawing board demo allows drawing in multiple rooms at the same time (19765)

After switching between rooms, drawn strokes would be sent to all previously-visited rooms. This issue is now fixed.

Installation: NullPointerException if multiple products found (19698)

A NullPointerException would occur in the Diffusion installer if multiple products were found. This has been resolved.

Installation: Installer does not warn about existing license file (19764)

Previously, if the command-line Diffusion installer found a license file in the file system, it would use that license unprompted. It will now offer the choice of whether to use a license from a file or the default license.

JavaScript Client: session.select() fails when given a SelectorSet topic selector (19855)

session.select() and other methods taking a string type topic selector will now also accept a TopicSelector.

JavaScript Client: Web Client still uses topics.subscribe (19909)

v6.2.0 of the JavaScript Web Client could not subscribe to topic. This issue has been resolved.

Replication: Configured Hazelcast map backup count ignored (19937)

Hazelcast allows the number of backups used by distributed maps to be configured. Diffusion was overriding the configuration with its own settings for the map. This discarded the number of backups. Diffusion now merges its configuration with the configuration discovered by Hazelcast.

Server: UnsupportedOperationException: Key 'TIDY_ON_UNSUBSCRIBE not supported' (19705)

A 'TIDY_ON_UNSUBSCRIBE not supported' error could be logged at the server if a client attempted to get the topic details of a topic with the 'tidy on unsubscribe' property set. It can also occur if a pre 6.2 fan-out secondary server connects to a 6.2 server and is replicating topics with 'tidy_on_unsubscribe' set. This has now been resolved.

Server: Diffusion script contains settings=profile for JFR configuration (19737)

The default settings=profile configuration for the Java Flight Recorder is no longer recommended, since it truncates the JFRs and generates data for only a few minutes prior to shutdown. The configuration has been removed.

Server: Potential concurrency problem when fetching topics from a changing topic tree (19908)

Fetch requests can use the last() operator to page through topics in reverse order. A bug was identified that could cause such queries to fail or return incorrect results if topics were concurrently added or removed. The bug has been fixed in this release.

Web Server/HTTP: The web server does not cache large resources correctly (19933)

In previous releases, the web server did not correctly cache large resources (files larger than 1 MiB). This affected the Diffusion console, which would always be downloaded from the server rather than being served from browser cache. The bug has been fixed in this release.

6.2.0 (12 Nov 2018)

Features introduced at release 6.2.0

.NET Client: Session locks (18752)

A new API for per-session locks has been added to the .NET client library.

.NET Client: New IAuthenticator interface supersedes IAuhenticationHandler (19227)

The IAuthenticationHandler interface has been deprecated in favor of the new IAuthenticator interface. The new interface is passed a full set of fixed session properties (including Session Id) as well as any user-defined session properties proposed by the client. The authenticator can filter the user-defined properties as required and can also change a subset of the fixed session properties.

.NET Client: New ChangeRolesAsync method in IClientControl feature (19393)

The new ChangeRolesAsync method in the IClientControl feature allows clients with sufficient permissions to change the security roles of other clients.

.NET Client: Client proposed session properties (19413)

It is now possible for a client to propose user-defined session properties when opening a session. These properties may be accepted, changed or vetoed by authentication handlers that implement the new IAuthenticator interface.

C Client: Request-response messaging (17371)

Request-response messaging is now available in the C client. The one-way messaging API is now deprecated, in favor of request-response messaging.

C Client: Session locks (18755)

The session locks feature is now available in the C client (session-lock.h). These locks can be used in conjunction with the new update API to ensure exclusive topic updates.

C Client: New Authenticator interface supersedes AuthenticationHandler (19229)

The authentication handler functions have been deprecated in favor of the new Authenticator API. The new API is passed a full set of fixed session properties (including Session Id) as well as any user-defined session properties proposed by the client. The authenticator can filter the user-defined properties as required and can also change a subset of the fixed session properties.

C Client: Client proposed session properties (19415)

It is now possible for a client to propose user-defined session properties when opening a session. These properties may be accepted, changed or vetoed by authentication handlers that implement the new Authenticator interface.

Client: New Fetch API (15373)

The client API now includes an improved 'fetch' API which allows a client to retrieve typed data and/or specifications of selected topics. It also avoids issues relating to large result sets by providing the capability to page through results, both forwards and backwards. In the Java API, this is provided via the new fetchRequest method on the Topics feature. Other client variants provide an equivalent feature. The old fetch mechanism is now deprecated and will be removed in a future release.

Client: New Update API (18763)

The client API now includes an improved 'update' API which allows clients more flexible options when updating topics. It adds conditional updates, non-exclusive update streams and the creation of missing topics through the update API. This new API is available for all clients except Apple.

Client: New $Roles session property (19207)

There is a new $Roles fixed session property which presents the authorization roles assigned to the session. This is represented as a quoted set of strings, which can be decoded using the Diffusion.stringToRoles utility or encoded using Diffusion.rolesToString. The session filter language has also been extended to include a new 'hasRoles' clause.

Java & Android Client: New changeRoles method in ClientControl feature. (10691)

The new changeRoles method in the ClientControl feature allows clients with sufficient permissions to change the security roles of other clients.

Java & Android Client: Client-proposed session properties (17887)

It is now possible for a client to propose user-defined session properties when opening a session. These properties may be accepted, changed or vetoed by authentication handlers that implement the new Authenticator interface.

Java & Android Client: Additional type conversions for value streams and messaging responses (19107)

The standard data types have been extended to allow serialised values to be read as supertypes of the value type. This allows more flexible parameterisation of ValueStream. A ValueStream<Object> will match all topic types. A ValueStream<Number> will match int64 and double topic types. Similarly, request/response messaging can use super types to relax response type constraints. For example, sendRequest("path", "Hello", String.class, Object.class) will allow a response of any datatype.

Java & Android Client: New Authenticator interface supersedes AuthenticationHandler (19210)

The AuthenticationHandler interface has been deprecated in favor of the new Authenticator interface. The new interface is passed a full set of fixed session properties (including Session Id) as well as any user-defined session properties proposed by the client. The authenticator can filter the user-defined properties as required and can also change a subset of the fixed session properties.

JavaScript Client: Session locks (18753)

Introduces the Session Lock feature. Clients can request session locks from the server. When a lock is granted, the client is notified. After the client is done, it can release the lock and the server is free to grant the lock to a different client.

JavaScript Client: Client-proposed session properties (19414)

It is now possible for a client to propose user-defined session properties when opening a session.

Protocol: Automatic compression of topic updates (14877)

From this release, published topic updates are automatically compressed by the server. The server supports a single compression scheme: zlib compression. Compression can be disabled on a per-connector basis in the server configuration. Updates for a session are only compressed if the client library supports the server's compression scheme. The Java, Android, .NET and JavaScript client libraries are capable of zlib compression. A JavaScript client must explicitly download the zlib library; it is packaged separately to reduce the download size of the core library. Compression can be also disabled on a per-topic basis using the COMPRESSION topic property.

Topics: The topic tree is sorted (19056)

The topic tree is now sorted lexicographically by topic path. The change affects the order in which results are returned by all operations that interact with the topic tree using topic selectors. For example, subscribing or fetching. In previous releases, the child topics of a particular parent were sorted in order of addition. One consequence was that servers in a cluster could present replicated topics in different orders. The sort order is based on the order of Unicode values and independent of locale settings of the server environment.

Changes made to existing features at release 6.2.0

.NET Client: WebSocket support for compress encoding (13540)

The .NET client library now supports the transfer of compressed messages over WebSocket connections.

.NET Client: Async methods added to ISecurity (16259)

ISecurity.ChangePrincipalAsync() has been added to allow async/await patterns with the security feature.

.NET Client: Async methods added to ISystemAuthenticationControl (16264)

ISystemAuthenticationControl.GetSystemAuthenticationAsync() has been added to allow async/await patterns with the system authentication control feature.

.NET Client: Async methods added to ISecurityControl (16268)

ISecurityControl.GetSecurityAsync() and ISecurityStoreFeature.UpdateStoreAsync() have been added to allow async/await patterns with the security control feature.

.NET Client: Introducing TopicSelectorFormatException (16342)

Every method that accepts a topic expression string now throws a TopicSelectorFormatException when given an invalid expression. The previous behavior was to throw various forms of ArgumentException.

.NET Client: ISessionFactory.SslContext(RemoteCertificateValidationCallback, LocalCertificateSelectionCallback) removed (17122)

The previously deprecated ISessionFactory.SslContext(RemoteCertificateValidationCallback, LocalCertificateSelectionCallback) method has been removed.

.NET Client: IServiceRequest removed. (18428)

The previously deprecated IServiceRequest interface has been removed.

.NET Client: IFetchRequest, IFetchResponder and IFetchResponseRegistration removed (18544)

The previously deprecated IFetchRequest, IFetchResponder and IFetchResponseRegistration interfaces have been removed.

.NET Client: New escape function for Domain Specific Language values (18578)

In various parts of the client API, Domain Specific Language is used. Examples are session property filters, security scripts and topic properties. When quoted values are used within these, it is possible to escape certain characters (single quotes, double quotes and backslash) by preceding with a backslash. A new method called Diffusion.EscapeString has been provided to simplify this.

.NET Client: ICSharpCode.SharpZipLib is no longer part of the client library (18997)

ICSharpCode.SharpZipLib is no longer part of the client library. If your project depends on it you need to reference the NuGet package instead: https://www.nuget.org/packages/SharpZipLib/0.86.0

.NET Client: Deprecated TopicAddFailReason values removed. (19005)

The previously deprecated TopicAddFailReason.TOPIC_NOT_FOUND and TopicAddFailReason.INITIALISE_ERROR error reasons have been removed.

.NET Client: IMessaging.GetStreamsForTopic removed. (19006)

The previously deprecated IMessaging.GetStreamsForTopic(string) method has been removed.

.NET Client: Deprecated AddTopicResult values removed (19007)

The previously deprecated AddTopicResult.Created and AddTopicResult.Exists values have been removed. AddTopicResult.CREATED and AddTopicResult.EXISTS, respectively should be used instead.

.NET Client: ErrorReason.FromValue(int) removed. (19008)

The previously deprecated ErrorReason.FromValue(int) method has been removed.

.NET Client: IRegistration.Close() and IRegisteredHandler.Close() removed in favour of CloseAsync() (19009)

The previously deprecated IRegistration.Close() and IRegisteredHandler.Close() methods have been removed. IRegistration.CloseAsync() and IRegisteredHandler.CloseAsync(), repectively, should be used instead.

.NET Client: ITopicStream removed (19011)

PushTechnology.ClientInterface.Client.Features.ITopicStream and all related methods have been removed. Use value streams instead.

.NET Client: 'Content' handling removed. (19025)

PushTechnology.ClientInterface.Client.Content.IContent is only being used with the classic fetch API. Therefore the interface has been slimmed down and no instance can be created any more. Updating a topic with a content instance is no longer possible and value data types should be used instead.

.NET Client: Additional type conversions for value streams and messaging responses (19111)

The standard data types have been extended to allow serialised values to be read as object. A IValueStream<object> will now match all topic types. Similarly, request/response messaging can use object to relax response type constraints. For example, SendRequestAsync<string,object>( "path", "Hello") will allow a response of any datatype.

.NET Client: Removing Microsoft.CSharp dependency (19268)

A dependency to Microsoft.CSharp is no longer needed when using the dotnet client library. It can be safely removed from your dependencies if you don't use any of its features directly in your project.

.NET Client: Upgraded NLog version (19269)

NLog has been upgraded from version 4.5.3 to version 4.5.9.

.NET Client: The web socket connection protocol now uses HTTP headers rather than URI parameters (19302)

The previous method of delivering connection parameters as URI parameters raised security concerns in some configurations. This change addresses these concerns by delivering connection parameters in the HTTP headers.

.NET Client: ITopicUpdateControl is deprecated in favor of the new ITopicUpdate interface (19474)

The ITopicUpdateControl feature has now been deprecated. Use the new ITopicUpdate feature instead. The ITopicUpdate feature provides equivalent and additional functionality, such as conditional updates. It can be accessed from a session with the TopicUpdate property in the ISession interface.

Android Client: Improved Android example (16150)

The Android example code shipped with the product has been improved.

Android Client: The library is no longer signed (19604)

The diffusion-android.jar is no longer signed. Additionally, the javax.annotation classes have been removed from the jar. These changes reduce the size of the library and make it easier to package.

C Client: New escape function for Domain Specific Language values (18581)

In various parts of the client API, Domain Specific Language is used. Examples are session property filters, security scripts and topic properties. When quoted values are used within these, it is possible to escape certain characters (single quotes, double quotes and backslash) by preceding them with a backslash. A new method called Diffusion.escape has been provided to simplify this.

C Client: 'Content' handling removed. (19028)

The content API (previously located in content.h) has now been removed. The CONTENT_T struct still remains as part of the public API (along with it's free function, content_free), though applications are strongly encouraged to develop alternative implementations as this will be removed in a future release.

C Client: Session attributes (19238)

Session attributes have been introduced to the C client. This encapsulates the basic attributes of a session. These attributes can be modified when establishing a session using a session factory.

C Client: The WebSocket connection protocol now uses HTTP headers rather than URI parameters (19301)

The initial Diffusion connection URL no longer contains connection information as part of the query string. This information is now stored in custom headers as part of the HTTP connection.

C Client: Session Factory (19461)

The Session Factory API has now been introduced to the C client. Sessions can now be established with a session factory using functions "session_create_with_session_factory" and "session_create_async_with_session_factory". Session factory attributes can be modified with functions located in session-factory.h

C Client: topic-update-control.h is deprecated in favor of the new topic-update.h API (19473)

Topic update functions in topic-update-control.h have been deprecated in favor of a new topic update API located in topic-update.h

Client: Deprecated items removed from Client APIs (18624)

Most items deprecated in release 6.0 (and before) have been removed from all client APIs in this release.

Client: One-way messaging deprecated (18717)

One-way messaging (sending messages that expect no response) has been deprecated in favor of request-response messaging. All one-way messaging methods will be removed in a future release.

Client: TopicAddFailReason.USER_CODE_ERROR deprecated (19279)

The TopicAddFailReason.USER_CODE_ERROR enum value has been deprecated. It never happens when adding topics using TopicSpecification.

Console: Improved Logs tab in Diffusion monitoring console (18969)

The Diffusion monitoring console Logs tab has been redesigned to show the server log file, and optionally to follow new log entries.

Java & Android Client: TopicStreams removed (18944)

TopicStream and its usage within the Topics feature has been removed. This was only useful for RECORD topics which have also been removed.

Java & Android Client: Diffusion.newTopicSpecification added (19123)

A new method for creating topic specifications has been added to the Diffusion enum. This is driven by uses of topic specifications outside of TopicControl.

Java & Android Client: The web socket connection protocol now uses HTTP headers rather than URI parameters (19299)

The previous method of delivering connection parameters as URI parameters raised security concerns in some configurations. This change addresses these concerns by delivering connection parameters in the HTTP headers.

Java & Android Client: Proxy negotiation now reuses a single socket for subsequent requests (19337)

Previously, a new socket was used for each step of a proxy authentication handshake. This has been changed so that the same socket is used for subsequent requests, allowing for the implementation of multi-step authentication handshakes such as NTLM2.

Java & Android Client: TopicUpdateControl is deprecated in favour of the new TopicUpdate feature (19472)

The TopicUpdateControl feature has been deprecated in favor of the new TopicUpdate feature.

Java Client: Support for Java 9, Java 10, in addition to Java 8 (17880)

The Java client is now supported on Oracle Java SE 9.0.4, 10.0.1, or 11.0.1, and OpenJDK 9.0.4, 10.0.2, 11.0.1, in addition to Oracle Java SE 8. Later patch releases of each version are also supported.

JavaScript Client: Update version of web socket library (ws) to 1.1.5 (18981)

The version of the web socket library used by Node Diffusion clients has been updated to a more recent version.

JavaScript Client: 'Content' handling removed. (19026)

Removed RecordContent class

JavaScript Client: TopicStreams removed (19047)

Removed deprecated subscribe, stream, and view from Session.topics feature. Subscription class has been removed.

JavaScript Client: TopicUpdateControl is deprecated in favor of the new TopicUpdate interface (19476)

update, updateValue, and registerUpdateSource in the Session.topics feature have been deprecated in favor of the new TopicUpdate feature.

Logging: Improve "too many multiplexers" warning (19273)

The logged warning against configuring too many multiplexers has been improved to include selector and asynchronous logging threads.

Monitoring: Internal topics are no longer included in topic statistics (19455)

The console integration relies on topics created by the internal Diffusion publisher to distribute statistics and JMX information. These internal topics are created below the the "Diffusion/" branch. In previous releases, these internal topics were included in the total topic statistics (server.topics.count, server.topics.additions, server.topics.deletions), and were also counted when applying the topic limit imposed by the license. From this release, the internal topics are no longer included in the statistics and are not counted when applying the license topic limit.

Replication: Routing topic handlers can reliably add replicated topics on demand (16515)

A routing topic handler can now reliably create a replicated topic and then resolve a routing subscription request to that topic. In previous releases, a topic created on demand might not have been replicated to the server managing the routing subscription before the routing subscription was evaluated, leaving the session unsubscribed. Diffusion 6.0 known issue 17038. Diffusion 6.1 known issue 18771.

Replication: Hazelcast upgraded to 3.11 (19609)

The version of Hazelcast used has been upgraded to 3.11.

Server: Further optimisation of split path selectors (19059)

Evaluation of literal parts in split path pattern selectors has been optimized.

Topics: Support for Record, Single Value and Stateless topics removed (18819)

All support for the deprecated RECORD, SINGLE_VALUE and STATELESS topic types has been removed in this release.

Topics: Updating a string, int64, or double topic to null removes the topic value (19499)

Null handling for string, int64, and double topics has changed. There is no longer a difference between a topic that has never been updated with a value, and a topic that has been updated to set a null value. String, int64, and double topics are the only topic types that support null values. When a string, int64, or double topic is set to null, the previous value will be removed. If the topic previously had a non-null value, subscribers will receive an notification that the new value is null. New subscribers to the topic will not receive a value notification. In previous releases, new subscribers to a topic that has been set to null would receive a value notification that the value was null.

Bugs cleared at release 6.2.0

.NET Client: Escaped reverse solidus at the end of a JSON string caused InvalidDataException (19248)

An escaped reverse solidus at the end of a JSON string ( "\\" would throw an InvalidDataException. This behavior has now been fixed.

.NET Client: Establishing a secure connection with a invalid server certificate will not fail (19275)

Establishing a secure connection with an invalid server certificate would not fail. This behavior has now been corrected, and when trying to connect with an invalid server certificate the connection will now fail. This default behavior can be overwritten by supplying your own validation with: ISessionFactory.SslContext((sender, cert, chain, errors) => {\* your validation here *\}); This is mainly useful for testing purposes and self-signed certificates.

Android Client: Stream support does not work on API 24+ (19566)

The Diffusion Android client library includes the backports of JDK 8 classes for compatibility with versions of Android earlier than API 24. This release fixes a bug in the packaging of the backported classes which caused an incompatibility with Android versions API 24 and above.

Android Client: Correct freeing of direct byte buffers (19582)

Under Android API 25+, a warning "Failed to call free() on a direct ByteBuffer." was logged when the Diffusion library was first used. This warning indicates a problem where the library would not free up direct memory buffers in a timely fashion. The problem has been fixed in this release. The warning should no longer appear.

JavaScript Client: NPM diffusion module contains additional web code (18798)

The Node Diffusion client contained multiple copies of the web version of the Diffusion client in the 'dist' directory, needlessly increasing its size. The duplicate copies have been removed.

JavaScript Client: Cannot subscribe to int64 topic as JSON (19580)

A ValueStream with JSON data type will now subscribe to int64, double, and string topics.

JavaScript Client: RangeQuery.fromSequence is not a function (19659)

Using RangeQuery.fromSequence resulted in a runtime error: "TypeError: session.timeseries.rangeQuery(...).fromSequence is not a function". This has been resolved by fixing the TypeScript definition to change the interface function to "from".

JavaScript Client: RequestContext field 'sessionId' is written with capital 'S' and maps wrongly (19665)

Fixed TypeScript definition of RequestContext.sessionId

Replication: Cluster recovery may fail to remove topics if the partition log has conflated their addition and removal (18909)

The partition log compacts its entries to prevent memory leaks. This compaction could cause removed topics to be forgotten about. This could mean that topics were not removed once repartitioning occured. This problem has now been resolved.

Replication: Session replication memory leak leading to reduced performance (19213)

The Hazelcast datagrid used for session replication was incorrectly retaining details of sessions even after they were closed. This caused Diffusion clusters with session replication enabled to leak memory, leading to reduced performance due to garbage collector pauses unless all members of the cluster were rebooted at once. The issue is now fixed.

Server: Correct handling of MESSAGE_QUEUE_LIMIT_REACHED and MESSAGE_LOSS fatal conditions (18646)

Sessions encountering a full message queue or message loss on reconnection did not report these conditions correctly to session properties listeners. Further, rather than being closed on these fatal conditions, the sessions were incorrectly kept alive pending reconnection. The reconnection would always fail. This has been fixed. Sessions fail cleanly, and session properties listeners will receive MESSAGE_QUEUE_LIMIT_REACHED or MESSAGE_LOSS as appropriate.

Server: Incorrect handling of WebSocket fragmented frames leading to "Unrecognised message" errors (19459)

The server handled fragmented WebSocket frames incorrectly. This affected requests sent from JavaScript clients to the server, leading to "Unrecognised message" exceptions. This could cause the Diffusion monitoring console to become unreliable when the total number of topics approached 1000. The issue is now fixed.

Known Issues

Client: New user defined properties are not reported to Session Properties Listeners (19538)

The documentation for session properties listeners says that when there is a session event, the 'previous values' map will contain an entry with a null value for any new property. This does not occur - there will be no entries in the previous values map for new properties. This will be resolved in a future release.

Console: Console shows fractional users connected. (19624)

The concurrent clients and client connections graphs on the console can display fractional users.

Console: The button to the console sometimes does not appear (19625)

The button to the console does not appear on the server dashboard under some circumstances.

Console: Logging into console with non-admin credentials provokes errors (19860)

Logging into the Diffusion console using a principal without admin permissions resulted in JavaScript errors and some tabs in the user interface failing to display correctly.