mdsal.git
10 months agoFix BindingRuntimeHelper.extractYangModuleInfo() 64/106564/4
Robert Varga [Tue, 20 Jun 2023 21:39:16 +0000 (23:39 +0200)]
Fix BindingRuntimeHelper.extractYangModuleInfo()

Previous patch has broken the extraction facility in multi-classloader
environments: when we have a Class, we should be using its ClassLoader,
not TCCL, to locate its sibling.

JIRA: MDSAL-803
Change-Id: Ie3684a6defeaf51c6c98efcf48791b677b2ef2f1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
10 months agoClean up dependencies 55/106555/3
Robert Varga [Tue, 20 Jun 2023 12:42:53 +0000 (14:42 +0200)]
Clean up dependencies

We have a ton of warnings, reign some of them in.

Change-Id: I4aa0b3871f9416c09fb17fe5f9325015231ac40a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
10 months agoEliminate DataObjectSerializerImplementation 51/106551/3
Robert Varga [Tue, 20 Jun 2023 10:14:57 +0000 (12:14 +0200)]
Eliminate DataObjectSerializerImplementation

We do not need the intermediate interface and can just have
DataObjectStreamer as the main entrypoint.

Change-Id: I14b01652baf5c0c6bd86ffe3951255717b2bd831
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
10 months agoHide DataObjectSerializer 50/106550/1
Robert Varga [Tue, 20 Jun 2023 10:09:14 +0000 (12:09 +0200)]
Hide DataObjectSerializer

Promote this class to a hidden implementation detail.

Change-Id: Ibf48f98cd9b9175b8a22eca102bbeb6162ccac67
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
10 months agoFix BindingToNormalizedStreamWriter.enter() 49/106549/2
Robert Varga [Tue, 20 Jun 2023 09:46:01 +0000 (11:46 +0200)]
Fix BindingToNormalizedStreamWriter.enter()

We have a blind cast which does not handle augmentations' children. Fix
the cast to work for augmentations as well.

JIRA: MDSAL-820
Change-Id: Ib32a65e475d5d786bcc0d353f5fe044c147e4c07
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
10 months agoAdd BindingDataObjectCodecTreeParent.getStream{Augmentation,DataObject} 47/106547/1
Robert Varga [Tue, 20 Jun 2023 01:08:25 +0000 (03:08 +0200)]
Add BindingDataObjectCodecTreeParent.getStream{Augmentation,DataObject}

When we know we are streaming to a particular type, we can improve the
user experience by returning a friendly interface.

JIRA: MDSAL-820
Change-Id: Iadb85de866a0446934f636bb870e1df5f4c81a4b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
10 months agoAdd CommonDataObjectCodecTreeNode.stream{Augmentation,DataObject} 45/106545/1
Robert Varga [Tue, 20 Jun 2023 01:08:25 +0000 (03:08 +0200)]
Add CommonDataObjectCodecTreeNode.stream{Augmentation,DataObject}

When we know we are streaming to a particular type, we can improve the
user experience by returning a friendly interface.

JIRA: MDSAL-820
Change-Id: I89d8dbed493919a72db7195213c5cf688b9ecb5a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
10 months agoRehost BindingReflections.loadModuleInfos() 77/104877/4
Oleksandr Panasiuk [Tue, 14 Mar 2023 16:06:33 +0000 (18:06 +0200)]
Rehost BindingReflections.loadModuleInfos()

Use ServiceLoader to locate all module infos instead. This reduces the
proliferation of BindingReflections just a tiny bit.

JIRA: MDSAL-803
Change-Id: I5d76f6c8eddc1d689ebd8fcbe9cbf23350b465cf
Signed-off-by: Oleksandr Panasiuk <oleksandr.panasiuk@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
10 months agoPromote AbstractBindingLazyContainerNode 85/106485/2
Robert Varga [Wed, 14 Jun 2023 19:41:09 +0000 (21:41 +0200)]
Promote AbstractBindingLazyContainerNode

This is a well-proven class, drop the @Beta annotation and clean in up a
bit.

Change-Id: I7d6bd3e4717dd969695c58fe52e71d38911a4a24
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
10 months agoRemove unused dependency 82/106482/2
Robert Varga [Wed, 14 Jun 2023 13:33:57 +0000 (15:33 +0200)]
Remove unused dependency

mdsal-binding-spec-util is not used by mdsal-binding-generator, remove
the dependency.

Change-Id: I3ac0264bc32f52ab311c1e1c951293bc49b7a789
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
10 months agoIntroduce AbstractBaseTemplate 78/106278/3
Robert Varga [Sun, 28 May 2023 20:24:49 +0000 (22:24 +0200)]
Introduce AbstractBaseTemplate

Pull down some of the more obvious methods from BaseTemplate to an
abstract class. This improves things by introducing static methods
and having them in Java.

JIRA: MDSAL-562
Change-Id: I1b04477695c7a966e7a829e67d0340c8a551d7f6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
10 months agoHide DataContainerCodecContext.getType() 99/106499/2
Robert Varga [Thu, 15 Jun 2023 14:08:37 +0000 (16:08 +0200)]
Hide DataContainerCodecContext.getType()

This method is used only internally, hide it from public view.

Change-Id: Id1700333937155fb5eff6cecca630fcff7c6bced
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoConvert mdsal-yanglib-rfc8525 to a JPMS module 03/106503/1
Robert Varga [Fri, 16 Jun 2023 10:21:42 +0000 (12:21 +0200)]
Convert mdsal-yanglib-rfc8525 to a JPMS module

