Version 3.3.0 of Eclipse Ditto, released on 23.06.2023
Edit this page

Eclipse Ditto version 3.3.0 is here, continuing on adding features while keeping APIs backwards compatible.

This release is completely IP (intellectual property) checked by the Eclipse Foundation meaning that project code as well as all used dependencies were “[…] reviewed to ensure that the copyrights expressed are correct, licensing is valid and compatible, and that other issues have been uncovered and properly investigated.”

Changelog

Eclipse Ditto 3.3.0 focuses on the following areas:

  • Support replacing certain json objects in a merge/PATCH command instead of merging their fields
  • Implicitly convert a merge/PATCH command to a “Create Thing” if thing is not yet existing
  • Provide option to skip a modification in the “twin” if the value “is equal” to the previous value
  • Addition of the DevOps API endpoints to Ditto’s OpenAPI definition
  • Improve DittoProtocol MessagePath to be aware of message subject
  • Support alternative way of specifying “list” query parameters
  • UI enhancements:
    • Enhance Ditto-UI to dynamically configure log levels of Ditto
    • Building and packaging the UI with esbuild

The following non-functional work is also included:

  • Provide official Eclipse Ditto Helm chart via Docker Hub and move its sources to Ditto Git repository
    • In addition, provide a lot more configuration options and hardening of the chart to make it more feasible for productive use

The following notable fixes are included:

  • Fix that redeliveries for acknowledgeable connectivity messages were issued too often
  • Fix WoT dispatcher starvation by adding timeouts to fetch models

New features

Support replacing certain json objects in a merge/PATCH command instead of merging their fields

Previously, when updating a thing using merge commands, any encountered json object is merged with the fields of the provided json object.
The old values are not deleted, which often is needed and expected.

In this enhancement an option is provided to define that for a certain json object the existing content should be completely replaced with the new object.

More details can be found in the added documentation about “Removing fields in a merge update with a regex”.

Implicitly convert a merge/PATCH command to a “Create Thing” if thing is not yet existing

This new feature creates a thing implicitly if it did not yet exist when using a merge/PATCH command trying to modify it partially.

Provide option to skip a modification in the “twin” if the value “is equal” to the previous value

The default behaviour until now in Ditto is for each “ModifyCommand” to apply the modification and also the twin in the MongoDB.

Using a new header if-equal: skip, a modification of a “thing” will only be performed when its value would be changed as a result of that modification.
The default behavior (if not specified as skip) is: if-equal: update - which will update the thing for each modification, even if the value did not change.

Using this feature, it e.g. is possible to reduce database I/O operations and also prevent events from being published when in fact nothing in the twin was changed.

This is documented in the HTTP API concepts - Conditional Headers, but is also usable via Ditto Protocol headers.

Addition of the DevOps API endpoints to Ditto’s OpenAPI definition

Ditto’s OpenAPI definition now also includes the HTTP endpoints for the DevOps commands.

This was a contribution from Luca Neotti - many thanks for that.

Improve DittoProtocol MessagePath to be aware of message subject

This was a small addition to the Java API of MessagePath in the ditto-protocol module which lets the user of the SDK access more easily the subject of a Ditto “Message”.

Support alternative way of specifying “list” query parameters

Supports an alternative syntax of specifying a list of a certain HTTP query parameter in the form:

GET /thing/my:thing-123?fields=thingId&fields=policyId&fields=attributes

Enhancements in Ditto explorer UI

We again received contributions by Thomas Fries, who contributed the Ditto explorer UI.
The latest live version of the UI can be found here:
https://eclipse-ditto.github.io/ditto/

You can use it in order to e.g. connect to your Ditto installation to manage things, policies and even connections and DevOps related commands.

Contributions in this release:

Changes

Provide official Eclipse Ditto Helm chart via Docker Hub and move its sources to Ditto Git repository

The official Ditto Helm chart was migrated from being maintained at the Eclipse IoT Packages project to being maintained as part of the Ditto Git repository.
The old Helm chart was deprecated, the new chart is now hosted via Docker Hub.

The official chart was also enhanced a lot:

  • with a lot more configuration options in order to be the basis for a productive Helm chart
  • also added quite advanced Ingress configuration

Bugfixes

Fix that redeliveries for acknowledgeable connectivity messages were issued too often

Messages processed via a Ditto connection which required QoS 1 (“at least once”) were ask for being redelivered too often and too early.
The existing logic which took the status code in account in order to ask for a redelivery was never executed.
As a result, e.g. a command resulting in status code 400 (bad request) would have been redelivered over and over again without the chance of ever being successful.

This was fixed.

Fix WoT dispatcher starvation by adding timeouts to fetch models

When fetching WoT TMs there was no timeout defined and potentially a thread could be blocked forever.

This was fixed.

Enhancements in Ditto Clients

None in this release.

Changes

None in this release

Bugfixes

None in this release

Migration notes

There are no migration steps required when updating from Ditto 3.2.x to Ditto 3.3.0.
When updating from Ditto 2.x version to 3.3.0, the migration notes of Ditto 3.0.0 and Ditto 3.1.0 and Ditto 3.2.0 apply.

Roadmap

Looking forward, the (current) ideas for Ditto 3.4.0 are:

  • Enforcing linked WoT ThingModels in Things/Features by validating JsonSchema of model elements
    • Ensuring that a Ditto Thing is ensured to always follow its WoT ThingModel and also message payloads are always provided in the specified format
  • Search in history of a thing using an RQL filter
  • Perform a benchmark of Ditto and provide a “tuning” chapter in the documentation as a reference to the commonly asked questions
    • how many Things Ditto can manage
    • how many updates/second can be done
    • whether Ditto can scale horizontally
    • how many resources (e.g. machines) are required at which scale