Skip to content

Commit e4311f8

Browse files
authored
Merge pull request #2131 from beyonnex-io/ditto-370
provide Ditto 3.7.0 release notes, blogpost and preparation in general
2 parents ea76709 + cf80292 commit e4311f8

File tree

5 files changed

+317
-41
lines changed

5 files changed

+317
-41
lines changed

SECURITY.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ These versions of Eclipse Ditto are currently being supported with security upda
99

1010
| Version | Supported |
1111
|---------| ------------------ |
12+
| 3.7.x | :white_check_mark: |
1213
| 3.6.x | :white_check_mark: |
13-
| 3.5.x | :white_check_mark: |
14-
| < 3.5.0 | :x: |
14+
| < 3.6.0 | :x: |
1515

1616
## Reporting a Vulnerability
1717

documentation/src/main/resources/_config.yml

+2
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ plugins:
114114
docVersions:
115115
- label: "development"
116116
basePath: ""
117+
- label: "3.7"
118+
basePath: "3.7"
117119
- label: "3.6"
118120
basePath: "3.6"
119121
- label: "3.5"

documentation/src/main/resources/_data/sidebars/ditto_sidebar.yml

+42-39
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ entries:
2323
- title: Release Notes
2424
output: web
2525
folderitems:
26+
- title: 3.7.0
27+
url: /release_notes_370.html
28+
output: web
2629
- title: 3.6.11
2730
url: /release_notes_3611.html
2831
output: web
@@ -56,50 +59,50 @@ entries:
5659
- title: 3.6.0
5760
url: /release_notes_360.html
5861
output: web
59-
- title: 3.5.12
60-
url: /release_notes_3512.html
61-
output: web
62-
- title: 3.5.11
63-
url: /release_notes_3511.html
64-
output: web
65-
- title: 3.5.10
66-
url: /release_notes_3510.html
67-
output: web
68-
- title: 3.5.9
69-
url: /release_notes_359.html
70-
output: web
71-
- title: 3.5.8
72-
url: /release_notes_358.html
73-
output: web
74-
- title: 3.5.7
75-
url: /release_notes_357.html
76-
output: web
77-
- title: 3.5.6
78-
url: /release_notes_356.html
79-
output: web
80-
- title: 3.5.5
81-
url: /release_notes_355.html
82-
output: web
83-
- title: 3.5.4
84-
url: /release_notes_354.html
85-
output: web
86-
- title: 3.5.3
87-
url: /release_notes_353.html
88-
output: web
89-
- title: 3.5.2
90-
url: /release_notes_352.html
91-
output: web
92-
- title: 3.5.1
93-
url: /release_notes_351.html
94-
output: web
95-
- title: 3.5.0
96-
url: /release_notes_350.html
97-
output: web
9862