This is a simplistic module, convert it.

JIRA: MDSAL-619
Change-Id: I84ab4664d0c4441b9d250b6b876d16860b396ed0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoConvert mdsal-binding-runtime-osgi to a JPMS module 02/106502/2
Robert Varga [Fri, 16 Jun 2023 09:57:12 +0000 (11:57 +0200)]
Convert mdsal-binding-runtime-osgi to a JPMS module

Ditch Automatic-Module-Name and instead provide a proper module.

JIRA: MDSAL-619
Change-Id: I940072ba15c14a73b918f41c11c80a85e31aa872
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoConvert mdsal-rfc8294-netty to an explicit module 01/106501/2
Robert Varga [Fri, 16 Jun 2023 09:36:43 +0000 (11:36 +0200)]
Convert mdsal-rfc8294-netty to an explicit module

This is a straightforward module, just convert it.

JIRA: MDSAL-619
Change-Id: Iaa9148e4103489e18bc5462716720e9858c320af
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoConvert mdsal-dom-broker to a JPMS module 43/105743/11
Samuel Schneider [Fri, 28 Apr 2023 15:59:06 +0000 (17:59 +0200)]
Convert mdsal-dom-broker to a JPMS module

Convert to a JPMS to prevent reflective access.
For compatibility, we still need to export the implementation details.

JIRA: MDSAL-749
Change-Id: I85baf0f41c415d02fe2d7b02a70e2b57b502ad9f
Signed-off-by: Samuel Schneider <samuel.schneider@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoClean up mdsal-binding-model-api dependencies 98/106498/1
Robert Varga [Thu, 15 Jun 2023 13:09:49 +0000 (15:09 +0200)]
Clean up mdsal-binding-model-api dependencies

We are not using yang-common here, fix that up.

Change-Id: I7ebc0e7983710bb870a90d0c6697baf8822d0034
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoConvert mdsal-eos-binding-adapter to a JPMS module 88/105988/11
Oleksandr Panasiuk [Tue, 16 May 2023 05:27:39 +0000 (08:27 +0300)]
Convert mdsal-eos-binding-adapter to a JPMS module

This adapter is rather simple. Convert it so its internals are
(semi)-well encapsulated.

JIRA: MDSAL-751
Change-Id: I4d636838f46aee2cd142310d7ca94ea1f9c9ca64
Signed-off-by: Oleksandr Panasiuk <oleksandr.panasiuk@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoConvert mdsal-binding-dom-adapter to a JPMS module 86/105886/14
Samuel Schneider [Wed, 10 May 2023 15:25:26 +0000 (17:25 +0200)]
Convert mdsal-binding-dom-adapter to a JPMS module

Convert to a JPMS module to hide internals from the outside world.

JIRA: MDSAL-750
Change-Id: Ibdc5ff8cd6ad4512865d3ffc58ebcc5ecd428aac
Signed-off-by: Samuel Schneider <samuel.schneider@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoConvert mdsal-eos-binding-api to a module 95/106495/2
Robert Varga [Thu, 15 Jun 2023 09:29:29 +0000 (11:29 +0200)]
Convert mdsal-eos-binding-api to a module

This is a rather simple API, convert it to a Java module.

JIRA: MDSAL-751
Change-Id: Ic43a4d3a801721c202909c813d68ca52b2da18e8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoExport org.opendaylight.mdsal.binding.dom.codec.impl 94/106494/1
Robert Varga [Thu, 15 Jun 2023 08:49:19 +0000 (10:49 +0200)]
Export org.opendaylight.mdsal.binding.dom.codec.impl

As a stop-gap measure, expose the entire top-level artifact. This will
be tied down in later patches.

JIRA: MDSAL-828
Change-Id: I5fb61aa595ee2b66e99f3833cfc6935d8d529ffb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoBump byte-buddy to 1.14.5 93/106493/1
Robert Varga [Thu, 15 Jun 2023 08:48:02 +0000 (10:48 +0200)]
Bump byte-buddy to 1.14.5

https://github.com/raphw/byte-buddy/releases/tag/byte-buddy-1.14.5

Change-Id: Ic3fd18b67d32515a2a86acc5813141efab1f867b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoBump xtend to 2.31.0 88/106488/2
Robert Varga [Wed, 14 Jun 2023 20:53:49 +0000 (22:53 +0200)]
Bump xtend to 2.31.0

https://www.eclipse.org/xtend/releasenotes.html#/releasenotes/2023/05/29/version-2-31-0

Change-Id: Icbb185327e80d55d0b8306ed786ccc2be6f1ef6a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoRefactor streamChild() methods 89/106489/1
Robert Varga [Wed, 14 Jun 2023 22:05:02 +0000 (00:05 +0200)]
Refactor streamChild() methods

We have a tad confusing naming, where the individual methods are
related. Unify naming.

Change-Id: Iba8c725f611308da65761fce9a4249642963901a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoClean up addYangPathArgument() 87/106487/1
Robert Varga [Wed, 14 Jun 2023 20:38:45 +0000 (22:38 +0200)]
Clean up addYangPathArgument()

The nullability is confused here. Make sure we separate the two
invocation paths, so that we check builder for non-null as few times as
practicable.

