Release Date: June 30th, 2021

Namer: Lenny Goodell and MIke Johanson (Intel)

The Ireland Release is the 2nd major release and 8th overall community release of EdgeX Foundry.  Note:  Ireland is not backward compatible with any previous releases of EdgeX (versions 1.x)!

This slide deck contains information about the changes and new features of the Ireland release.

Release Major Themes

  • V2 APIs - all new REST endpoints using improved model objects (for request and responses) and improved API URIs,
  • Use of message bus between Device Services and Application Services (Core Data can also subscribe to the sensor readings or be removed if persistence is not necessary)
  • Improved security to include enabling the Consul API through the API Gateway, providing a common means for all services to retrieve secrets from the secret store, and a means for Consul to bootstrap with its ACL system enabled which provides for better protection of the key/value configuration.
  • Simplified Device Profiles
  • Addition of new Device Services (LLRP, GPIO, CoAP, and UART)
  • New Graphical User Interface
  • Removal of a lot of technical debt accumulated over four years (example: port assignments that align with IANA defined dynamic/private port range definition)

Known Bugs

Service by Service Significant Feature List

General

  • Upgraded to Go 1.16, Redis to 6.2.4, Consul to 1.9.5, Kong to 2.4.1, Vault to 1.7.2
  • All services had their APIs updated to the new V2 API formats and object models
  • Port assignments were changed for all services to align them with IANA dynamic/private port ranges) in order to avoid conflicts with standard system and service ports
  • Archive/removal of unused services & code (Logging service, MongoDB, Drools Rules Engine)

Core / Supporting Services

  • Core Data is made optional (as an optional subscriber) when using the message bus to send events/readings to application services.
  • Device Profiles were greatly simplified
  • A new graphical user interface (using Angular.js) was added (offering a new Device wizard, data visualization, service status monitoring and more)

Device Services

  • Device Services send event/readings to Application Services via message bus (default) - allowing for better QoS and removing the need for Core Data when persistence is not needed
  • Contribution of new GPIO, CoAP, LLRP and UART Device Services.  These will be upgraded to v2.0 over the summer of 2021.
  • New structured custom configuration capability

Security

  • Secrets provider for all – providing a common means for all services to retrieve secrets from the secret store (ex: Vault)
  • Enable Consul API through API Gateway
  • Secured Consul: Consul is now bootstrapped and started with its ACL system enabled (better authentication/authorization)

Application Services

  • LLRP Inventory App Service (in Go)
  • New structured custom configuration capability
  • New filter functions for ProfileName and SourceName
  • Encryption function use of Secret Provider for encryption key
  • New template for quick start of new custom app service
  • New custom trigger capability for custom app services
  • Multiple message bus subscriptions which enables multiple filter by subscriptions
  • New Context Storage capability (Key Value store on the App Function Context)
  • Export to multiple HTTP endpoints via function chaining
  • URL/PublishTopic placeholder capability (using key/values from Context Storage to replace placeholders in export URL or PublishTopic)
  • Cleaned Up Configuration to include trigger configuration structured better and configurable pipeline that is more concise and consolidated

DevOps

  • Cleaned up Docker image naming/descriptions/archive tagging
  • Cleaned/improved Docker Compose creation and organization
  • Community notifications on build failures
  • Repository Badging – improve adopter comfort
  • Developer Documentation

Test/QA

  • Integration testing (from DS to rules engine checks)
  • Performance testing

Changelogs

Core, Supporting, System Management, and Security Services Changelog

Go Device Service SDK Changelog

C Device Service SDK Changelog - coming soon

App Functions SDK Changelog

App Service Configuragle Changelog

BACnet Device Service Changelog - coming soon

Camera Device Service Changelog

CoAP Device Service Changelog

Grove Device Service Changelog - coming soon

Modbus Device Service Changelog

MQTT Device Service Changelog

Random Device Service Changelog

REST Device Service Changelog

SNMP Device Service Changelog

Virtual Device Service Changelog