9963
subfolders:
10064
- title: Archive
10165
output: web
10266
subfolderitems:
67+
- title: 3.5.12
68+
url: /release_notes_3512.html
69+
output: web
70+
- title: 3.5.11
71+
url: /release_notes_3511.html
72+
output: web
73+
- title: 3.5.10
74+
url: /release_notes_3510.html
75+
output: web
76+
- title: 3.5.9
77+
url: /release_notes_359.html
78+
output: web
79+
- title: 3.5.8
80+
url: /release_notes_358.html
81+
output: web
82+
- title: 3.5.7
83+
url: /release_notes_357.html
84+
output: web
85+
- title: 3.5.6
86+
url: /release_notes_356.html
87+
output: web
88+
- title: 3.5.5
89+
url: /release_notes_355.html
90+
output: web
91+
- title: 3.5.4
92+
url: /release_notes_354.html
93+
output: web
94+
- title: 3.5.3
95+
url: /release_notes_353.html
96+
output: web
97+
- title: 3.5.2
98+
url: /release_notes_352.html
99+
output: web
100+
- title: 3.5.1
101+
url: /release_notes_351.html
102+
output: web
103+
- title: 3.5.0
104+
url: /release_notes_350.html
105+
output: web
103106
- title: 3.4.5
104107
url: /release_notes_345.html
105108
output: web
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
---
2+
title: "Announcing Eclipse Ditto Release 3.7.0"
3+
published: true
4+
permalink: 2025-02-26-release-announcement-370.html
5+
layout: post
6+
author: thomas_jaeckle
7+
tags: [blog]
8+
hide_sidebar: true
9+
sidebar: false
10+
toc: false
11+
---
12+
13+
Eclipse Ditto team is excited to announce the availability of a new minor release, including new features:
14+
Ditto [3.7.0](https://projects.eclipse.org/projects/iot.ditto/releases/3.7.0).
15+
16+
The focus of this release was to ease the migration of Things "definitions" (following WoT Things Models) and to provide
17+
a new Policy decision API to check permissions for a logged-in user.
18+
On the operating side, it is now possible to configure extra fields to be proactively added to Things in order to optimize
19+
cluster roundtrips and to throttle the amount of updates to the search index after a re-used policy was updated.
20+
21+
## Adoption
22+
23+
Companies are willing to show their adoption of Eclipse Ditto publicly:
24+
[https://iot.eclipse.org/adopters/?#iot.ditto](https://iot.eclipse.org/adopters/?#iot.ditto)
25+
26+
When you use Eclipse Ditto it would be great to support the project by putting your logo there.
27+
28+
29+
## Changelog
30+
31+
The main improvements and additions of Ditto 3.7.0 are:
32+
33+
* Introduce new **Policy decision API** to check with a single request what a logged-in user is allowed to do with a specific resource
34+
* Include current **entity revision** of a resource (thing and policy) in the response of requests (commands) and in all emitted events
35+
* Support updating referenced WoT ThingModel based **thing definition** for a Thing by defining a migration payload and when to apply it
36+
37+
The following non-functional work is also included:
38+
39+
* Add option to **configure pre-defined extra fields** (enrichments) to be proactively added internally in Ditto in order to save cluster roundtrips
40+
* Include **throttling configuration option** for updating the search index as a result of a policy update targeting many things
41+
* Add namespace to Ditto Helm chart managed Kubernetes resources
42+
43+
The following notable fixes are included:
44+
45+
* Fix flattening of JSON objects in arrays when an exists() RQL condition was used e.g. as a Ditto evaluated condition
46+
47+
Please have a look at the [3.7.0 release notes](release_notes_370.html) for a more detailed information on the release.
48+
49+
50+
## Artifacts
51+
52+
The new Java artifacts have been published at the [Eclipse Maven repository](https://repo.eclipse.org/content/repositories/ditto/)
53+
as well as [Maven central](https://repo1.maven.org/maven2/org/eclipse/ditto/).
54+
55+
The Ditto JavaScript client release was published on [npmjs.com](https://www.npmjs.com/~eclipse_ditto):
56+
* [@eclipse-ditto/ditto-javascript-client-dom](https://www.npmjs.com/package/@eclipse-ditto/ditto-javascript-client-dom)
57+
* [@eclipse-ditto/ditto-javascript-client-node](https://www.npmjs.com/package/@eclipse-ditto/ditto-javascript-client-node)
58+
59+
60+
The Docker images have been pushed to Docker Hub:
61+
* [eclipse/ditto-policies](https://hub.docker.com/r/eclipse/ditto-policies/)
62+
* [eclipse/ditto-things](https://hub.docker.com/r/eclipse/ditto-things/)
63+
* [eclipse/ditto-things-search](https://hub.docker.com/r/eclipse/ditto-things-search/)
64+
* [eclipse/ditto-gateway](https://hub.docker.com/r/eclipse/ditto-gateway/)
65+
* [eclipse/ditto-connectivity](https://hub.docker.com/r/eclipse/ditto-connectivity/)
66+
67+
The Ditto Helm chart has been published to Docker Hub:
68+
* [eclipse/ditto](https://hub.docker.com/r/eclipse/ditto/)
69+
70+
<br/>
71+
<br/>
72+
{% include image.html file="ditto.svg" alt="Ditto" max-width=500 %}
73+
--<br/>
74+
The Eclipse Ditto team
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
---
2+
title: Release notes 3.7.0
3+
tags: [release_notes]
4+
published: true
5+
keywords: release notes, announcements, changelog
6+
summary: "Version 3.7.0 of Eclipse Ditto, released on 26.02.2025"
7+
permalink: release_notes_370.html
8+
---
9+
10+
The Ditto team is once again happy to announce a new minor release of Eclipse Ditto, namely version 3.7.0
11+
12+
This release is completely [IP (intellectual property) checked by the Eclipse Foundation](https://www.eclipse.org/projects/handbook/#ip)
13+
meaning that project code as well as all used dependencies were "[...] reviewed to ensure that the copyrights
14+
expressed are correct, licensing is valid and compatible, and that other issues have been uncovered and properly
15+
investigated."
16+
17+
18+
## Changelog
19+
20+
Eclipse Ditto 3.7.0 focuses on the following areas:
21+
22+
* Introduce new **Policy decision API** to check with a single request what a logged-in user is allowed to do with a specific resource
23+
* Include current **entity revision** of a resource (thing and policy) in the response of requests (commands) and in all emitted events
24+
* Support updating referenced WoT ThingModel based **thing definition** for a Thing by defining a migration payload and when to apply it
25+
26+
The following non-functional work is also included:
27+
28+
* Add option to **configure pre-defined extra fields** (enrichments) to be proactively added internally in Ditto in order to save cluster roundtrips
29+
* Include **throttling configuration option** for updating the search index as a result of a policy update targeting many things
30+
* Add namespace to Ditto Helm chart managed Kubernetes resources
31+
32+
The following notable fixes are included:
33+
34+
* Fix flattening of JSON objects in arrays when an exists() RQL condition was used e.g. as a Ditto evaluated condition
35+
36+
### New features
37+
38+
#### Introduce new Policy decision API to check with a single request what a logged-in user is allowed to do with a specific resource
39+
40+
Ditto [Policies](basic-policy.html) are used to manage access control (authorization) to Policies themselves and to
41+
[Things](basic-thing.html).
42+
Ditto checks on each API interaction if the logged in "subject" (e.g. a user) is allowed to perform the requested action
43+
(e.g. `READ` a Thing or `WRITE` a Policy or parts of both).
44+
45+
For UIs it can be very beneficial to know in advance the permissions of the user in order to e.g. hide/show or enable/disable
46+
certain parts of the frontend dynamically.
47+
48+
Issue [#1137](https://github.com/eclipse-ditto/ditto/issues/1137) described the need and the idea for that.
49+
Ditto 3.7.0 addresses this via PR [#2047](https://github.com/eclipse-ditto/ditto/pull/2047) and a new HTTP endpoint
50+
```
51+
POST /api/2/checkPermissions
52+
```
53+
54+
As this endpoint does not need to be aware of the `policyId` which is used to check permissions, it was added as top-level
55+
endpoint to Ditto's API, next to `/api/2/policies` and `/api/2/things`.
56+
57+
A frontend can compose a request body with a list of resources to check permissions for and the action to check for.
58+
For example, it can check in a single request if:
59+
* the user is allowed to `READ` a specific Policy `org.eclipse.ditto:example-policy`
60+
* the user is allowed to `READ` a specific Thing `org.eclipse.ditto:example-thing`
61+
* the user is allowed to `WRITE` the `attributes` of a specific Thing `org.eclipse.ditto:example-thing`
62+
* the user is allowed to `READ` the `firmware` feature of a specific Thing `org.eclipse.ditto:example-thing`
63+
* the user is allowed to send a `reboot` message (`WRITE`) to the `admin` feature of a specific Thing `org.eclipse.ditto:example-thing`
64+
65+
Such a request body would look like:
66+
```json
67+
{
68+
"my_access_control_reader": {
69+
"resource": "policy:/",
70+
"entityId": "org.eclipse.ditto:example-policy",
71+
"hasPermissions": ["READ"]
72+
},
73+
"a_full_thing_reader": {
74+
"resource": "thing:/",
75+
"entityId": "org.eclipse.ditto:example-thing",
76+
"hasPermissions": ["READ"]
77+
},
78+
"one_allowed_to_write_attributes": {
79+
"resource": "thing:/attributes",
80+
"entityId": "org.eclipse.ditto:example-thing",
81+
"hasPermissions": ["WRITE"]
82+
},
83+
"firmware_reader": {
84+
"resource": "thing:/features/firmware",
85+
"entityId": "org.eclipse.ditto:example-thing",
86+
"hasPermissions": ["READ"]
87+
},
88+
"admin_allowed_to_reboot": {
89+
"resource": "message:/features/admin/inbox/messages/reboot",
90+
"entityId": "org.eclipse.ditto:example-thing",
91+
"hasPermissions": ["WRITE"]
92+
}
93+
}
94+
```
95+
96+
The "labels" in the request body are arbitrary and can be chosen by the frontend developer to provide semantics (e.g. role descriptions)
97+
which are maintained in the response to evaluate.
98+
A response according to the provided example payload would e.g. look like:
99+
```json
100+
{
101+
"my_access_control_reader": false,
102+
"a_full_thing_reader": true,
103+
"one_allowed_to_write_attributes": true,
104+
"firmware_reader": true,
105+
"admin_allowed_to_reboot": false
106+
}
107+
```
108+
109+
With a single request, many "roles" can be checked at once, even for several entities (e.g. also several things).
110+
Read the full documentation of the new endpoint in the [added documentation](basic-auth-checkpermissions.html) and in the
111+
[HTTP API docs](http-api-doc.html#/Policies/post_api_2_checkPermissions).
112+
113+
114+
#### Include current entity revision in response of requests and emitted events
115+
116+
Issue [#2055](https://github.com/eclipse-ditto/ditto/issues/2055) suggested to provide the current `revision` of Ditto
117+
managed entities (Things, Policies and Connections) to be included as header to API calls (e.g. in responses).
118+
This was implemented for Ditto 3.7.0 in PR [#2121](https://github.com/eclipse-ditto/ditto/pull/2121) which adds a header
119+
`entity-revision` for all API responses, but also all events emitted from Ditto.
120+
121+
This way, a client can always know the current revision of an entity and can e.g. decide if it needs to update its local
122+
representation of the entity or if it can skip the update.
123+
124+
#### Support updating referenced WoT ThingModel based thing definition for a Thing by defining a migration payload and when to apply it
125+
126+
Ditto 3.6.0 put the focus on adding WoT Thing Model based validation of modifications to things and action/event payloads.
127+
With that [validation being enabled](basic-wot-integration.html#configuration-of-thing-model-based-validation), Ditto will
128+
e.g. reject API calls which would modify the state of a Thing in a way which is not allowed by the defined Thing Model.
129+
130+
131+
### Changes
132+
133+
#### Add option to configure pre-defined extra fields (enrichments) to be proactively added internally in Ditto in order to save cluster roundtrips
134+
135+
Issue [#2072](https://github.com/eclipse-ditto/ditto/issues/2072) suggested to provide a configuration in Ditto which
136+
allows to configure certain [extra fields](basic-enrichment.html) to be sent always for things matching a configured namespace and/or RQL `condition`.
137+
138+
This is beneficial in order to reduce Ditto cluster-internal roundtrips to fetch `extraFields` which are requested always (or very often).
139+
If for example a configured [Connection target configured enrichment](basic-connections.html#target-topics-and-enrichment) of
140+
emitted thing events to always contain all `attributes` or always contain the thing's `definition`, this would cause for each
141+
event a roundtrip (from connectivity to things service) to fetch those fields which were not included in the event.
142+
143+
Those roundtrips can now be avoided for "well known" patterns of which fields are always/often needed. Other fields can still
144+
be retrieved on-demand via the `extraFields` mechanism, but if all requested `extraFields` are already included in an event,
145+
Ditto can save the roundtrip which improves:
146+
* reliability (no network issues, no issues because of restarts of Ditto)
147+
* throughput
148+
* network costs
149+
150+
PR [#2076](https://github.com/eclipse-ditto/ditto/pull/2076) provides this configuration option - how to configure it was
151+
added to the [Pre-defined extra fields configuration](installation-operating.html#pre-defined-extra-fields-configuration).
152+
153+
#### Include throttling configuration option for updating the search index as a result of a policy update targeting many things
154+
155+
In issue [#2122](https://github.com/eclipse-ditto/ditto/issues/2122) it was encountered and described that when updating
156+
a single Policy which is used for many things (like thousands of them), e.g. directly or via a [Policy import](basic-policy.html#policy-imports),
157+
the load of the resulting updates to the Ditto search index can be very high and can cause crashing Ditto containers if
158+
they are not scaled properly enough.
159+
160+
To avoid such issues, a throttling mechanism was added in PR [#2125](https://github.com/eclipse-ditto/ditto/pull/2125) and
161+
throttling configuration was e.g. exposed via the Helm chart values as
162+
`thingsSearch.config.mongodb.policyModificationCausedSearchIndexUpdateThrottling`:
163+
```yaml
164+
# PolicyModificationCausedSearchIndexUpdateThrottling contains throttling configuration for the search Index update after a policy update
165+
policyModificationCausedSearchIndexUpdateThrottling:
166+
# enabled defines whether throttling should be applied for search Index update after a policy update.
167+
enabled: false
168+
# The time window within which the throttling limit applies.
169+
interval: 1s
170+
# The maximum number of updates allowed within each throttling interval.
171+
limit: 100
172+
```
173+
174+
175+
### Bugfixes
176+
177+
#### Fix flattening of JSON objects in arrays when an exists() RQL condition was used e.g. as a Ditto evaluated condition
178+
179+
PR [#2123](https://github.com/eclipse-ditto/ditto/pull/2123) fixed an issue where a Ditto evaluated predicate using `exists()`
180+
did not work on JSON structures which contained Json arrays nested in objects, nested in arrays again.
181+
This did not affect the Ditto search, but e.g. `condition` evaluation in a [Connection](basic-connections.html).
182+
183+
184+
### Helm Chart
185+
186+
The Helm chart was enhanced with the configuration options of the added features of this release, no other improvements
187+
or additions were done.
188+
189+
#### Add namespace to Ditto Helm chart managed Kubernetes resources
190+
191+
PR [#2130](https://github.com/eclipse-ditto/ditto/pull/2130) adds `namespace` configuration to all Kubernetes resources
192+
managed by the Ditto Helm chart, previously they were missing from the chart.
193+
194+
195+
## Migration notes
196+
197+
No migration steps are required for this release.

0 commit comments

Comments
 (0)