[release] yangtools-3.0.0 released

Robert Varga nite at hq.sk
Mon Apr 8 22:36:23 UTC 2019

Hello everyone,

yangtools-3.0.0 has been released.

This is a major releases, breaking both API and ABI compatibility. There
is a slew of changes, as detailed in

The gory details are at the end of this email, here is a rundown of the
most important changes:

1) yang-xpath-api has been promoted to stable feature

This API provides an extensible model of XPath expressions. It has been
revamped to properly observe YANG namespace binding rules and is now
considered a stable feature.

2) YANG parser enforces syntactic well-formedness of "path" argument

Path argument has been previously defined as a very loose
RevisionAwareXPath, which only promised a String representation. This
has been corrected and path statements now capture their argument in
PathExpression, which is a strictly-validated construct. It exposes a
properly-parsed subset of YangXPathExpression, following RFC6020/RFC7950
lexical rules.

3) if-feature statements are properly cross-referenced

YANG parser has been updated to cross-reference "if-feature" statements
to their "feature" counterparts. The if-feature argument is now exposed
as IfFeatureExpr, which is allows the set of referenced feature
statements to be queried.

4) NormalizedNode does not have attributes (YANGTOOLS-961)

This is the result of integrating RFC7952 semantics, XML attributes now
map to NormalizedMetadata, which is a separate tree structure which
follows NormalizedNode addressing.

5) NormalizedNodeStreamWriter is now fully extensible (YANGTOOLS-497)

NormalizedNodeStreamWriter had non-extensible events in the form of
leafNode(), anyxmlNode() and leafSetEntryNode() events. These have now
been refactored to startLeafNode() and friends, which need to be
followed by a proper endNode() event, which allows new events to be
introduced via the Extensible Object pattern.

6) NormalizedNodeStreamAttributeWriter has been removed

As a consequence of items 4) and 5), this interface has been completely
removed in favor of NormalizedMetadataStreamWriter, which is an optional
extension to NormalizedNodeStreamWriter

7) QName now represents a strict YANG "node identifier"

The rules for an acceptable local name in QName have been tightened, so
that a QName is a manifestation of a fully-bound "node identifier" YANG
construct. Unbound representations of the the same are available as
QualifiedQName and UnqualifiedQName.

8) odl-triemap feature has been removed

The TrieMap implementation is being maintained outside of OpenDaylight
as a wholly-independent implementation here:
https://github.com/PantheonTechnologies/triemap with the corresponding
"pt-triemap" feature available. This renders odl-triemap superfluous and
it is removed in this release.

9) Automatic-Module-Name for all production artifacts

With JDK11 supported, it is important to extend our support for JPMS.
While we are using JDK8 to build, we provide Automatic-Module-Name
MANIFEST.MF entries, so that downstreams can properly reference YANG
Tools modules.

10) YANG parser support for RFC6241/RFC8528

The NETCONF RFC and the Schema Mount RFC define two extensions, which
are now semantically recognized by YANG parser and properly bound to
well-known API constructs.

11) Serialized form of QName/PathArgument/YangInstanceIdentifier changed

In preparation for 4.0.0 overhaul, these classes are now using
Externalizable Proxy pattern, which disconnects them completely from
their name/class hierarchy. The corresponding read-side support will be
delivered in the next 2.1.x release, allowing 2.1.LATEST to seamlessly
migrate to/from 3.0.0 release train.

12) ModifyAction has been removed

ModifyAction is a semantic leak of RFC6241 into yangtools, where it has
no place. This construct should be defined in terms of RFC7952
annotation -- when it does, it will be supported. Until that time,
netconf project will need to host this definition.

This release also removes a number of previously-deprecated classes and
methods -- way too many to list here.

Aside from that there are three bugfixes, detailed below, which will
make their way also to 2.1.x and 2.0.x streams.

Finally, there is a number of performance optimizations, as noted in the
2.0.17 release. These amount to 5-15% improvement to InMemoryDataTree
performance, at least according to microbenchmarks.

Ah, and yangtools-3.0.0 is completely JSR305-independent, making JDK 11



[YANGTOOLS-933] - Provide Automatic-Module-Names for all bundles


[YANGTOOLS-369] - Data Tree: improve DataContainerNode storage for empty
[YANGTOOLS-497] - yang-data-api: NormalizedNodeStreamWriter extensibility
[YANGTOOLS-849] - Make sure {Yin,Yang}TextSchemaSource.forResource() are
[YANGTOOLS-852] - Cleanup yang-parser-spi namespaces
[YANGTOOLS-907] - Get rid of javax.annotation nullness annotations
[YANGTOOLS-941] - Separate out AbstractNodeContainerModificationStrategy
abstract methods
[YANGTOOLS-942] - Turn AutomaticLifecycleMixin into a
[YANGTOOLS-944] - Introduce DelegatingModificationApplyOperation
[YANGTOOLS-945] - Eliminate no-op MandatoryLeafEnforcer
[YANGTOOLS-946] - Provide common superclass for
[YANGTOOLS-947] - Split out ModificationApplyOperation.verifyStructure()
into two methods
[YANGTOOLS-949] - Disconnect RootModificationApplyOperation from
[YANGTOOLS-950] - Optimize DataNodeContainerModificationStrategy child
[YANGTOOLS-951] - Fix ListEntry-rooted InMemoryDataTree integration
[YANGTOOLS-969] - Integrate leafref path parser
[YANGTOOLS-975] - Define AnyxmlNode which is not tied to DOMSource
[YANGTOOLS-979] - Make YangInstanceIdentifier and PathArgument use
Externalizable Proxy pattern


[YANGTOOLS-930] - Remove odl-triemap
[YANGTOOLS-931] - Remove old YIN schema emitter
[YANGTOOLS-954] - Clarify DataTreeCandidateNode method contracts
[YANGTOOLS-955] - Remove AlwaysFailOperation
[YANGTOOLS-960] - Update NormalizedNodeStreamWriter interface
[YANGTOOLS-961] - Integrate NormalizedNodes with RFC7952 metadata/attributes
[YANGTOOLS-967] - Move yang-data-api XPath interfaces into a separate
[YANGTOOLS-977] - Add model-unbound AnydataNode

New Feature

[YANGTOOLS-831] - Add parser support for RFC6241 extensions
[YANGTOOLS-965] - Add parser support for RFC8528 Schema Mount


[YANGTOOLS-862] - yang.common.QName is a YANG identifier
[YANGTOOLS-938] - InMemoryDataStore delete/write cycle produces
unexpected result
[YANGTOOLS-964] - YANG parser does not complain about missing feature
[YANGTOOLS-971] - Strings Ending in Escaped Backslash are Inproperly Lexed

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 850 bytes
Desc: OpenPGP digital signature
URL: <http://lists.opendaylight.org/pipermail/release/attachments/20190409/3240684a/attachment.sig>

More information about the release mailing list