Odesa
Release Date: 14 March 2025
Code Freeze: 12 Feb 2025
Namer: Farshid Tavakolizadeh and Mengyi Wang (both Canonical)
The Odesa release is EdgeX version 4.0 (the 14th overall release and the latest major version jump of the project). However at a user code and API level it will be compatible with V3 services and applications so migration and adoption will be straightforward. It was the largely transparent back-end changes like switching databases and the secret store implementation that triggered an increment in the major version for us. EdgeX 4.0 also becomes our latest Long Term Support (LTS) release with coverage that will run until March 2027.
Release Theme:
Proven Maturity, Continuously Open and Ready for Deployment
Odesa brings critical advancements, including PostgreSQL support and a time-based scheduler, ensuring trusted and efficient EdgeX deployments for industrial applications
Odesa proactively addresses the recent shift of some third-party components to business-source licenses by adopting Linux Foundation-compliant alternatives
Major Items and New Features
PostgreSQL as the default EdgeX database
Needed for the industrial-grade storage, integrity, performance, backup and restore capabilities that many of our industrial users requested
See new documentation here: https://docs.edgexfoundry.org/4.0/microservices/general/database/Ch-Postgres/
Redis licensing has also changed to a BSL so PostgreSQL becomes the default DB in EdgeX that can support all of our edge persistence needs
A Redis container is no longer delivered with EdgeX, but code remains if users wish to continue utilizing Redis or its Linux Foundation forked named Valkey
New Time-Based Support Scheduler service
Replacement of the originally limited EdgeX reference service with a full time-based generic scheduling solution supporting durations, set times, days, intervals
Utilizes Go-Cron as the basis for timed control
See new documentation here: https://docs.edgexfoundry.org/4.0/microservices/support/scheduler/Purpose/
Core-Keeper replaces Consul as the EdgeX configuration and registry service
Consul is completely removed from EdgeX and the App and Device Service SDKs
OpenBao replaces Vault as the EdgeX secret store
OpenBao is a Linux Foundation fork of Vault with an open source license more compatible with EdgeX
Vault is completely removed from EdgeX and the App and Device Service SDKs
MQTT replaces Redis PubSub as the EdgeX message bus
MQTT is the prevalent open source message bus with many implementations if needed
Redis PubSub is completely removed from EdgeX
New Python App Services SDK
A Python-based SDK for building custom application services in EdgeX Foundry
Supports similar capabilities as existing Go-Lang App Functions SDK
Additional Features/updates/project improvements or changes
Zero-Trust / Secure Distributed EdgeX (implemented with OpenZiti Integration)
Device discovery feedback added to the Device Services SDK
Support for running in Docker rootless mode
Support for multi-arch manifests on the EdgeX Docker repositories. Multi-arch containers allow one container to support multiple architectures/layers by hosting multiple architecture-specific manifests. The benefit is that it simplifies tag management, image management and related efforts for our downstream users
Continued redesign of the EdgeX documentation redesign including updating all device service docs to the new consistent formatting
Known Bugs
Event with duplicate ID can still be ingested by core-data POST API: https://github.com/edgexfoundry/edgex-go/issues/5109
This occurs only when using PostgreSQL and will not be fixed due to following justification:
To consider the potential scalability to use timescale extension on PostgreSQL, we don't plan to add any PK constraint on the core_data.event table to achieve better performance
It's a rare corner case to submit events with duplicate id, as events are generated by device services with unique id in most cases.
Insecure secrets callback does work for removed secrets: https://github.com/edgexfoundry/go-mod-bootstrap/issues/534. This applies to any map in Writable section (ASC pipeline functions, etc). The workaround is to restart service after removing entry.
The Device SDK C and C Device Services don't support new URI for files features:
Changelogs
Core, Supporting and Security Services Changelog
Go Device Service SDK Changelog
C Device Service SDK Changelog
Go App Functions SDK Changelog
Python App Functions SDK Changelog
App Service Configurable Changelog
Device Services: