Diffusion 6.2 Release Notes

6.2.9 (14 Nov 2019)

Bugs cleared at release 6.2.9

.NET Client: Increased memory usage when subscribing to many small topics (21402)

Subscribing to a lot of topics with relatively small values caused a session to consume a lot more memory than necessary. This has now been fixed.

JavaScript Client: JSON stream incorrectly decodes some sequences of values from STRING topics (21287)

When subscribing to a string topic with a JSON value stream, delta updates are now processed correctly.

JavaScript Client: Time series topic int64 event values are delivered incorrectly if they are greater than 24 (21315)

In some cases involving time series topics containing int64 events, delta changes were applied to a buffer that was different to the buffer originally sent to the client. This caused the delta to be processed incorrectly, resulting in the client being unable to read any value greater than 24. The original buffer is now always used for applying a delta operation.

Replication: Replica streams do not recover after reconnection (21309)

Previous releases had a bug where topic replication did not recover correctly after servers lost connection and then reconnected. This would prevent replication of topic updates for some of the topics on some of the servers. The bug has been fixed in this release.

Replication: Cluster fails to form correctly following split brain (21390)

In previous releases, there were situations in which the topic replication service was not informed of hazelcast partitions being moved following resolution of a split-brain condition. Consequently some topic operations would persistently fail and report that "the cluster is re-partitioning". In this release, additional recovery code has been added to detect and resolve this problem.

Server: The 'always' conflate topic policy does not update outbound queue byte counts correctly (21341)

In previous releases, internal byte counts were not updated correctly when a session queue overflowed during the processing of an update for a topic that has the conflation property set to `always`. This could cause future messages for the session or sessions using the same connector to be incorrectly accepted or rejected. This bug has been fixed in this release.

Server: When the GeoIP database is enabled, the server now correctly assigns an ISO code to $Country (21352)

In previous releases, when the GeoIP database was enabled, the server incorrectly assigned a country name to the $Country session property. In this release, the server has been corrected to use the country ISO code, as documented.

6.2.8 (23 Oct 2019)

Changes made to existing features at release 6.2.8

Installation: Installation includes the zlib-bundle.js file (20801)

Diffusion clients use zlib to support message compression. Since Diffusion 6.1, zlib is no longer included in the Diffusion javascript client library to reduce its size. Support for zlib is detected automatically and compression is enabled or disabled accordingly. Applications using the javascript client in a browser must separately include zlib to enable message compression. This can be achieved at build time by using browserify to package the browserify-zlib npm module into the application library. In this release, a separate browserify-zlib-0.2.0.js file is included in the clients/js installation directory. An application can package this file or include it as a runtime dependency, instead of using browserify at build time. The browserify-zlib-0.2.0.js file is also available for download from the Push Technology web site. No extra step is required to enable compression when using Diffusion in node.js environments since zlib is a default node.js module.

Replication: Unnecessary Hazelcast operations on connect (21290)

In previous releases, an unnecessary Hazelcast operation was performed for each connection made by a session. The operation is no longer performed in this release.

Bugs cleared at release 6.2.8

.NET Client: ISecurityControl.Script.ToScript() wrongly quotes role permissions (21155)

Calling ISecurityControl.Script.ToScript() incorrectly put role permissions in single quotes, so the security store did not update. This has now been fixed.

Apple Client: Selectors containing the '|' character not parsed correctly (20481)

Selectors containing the '|' character were not handled correctly, resulting in a failure to add stream to selected topics. This issue has now been resolved.

C Client: SECURITY_STORE_ROLE_T not present in public API (20934)

Addresses an issue where the SECURITY_STORE_ROLE_T struct was not present in the public API (as part of security-control.h). This has now been addressed.

Console: Console log does not handle Server.log file roll over (20881)

The console's log viewer would stop updating and sometimes display errors when the underlying log file was truncated due to log rollover. The console now automatically follows log rollovers in tailing mode, and allows the user to fetch the latest log in browse mode.

Documentation: Incomplete required permissions for setting session properties listeners (20431)

JavaScript Client: JavaScript client cannot 'unset' topic values (21234)

The client now allows unsetting a topic with a primitive datatype by passing null or undefined to topicUpdate.set() .

Replication: Issues when handling cluster peer connection failure (21225)

When a server detects a connection failure to another server in the cluster, it must cancel all pending requests to that server. In previous releases, this was done in-line, and could stall multiplexer threads and affect outbound communication to other sessions. In this release, the failure handling is now offloaded to a lower priority thread.

Replication: Cluster connections no longer enforce maximum message size (21255)