Change-Id: Iceafa279fb3b69ffdaa54d4250ecf370edaa2622
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoRename AugmentatioNodeContext 86/106486/1
Robert Varga [Wed, 14 Jun 2023 19:54:08 +0000 (21:54 +0200)]
Rename AugmentatioNodeContext

The 'Node' word does not really tell us much. Rename to
AugmentationCodecContext.

JIRA: MDSAL-828
Change-Id: Ib2e0487cfda365570bf01e9bcd474a59c8bc42d2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoFix code generation with leafrefs pointing to optional members 75/106475/6
Robert Varga [Tue, 13 Jun 2023 14:57:25 +0000 (16:57 +0200)]
Fix code generation with leafrefs pointing to optional members

When we have a typedef which points to a location disabled by
if-feature, we need to accept this fact -- but do not allow that typedef
to be referenced.

JIRA: MDSAL-829
Change-Id: Ibde28faa2f96904dc16fcc6f5a922edc6bcffebb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoGuard against null augmentations 74/106474/1
Robert Varga [Tue, 13 Jun 2023 14:17:59 +0000 (16:17 +0200)]
Guard against null augmentations

Do not populate the augmentations map with null values.

JIRA: MDSAL-820
Change-Id: I3258337f1c9dd782b840e9ebad4e154428afc53b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoRemove an unnecessary cast 73/106473/1
Robert Varga [Tue, 13 Jun 2023 14:10:38 +0000 (16:10 +0200)]
Remove an unnecessary cast

We know the getDomPathArgument() always returns NodeIdentifier, there is
no need to cast it.

Change-Id: Ic525f0938e692251a8bff0c80dd90e40966d926f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoRename ChoiceNodeCodecContext 71/106471/1
Robert Varga [Tue, 13 Jun 2023 13:25:40 +0000 (15:25 +0200)]
Rename ChoiceNodeCodecContext

ChoiceCodecContext is a better and shorter name, as the 'Node' part does
not really make any sense.

JIRA: MDSAL-828
Change-Id: Ied868e2cecda87ccdd69dae9f6688c7d70cac924
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoRename SchemaRootCodecContext 70/106470/1
Robert Varga [Tue, 13 Jun 2023 13:23:40 +0000 (15:23 +0200)]
Rename SchemaRootCodecContext

SchemaRoot is too long a name, shorten in to RootCodecContext.

JIRA: MDSAL-828
Change-Id: I01a7d87e20ec4c073624a2cf1367ab2c369cb574
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoHide CodecOpaqueObject constructor 69/106469/1
Robert Varga [Tue, 13 Jun 2023 12:43:41 +0000 (14:43 +0200)]
Hide CodecOpaqueObject constructor

We no longer use Javassist, hence we can just make the constructor
protected.

Change-Id: I760fc93f613c3593e72373b12c904cd6d149d525
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoImprove AbstractOpaque{Data,Object}.equals() 68/106468/1
Robert Varga [Tue, 13 Jun 2023 12:40:39 +0000 (14:40 +0200)]
Improve AbstractOpaque{Data,Object}.equals()

Use instanceof pattern to simplify equals() method.

Change-Id: I04f8262428b0a6a1ef8d35c21793c51306b9ed81
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoRename NodeCodecContext 67/106467/1
Robert Varga [Tue, 13 Jun 2023 12:09:34 +0000 (14:09 +0200)]
Rename NodeCodecContext

This name is awefully long and the 'Node' part does not convey any
meaning. Rename it to CodecContext.

JIRA: MDSAL-828
Change-Id: I31e93a49d79f31e3d43bc803639393c8e9e6c8d9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoSeal NodeCodecContext hierarchy 64/106464/1
Robert Varga [Tue, 13 Jun 2023 11:53:05 +0000 (13:53 +0200)]
Seal NodeCodecContext hierarchy

We are about split out some of the contexts to public places. Before we
do that, though, make sure the hierarchy is sealed, so we do not get
accidental subclasses.

JIRA: MDSAL-828
Change-Id: Iaa1f0954eb1e571b08dbe8760157a996c1905143
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoSplit out CodecContextFactory 63/106463/2
Robert Varga [Tue, 13 Jun 2023 11:31:35 +0000 (13:31 +0200)]
Split out CodecContextFactory

The coupling of CodecContextFactory to NodeCodecContext prevents proper
splitting the individual concerns. Promote CodecContextFactory to a
top-level class.

JIRA: MDSAL-828
Change-Id: Ic3cc54380e7db76e92c116103b84af209625e97b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoSeal IdentifiableItemCodec 60/106460/1
Robert Varga [Tue, 13 Jun 2023 10:48:19 +0000 (12:48 +0200)]
Seal IdentifiableItemCodec

We have only two concrete subclasses, make sure the JVM knows that.

Change-Id: Ic9121d08ce6ca6140918bac001132ba68681b32e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoAdjust to YangTextSchemaSource being a CharSource 59/106459/1
Robert Varga [Tue, 13 Jun 2023 10:18:39 +0000 (12:18 +0200)]
Adjust to YangTextSchemaSource being a CharSource

YANGTOOLS-1508 changed the interface here, adjust to it by using
delegateForCharSource() instead.

Change-Id: I20327d4ff7b8f023f18755104ef9b9b581fd24c5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoRename CaseNodeCodecContext.Prototype 81/106381/2
Robert Varga [Mon, 5 Jun 2023 08:05:39 +0000 (10:05 +0200)]
Rename CaseNodeCodecContext.Prototype

Split this class out into CaseCodecPrototype top-level class.

