Skip to main content Skip to footer

Nodes

Release Notes

Release Date | 2024-01-02

Crosser Node 3.1.2

Bug Fixes

Revert method signatures in JsonSerializer

In 3.1.1 new optional parameters were added to some of the methods on the JsonSerializer. This change caused runtime issues for some modules using the old method signature.

The affected modules were:

  • OPC UA Subscriber
  • Rockwell Reader
  • Modbus Reader
  • S7 Reader

These four modules cannot be used with resource files in 3.1.1. As of 3.1.2 they will work as expected again.

Release Date | 2023-12-21

Crosser Node 3.1.1

Bug Fixes

Improved logic & logging when enhancing FlowInformation Flows deployed to nodes older than 3.1.0 will be missing FlowDeploymentId which is needed when reporting metrics in 3.1.0 and later versions. In 3.1.0 the download occurred after the start of the Flows. This could cause issues when having many Flows deployed or having flows deployed that takes a long time to start. The Node will now download the needed information at startup before starting the Flows. This operation is only done once per Flow and when the FlowDeploymentId has been retrieved this information is stored within the Flow. Improved logging for FlowInformation enhancement.

Release Date | 2023-12-20

Crosser Node 3.1.0

Changes

Sending metrics for Host and Runtimes 

Now that Crosser Control Center can handle metrics both for the Node and the deployed flows (runtimes), the Node will report metrics for the host as well as all flows.

The metrics reported for the host is:

  •  Uptime (in seconds)
  • CPU (in %)
  • Bytes Received (excluded data received from Crosser Control Center)
  • Bytes Sent (excluded data sent to Crosser Control Center)
  • HTTP requests (sent to the Node HTTP server)
  • MQTT messages in
  • MQTT messages out
  • Memory usage (in MB)
  • Warnings
  • Errors

The metrics reported for each runtime (flow) is:

  • Uptime (in seconds) CPU (in %)
  • Bytes Received (excluded data received from Crosser Control Center)
  • Bytes Sent (excluded data sent to Crosser Control Center)
  • Messages received
  • Message sent
  • Memory usage (in MB)
  • Warnings
  • Errors

Log Level for Status messages

When reporting Node status to the Crosser Control Center the log level was previously Information. It has now been changed to Debug to avoid filling the log with information about Node status being sent.

Update to SSL Protocol TLS13

In previous versions of the Node TLS12 was used, as of 3.1.0 the SSL Protocol used will be TLS13.

Bug Fixes

Undeploy Flow fails if already manually deleted

If a flow was deployed and then manually removed from disk it could not be undeployed from the Crosser Control Center. The job to un-deploy would always fail with a message that the file was not found.

This bug was introduced in 3.0.0 and fixed in 3.1.0.

Modules could receive data over MQTT before the Flow was started

When using the MQTT Sub Broker module, modules could receive data before settings were loaded.

This could cause various issues depending on the type of module being connected to the MQTT Sub Broker module.

This could only happen when using the MQTT Sub Broker module and a quick fix for older nodes would be to use the MQTT Sub Client modules instead of the MQTT Sub Broker module.

This bug was introduced in 2.6.0 and fixed in 3.1.0.

Release Date | 2023-11-07

Crosser Node 3.0.1

Changes

Reverted JSON Serializer Settings

In 3.0.0 we changed to using JsonNamingPolicy = JsonNamingPolicy.CamelCase. This caused properties that should be kept in upper case to be changed, which then caused issues with (for example) inserting data into databases with case sensitive columns.

Add JSON Converters Back

In 3.0.0 we removed JSON Converters for DateTime, DateOnly and TimeOnly. The reason for removing them was to prevent strings looking like dates to be converted into dates although they should be kept as strings.

On the other hand this caused these data types (DateTime, DateOnly, TimeOnly) to be impossible to see in debug messages since serialization was not supported.

In 3.0.1 we can keep strings that look like dates as strings, but also be able to handle the data types in serialization.

 

Release Date | 2023-10-31

Crosser Node 3.0.0

Changes

Python upgraded

The docker images for the Node come with Python pre-installed. The version has now been updated to 3.11.

For Nodes that run on Windows, Python has​ to be manually installed.

Removed Date/Time string conversions

Previously we had JSON converters that would convert strings into DateTime, DateOnly and TimeOnly.

No conversion will be attempted for these types and they will remain as strings in the FlowMessage.

