Diffusion 6.10 Release Notes

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.

Java Client

29772: The SLF4j logging API library has been updated to SLF4j 2.0

The SLF4j logging API library has been updated to SLF4j 2.0.

Applications that use the 'with-dependencies' version of the Java client may need to update their logging library to a version compatible with SLF4J 2.0. See https://www.slf4j.org/faq.html#changesInVersion200

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.