When using topic replication in previous releases, the server maximum message size had to be larger than the largest topic value (plus a few tens of bytes of message framing). Otherwise the topic value could not be replicated to peers, and the cluster would fail. The maximum message size would also prevent such a value being sent to the server via the update API, and this was not readily apparent. The situation only arose in rare cases, for example, if maximum message size was reduced, the server was restarted, and a large topic value was recovered from disk; or if a client session incrementally increased the size of a value, using an update stream to send the changes as delta. From this release, the server's maximum message size is not applied to intra-cluster connections.

Replication: The default conflation policy causes data corruption (21278)

In previous releases, a bug in the processing of the default 'conflate' conflation policy could cause data corruption. This would happen if there were multiple deltas in a session queue that was full enough to trigger conflation, and could result in incorrect values being published to subscribers, or failing on the server with a PUSH-000229 "InvalidDataException: Deltas do not compose" log message. The bug has been fixed in this release.

Server: Sessions using the HTTP polling transport can fail if there is a large backlog of messages (20942)

Sending a large backlog of messages to a session using the HTTP polling transport could occasionally fail, resulting in the session being closed with an IO_EXCEPTION exception. This bug has been resolved in this release.

Server: IllegalStateException in TopicPathSelectionCache.verify() (21130)

A bug could cause corruption of an internal subscription index, resulting in the server logging a PUSH-000229 message for an IllegalStateException occurring in TopicPathSelectionCache.verify.

Server: NullPointerException in ClientSessionsImpl.notifyClosed (21187)

This NullPointerException occurs when a Diffusion session is failing over, and the failover process fails. This issue has been resolved.

Topics: null updates to int64, double, and string topics that have DONT_RETAIN_VALUE=true are not published (21281)

Previous releases had a bug where subscribers would not be notified if a null value was sent to an int64, double, or string topic with a null value, and the topic had its DONT_RETAIN_VALUE property set to true. The bug has been fixed in this release.

6.2.7 (24 Jul 2019)

Changes made to existing features at release 6.2.7

Logging: PUSH-000228 changed to WARN instead of INFO (20693)

PUSH-000228 is logged when there is a delay sending an event to a multiplexer because the queue is full. This was previously logged at the INFO level. Because this log message can indicate a problem with operation, it is now logged at the WARN level. Note that occasional occurrences of this message may simply be due to peaks in throughput, and do not necessarily indicate a real problem.

Bugs cleared at release 6.2.7

Android Client: Update streams do not work on Android (20343)

Addresses an issue where the Android client was unable to update topics using update streams or validate update streams.

Java & Android Client: Javadoc is incorrect regarding the exceptions returned from CompletableFuture API calls (20723)

Much of the javadoc for methods that return a CompletableFuture incorrectly stated that an ExecutionException would be returned, when in fact a CompletionException would be returned. This has now been corrected. Some methods do inconsistently return ExecutionException and these have been highlighted in the javadoc and will be corrected in a future release.

JavaScript Client: ValueStream emits error after it is closed (19731)

A ValueStream could sometimes emit an error even after it was closed.

JavaScript Client: session.fetchRequest and session.lock not working reliably in IE11 (20631)

The JavaScript client library is intended to work in Internet Explorer 11. However, session.fetchRequest and session.lock did not work reliably in that browser. The implementation of these functions has been changed to make them compatible with IE11.

Licensing: Inconsistent soft and hard cluster licensing limits (20639)

Due to a race condition, the cluster soft and hard connection limits were not consistent for all servers in a cluster. This issue has now been resolved.

Persistence: File persistence service fails to restore - topic has different specification (20658)

When using both persistence and replication together, a server could fail with the message "The file persistence service has failed to restore from existing files", indicating that a subsequent ADD_TOPIC record has a different specification. This made it impossible to restore from affected files. This issue has now been resolved.

Security: Roles with no permissions and no included roles are now reliably removed from the security configuration (20583)

In previous releases, if multiple roles were updated to have no included roles, redundant "set role 'X' includes []" statements could be left in the security store. If these roles had no associated global or topic permissions, they would incorrectly be included in the result of SecurityConfiguration.getRoles(). The bug has been fixed in this release.

Topics: Slave topics do not rebind after removal and recreation of master (20679)

An issue where a slave topic would not bind to the master if it was recreated after removal has been resolved.

6.2.6 (14 May 2019)

Bugs cleared at release 6.2.6

Topics: Split path pattern topic selectors with disjunctions and descendant qualifiers are not evaluated correctly (20474)