JSON Serializer

The default JsonNamingPolicy has been changed to CamelCase. Previously there was no JsonNamingPolicy.

PropertyNamingPolicy = JsonNamingPolicy.CamelCase,

DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,

Pings between status reports

The default setting for the number of pings between status reports was changed from 0 to 5.

You will not get the new default settings unless you delete the configuration files. The easiest way to get the default settings is to delete all *.json files in the data folder and restart the Node.

More information added to MQTT Notifications

All messages containing Flow information will now have these additional properties.

"flowDefinitionId": "62df9488-7ff3-403c-ac48-52c5eb61ae37",

"nodeId": "27929e60-a586-4f51-a512-0583391b0c86",

"nodeName": "Machine123",

 

Flow Status

Flow Status will contain the properties mentioned above, but will also have a list with reasons for the new status.

{

  "flowId": "2220e7a7-9e98-4af3-afd4-a1b309128540",

  "flowDefinitionId": "6faf4080-c7ce-e642-37a0-43e965904899",

  "flowName": "Example MQTT Notifications",

  "version": 9,

  "status": "Warning",

  "reason": "Flow status changed to Warning",

  "reasons": [

    {

      "moduleId": "9c3727c6-7d64-4cb3-95eb-a597596068b2",

      "moduleName": "OPC UA Reader",

      "moduleType": "Crosser.EdgeNode.Modules.OPC.UA.Reader",

      "version": "2.3.0",

      "status": "Warning",

      "reason": "Module OPC UA Reader, 2.3.0 changed to status Warning: This is a test",

      "timestamp": "2023-09-28T13:22:51.743+00:00"

    }

  ],

  "nodeId": "27929e60-a586-4f51-a512-0583391b0c86",

  "nodeName": "Machine123",

  "timestamp": "2023-09-28T13:22:51.743+00:00"

}

 

Module Messages

Module messages (status, message dropped and dead letter) will contain the properties mentioned above, but also have moduleType included.

{

  "moduleId": "9c3727c6-7d64-4cb3-95eb-a597596068b2",

  "moduleName": "OPC UA Reader",

  "moduleType": "Crosser.EdgeNode.Modules.OPC.UA.Reader",

  "version": "2.3.0",

  "status": "Warning",

  "flowId": "2220e7a7-9e98-4af3-afd4-a1b309128540",

  "flowDefinitionId": "6faf4080-c7ce-e642-37a0-43e965904899",

  "flowName": "Example MQTT Notifications",

  "reason": "Module OPC UA Reader, 2.3.0 changed to status Warning: This is a test",

  "queue": {

    "mode": "DropWrite",

    "size": 100,

    "retries": 3,

    "retryDelay": 500,

    "delay": 0,

    "persistence": true

  },

  "nodeId": "27929e60-a586-4f51-a512-0583391b0c86",

  "nodeName": "Machine123",

  "timestamp": "2023-09-28T13:22:51.690+00:00"

}

 

Increased logging of external connections to the Host

To make it easier to understand the lifetime of external connections to the host the logging was increased for HTTP and MQTT. Additional information was added about protocol and remote IP.

Examples for successful connections

HTTP

[HOST   ]: 2023-10-12 16:08:06.264 [Information] "HttpConnection" "127.0.0.1:49856", connection accepted: a44c1397-1255-4b51-bf11-75b668521706

[HOST   ]: 2023-10-12 16:08:06.268 [Information] "HttpConnection" "127.0.0.1:49856", connection closed: a44c1397-1255-4b51-bf11-75b668521706

MQTT

[HOST   ]: 2023-10-12 16:10:12.266 [Information] "MqttConnection" "127.0.0.1:55568", connection started: 584cdb0e-b00b-4893-bef2-b4fc25708c7d

[HOST   ]: 2023-10-12 16:10:12.290 [Information] "MqttConnection" "127.0.0.1:55568", connection accepted: 584cdb0e-b00b-4893-bef2-b4fc25708c7d

Examples with timeout errors

HTTP

[HOST   ]: 2023-10-12 16:09:17.730 [Error      ] "HttpConnection" "127.0.0.1:45838", connection error: 491ec7c8-6d72-4502-86a0-7d6e4f3d8236