Change-Id: I9b94a07f5b78bdec684d17ed0831e67a06cf0c0e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoBump odlparent to 13.0.1 86/106386/2
Robert Varga [Mon, 5 Jun 2023 11:13:14 +0000 (13:13 +0200)]
Bump odlparent to 13.0.1

Pick up feature packaging fixes.

Change-Id: If20eb9b3a71221cecc5c57d78daf874bc6946a7a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoSplit out CaseNodeCodecContext.Prototype 79/106379/2
Robert Varga [Sun, 4 Jun 2023 22:47:14 +0000 (00:47 +0200)]
Split out CaseNodeCodecContext.Prototype

Add an explicit subclass of DataObjectCodecProtype to serve case nodes.

Change-Id: I77a752be75673d1ffa768c5d76c422f082e03880
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoSplit out NotificationCodecContext.Prototype 78/106378/2
Robert Varga [Sun, 4 Jun 2023 21:47:46 +0000 (23:47 +0200)]
Split out NotificationCodecContext.Prototype

Notifications require a special context, split them out and guard
against re-instantiation.

Change-Id: I7eede21b2aeab92c02ae451a4c5e341361563bca
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoSplit out SchemaRootCodecContext.Prototype 77/106377/3
Robert Varga [Sun, 4 Jun 2023 21:13:49 +0000 (23:13 +0200)]
Split out SchemaRootCodecContext.Prototype

This prototype is rather special, split it out, making the dependency
graph a tad simpler.

Change-Id: I8da7e556fdb73f729b054bfb28dbcaa57e577aeb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoSplit out DataContainerCodecPrototype subclasses 76/106376/2
Robert Varga [Sun, 4 Jun 2023 20:57:06 +0000 (22:57 +0200)]
Split out DataContainerCodecPrototype subclasses

We are going to ditch the Regular specialization in favor of providing
proper specializations. Take the first step and promote the two
specializations to top-level classes.

Change-Id: I0d350c0f1b0c1e364cd4330a39a51ec01e9c9dbd
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoUse instanceof patterns in KeyedListNodeCodecContext 75/106375/1
Robert Varga [Sun, 4 Jun 2023 20:15:11 +0000 (22:15 +0200)]
Use instanceof patterns in KeyedListNodeCodecContext

Reduce explicit casts by using instanceof expressions.

Change-Id: I04c15c70b0c9b23680aeb07892cc11c1b167b07f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoUse instanceof patterns in CodecDataObject 74/106374/1
Robert Varga [Sun, 4 Jun 2023 20:13:50 +0000 (22:13 +0200)]
Use instanceof patterns in CodecDataObject

Throw explicit VerifyExceptions instead of verify(... instanceof ...),
so we make it obvious what is going on.

Change-Id: I2fef6be328eb99b2f7c5e6082ad637be0374a17f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoSharpen CodecDataObject.data 73/106373/2
Robert Varga [Sun, 4 Jun 2023 19:51:49 +0000 (21:51 +0200)]
Sharpen CodecDataObject.data

Since we do not have AugmentationNodes, we now know that all
DistinctNodeContainers backing CodecDataObject are DataContainerNodes.
Sharpen the contract, which gets rid of some ugliness around generic
arguments.

Change-Id: I097e6fda0ca312fc808f2ac2d4e0bbc6ac679315
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoModernize dom-codec-api a bit 72/106372/4
Robert Varga [Sun, 4 Jun 2023 19:11:18 +0000 (21:11 +0200)]
Modernize dom-codec-api a bit

With AugmentationNode out of the picture, we know that
DataContainerChild nodes are identified by NodeIdentifier. Codify that
instead of working with plain PathArguments.

Change-Id: I50501e16ac33d3d4e49768b6ff8275603820fb3b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoModernize ChoiceNodeCodecContext 71/106371/1
Robert Varga [Sun, 4 Jun 2023 18:59:58 +0000 (20:59 +0200)]
Modernize ChoiceNodeCodecContext

We know that Choice's components can only be addressable by
NodeIdentifier, make sure we reflect in the byYangCaseChild Map.
Also use local variable type inference and a text block.

Change-Id: I7ac024b5791247685ecf05e9f77040919eec1219
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoBump odlparent to 13.0.0 11/106311/2
Robert Varga [Tue, 30 May 2023 20:01:55 +0000 (22:01 +0200)]
Bump odlparent to 13.0.0

Align the version with the version used by yangtools-11. Also fixes up
dependencies to pull in optional annotations.

Change-Id: Ia2ef118df94d7ca6c87de28834e1977d3fc41a13
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoCorrect AbstractDataObjectModification memoization 16/106216/3
Robert Varga [Sun, 28 May 2023 20:24:49 +0000 (22:24 +0200)]
Correct AbstractDataObjectModification memoization

Memoization here is not nice where nulls are concerned: if the result is
null, we end up round-tripping to the codec. Fix that by explicitly
masking null values with a sentinel object.

While we are at it, also relax access: instead of volatile read/writes,
use getAcquire()/setRelease() mechanics. Since the resulting DataObjects
are presumably previous, the set side is actually a CAS, reusing any
results of concurrent computation.

Change-Id: I77285e0842588b1882ef2eb09677d96395911a85
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoRelax AbstractDataObjectModification.childNodesCache 15/106215/3
Robert Varga [Sun, 28 May 2023 20:04:12 +0000 (22:04 +0200)]
Relax AbstractDataObjectModification.childNodesCache

This is quite a critical part of computation: use
getAcquire()/setRelease() mechanics. There is a twist, since the object
is an ImmutableList -- use compare-and-swap to ensure concurrent loads
result in the same list.

Change-Id: I4ea9773f415cd03bbba2e8068ce54367dd1d46de
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoRelax AbstractDataObjectModification.modificationType 14/106214/1
Robert Varga [Sun, 28 May 2023 19:51:58 +0000 (21:51 +0200)]
Relax AbstractDataObjectModification.modificationType

This is a performance-critical part, use getAcquire()/setRelease()
instead of volatile operations.

Change-Id: I6303237d47588fd1ca21bf8f520e976022d5a58f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoPerform partial modification matching 97/106197/1
Robert Varga [Sun, 28 May 2023 18:59:24 +0000 (20:59 +0200)]
Perform partial modification matching

Now that we have a collector, we can assert a particular modification
state at any given moment.

Change-Id: I9f9f3436b0def8d3ddd8612343c41c4bfdd2c017
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoRefactor AbstractDataTreeChangeListenerTest 96/106196/2
Robert Varga [Sun, 28 May 2023 18:18:51 +0000 (20:18 +0200)]
Refactor AbstractDataTreeChangeListenerTest

Rather than exposing the underlying DTCL implementation, expose only the
collector aspect, requiring the collector to be closed -- which also
tears down the listener.

This is a stepping stone to allowing step-by-step assertions, but the
notable change is that we await the initial synchronization before
giving out the collector.

Change-Id: I9337bc5b80eb9976ad9dec143b59ef75d742cbfd
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoImprove BindingNormalizedNodeSerializer API 95/106195/1
Robert Varga [Sun, 28 May 2023 15:26:11 +0000 (17:26 +0200)]
Improve BindingNormalizedNodeSerializer API

Allow users to specifically ask for an explicit dataobject or
augmentation serialization.

JIRA: MDSAL-820
Change-Id: Ic929620d2c23c8ac1ab7eb7a5f2f46d627833a73
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoClean up BindingAugmentationCodecTreeNode 94/106194/2
Robert Varga [Sun, 28 May 2023 14:03:06 +0000 (16:03 +0200)]
Clean up BindingAugmentationCodecTreeNode

We have two unused methods here, remove them.

JIRA: MDSAL-820
Change-Id: Ib1f1fc145f2a5d38cce40f1e1ddee6058d0860e6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoImprove BindingCodecTree interface 93/106193/2
Robert Varga [Sun, 28 May 2023 13:50:41 +0000 (15:50 +0200)]
Improve BindingCodecTree interface

We have users which know statically that they are dealing with a plain
DataObject or an Augmentation. Add methods to help them to get the right
codec.

JIRA: MDSAL-820
Change-Id: Idf0209c9dc705cf8359688a0eef2dd2e9fa00df2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoRemove binding.spec.util package 93/104093/4
Šimon Ukuš [Mon, 23 Jan 2023 06:51:17 +0000 (07:51 +0100)]
Remove binding.spec.util package

Deprecated DataObjectReadingUtil is not being used by anyone.

JIRA: MDSAL-801
Change-Id: I33d68733820c200155c99f0d0f703daff450e411
Signed-off-by: Šimon Ukuš <simon.ukus@pantheon.tech>
11 months agoMigrate users of NormalizedNode.getIdentifier() 92/106192/1
Robert Varga [Sun, 28 May 2023 13:08:37 +0000 (15:08 +0200)]
Migrate users of NormalizedNode.getIdentifier()

We have a replacement, NormalizedNode.name(), use that instead.

Change-Id: Iebcca6dde477b7e5c8dd74dc577e68abbee07662
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoMigrate callers of IncorrectNestingException.create() 91/106191/1
Robert Varga [Sun, 28 May 2023 13:03:34 +0000 (15:03 +0200)]
Migrate callers of IncorrectNestingException.create()

The static factory method is quite useless, migrate aware from it.

Change-Id: I386d8d13585b8a1627460615e8c84772fe9e21a1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoMigrate users of YangInstanceIdentifier.{create,empty}() 90/106190/1
Robert Varga [Sun, 28 May 2023 12:54:27 +0000 (14:54 +0200)]
Migrate users of YangInstanceIdentifier.{create,empty}()

We have of() methods to replace these, migrate users.

Change-Id: I041a20ee6dd0bbb56ee765ecf2788517bd6318d8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoAdopt yangtools-11.0.0-SNAPSHOT 86/104586/27
Robert Varga [Sat, 25 Feb 2023 10:50:36 +0000 (11:50 +0100)]
Adopt yangtools-11.0.0-SNAPSHOT

yangtools is finalizing its bits, which have reprecussions on MD-SAL
APIs. Synchronize with current snapshot so we can start addressing those
bits.

Change-Id: I7d331e28ace9c8b512f960f4452da1fa8d178d05
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Signed-off-by: Ruslan Kashapov <ruslan.kashapov@pantheon.tech>
11 months agoUpdate binding-dom adaptation to remove AugmentationNode 63/105463/45
Robert Varga [Mon, 22 May 2023 12:04:24 +0000 (14:04 +0200)]
Update binding-dom adaptation to remove AugmentationNode

AugmentationIdentifier and AugmentationNode are being removed from
yang-data-api.