Release Design Decisions

  • Per Monthly Architect's meeting (9/21/20) - Add configuration to allow default overrides for HTTP request maximum size and number of simultaneous requests.
  • Per Monthly Architect's meeting (11/30/20) - modules will be tagged with the release number of the release they go with.   Specifically, the tag will be a pointer to the release of edgex-go that the module goes with.  The project's release czar will tag as part of the release process.  The readme to the module should be updated to indicate which module version goes with each EdgeX release version.  DevOps will make some changes to the CI/CD Pipelines/process to not update on a patch.  ADR 10 will be updated to reflect this change.
  • Per Monthly Architect's meeting (11/30/20), Docker image names will drop the 'go', 'docker' and 'c' prefix or suffix from their names.
  • Per Monthly Architect's meeting (11/30/20), Go 1.15 with Alpine 3.12 will be used for build stage in Dockerfiles.  Subsequent decision was made by the TSC to upgrade to Go 1.16.
  • Per Monthly Architect's meeting (1/26/21), service keys will be used in configuration.toml for constants maps
  • Per Monthly Architect's meeting (3/15/21), in Device Profiles, make the following changes: in deviceCommands section, remove get/set section.  Rename parameter to defaultValue, add a readWrite indicator, in deviceCommands use a single resourceOperations section.
  • Per Core working group meeting (11/19/20) - We will remove base64 encoding for floats (as part of event `Readings`) for Ireland.  It was determined that E-notation is good enough to use going forward and helps reduce complexity.  If future requirements/use cases raise new needs, we will revisit for future releases.
  • Per Core Working Group meeting (1/7/21), remove delete by ID from API set as there is no longer a get by ID (can add it back in if needed)
  • Per Core Working Group meeting (1/14/21), Remove CRON field in scheduler (it wasn't implemented in the code)
  • Per Core Working Group meeting (1/21/21), remove metadata check when adding the event.  Bring it back if it gets requested.
  • Per Core Working Group meeting (2/4/21), make put/set/write consistent across Device Profile and Core Command - use set.
  • Per Core Working Group meeting (2/18/21), create a convenience method on Metadata, for getting device resoruces.
  • Per Core Working Group meeting (2/18/21), change PropertyValue on Device Profiles to ResourceProperties
  • Per Core Working Group meeting (2/18/21), add sourceName to Event.  In the coreCommand section of Device Profiles, also change name field to sourceName.
  • Per Core Working Group meeting (3/4/21), Versionable is deemed required on request/response objects and Event (because App Service can receive just an Event) DTO; for other objects, version is optional
  • Per Core Working Group meeting (3/25/21) and ratified by TSC later, Compose files were to be organized in by branch per release name in edgex-compose repository.  The "release" folder is removed.
  • Per Core Working Group meeting (3/25/21), created timestamp is removed from Event/Reading objects.  Origin timestamp is now required.  Origin is expected to represent nanoseconds (was sometimes represented milliseconds)
  • Per Core Working Group meeting (4/8/21), the Core Command APIs will add a new property called Parameters.  Parameters are applied to both GET (the expected return - resourceNames) and SET (what you need to send)
  • Per Core Working Group meeting( 4/15/21), All env vars to move to use of underscores (versus dashes/hyphen) as the standard and avoiding having to do lots of hyphen character conversion.
  • Per Core Working Group meeting (4/22/21) and Monthly Architects meeting of 4/19/21, error messages should provide enough detail as to allow a developer to debug and understand the error.
  • Per Core Working Group meeting (4/22/21), admin state to be added to interval action (like in device/device service) to enable / disable the interval action without having to delete/re-add the interval action.
  • Per Core Working Group meeting (4/22/21), Attributes in device profiles were switch to allow for JSON types (not just string only).
  • Per Core Working Group meeting (4/29/21), Redis Pub/Sub was made the default message bus implementation in Core Data.
  • Per Core Working Group meeting (5/20/21), remove runOnce property from Interval for now.  It creates problems on restart of the service (should it be rerun or only run when first created).  Create an issue and relook in later release or when use case warrants.
  • Per Core Working Group meeting (5/20/21), the protocol was dropped from ServiceInfo as it is always HTTP (and HTTP by default).  While it could be HTTPS in the future, this could not be used/implemented easily without other certificates, etc.
  • Per Core Working Group meeting (5/20/21) and approved by TSC via email, move all EdgeX ports to the IANA dynamic/private port area.
  • Per Core Working Group meeting (5/26/21), in order to prevent Core Data Subscribe from receiving its own messages published to message bus, changed the publish and subscribe topics so Core Data doesn't receive its own events.
  • Per TSC meeting (6/16/21), default configuration for the system was to make sending via message bus the default for getting event/readings north (versus REST to core data) in device services.