Due to a bug introduced in Diffusion 6.2.4, split path pattern topic selectors containing disjunctions and descendant qualifiers (for example ?x|y//) were not evaluated correctly. The bug has been fixed in this release.

6.2.5 (9 May 2019)

Bugs cleared at release 6.2.5

.NET Client: Connection not fully closed after detecting possible inactivity (20360)

The server was not correctly closing connections after detecting possible inactivity resulting in client sessions continuing to receive messages after going into RECOVERING_RECONNECTION state. This has now been fixed.

C Client: Selectors containing the '|' character not parsed correctly (20346)

Addresses an issue on the C client where the '|' character isn't correctly recognized as a regex metacharacter. As a result, topic selector evaluation returned incorrect results. This has now been resolved.

C Client: Memory leak in fetch request (20390)

Addresses a minor memory leak possible when using fetch requests.

C Client: Return correct value when NULL is supplied to topic result and fetch result functions (20456)

Addresses an issue where if a NULL pointer is supplied to topic result and fetch result functions, the correct value was not returned. This has now been resolved.

Console: Save button doesn't work when adding new permissions to existing role (20477)

Adding a topic permission via the console Security tab did not work. This issue has been resolved.

Security: Security vulnerability resolved. (20452)

A security vulnerability has been resolved at this release. Please contact [email protected] for full details.

Server: Session queue threshold notifications have been corrected to work with conflation and TIDY_ON_UNSUBSCRIBE (20413)

Due to a bug, threshold notifications could fail to be generated if conflation or TIDY_ON_UNSUBSCRIBE removed multiple messages from a session's queue. The bug has been corrected in this release.

Topics: Conflation causes loss of time series topic events (20342)

Conflation of time series topics causes subscribers to miss events. This works against the expectation that time series topics should provide the full history of the topic. Conflation will no longer be supported for time series topics. The default conflation policy for time series topics is now 'off'. Attempting to create time series topics with conflation policies of 'conflate' and 'always' will now generate a warning log and cause the conflation policy to be ignored. It is still possible to set the conflation policy to 'unsubscribe'.

Topics: Multiple deltas may be composed incorrectly during conflation (20366)

During conflation, binary deltas for the same topic were sometimes composed together. This resulted in possible incorrect deltas. These incorrect deltas would then be published to clients. When the clients applied these deltas, they might see either an error or corrupted data. The server should now compose deltas correctly.

Topics: Conflation may cause a duplicate value to be published (20398)

Conflation could cause subscribers to see duplicate values. Conflation may replace queued messages with the latest value for the topic. When this happened the server could still queue a message for that topic. This could result in the subscriber receiving a duplicate or corrupt value. The server will now correctly not queue a message after conflating queued messages to the latest value.

Topics: IncompatibleTopicStateException performing allowed replacement using addAndSet (20403)

It should be possible to replace topics recovered from persistence with topics with a different topic specification using the 'TopicUpdate.addAndSet' method and update streams that can create topics. These operations were failing. This has been corrected, so topics are replaced as expected.

6.2.4 (10 Apr 2019)

Changes made to existing features at release 6.2.4

Server: Topic selector performance improvements (20321)

The runtime performance of split-path pattern topic selectors and selector sets has been improved.

Bugs cleared at release 6.2.4

.NET Client: Selectors containing the '|' character not parsed correctly (20327)

Selectors containing the '|' character were not parsed correctly. This issue has now been resolved.

Android Client: The authenticator API does not work on Android (20287)

Addresses an issue where the authenticator API would fail when used by the Android client. This case also resolves a similar issue with the setToString utility method.

Apple Client: Primitive value updater raising exception on attempt to update with null value (20170)

The update methods on both the PTDiffusionStringValueUpdater and PTDiffusionNumberValueUpdater classes did not behave correctly. The API states that the values are nullable (that is, may be provided with nil pointers), but this caused a runtime exception. The update methods now correctly accept null values.

C Client: Invalid raw bytes from Diffusion value returned from a fetch request's result (20144)

Addresses an issue where an incorrect raw bytes value (retrieved by calling diffusion_value_get_raw_bytes) is returned from the result to a fetch request.

C Client: Invalid delta calculated when updating with topic update streams (20194)

Addresses an issue where subsequent invalid delta updates were calculated when updating with an update stream (after the stream's first update). This has now been resolved.

C Client: Possible crash when subscribing to a topic with REMOVAL topic property (20285)

Addresses an issue where subscribing to a topic created with the REMOVAL topic property set would crash a client application. This has now been resolved.

Java & Android Client: The withProperties method of TopicSpecification returns a new specification not based on the current one (20234)

The withProperties method of TopicSpecification should return a new specification based on the current one, but with the properties provided. Due to a bug, it would instead return a new specification based on the default specification. The method has been updated to base the new specification on the current specification.

JavaScript Client: TypeScript projects using Diffusion bindings and `noImplicityAny:true` fail compilation. (19749)

Typescript projects using the diffusion client can now set noImplicitAny to true.

JavaScript Client: Schema.asJSON does not exist (19945)

Missing function Schema.asJSON has been implemented.

JavaScript Client: Typescript bindings for diffusion.Session.off mandate 2nd argument, which is optional (19995)

Typescript bindings now allow optional 2nd argument for Stream.off

JavaScript Client: Third argument to timeseries.append not working (20048)

As designed, the third argument to timeseries.append is intended to be the type of the supplied value. Due to a bug, this argument was not handled correctly if provided, potentially resulting in "No data type" errors. timeseries.append now correctly takes DataType as a third argument.

JavaScript Client: Internet Explorer incompatibility (20075)

The Javascript client was incompatible with Internet Explorer due to use of the ES6 Set class. The code has now been refactored to restore compatibility with IE.

JavaScript Client: QueryResult.merge throws an error when called (20207)

Due to a bug, QueryResult.merge did not work correctly. It now functions as documented.

JavaScript Client: Selectors containing the '|' character not parsed correctly (20345)

Selectors containing the '|' character were not handled correctly, resulting in a failure to add stream to selected topics. This issue has now been resolved.

Security: "Change roles by filter" available to all sessions (20183)

Previously, the filter version of the ClientControl#changeRoles method was available to all sessions. It is now restricted to sessions with both MODIFY_SESSION and VIEW_SESSION permissions.

Server: StringIndexOutOfBoundsException when parsing topic selector (20245)

Due to a bug, when the server parsed some invalid topic selectors, including '$|', the operation failed and a StringIndexOutOfBoundsException was logged. The bug has been fixed in this release. The server now correctly rejects these topic selectors.

Server: NullPointerException in SessionPropertiesDispatcherImpl due to race condition (20305)

A race condition led to a possible NullPointerException in SessionPropertiesDispatcherImpl being reported on the server. This has now been resolved.

Topics: VALIDATE_VALUES not respected when adding, setting and creating update stream (20212)

The VALIDATE_VALUES topic property was not respected when adding and setting a topic using an update stream. Support for the topic property has been added to this code path.

Topics: The TopicUpdate method createUpdateStream not checking the topic and value types (20213)

The TopicUpdate method createUpdateStream documented that the topic and value types were checked for consistency. This check was not performed. The implementation has been brought inline with the documentation.

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.

JavaScript Client: Updater does not implement updateValue (19835)

Updater.updateValue was not implemented in previous versions. This has now been corrected.

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.

Console: Log view missing out entries between pages (19755)

In some circumstances the log view would introduce a one log-entry gap between pages retrieved from the server. This problem has been resolved.

Fan-out: A 6.2.0 secondary server cannot connect to a 6.1.3 (or older) primary server (19728)

An issue prevented 6.2.0 fan-out secondary servers connecting to a primary version 6.1.3 or older. This issue 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.

Logging: The server will not start if the ConnectionCount statistics file cannot be created (19939)

The server logs daily connection count statistics to a ConnectionCount file. The file path is determined by the default-log-directory element of the Logs.xml configuration file, evaluated relative to the Diffusion installation directory. In previous releases, if the configured log directory was not writable when the server was started, a temporary directory would be created and a warning logged. From this release, if a writable ConnectionCount file in the configured log directory does not exist and cannot be created, the server will log an error and fail to start.

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.

Console: Enabling topic or session statistics breaks tabs in monitoring console (19911)

Enabling topic instance or session instance statistics would disable the Topics and Clients tabs respectively. This issue is now fixed.

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.

System Monitoring/Statistics: Client instance metrics: incorrect outbound message and outbound bytes values (19921)

When client instance metrics were enabled, the values reported for the outbound message and outbound bytes metrics were incorrect (and equal to the values for the inbound messages and inbound metrics respectively). 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.

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: 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.

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.

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.

System Monitoring/Statistics: 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.

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.

JavaScript Client: JavaScript client does not provide UNKNOWN values for enumerations (20232)

Since 6.1.0, UNKNOWN values have been added to several client enumerations to account for the serialization of future additions. These have not been added to the JavaScript client, causing it to disconnect if a service that returns a newly added result is invoked. This can only occur when a client is connected to a newer minor release of the server.

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.

Replication: A transient stale value can be published during recovery (21310)

When a server joins or leaves a cluster using topic replication, the server responsible for coordinating updates to a topic can change. When this happens, the new server notifies its peers and provides the current value of the topic. A server performing this "recovery" process can incorrectly re-publish an older value before publishing the latest value, so some subscribers can incorrectly be sent this out-of-date value before being sent the correct value.