This patch adapts mdsal-binding-dom-codec to reflect the
fact Augmentation no longer has one-to-one equivalent. This means that
users need to check whether the code tree node refers to an Augmentation
or to a regular DataObject.

One particular sore point is that toNormalized() can no longer return a
plain Entry of NormalizedNode, as Augmentations do not have a backing.
To solve this, we introduce NormalizedResult with two specializations,
NodeResult and AugmentationResult.

In order to deal with DTCL changes, we also memoize
dataBefore/dataAfter, as it guides LazyAugmentationModification's
correct identification whether the a node has appeared, was modified, or
disappeared.

JIRA: MDSAL-820
Change-Id: I0360fd8f74ddb6df82ba64f7a87f6d92ce855162
Signed-off-by: Ruslan Kashapov <ruslan.kashapov@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoImprove AbstractDataTreeChangeListenerTest 79/106179/3
Robert Varga [Sat, 27 May 2023 00:39:13 +0000 (02:39 +0200)]
Improve AbstractDataTreeChangeListenerTest

Add dedicated @FunctionalInterfaces instead of generic Function and make
sure we match each matcher in order an only once.

Change-Id: I9e597a6abc2c1545b5156e438e1ce94136aa68b5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoModernize AbstractDataTreeChangeListenerTest a bit 78/106178/1
Robert Varga [Fri, 26 May 2023 23:07:40 +0000 (01:07 +0200)]
Modernize AbstractDataTreeChangeListenerTest a bit

Use List for changes, along with local variable type inference. Also
make sure we complete whenever we have at least the number of expected
changes.

Change-Id: I4b05fbc9ee02315312d4e0ecaad0aa09f1b371f3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoBump upstreams 77/106177/1
Robert Varga [Fri, 26 May 2023 21:02:38 +0000 (23:02 +0200)]
Bump upstreams

Adopt:
- odlparent-12.0.6
- yangtools-10.0.7

Change-Id: I509da62c6d136ff66a12d99348389be0aa626b19
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 38664cbc750864dcffa8537b93ce4aa60b1cadb3)

11 months agoImprove BindingCodecTree.getSubtreeCodec() 76/106176/2
Robert Varga [Fri, 26 May 2023 21:51:09 +0000 (23:51 +0200)]
Improve BindingCodecTree.getSubtreeCodec()

The only implementation we have returns non-null and throws exceptions.
Promote that behaviour to how the method is meant to operate.

Change-Id: I836ee8adb20d23b7b9938dbdeb827aa7a5443bc2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoImprove BindingCodecContext.getCodecContextNode() 75/106175/1
Robert Varga [Fri, 26 May 2023 21:45:56 +0000 (23:45 +0200)]
Improve BindingCodecContext.getCodecContextNode()

This method always returns @NonNull, document that. Also improve the IAE
thrown on mismatched input and eliminate
SchemaRootCodecContext.create().

Change-Id: Icbd36df64fb5027698a80bd0ba0984b9f55777d4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoSimplify LazyDataObjectModification.childCache 57/106157/2
Robert Varga [Thu, 25 May 2023 16:25:44 +0000 (18:25 +0200)]
Simplify LazyDataObjectModification.childCache

Simplify the signature of internal list. Also mark a FIXME for the case
which needs to be updated.

JIRA: MDSAL-820
Change-Id: I24be9cfc12bd0aed89568bf9f1ab453c51c54d1a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoDitch use of LinkedList in BindingCodecContext 56/106156/1
Robert Varga [Thu, 25 May 2023 15:12:33 +0000 (17:12 +0200)]
Ditch use of LinkedList in BindingCodecContext

LinkedList is a rather ugly thing performance-wise, use an ArrayList
instead.

Change-Id: I6f40a24bc7b22dc07ea6c809a44a796f1cdb9b54
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoModernize BindingCodecContext 54/106154/1
Robert Varga [Thu, 25 May 2023 13:11:33 +0000 (15:11 +0200)]
Modernize BindingCodecContext

Use local variable type inference and instanceof patterns to make things
a tad clearer.

Change-Id: I4b0e2634a08edb2f73e4586356d380063520fc48
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoAdd CodecDataObjectAnalysis 28/106128/6
Robert Varga [Mon, 22 May 2023 22:14:55 +0000 (00:14 +0200)]
Add CodecDataObjectAnalysis

We will be separating out DataObjectCodecContext into two classes, and
the new one will need to be able to create proxies.

Separate out all the analytics and indexing into a separate DTO, which
can be constructed externally, so the new classes can construct them
separately.

This also necessitates splitting out bindingChildArg() into a separate
class -- but we still want to migrate that to RuntimTypes at some point.

JIRA: MDSAL-820
Change-Id: I970b8f92443a9faf57c1786239e2f552f7ff938d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoClean up DataContainerCodecContext exception handling 27/106127/2
Robert Varga [Mon, 22 May 2023 23:13:00 +0000 (01:13 +0200)]
Clean up DataContainerCodecContext exception handling

We are getting confused between immediate throws and returns. The
exception factory methods should be returning the exception and not
throwing it.

Fix this up and add a SpotBugs annotation so that throws are guarded.
Also mark IncorrectNestingException for evolution. Final improvement
that we now have a completely-static factory method.

Change-Id: I5262c0dbb31d6935f258909828aac5331c70801b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoImprove DataContainerCodecPrototype safety 26/106126/4
Robert Varga [Mon, 22 May 2023 17:52:12 +0000 (19:52 +0200)]
Improve DataContainerCodecPrototype safety