System.OperationCanceledException: The operation was canceled.

   at System.Threading.CancellationToken.ThrowOperationCanceledException()

   at System.Threading.CancellationToken.ThrowIfCancellationRequested()

   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)

   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource<System.Int32>.GetResult(Int16 token)

   at System.IO.BufferedStream.ReadFromUnderlyingStreamAsync(Memory`1 buffer, CancellationToken cancellationToken, Int32 bytesAlreadySatisfied, Task semaphoreLockTask)

   at Crosser.EdgeNode.Core.Net.Tcp.TcpConnection.ReadAsync(Memory`1 buff) in /home/crosser/repositories/crosser/EdgeNode/src/Core/Crosser.EdgeNode.Core/Net/Tcp/TcpConnection.cs:line 301

[HOST   ]: 2023-10-12 16:09:17.731 [Information] "HttpConnection" "127.0.0.1:45838", connection closed: 491ec7c8-6d72-4502-86a0-7d6e4f3d8236

MQTT

[HOST   ]: 2023-10-12 16:10:43.102 [Information] "MqttConnection" "127.0.0.1:35574", connection started: c98bf944-afbf-40fd-a3d9-d80b3d467885

[HOST   ]: 2023-10-12 16:10:53.147 [Error      ] "MqttConnection" "127.0.0.1:35574", connection error: c98bf944-afbf-40fd-a3d9-d80b3d467885

