6.10.0 (30 August 2023)
New features in 6.10.0
Client
28527: Ability to retrieve metrics using the API
At this release, there is a new API for retrieving metrics. This is enabled in the Metrics feature. This is available in the Java, .NET, and JavaScript SDKs.
28682: Update Stream Recovery
The update stream builder now allows a RecoverableUpdateStream to be created that can be used to recover automatically from transient clustering exceptions.
30017: Conditional update constraints
At this release the UpdateConstraint API has been extended to allow for conditional constraints which can check the value of a topic or JSON field using operators like GT (greater than), LT (less than) etc. This functionality is available in all client SDKs other than Python (for a future release).
30328: OR operator for Update Constraints
It is now possible to form compound update constraints using an 'or' operator as well as 'and'. This functionality is available in all SDKs except Python at this release.
Gateway
28152: REST API to Manage Gateway Framework
In this release, we have introduced the Gateway Control REST API, a powerful feature that allows for the management and monitoring of Gateway applications through REST API calls. Prior to this release, Gateway applications could only be managed through the Diffusion management console. With the new REST API, all operations previously available exclusively in the console can now be performed using REST calls. For more information, please refer to the updated manual.
Topic Views
29798: Floating point support in topic views
Topic views now support the use of floating point numbers in all clauses, particularly in process calculations, etc. This includes the ability to specify the scale (number of places after the decimal point) and the rounding policy to use for calculation results.
For full details see the Topic Views page in the user manual.
Improvements in 6.10.0
.NET Client
29884: Remote Server support for reverse connections
The remote server feature now supports the creation of remote servers for reverse connections (introduced in release 6.9), that is connections initiated from a primary server rather than from a secondary server.
30210: SessionIdFromString method
The .NET client can now create a session ID from a string with the SessionIdFromString method.
Apple Client
29881: Remote Server support for reverse connections
The remote server feature now supports the creation of remote servers for reverse connections (introduced in release 6.9), that is connections initiated from a primary server rather than from a secondary server.
C Client
29882: Remote Server support for reverse connections
The remote server feature now supports the creation of remote servers for reverse connections (introduced in release 6.9), that is connections initiated from a primary server rather than from a secondary server.
Console
30139: Improvements to permissions handling in the console
The Diffusion management console now behaves more predictably and provides more user feedback when attempting to browse a topic tree with restricted permissions at the root.
Java & Android Client
30025: Java Client and Diffusion server now use HTTP/1.0 standard headers
The Java client and the Diffusion server now follow HTTP/1.0 standards, including an ASCII space following the colon in HTTP headers. Other Diffusion clients already follow this practice and are unchanged.
Python Client
26147: Topic update using constraints
The Python SDK is now capable of updating topics using update constraints
Replication
30726: Hazelcast upgraded to 5.2.4
Due to security vulnerabilities in earlier versions, Hazelcast has been upgraded to release 5.2.4.
Removals in 6.10.0
C Client
29766: Removal of unused message types
Several unused and deprecated message types have been removed from the C Client
Client
28999: TopicAddFailReason INCOMPATIBLE_PARENT and IncompatibleParentTopicException Removed
The deprecated TopicAddFailReason.INCOMPATIBLE_PARENT and associated IncompatibleParentTopicException have been removed at this release from the Java SDK. Equivalents have also been removed from all other SDKs.
29000: TopicPermission and associated methods removed
TopicPermission was deprecated at release 6.5 in favor of PathPermission. It has been removed at this release along with all associated methods.
Topics
29802: Routing Topics Removed
ROUTING topics, which were deprecated in release 6.7, have been removed at this release. There is no longer support for routing topics in the server. Users who were using routing topics should now use the more powerful 'Session trees' feature.
Fixes in 6.10.0
.NET Client
29978: NoReconnection does not correctly disable reconnection
Addresses an issue where setting NoReconnection on a .NET session did not disable reconnection. This has now been resolved.
30284: .NET client incorrectly accepts empty string as valid JSON
The dotnet client incorrectly accepted empty strings as valid JSON. This has now been fixed.
30740: Unable to connect successfully through a load balancer
Addresses an issue where the .NET client was unable to connect through a GCP (Google Cloud Platform) load balancer.
Apple Client
30396: Frequent crash in Diffusion iOS client library
We have addressed a bug that crashed the Diffusion Apple Client in PTDiffusionRequestStreamRegistry.
This issue is now resolved.
C Client
29801: Session properties listener seg faults when an update event is received
Addresses an issue where a C client application could crash (segfault) if a session close event was received in a session properties listener.
Federation
29642: Remote server connections can block indefinitely
Networking issues between clustered Diffusion instances could cause the server to stall.
This has been fixed in this release.
Java & Android Client
30219: Some API calls return ExecutionException rather than CompletionException
All API calls that return a CompletableFuture should fail exceptionally with a CompletionException and not ExecutionException. However, at the previous release, there were some cases where this was not true including:-
1) When UpdateStream methods were returning InvalidUpdateStreamException.
2) Calls to Metrics.removeSessionMetricCollector, Metrics.removeTopicMetricCollector, and Metrics.putTopicMetricCollector.
JavaScript Client
29448: Transport level error does not notify session establishment promise
In Safari 16.0, there is an experimental feature called "NSURLSession WebSocket". With this enabled, any JS API session failure will terminate the transport level websocket connection, resulting in errors. However, such errors were not being propagated back to the client's session establishment promise, leading to session establishment never completing. This problem may also exist in other browsers.
The problem has been resolved in this release.
29729: MutableRecordModel.add not working as expected
MutableRecordModel.add was not working as expected and records were not added. This has been fixed.
30327: Incorrect close reason type on SessionPropertiesListener.onSessionClose
The TypeScript definition of SessionPropertiesListener.onSessionClose() did not specify the correct type for the close reason. A new ClientCloseReason type has been introduced to the signature of the callback.
Logging
30400: Compaction corruption messages logged at ERROR level
Log messages that detect a persistence file corruption were previously being logged at ERROR level, even though the problems are automatically corrected. These messages are now logged at WARN level and have PUSH code messages.
Persistence
30715: Topic persistence operations could fail silently
Fixed an issue that could cause commit of topic operations to fail silently.
Replication
29959: Cluster repartitioning during a request to add a topic can cause a the request to hang
If cluster repartitioning occurred while a client was adding a topic then instead of the client being notified with an exception the operation would never complete. This has been fixed.
30611: If cluster topology changes during topic removal, topics can be left in a state where they can never be removed
If the cluster topology changes, that is, a server joins or leaves the cluster, in-flight operations can fail with a transient CLUSTER_REPARTITION error. Due to a bug introduced in Diffusion 6.5, topic removal operations that fail if the cluster topology changes can leave the topics in an invalid state such that they can never be removed.
The bug has been fixed in this release.
30697: Failure to start connector because readiness conditions not triggered
Fixed an issue that could result in Diffusion instances joining a cluster failing to reach readiness.
30701: Problems when restarting a cluster member with an out of date persistence file
Fixed an issue that could cause unexpected restarts when an instance with an out-of-date persistence file joined a cluster.
Security
29728: Users with no permissions can view the server logs in the console
Users without adequate permissions were able to view server logs in the Diffusion Management Console. This has now been resolved.
30250: A path permission assignment for a role would sometimes not override permissions inherited from a parent path
Due to a bug in previous releases, if a security role had path permission assignments for paths X and Y, where X is a parent path of Y, the path permission assignments for Y were sometimes not applied correctly.
The bug has been fixed in this release.
Server
29670: Multiplexer stuck processing selection of a missing topic notification handler
Due to a concurrency bug in previous releases, the server could stall while trying to select a control session to handle a request.
The bug has been fixed in this release.
30364: StringIndexOutOfBoundsException in PathSelector.confirmSelects
In certain circumstances, the Diffusion server could report a StringIndexOutOfBoundsException in PathSelector.confirmSelects. This has now been resolved.
Topic Views
29995: Topic view INSERT can incorrectly insert the value of a topic with DONT_RETAIN_VALUE=true
Due to a bug in previous releases, a topic view INSERT transformation could insert a stale value of a stateless topic (that is, a topic with its DONT_RETAIN_VALUE property set to true). This would happen if the topic view was added after the stateless topic, and there were other topic views with topic selectors that referenced the stateless topic.
The bug has been fixed in this release. An INSERT transformation will never insert the value of a stateless topic.
29999: Reference topics can incorrectly use the stale value of a topic with DONT_RETAIN_VALUE=true
Due to a bug in previous releases, topic view could create reference topics using a stale value of a stateless topic (that is, a topic with its DONT_RETAIN_VALUE property set to true). This would happen if the topic view was added after the stateless topic, and there were other topic views with topic selectors that referenced the stateless topic.
The bug has been fixed in this release.
30686: Mapping single value topic to time series topic does not respect specified retained range
Using topic views to map a single value topic to a time series topic would always assume the default retained range (10) regardless of what was specified in the with properties clause. This was because the retained range for time series reference topics is always limited to the source retained range so that cross cluster inconsistencies do not occur. This has now been changed so that when mapping a single value topic to a time series topic any specified retained range is respected rather than assuming the default.
However, there is a separate known issue relating to this type mapping in that using a single value topic mapping to a time series target can lead to inconsistent views of the target topic events across a cluster and therefore such a mapping is not suitable for use in a clustered environment. Even in a single server environment it is worth noting that the retained event range of the target time series topic will not be restored in server restart.
Topics
29971: Subscriptions fail to be re-evaluated if topic selections match topics in the source branch of a removed branch mapping
Due to a bug in previous releases, if a subscription to a topic was redirected by a branch mapping, and the branch mapping was removed, the session may not be resubscribed to a topic at the original topic path. The bug has been fixed in this release.
Known Issues
Topic Views
30684: Reference topics retained by 'preserve topics' are not persisted across server instances or cluster
A new 'preserve topics' clause was introduced to topic views in release 6.6. This clause means that reference topics created by a view (that have a path dependent upon the source topic value) are retained until the source topic is removed or the topic view is removed. Though this is true in the context of a single server instance, it is not the case if the server is restarted as all such topics created during the previous server instance will be lost. It is also not the case if a new server enters a cluster as the new server will only have reference topics generated from the point in time where it joined the cluster and will not reflect reference topics previously created within other cluster peers.
This issue occurs because reference topics are not persisted, either to file or across the cluster.
30691: Restrictions on mapping single value topics to time series reference topics
The ability to specify a target type in a topic view was introduced in release 6.7.0.
When using this feature to map a single value topic to a time series topic that are the following restrictions.
1) The retained events in the target topic are not replicated across the cluster (as reference topics are not replicated). This means that a new server joining the cluster will not have the same number of retained events as other cluster members. For this reason mapping single value to time series topics should not be used in a clustered environment.
2) Retained events in the target topic are not persisted therefore when a server is restarted the target time series will initially start with a single event and will only grow as the source topic is updated.