Before making any changes to the codec, make sure the prototype enforces
invariants, so things like nulls do not sneak in.

JIRA: MDSAL-820
Change-Id: I6c15f686bfde20b5f4516d9ad0b0f40007d689c9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoClean up NonCachingCodec 25/106125/1
Robert Varga [Mon, 22 May 2023 16:49:15 +0000 (18:49 +0200)]
Clean up NonCachingCodec

Use requireNonNull() and make the codec final, as it is only used as-is.

Change-Id: I59c25c4bcf795e193ac7af764cee9fa868c8435f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoisSubstitutionFor() should be final 23/106123/1
Robert Varga [Mon, 22 May 2023 16:09:18 +0000 (18:09 +0200)]
isSubstitutionFor() should be final

Having a static final method guards against potential overlaps, which is
exactly what we want.

Change-Id: I557b80251f5472e57c0ba86853e30d498c515d8a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
11 months agoRemove BindingDataObjectCodecTreeNode.writeAsNormalizedNode() 20/106120/1
Robert Varga [Mon, 22 May 2023 12:12:10 +0000 (14:12 +0200)]
Remove BindingDataObjectCodecTreeNode.writeAsNormalizedNode()

This is a leak of implementation internals, not used anywhere but inside
the implementation.

JIRA: MDSAL-820
Change-Id: I3869dd490eb94f218ea86ff7b164ac05f2f5a9e5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoDo not mock YangInstanceIdentifier.PathArgument 19/106019/2
Robert Varga [Thu, 18 May 2023 06:25:01 +0000 (08:25 +0200)]
Do not mock YangInstanceIdentifier.PathArgument

Use a real NodeIdentifier instead of mocking, as PathArgument is getting
sealed.

Change-Id: I30a86490a4430226d14a5391ac13e1829fe4ebe5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoConvert ietf-type-util to a JPMS module 86/105986/3
Robert Varga [Tue, 16 May 2023 01:40:13 +0000 (03:40 +0200)]
Convert ietf-type-util to a JPMS module

Correct the package and turn the artifact into an explicit module. Also
fix up dependencies on mdsal-binding-spec-util.

JIRA: MDSAL-826
Change-Id: Ib2ad5d82ae9350794d11e0fdf2853e55e8f755db
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoIntegrate AbstractIetfInetUtil 85/105985/2
Robert Varga [Tue, 16 May 2023 01:23:44 +0000 (03:23 +0200)]
Integrate AbstractIetfInetUtil

We have a single specialization, remove INSTANCE and make sure methods
are static.

JIRA: MDSAL-826
Change-Id: I051482f26837d216bbd68c3705beb0c6ec609b2d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoRemove unnecessary version declaration 84/105984/2
Robert Varga [Tue, 16 May 2023 01:22:57 +0000 (03:22 +0200)]
Remove unnecessary version declaration

We are inheriting version from project parent, hence there's no point in
overriding version.

Change-Id: I573a61364ab6ddeea9dad9a1e2a929c58b461ca4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoMake factories static 83/105983/2
Robert Varga [Tue, 16 May 2023 01:06:21 +0000 (03:06 +0200)]
Make factories static

Factories are invariants: there is no point in storing them in instance
fields.

JIRA: MDSAL-826
Change-Id: Ic23a8439978fc872b18e2206bccaffffb463f3e2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoRemove method specializations 82/105982/3
Robert Varga [Tue, 16 May 2023 00:42:17 +0000 (02:42 +0200)]
Remove method specializations

AbstractIetfInetUtil is properly specialized, really, remove subclass
indirection.

JIRA: MDSAL-826
Change-Id: Ic60684d461fdf56896a3dffaf3d3ef92600994a0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoMove AbstractIetfInetUtil 81/105981/3
Robert Varga [Mon, 15 May 2023 23:29:28 +0000 (01:29 +0200)]
Move AbstractIetfInetUtil

As a first step in eliminating IetfInetUtil, move AbstractIetfInetUtil
and its tests.

JIRA: MDSAL-826
Change-Id: If558e9fc17f801097b868e8bb5ff261b241c3a2e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoEliminate IetfYangUtil.INSTANCE 80/105980/2
Robert Varga [Mon, 15 May 2023 22:33:44 +0000 (00:33 +0200)]
Eliminate IetfYangUtil.INSTANCE

All methods are purely static, there is no point to indirect through a
particular instance.

JIRA: MDSAL-826
Change-Id: Ie4164ca8279e2809d72209340d91c595451008f1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoMake IetfYangUtil factories static 79/105979/2
Robert Varga [Mon, 15 May 2023 22:26:52 +0000 (00:26 +0200)]
Make IetfYangUtil factories static

These are instance-invariants, share them between instantiations.

JIRA: MDSAL-826
Change-Id: Ia025b3c9e0e382599829064e30752e5146e4becf
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoIntegrate AbstractIetfYangUtil 78/105978/2
Robert Varga [Mon, 15 May 2023 22:23:29 +0000 (00:23 +0200)]
Integrate AbstractIetfYangUtil

We have a superfluous abstract class, integrate it into IetfYangUtil.

JIRA: MDSAL-826
Change-Id: Idbd6c19fdb30cabb3a7852d94971d1c47e8fb1a2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoMove AbstractIetfYangUtil 77/105977/2
Robert Varga [Mon, 15 May 2023 22:11:08 +0000 (00:11 +0200)]
Move AbstractIetfYangUtil

