Diffusion 6.2 Release Notes

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.

Adapters: Push Notification Persistence API no longer depends on the Diffusion Java API (18680)

The unnecessary dependency between com.pushtechnology.diffusion:push-notification-persistence-api and the Diffusion Java API has been removed. The Maven version has been increased from 1.0.1 to 1.1 to reflect this change.

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.

Client: Client creation of Routing topics with server side handlers no longer supported (19362)

In previous releases it was possible for clients creating Routing topics to specify a class representing a server side routing topic handler. This was achieved by creating topics using TopicDetails - a capability which has been removed in this release. Clients can no longer specify server side routing handlers and older clients attempting to do so with a 6.2 server will fail with INVALID_DETAILS. It is still possible to create Routing topics with server side handlers using the Publisher API but this is also deprecated and will be removed in a future release.

Configuration: The default configuration allows any WebSocket origin header (17530)

The <websocket-origin> configuration setting determines whether WebSocket connection upgrade requests that have an Origin header are accepted by the server. If the <websocket-origin> element is omitted from etc/WebServer.xml, the server will use a default value of ".*" which allows all WebSocket connection upgrade requests. In previous releases, if the element was omitted, no WebSocket connections would be accepted.

Configuration: Conflation configuration removed (18844)

The conflation mechanism and configuration deprecated in 6.1 have been removed. Conflation matchers and mergers can no longer be implemented or configured. Conflation policies should no longer be configured in the Server.xml file. Automatic conflation based on topic properties is now the only conflation mechanism.

Configuration: Extract SessionConfig from ConnectorConfig (19058)

A SessionConfig superinterface has been extracted from ConnectorConfig to group the attributes that control the behavior of sessions separately from the attributes that control connection establishment.

Configuration: Default number of multiplexers changed (19272)

In previous versions, the Server.xml configuration file set the out of the box number of multiplexers to 4. If unset, the default value was equal the number of CPU cores. That out of the box setting has now been removed and the default is half the number of CPU cores. This is an optimisation which allows for other hot threads such as selector and logging threads to gain process time. A custom value can still be assigned in the configuration.

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.

Fan-out: Subscriptions from fan-out sessions no longer affect topic statistics on the primary server (18735)

Primary servers no longer include the subscriptions of fanout sessions from secondary servers in topic statistics. As well as affecting topic instance statistics, this change has two further consequences. Subscriptions from fanout sessions are no longer counted when calculating the "subscriptions less than" clause of a topic removal policy. Subscriptions from fanout sessions are not considered when generating onHasSubscribers() and onNoSubscribers() events for topic event streams.

Installation: Simpler installer options (13025)

The product installer now presents a simpler set of component choices.

Java & Android Client: 'Content' handling removed (16026)

The deprecated Content interface has now been reduced to a minimal read-only interface and is only retained to support deprecated fetch and messaging interfaces. All capabilities for building Content have also been removed from the API. The use of the Content methods should be avoided, as the interface will be removed in a future release.

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.

Logging: The log file used by sample log4j2 configuration has changed (19628)

To allow the log to be viewed in the new console log viewer, the sample log4j2 configuration has been updated to log to the file logs/Server.log. If you are upgrading an existing configuration that uses log4j2 and want to use the console log viewer, please make similar changes to your configuration.

Monitoring: Aggregate statistics collection is always enabled (18971)

In previous releases, configuration settings and the StatisticsService JMX MBean allowed the collection of session aggregate statistics, topic aggregate statistics, and publisher aggregate statistics to be enabled or disabled individually. There was also a global switch that enabled/disabled all statistic collection. From this release, aggregate statistic collection is always enabled. The configuration settings have been deprecated, and will be removed in a future release. The Statistics Service MBean has been removed.

Monitoring: Session lock monitoring (19426)

A SessionLocks attribute and a getSessionLock() operation have been added to the server MBean to allow active session locks to be queried.

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.

Publisher API: Topic.setTidyOnUnsubscribe removed (18180)

The Topic.setTidyOnUnsubscribe method which allowed this topic option to be set or changed after a topic has been created was deprecated at release 6.1 and has now been removed. To set the property, the topic must be created using a TopicDefinition. The tidyOnUnsubscribe method used to obtain the value has also been removed as this can easily be obtained from the topic definition.

Publisher API: Deprecated items removed and new deprecations (18817)

Within the Publisher API most methods and types deprecated in release 6.0 (or before) have now been removed. In addition the following have been deprecated in this release:- AttachableTopicMessage, Client.getConflationCount, Client.getSubscription, ClientListener.clientFetchInvalid, ClientListener.FETCH_INVALID, ClientStaticticsConfig.set/isEnabled, Credentials() constructor, Credentials(String,String) constructor, Credentials.attach/attachment, Credentials.set/getPassword, Credentials.setUserName, DataMessage, HTTPResponse.setServer, Message, MessageReader, MessageSource, PingMessage, Publisher.addTopicListener, Publisher.messageFromClient, Publisher.removeTopicListener, Publishers.createDeltaMessage, Publishers.createLoadMessage, PublisherStatisticsConfig/set/isEnabled, ServerConfig.set/getDefaultDeltaMessageCapacity, ServerConfig.set/getDefaultLoadMessageCapacity, StaticticsConfig.set/IsEnabled, Subscription, Topic.addTopic(String, TopicDefinition), Topic.addTopic(String), Topic.createDeltaMessage, Topic.createLoadMessage, Topic.getDataType, Topic.getDefinition, Topic.set/getDefaultDeltaMessageCapacity, Topic.set/getReference, Topic/set/getDefaultLoadMessageCapacity, TopicClient.attach/attachment, TopicClient.set/getReference, TopicData.getLoadMessage, TopicData.getType, TopicDataFactory.newTopicData(TopicDefinition), TopicDataType, TopicDefinition, TopicListener, TopicMessage, TopicProperty, TopicProvider.addTopic(String, TopicDefinition), TopicProvider.addTopic(String, TopicTreeNode, TopicDefinition), TopicProvider.addTopic(String, TopicTreeNode), TopicProvider.addTopic(String), TopicProvider.addTopics, TopicProvider.createDeltaMessage, TopicProvider.createLoadMessage, TopicStatisticsConfig.set/isEnabled, TopicTreeListener.topicReferenceChanged

