Skip to main content
Monthly Archives

March 2018

OpenDaylight Oxygen: With Age Comes Maturity and Production Stability

By Blog

This post originally appeared on the Inocybe Technologies blog

With development efforts focused on code cleanup, bug fixing, and security, OpenDaylight Oxygen showcases platform maturity with a keen focus on quality.  Although the community has rallied around stabilizing and improving existing functionality to reassure operational reliability, there were also some great features contributed.

Under the hood, all ODL projects upgraded odlparent and yangtools versions.  This was a cross project effort involving every project in the Oxygen distribution.  Changes adapted from the odlparent upgrade involve enforcing better code quality across the project through enhanced checkstyle and findbugs rules, as well as dependency upgrades.  One noteworthy upgrade, the move from karaf 4.0.9 to 4.1.3, enables runtime resolution of feature versions based on feature ranges. This unlocks developer agility, catalyzing the adaptation of future upgrades.  Yangtools contributions centralized around bug fixes and better code organization. Another noteworthy change is that the in-memory data tree now enforces mandatory leaf node presence for operational store by default.  This behaviour change may cause a few surprises during application upgrade, and can be disabled as a stop-gap measure, although it is not recommended.

The rest of the kernel contributors also focused mostly on bug-fixing during the Oxygen release, although there were a few other noteworthy changes.  The MD-SAL project team continued development on the second version of the binding specification, which will be utilized in future releases of ODL. The current plan is to stick with the first version of the binding specification for Fluorine though, and the community is working to close several gaps and deficiencies in what is currently available.  The NETCONF development team contributed functionality to utilize key based authentication with southbound NETCONF devices, which hitherto was limited to basic authentication. The AAA team debuted a new MD-SAL based authentication Realm which enables replication of ODL account information across a cluster, although it is not enabled by default.

A lot of work was done to complete the transition of all ODL projects off the configuration subsystem.  The configuration subsystem was replaced with blueprint many releases ago, but has been maintained as a deprecated system to ensure proper transition for non-ODL projects.  There are plans to remove the configuration subsystem in Fluorine, since the code is costly to maintain further into the future. However, there may be some compatibility layer maintained in Fluorine to bridge the gap before complete removal.  Additional work was done to transition projects off the DataChangeListener (DCL) in favor of DataTreeChangeListener (DTCL), which showcases much better performance. The controller development team plans to remove DCL APIs in Fluorine, so existing applications must migrate to using DTCL.  The Removal of core APIs is tricky, since the ODL development community does not have much insight into how they are consumed outside of the open-source codebase. However, the general strategy is to deprecate, maintain for several releases with clear messaging of upcoming demise, followed by actual removal.  Since DCL has been deprecated since Beryllium, it is time to finally get rid of it altogether. It also allows for continued transition off controller MD-SAL APIs, which have unfortunately been carried as baggage for a long time.

The protocol and application stacks received some upgrades.  BGP added support for EVPN VPWS Flexible Cross-Connect Service based on draft-sajassi-bess-evpn-vpws-fxc.  The netvirt & genius projects added support for IPv6 enabled L3VPNs utilizing BGPVPNs as well as support for MPLS/GRE tunnel creation for L3VPNS in OVS 2.8+.  Although less visible to end-users, these projects made great improvements in transaction chaining and threading under the hood. OVSDB and Openflowplugin projects focused efforts on closing several clustering bugs as well as creating more user-friendly libraries for utilizing functionality.  The Service Function Chaining project added support for statistics for Rendered Service Paths and bump-in-the-wire Service Functions, thus improving the usability of SFC from an operational standpoint. The JSON-RPC project was officially added to the release, and contains bindings to interact with ODL utilizing ZMQ.  This accelerates integration of non-Java based projects with the controller.

The pattern in the ODL development community is trending towards improving what exists rather than reinventing the wheel.  Each subsequent release comes with a facelift for existing projects, which should come as no surprise as the project continues to mature.

For additional information on the OpenDaylight Oxygen release, please visit The Linux Foundation’s Oxygen release blog:

Written by Ryan Goulding, Principal Software Engineer at Inocybe Technologies.