We are about to specialize AbstractIetfYangUtil, move it to its sole
user.

JIRA: MDSAL-826
Change-Id: I1d86382da66b0c6af2b4c76766fa48ea8014c27d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoMove IPv4 string utilities 76/105976/2
Robert Varga [Mon, 15 May 2023 21:59:21 +0000 (23:59 +0200)]
Move IPv4 string utilities

AbstractIetfYangUtil depends on AbstractIetfInetUtil, which is not nice.
Move the two methods needed to Ipv4Utils, so we break that dependency.

JIRA: MDSAL-826
Change-Id: I097738ca75c03ebe4292149f353dfa0d29a4197d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoMove INET{4,6}_LENGTH constants 75/105975/2
Robert Varga [Mon, 15 May 2023 21:48:53 +0000 (23:48 +0200)]
Move INET{4,6}_LENGTH constants

We have a few overlapping constants, make sure we co-locate them in
their respective utils, removing duplication as we go.

JIRA: MDSAL-826
Change-Id: Ib6302052388c9c196413fb7a44e32b8c69b1ed49
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoExpose Ipv{4,6}Util 74/105974/2
Robert Varga [Mon, 15 May 2023 21:38:21 +0000 (23:38 +0200)]
Expose Ipv{4,6}Util

These two utility classes form the common interface, expose them to
outside world.

JIRA: MDSAL-826
Change-Id: Iee050241e6ca52ae52c2f70abaecdd9077c6a400
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoMove addYangPathArgument() 65/105565/3
Robert Varga [Fri, 21 Apr 2023 00:04:11 +0000 (02:04 +0200)]
Move addYangPathArgument()

This method is only used for DataContainerCodecContext, there is just no
reason to pollute NodeCodecContext with this method. Reduces coupling
towards YangInstanceIdentifier.PathArgument a tiny bit.

Change-Id: Iecbb7c11f28a49282d6224229890f63eab33b311
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoConvert mdsal-dom-schema-osgi to a JPMS module 13/105813/4
Samuel Schneider [Wed, 3 May 2023 15:51:06 +0000 (17:51 +0200)]
Convert mdsal-dom-schema-osgi to a JPMS module

mdsal-binding-dom-codec-osgi is a rather simple artifact.
Convert it to a JPMS module.

JIRA: MDSAL-748
Change-Id: I00e2e11047f4580ef7d443c4baefc036a1d0a58e
Signed-off-by: Samuel Schneider <samuel.schneider@pantheon.tech>
12 months agoClean up IETF module names 38/105938/3
Robert Varga [Sat, 13 May 2023 21:20:22 +0000 (23:20 +0200)]
Clean up IETF module names

The primary key is the IETF module name, make sure that is reflected in
packaging. The basic idea here is that differing revisions and up
reflecting diffent package names.

This patch allows for differing revisions to exist based on standard
names and the revision -- whereas previously we used the document as a
starting point for the namespace.

JIRA: MDSAL-752
Change-Id: I3ea3f910d2c07dad8396c54fa03044ac6a4ad62b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoUpgrade IANA models 37/105937/1
Robert Varga [Sat, 13 May 2023 20:53:28 +0000 (22:53 +0200)]
Upgrade IANA models

Adopt:
- iana-if-type@2023-01-26.yang
- iana-routing-types@2022-08-19.yang

Change-Id: I9ce147047714d8f8ee38fd6119fa47d5954acafc
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoAdd Automatic-Module-Name declarations 61/105661/8
Samuel Schneider [Tue, 25 Apr 2023 14:48:47 +0000 (16:48 +0200)]
Add Automatic-Module-Name declarations

Update all packaged models to include Automatic-Module-Name
with correct JPMS module naming.

JIRA: MDSAL-752
Change-Id: I7a8ee5081d97aed0a72570698c4ec729ab57a717
Signed-off-by: Samuel Schneider <samuel.schneider@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoRemove convenience model artifacts 23/105723/5
Samuel Schneider [Thu, 27 Apr 2023 10:45:28 +0000 (12:45 +0200)]
Remove convenience model artifacts

Remove empty artifacts as they do not contribute anything to the actual
picture and act only as maven dependency shortcut.

JIRA: MDSAL-823
Change-Id: I01c83ae3e624582048a47d013082d62e983a2590
Signed-off-by: Samuel Schneider <samuel.schneider@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoFix runtime type search 73/105773/2
Robert Varga [Tue, 2 May 2023 11:19:54 +0000 (13:19 +0200)]
Fix runtime type search

When searching for children, we should be cognizant of the fact that we
might be looking at an inherited contract -- such as 'output' of an
'action' inherited through 'uses'. Extend the runtime search algorithm
to also look at previous() axis.

JIRA: MDSAL-824
Change-Id: Ic2f57b266825c6121f7bd6156a86112abff4b67a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 months agoAdd tests for BindingObjects with List and LeafLists 57/105657/2
Peter Suna [Tue, 25 Apr 2023 14:03:31 +0000 (16:03 +0200)]
Add tests for BindingObjects with List and LeafLists

These tests cover scenarios for ordered and unordered lists and leaf-lists,
including nested lists within containers.The tests also verify the correct
behavior of user, system-ordered and un-keyed lists.

Signed-off-by: Peter Suna <peter.suna@pantheon.tech>
Change-Id: Id9e85133fe767a22953970e96f9eb6b26a1bd068