System.OperationCanceledException: The operation was canceled.

   at System.Threading.CancellationToken.ThrowOperationCanceledException()

   at System.Threading.CancellationToken.ThrowIfCancellationRequested()

   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)

   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource<System.Int32>.GetResult(Int16 token)

   at System.IO.BufferedStream.ReadFromUnderlyingStreamAsync(Memory`1 buffer, CancellationToken cancellationToken, Int32 bytesAlreadySatisfied, Task semaphoreLockTask)

   at Crosser.EdgeNode.Core.Net.Mqtt.MqttConnection.ReadByteAsync() in /home/crosser/repositories/crosser/EdgeNode/src/Core/Crosser.EdgeNode.Core/Net/Mqtt/MqttConnection.cs:line 168

[HOST   ]: 2023-10-12 16:10:53.147 [Information] "MqttConnection" "127.0.0.1:35574", connection closed: c98bf944-afbf-40fd-a3d9-d80b3d467885

Bug Fixes

When retry runs out there is no warning

When having retries enabled without persistence enabled there was no warning triggered when the retry attempts ran out.

Disable module does not work unless having multiple connections

When having only one module connected to a disabled module the module would still send messages to the next module.

QueryString was not decoded when sending HTTP requests to flows over the Host

Since query-strings was not decoded values like test=hello%20world would become

{'test': 'hello%20world' }

 

The result will now be:

{ 'test': 'hello world' }

Modules stop processing data when filter properties are missing on the FlowMessage

This could happen when having persistence disabled and using filter properties that were not present on the incoming message.

Altering FlowMessages that already have a partial path would cause a null reference exception

If we have a FlowMessage {"id": 123} and then try to set id.test to foo we get a null reference exception.

The FlowMessage should respect the requested change and be altered to:

{'id': {'test': 'foo'}}

 

The 'Has' method would only verify the type on the first level

If we have a FlowMessage that looks like { 'value': 123 } and use Has<bool>("value"), for example in the C# module or the SDK, the result will be false. However, if we have { 'sensor': { 'value': 123 } } and use Has<bool>("value") the result would be true since a bug caused the method to only check that a property exist on lower level, but not that the type of T is a match.

Endpoints could behave as unresponsive

If more than 10 connections were made to the local endpoints but no data was sent the queue would be full and no more connections could be opened.

This behavior has now been changed and new connections will not block the connections queue. A timeout has also been added for clients connecting so that we do not get idle connections using the resources.

Flow with multiple Universal Connectors cannot be deployed

These flows will work in remote sessions, but will fail when deployed due to a comparison on versions that will be different in remote session vs deployments.

This bug was introduced in 2.6.2 and was fixed in 3.0.0.

 

Release Date | 2023-06-30

Crosser Node 2.6.1

Bugfixes

Modules Sending NULL values caused NullReference Exceptions

Some modules (such as Split) can sometimes send a null value to the next module(s). In 2.6.0 this would cause a NullReference Exception. This was resolved in 2.6.1.

 

Release Date | 2023-06-29

Crosser Node 2.6.0

Note: A critical bug was found in 2.6.0 and is now deprecated, use 2.6.1 instead.

New features

Retry on all modules

Each module now has settings for Retry (Common Settings). When the  Max Number Of Retries setting has a value larger than 0 the module will retry sending a message if an attempt fails. When the max limit is reached the message will be dropped and the output will have crosser.success set to false, unless persistence is enabled (see below).

With this feature the Memory Buffer module is no longer needed for standard use cases. It may still be useful if more advanced retry logic is needed.

Where To Use This

This feature is only useful on modules where another try makes sense when a module fails to process a message. For example modules that communicate with external systems can benefit from this, while it does not make sense to use this on most analytic modules.

Persistent Messages

Each module now has a setting for persistence. You will find this setting on the Common settings tab.

Note: The persistent REST API is not available for remote session flows, only deployed flows.

How It Works

Let's say that we have these settings:

  1. Persistent Messages Enabled = true
  2. Max Number Of Retries = 3
  3. Retry Delay In Milliseconds = 1000

This would mean that:

  • The module will make sure that the message is saved before trying to process

  • If the module fails to process the message (an exception occurs or crosser.success is false) it will try again, but maximum 3 tries will be made

  • There will be a delay of 1 second before each retry

What Happens On Success?

If/When the message is successfully processed the persisted message will be deleted from the database.

What Happens When We Run Out Of Retries?

If a module fails to process the message and all retries are used the message will still not be lost. When we reach this state the failing message will be moved to a DeadLetter storage and stay there until:

  • A: The TTL setting for DeadLetters timeout (default 24 hours) and it will be deleted.

  • B: Someone decides to Restore the DeadLetter. It will then be added back to the end of the queue and be processed once again.

The Node offers a new REST API for handling Persistent Messages and DeadLetters

The setting for TTL can be configured in appsettings.json:

  1. "persistenceSettings": { "deadLetterHoursToLive": 24 }

What If The Flow Stops?

If the flow stops no more messages will be added to the persistent storage until the flow starts again. However, all messages persisted before the flow stopped will remain in the storage and when the flow starts each module will load all its messages into the queue again.

Important!

  • Each flow has its own database. This database will be available between restarts of the flow and the node. However, when changing flow-version any data in the database will be lost.

  • Using persistence will have a huge impact on throughput.

MQTT Notifications

The Node will publish messages when things occur that someone might want to know. The root topic for all the messages will be $crosser/. So for example $crosser/flows/{flowDefinitionId}/started will be published when a flow starts.

The $crosser topic will be forbidden by clients to publish to, only subscriptions are allowed. If a client tries to publish with a topic that starts with $crosser/ the client will be disconnected.

Note that MQTT Notifications are disabled for remote sessions. Only deployed flows will trigger MQTT Notifications.

Flow Topics

Topic: $crosser/flows/{flowDefinitionId}/state [RETAINED]
When a flow changes state (started, stopped) this topic will be triggered with the information.

  1. {
  2.     'flowId': <guid>,
  3.     'flowName': 'Demo Flow',
  4.     'version': '3',
  5.     'running': true,
  6.     'status': 'Ok', // or error if it was an error
  7.     'reason': 'Flow xyz was stopped',
  8.     'origin': 'Cloud' // or local
  9.     'timestamp': '2022-02-22 18:34:23'
  10. }

 

Topic: $crosser/flows/{flowDefinitionId}/status [RETAINED]
When a flow change status to Ok, Warning or Error

  1. {
  2.     'flowId': <guid>,
  3.     'flowName': 'Demo Flow',
  4.     'version': '3',
  5.     'status': 'Ok', // or error/warning
  6.     'reason': 'Information about the reason for the status',
  7.     'origin': 'Local'
  8.     'timestamp': '2022-02-22 18:34:23'
  9. }

 

Module Topics

Topic: $crosser/modules/{moduleId}/status [RETAINED]
When a module changes status (Ok, Warning, Error)

  1. {
  2.     "moduleId":"133efbb7-cfc6-400c-bcff-8312f02d6596",
  3.     "moduleName":"CSharp",
  4.     "version":"2.2.2",
  5.     "status":"Error",
  6.     "flowId":"64ad5939-2f68-47ba-a0d5-8bc5d8dc5b27",
  7.     "flowDefinitionId":"1234939-2f68-47ba-a0d5-8bc5d8dc5b27",
  8.     "flowName":"MQTT Notifications",
  9.     "reason":"Module CSharp, 2.2.2, Index: 2 changed to status Error: One or more errors occurred. (Boom)",
  10.     "queue":{
  11.         "mode":"DropWrite",
  12.         "size":1000,
  13.         "persistence": true,
  14.         "retries":5,,
  15.         "retryDelay":1,
  16.         "delay": 0
  17.     },
  18.     "timestamp":"2022-03-04T16:13:16.960Z"
  19. }

 

Topic: $crosser/modules/{moduleId}/messages/dropped
When the module queue is full and the strategy is not wait.

  1. {
  2.     "moduleId":"133efbb7-cfc6-400c-bcff-8312f02d6596",
  3.     "moduleName":"CSharp",
  4.     "version":"2.2.2",
  5.     "status":"Warning",
  6.     "flowId":"64ad5939-2f68-47ba-a0d5-8bc5d8dc5b27",
  7.     "flowDefinitionId":"1234939-2f68-47ba-a0d5-8bc5d8dc5b27",
  8.     "flowName":"MQTT Notifications",
  9.     "reason":"Queue full",
  10.     "queue":{
  11.         "mode":"DropWrite",
  12.         "size":1000,
  13.         "persistence": true,
  14.         "retries":5,,
  15.         "retryDelay":1,
  16.         "delay": 0
  17.     },
  18.     "timestamp":"2022-03-04T16:13:16.960Z"
  19. }

 

Topic: $crosser/modules/{moduleId}/messages/deadletters
When persistence is on and a message has failed maximum number of times it will be moved to the deadletter queue. I do not see any need for event when a messages fails since we will have retry until success or deadletter

  1. {
  2.     "moduleId":"133efbb7-cfc6-400c-bcff-8312f02d6596",
  3.     "moduleName":"CSharp",
  4.     "version":"2.2.2",
  5.     "status":"Warning",
  6.     "flowId":"64ad5939-2f68-47ba-a0d5-8bc5d8dc5b27",
  7.     "flowDefinitionId":"1234939-2f68-47ba-a0d5-8bc5d8dc5b27",
  8.     "flowName":"MQTT Notifications",
  9.     "reason":"Retries maxed out",
  10.     "queue":{
  11.         "mode":"DropWrite",
  12.         "size":1000,
  13.         "persistence": true,
  14.         "retries":5,,
  15.         "retryDelay":1,
  16.         "delay": 0
  17.     },
  18.     "timestamp":"2022-03-04T16:13:16.960Z"
  19. }

Subscribing

  • By subscribing to $crosser/# you would get all messages

  • Subscribing to $crosser/flows/# would get you all flow messages

  • Subscribing to $crosser/modules/# would get you all module messages

Of course you can also use other combinations and use + as a single level wildcard

  • Subscribing to $crosser/flows/+/stopped would get you only stopped flow messages

  • Subscribing to $crosser/modules/+/status would get you module status messages for all modules

Get the current status for all deployed flows

When a MQTT client creates a subscription for the topic $crosser/flows/# or $crosser/flows/+/status the broker will send out the current status for all deployed flows.

Settings To Enable/Disable Endpoints For HTTP/MQTT/API

Up until now the Node will always start the endpoints for HTTP, MQTT and REST API. There might be a number of reasons why you do not want to start all (or any) of them.

All of the endpoints will be enabled by default, but you can now disable them in the appsettings.json file.

  1. "httpServersEnabled": true,
  2. "mqttBrokersEnabled": true,
  3. "apiServerEnabled": true
If you prefer to use ENVIRONMENT VARIABLES.

Example for HttpServers:

  1. NodeConfiguration__HttpServersEnabled: true

You can also use arguments if you need that:

Example for HttpServers:

  1. --NodeConfiguration:HttpServersEnabled, true

The priority order highest to lowest for configurations are:

  • Arguments

  • Environment Variables

  • Settings in json-files

When Disabling The HTTP Server

  • You will not be able to use HTTP to send data to Flows

  • You will not be able to use WebSockets to send data to Flows

When Disabling The MQTT Broker

  • You will not be able to use external MQTT clients to send data to Flows. You can still use MQTT Client modules to get data from external brokers.

  • You will not be able to use the Python Bridge module in Flows if the module version is less than 4.0.0

  • You will not be able to use the MQTT notifications feature

When Disabling The API Server

  • You will not be able to use the local UI (http://localhost:9191)

  • You will not be able to use the REST API for seeing Flows/Metrics/Logs etc

Handle Date & Time in Serialization

The Default JsonSerializer now supports the new C# types DateOnly and TimeOnly.

Changes

Halt On Error

If a flow process is stopped (crashes) with an error code and Halt On Error is set to false the Host will restart the flow.

Log Message For Modules

Previously we logged events with the name of the module in combination with a calculated index. This was confusing when you have complex flows with several branches. As of 2.6.0 we log events using the name of the module which can be changed by the user when building the flow.

MQTT Deprecated as RemoteSession Transport

In previous versions of the Node you could use MQTT as transport for Remote Sessions. This option has now been removed and instead the options are WebSockets (preferred) or HTTP.

Add Support For Rolling Files

Prior to 2.6.0 no more logs was written when the file size limit was reached (10MB). As of 2.6.0 the logger will role the file when the limit is reached.

Sample output

log20220119.log

log20220119_001.log

log20220119_002.log

log20220119_003.log

Proxy Configuration Changes

In previous versions of the Node you could set username and password for proxies as a separate setting. This is now changed and the username and password will be set directly on the ENVIRONMENT variable:

  1. // Non-authenticated HTTP server:
  2. HTTP_PROXY=http://10.10.1.10:1180
  3. // Authenticated HTTP server:
  4. HTTP_PROXY=http://username:password@10.10.1.10:1180
  5. // Non-authenticated HTTPS server:
  6. HTTPS_PROXY=http://10.10.1.10:1180
  7. // Authenticated HTTPS server:
  8. HTTPS_PROXY=http://username:password@10.10.1.10:1180

DateTime Serialization

Previously always to UTC, now always local time with information about timezone in the format yyyy-MM-ddTHH:mm:ss.fffzzz.

Bugfixes

Metric For MQTT Connections

When having a very instable network the MQTT connections metric would show a negative number of connections. This was due to the fact that the incrementation of connections was done after reading the MQTT connect message. In cases where the connect message was never received only decrementation was done and this caused negative connection metrics.

The incrementation of MQTT connections is now done before the MQTT connect message is complete.

Timeout When Starting Many Flows At Once

In previous versions of the Node the flow processes were all started at the same time. This could cause timeouts if the machine does not have sufficient performance to be able to handle the load.

As of 2.6.0 the flows will be started in sequence to make sure that machines with low performance and many flows deployed still can handle a safe startup.

Windows Service Log-Size To Small

As of 2.5.2 the maximum log-file-size was increased to 10MB, the Windows Service did not get this change and still had 1MB in 2.5.2. This is now changed so that the Windows Service also has a limit at 10MB.

Increased Timeout For C# Module

The default initialize timeout for modules is 30 seconds. The C# module might require more time to compile the code on machines with poor performance, therefor the initialize timeout for the C# module was increased to 2 minutes as of 2.6.0.

Copying FlowMessages With byte[] Was Slow

When a Flow message had large byte arrays as properties, cloning the Flow message was unnecessary slow & also allocated memory in an insufficient way. This is now fixed.

WebSocket Did Not Work Behind Proxies

In previous Nodes the Remote Session could not use WebSockets as transport behind a HTTP proxy. This has now been fixed. There are still HTTP proxies that does not allow WebSocket traffic, but chances are that you now can use the standard transport for Remote Sessions

HTTP Request Timeout Missing

If a HTTP client start sending data to the Node and not send all the data the Node would wait infinite for the data to be received. As of 2.6.0 the Node will terminate the HTTP connection if no data is received in 30 seconds.

Numeric Overflow When Reporting Metrics

An invalid cast to Int32 was used preventing metrics to have numbers over 2147483647. This could cause negative values for network traffic and number of messages in Crosser Cloud.

 

Release Date | 2022-11-20

Crosser Node 2.5.6

Changes

FlowMessage Improvements

In complex flows where the flow splits into several paths the FlowMessage needs to be cloned. When having large and complex structures in the FlowMessage this was a bottleneck. The internal handling of cloning was highly improved in 2.5.6

Queue Improvements

Each module has it's own queue for messages waiting to be processed. The default size for this queue was previously unbounded. This could cause high memory usage if the flow received more messages than it could handle for a long period of time.

To avoid this and instead use back pressure the default queue size will now be 100 to avoid high memory usage and high volumes of messages in queue.

The queue settings can still be changed, but the default behavior was changed in 2.5.6.