Model-Driven Service Abstraction Layer (MD-SAL)¶
Overview¶
MD-SAL provides infrastructure for binding YANG models to Java object model and infrastructure for providing YANG-defined interaction patterns: * Reactive datastore update * RPC and Action invocation * Notification sourcing and delivery
Behavior/Feature Changes¶
The Binding mapping of type bits
YANG statement has been updated to use a dedicated common
superinterface, BitsTypeObject
. Furthermore individual bits within these classes are now represented
as primitive boolean
values rather than nullable Boolean
objects.
New Features¶
Both DOMRpcProviderService
and RpcProviderService
have gained the ability to register single-type
and flexible multi-type RPC implementations. RpcConsumerRegistry
have gained the ability to access single-RPC
handles. These capabilities are based on new codegen feature, which generates @FunctionalInterface
interfaces
for each individual rpc
, similar to how action
statements are processed.
Binding code generator now recognizes RFC8040 rc:yang-data
extensions and generates corresponding interfaces.
Deprecated Features¶
NotificationService.registerNotificationListener()
method has been deprecated, along with its Binding
specification interfaces based on NotificationListener
. These will be removed in a future major release.
RpcProviderService.registerRpcImplementation()
methods, RpcConsumerRegistry.getRpcService()
methods and
Binding specification interfaces based on RpcService
have been deprecated. These will be removed in a future
major release.
Removed Features¶
No removed features.
Resolved Issues¶
The following table lists the issues resolved in this release.
Type |
Key |
Summary |
Resolution |
Fix Version(s) |
---|---|---|---|---|
DOMRpcService.registerImplementations() does not work with pre-existing entries |
Done |
10.0.4, 11.0.1, 9.0.7 |
||
Union’s stringValue() does not handle BitsTypeObject |
Done |
11.0.3 |
||
typedef/bits generates invalid code |
Done |
11.0.4 |
||
Notification registration not updated with ‘registerNotificationListeners’ |
Done |
10.0.7, 11.0.6 |
||
Integrate Action with BindingContract |
Done |
11.0.0 |
||
Add nonnullFoo() getters for non-semantic objects |
Done |
11.0.0 |
||
Do not track uninteresting bundles |
Done |
10.0.3, 11.0.0 |
||
Union value classes need to enforce non-null components |
Done |
10.0.4, 11.0.0 |
||
Map bits type to primitive boolean |
Done |
11.0.0 |
||
Change mapping of action input/output |
Done |
11.0.0 |
||
Support single-RPC interfaces in RpcConsumerRegistry and RpcProviderService |
Done |
11.0.0 |
||
Split up BindingDOMRpcImplementationAdapter |
Done |
11.0.0 |
||
Add BitsTypeObject |
Done |
11.0.0 |
||
Add Augmentable.augmentationOrElseThrow() |
Done |
10.0.7, 11.0.5 |
||
Disambiguate generated classes based on source statement |
Done |
11.0.6 |
||
Package RFC7317’s iana-crypt-hash module |
Done |
11.0.0 |
||
Generate NAME constant for ietf-restconf:yang-data interfaces |
Duplicate |
11.0.5 |
||
Generate structures for RFC8040 yang-data extensions |
Done |
11.0.5 |
||
Split out mdsal.binding.dom.codec.impl.loader |
Done |
11.0.0 |
||
Remove BindingReflections.isAugmentationChild() |
Done |
11.0.0 |
||
Remove BindingReflections.findHierarchicalParent() |
Done |
11.0.0 |
||
Remove BindingReflections.resolveRpc{Input,Output}Class() |
Done |
11.0.0 |
||
Generate Rpc specializations |
Done |
11.0.0 |
||
Switch DOMRpc{Implementation,Result} to work on ContainerNode |
Done |
11.0.0 |
||
Do not allow cross-datastore transactions |
Done |
11.0.0 |
||
Generate binding codecs in a dedicated namespace |
Done |
11.0.0 |
||
Deprecate RpcService and related API contracts |
Done |
11.0.0 |
||
Deprecate BindingReflections.getModelRootPackageName() |
Done |
11.0.3 |
||
Deprecate DataObjectReadingUtil |
Done |
11.0.3 |
Known Issues¶
The following table lists the known issues that exist in this release.
Type |
Key |
Summary |
Status |
Affected Version(s) |
Fix Version(s) |
---|---|---|---|---|---|
DOMDataTreeCommitCohort does not expose EffectiveModelContext |
Resolved |
10.0.6, 11.0.7 |
11.0.8, 12.0.0 |