Publisher API: Publisher addTopic methods without topic type - deprecated and changed behaviour (18960)

All of the Publisher and Topic addTopic methods, other than those that take a TopicData parameter have now been deprecated. For backwards compatibility, those methods that did not specify the type of TopicData (which would have previously created a topic of type STATELESS) will now create a universal topic of type BINARY with the DONT_RETAIN_VALUE set to true. Also where a topic is created that leads to the creation of intermediate topics then intermediate BINARY topics will also be created. This differs from topics created by the client API where intermediate nodes would be unbound (i.e. having no topic). For reasons of backwards compatibility with other Publisher API interfaces it is not possible to create unbound nodes using the Publisher API. For maximum efficiency from Topic creation then the client API should be used in preference to the Publisher API for Topic creation.

Publisher API: TopicMessage deprecations and removals (19030)

As RECORD, SINGLE_VALUE and STATELESS topics have been removed in this release, along with the ability to send messages from the Publisher, there is no longer any need to create TopicMessage instances. All methods that would create new messages have been deprecated and will throw UnsupportedOperationException if called. Methods on DataMessage (deprecated at 6.0) which allow for writing to messages have been removed. TopicData.getLoadMessage has been deprecated and replaced by a new getValue() method on UniversalTopicData.

Publisher API: TopicClient.send and Client.send removed (19032)

The TopicClient.send and Client.send methods have been removed. These methods would only have worked with STATELESS topics and clients using TopicStreams, both of which have been removed at this release.

Publisher API: New Authenticator interface supersedes AuthenticationHandler (19621)

The AuthenticationHandler interface has been deprecated in favor of the new Authenticator interface which is to be preferred for server side authentication. 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.

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: Correct packaging of stream support to 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.

Configuration: Logs.xml <file-pattern> property ignores %u value (19098)

Diffusion does not support saving logs in multiple files at the same time. The Java logging framework %u option is intended to resolve filename conflicts by appending a unique number to each filename. Since there is only ever one Diffusion log file, it will always append 0. File-patterns using the %u argument still work and will append 0 to the filename, but since the option is useless, it will no longer be documented.

JMX/System Management: The Server MBean numberOfTopics attribute now reports the number of topics, not the number of topic tree nodes (18965)

Previously, the ServerMBean numberOfTopics attribute returned the number of topic tree nodes. This is usually larger than the number of topics because of topic tree nodes that have no associated topic. From this release, the attribute has been corrected to return the actual number of topics.

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

Licensing: Restore ability to update license file without restarting the server (18885)

This release restores dynamic loading of the license file that did not function correctly in recent releases (including Diffusion 5.9, 6.0, and 6.1). From this release, the server regularly checks the configured license file. If the file is overwritten, the server will load and verify the new license file. If verification is successful, the new license will be used. Otherwise and error will be written to the server log advising the administrator to restore the file to a valid license.

Licensing: Correct evaluation of the topic count licence limit (18972)

Previously if the licence limited the number of topics, the limit was incorrectly applied to restrict the number of topics each publisher could have. The limit is now correctly applied to the total number of topics.

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.

Publisher API: TopicTreeListener notifications incorrect for topic detach/attach operations (19626)

Since release 5.9 it is possible to have unbound topic tree nodes created by the standard API (i.e a node that has no topic). So when a hierarchic topic A/B/C is created then nodes A and A/B will have no associated topic. But for backwards compatibility when such a topic is created by a publisher then A and A/B will be stateless topics. The Publisher API will see such unbound nodes as if they had a stateless topic, even though there is no usable topic at the node. For consistency when the standard API adds a topic to an unbound node the TopicTreeListener is notified of a remove (the notional stateless topic) followed by an add (of the newly attached topic) and when a topic is removed from a node (as opposed to the topic branch being removed) then the TopicTreeListener is notified of a remove (the previous topic) followed by an add (of a notional stateless topic). The problem with this is that in both cases the remove notification suggests that the whole branch has been removed when in fact it has not. It would be more correct if the remove was notified on the TopicDeletionListener but the fact that these are different interfaces makes this impractical. This may be resolved in a future release by rationalizing the notifications into a single notification interface.

Publisher API: Rapid adds and deletes of topics can cause TopicTreeListener notifications to arrive out of order (19663)

Under some circumstances when the same topic is being added and removed very rapidly it is possible for the added and removed notifications to be delivered to the TopicTreeListener out of order. For example you may get several adds before a remove. Even the addition and removal of different topics when being done very rapidly may not notify in the exact order that the requests were made although this is only likely to cause an issue where processing of branch overlaps. Users should be aware of this possibility but there is no immediate plan to resolve this issue as the cases where it would have an impact are thought to be extremely rare.