netconf.git
13 months agoRename aaa-authn-odl-plugin to netconf-auth-aaa 59/105759/2
Robert Varga [Sun, 30 Apr 2023 19:39:20 +0000 (21:39 +0200)]
Rename aaa-authn-odl-plugin to netconf-auth-aaa

This a plugins/ layer thing, as it integrates with AAA. Rename the
artifact, updating references. Also eliminate the -no-cluster part, as
it completely the same as odl-aaa-netconf-plugin.

JIRA: NETCONF-944
Change-Id: I8fdf72415c647647602857bcb6426aa05c15d52c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoSplit out DefaultPasswordCredentials 58/105758/2
Robert Varga [Sun, 30 Apr 2023 19:29:31 +0000 (21:29 +0200)]
Split out DefaultPasswordCredentials

We would really like a default implementation coming from the API, but
this is really the best we can do for now.

Change-Id: I0cf30a2e86da0efc6c480f0404cf59dd0c2c9cc0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoEliminate odl-netconf-tcp 56/105756/2
Robert Varga [Sun, 30 Apr 2023 18:41:53 +0000 (20:41 +0200)]
Eliminate odl-netconf-tcp

Integrate the TCP server into netconf-nb, where it really belongs. At
some point this will be eliminated via adoption of individual
transports.

JIRA: NETCONF-945
Change-Id: Iffdc234a655a9643589ab7280c6a6d00d2b805ac
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRename mdsal-netconf-impl to netconf-nb 55/105755/1
Robert Varga [Sun, 30 Apr 2023 18:27:31 +0000 (20:27 +0200)]
Rename mdsal-netconf-impl to netconf-nb

This is a northbound NETCONF application bound to MD-SAL, rename it as
such.

JIRA: NETCONF-945
Change-Id: I7c01fbeea0145e5707f3c0d9fde1409db51fc039
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoMove NetconfMapperAggregator 54/105754/2
Robert Varga [Sun, 30 Apr 2023 18:05:43 +0000 (20:05 +0200)]
Move NetconfMapperAggregator

NetconfMapperAggregator is well-known among the various implementations
for its aggregation capability. Move it one layer down, so it gets
provided by netconf-server-mdsal, allowing more services to be moved
there.

JIRA: NETCONF-945
Change-Id: I69da96397683ad1181e27ccdcfefa6c7ea1bef6c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRemove NetconfMapperAggregator.OSGI_TYPE 53/105753/1
Robert Varga [Sun, 30 Apr 2023 17:52:02 +0000 (19:52 +0200)]
Remove NetconfMapperAggregator.OSGI_TYPE

We do not want strong binding here, as it just obscures our
dependencies. At the end of the day we want to make things a lot more
modular, but that will require a significant re-thinking of how the
server is wired.

JIRA: NETCONF-945
Change-Id: Iacd243dffe5a8d8884a1777ddc744168e470ab00
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoClean up NetconfSessionMonitoringService 52/105752/1
Robert Varga [Sun, 30 Apr 2023 17:24:11 +0000 (19:24 +0200)]
Clean up NetconfSessionMonitoringService

Use direct collection to ImmutableList and BindingMap to simplify
indexing.

JIRA: NETCONF-945
Change-Id: I7e8c3fbbb2222842fedcc6e26c599da4a824e7a5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRename netconf-server-mdsal packages 51/105751/1
Robert Varga [Sun, 30 Apr 2023 16:56:17 +0000 (18:56 +0200)]
Rename netconf-server-mdsal packages

The base package should be netconf.server.mdsal, refactor code to make
that a reality.

JIRA: NETCONF-945
Change-Id: Ia61ae2b0a374369a9af058c91b9cdc5af58b715d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoClean up callhome-protocol dependencies 50/105750/1
Robert Varga [Sun, 30 Apr 2023 16:44:13 +0000 (18:44 +0200)]
Clean up callhome-protocol dependencies

We have a ton of used underclared dependencies, clean that up.

Change-Id: Iaae50726fb2048ef1c1c25cf2659c3743f23d12f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoClean up callhome-provider dependencies 49/105749/1
Robert Varga [Sun, 30 Apr 2023 16:41:51 +0000 (18:41 +0200)]
Clean up callhome-provider dependencies

We have a ton of used undeclared dependencies, clean that up.

Change-Id: I4fbd53a8f02ebc5c4232182d0329e59583d8daff
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRemove unneeded rfc6022 dependency 48/105748/1
Robert Varga [Sun, 30 Apr 2023 16:32:40 +0000 (18:32 +0200)]
Remove unneeded rfc6022 dependency

netconf-api no longer needs ietf-netconf-monitoring, remove that
dependency.

JIRA: NETCONF-945
Change-Id: I8a1a14c0ef1fb9e77196e7105ea05a0901d0dba5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoConnect odl-netconf-device with ietf-netconf 47/105747/3
Robert Varga [Sun, 30 Apr 2023 16:10:10 +0000 (18:10 +0200)]
Connect odl-netconf-device with ietf-netconf

Session identifier we expose in odl-netconf-device really matches the
definition of session-id-type. Make sure we connect the two.

JIRA: NETCONF-945
Change-Id: Ifa62a8b5dfa88aee607caf5502d76d704f1d5286
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoImprove NETCONF session ID handling 46/105746/5
Robert Varga [Fri, 28 Apr 2023 18:56:42 +0000 (20:56 +0200)]
Improve NETCONF session ID handling

The session ID has a well-defined semantics, which are not a String, nor
a long, but rather an Uint32 with minimum value of 1 -- as captured by
SessionIdType.

Use SessionIdType as the proper type-safe capture of this construct
across the project.

This also forces netconf-testtool to use proper lifecycle hooks, so that
the session ID is propagated.

JIRA: NETCONF-945
Change-Id: If197be95e8ac4943409eb4e00476a57269828e18
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoIntegrate callhome-status 45/105745/1
Robert Varga [Fri, 28 Apr 2023 17:48:34 +0000 (19:48 +0200)]
Integrate callhome-status

callhome-status.yang as a standalone model does not make much sense,
integrate it into odl-netconf-callhome-server.yang, which simplifies
things a bit.

JIRA: NETCONF-1003
Change-Id: I133a54d95b87fd0f08fd458dd615ca27f22d412c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoReplace netconf-util with netconf-common-mdsal 44/105744/2
Robert Varga [Fri, 28 Apr 2023 16:24:05 +0000 (18:24 +0200)]
Replace netconf-util with netconf-common-mdsal

netconf-util has no place in protocol/, as the only public API it
exposes is a plugins/-level construct. Rehost the classes and eliminate
netconf-util.

JIRA: NETCONF-1002
Change-Id: I7e64df22d3d5857baf8876ecd0e1b85e0ea233cb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoSeparate out netconf-test-util 42/105742/3
Robert Varga [Fri, 28 Apr 2023 15:15:34 +0000 (17:15 +0200)]
Separate out netconf-test-util

We have testing substrate, with tests and resources, packaged as
test-jar in netconf-util. Separate these out into an explicit jar, which
tests depend on.

JIRA: NETCONF-1002
Change-Id: I07ab16b55ae4c83231074123ff9d48501e1d0c3b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoMove netconf.util.xml to netconf-client 41/105741/4
Robert Varga [Fri, 28 Apr 2023 14:48:17 +0000 (16:48 +0200)]
Move netconf.util.xml to netconf-client

This package is only used internally by netconf-client, move it to its
sole user and clean up HardcodedNamespaceResolver to use Map.of().

JIRA: NETCONF-1002
Change-Id: I219c849362fb4b02297fd8fa243a0ee171f00f14
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRename mdsal-netconf-connector to netconf-server-mdsal 32/105732/9
Robert Varga [Fri, 28 Apr 2023 10:57:20 +0000 (12:57 +0200)]
Rename mdsal-netconf-connector to netconf-server-mdsal

This is plugin which realizes the NETCONF server on top of MD-SAL APIs.
Move it plugins/ directory and adjust its name.

JIRA: NETCONF-945
Change-Id: I0aac6f4986ce5929dfd564a0eb10aa3497ab456a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoClean up mdsal-netconf-monitoring dependencies 40/105740/3
Robert Varga [Fri, 28 Apr 2023 14:01:38 +0000 (16:01 +0200)]
Clean up mdsal-netconf-monitoring dependencies

We are not using netconf-util here, do not depend on it.

Change-Id: I46dacabe3254a245f327e09d7d12c6f51c0f177f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoDrop netty-transport dependency from netconf-util 39/105739/3
Robert Varga [Fri, 28 Apr 2023 13:58:58 +0000 (15:58 +0200)]
Drop netty-transport dependency from netconf-util

netconf-util is completely independent of netty, make sure we do not
depend on netty-transport.

Change-Id: I09628fd2a64e22d80cf5aa5f39e2fe4c8d08aab3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoMigrate NetconfUtilTest 38/105738/4
Robert Varga [Fri, 28 Apr 2023 13:54:20 +0000 (15:54 +0200)]
Migrate NetconfUtilTest

Do not use xmlunit-legacy.

Change-Id: I793171927656a2c7b4eb536c33ec358cfeba20dd
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoClean up netconf-server dependencies 30/105730/10
Robert Varga [Fri, 28 Apr 2023 09:43:25 +0000 (11:43 +0200)]
Clean up netconf-server dependencies

We have quite a few warnigs, clean them up.

JIRA: NETCONF-945
Change-Id: I2989d3d4c4489eced4f384f9e544557baac27e2c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRemove netconf.util.NetconfConfiguration 29/105729/9
Robert Varga [Fri, 28 Apr 2023 09:24:15 +0000 (11:24 +0200)]
Remove netconf.util.NetconfConfiguration

This class is not really used, nor is the configuration file. Remove
the interface and all implementation details.

Change-Id: I8d8458c96509fb21c9f9bac7cf59d3567277ceb3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRemove NetconfUtil.checkIsMessageOk() 37/105737/3
Robert Varga [Fri, 28 Apr 2023 13:43:04 +0000 (15:43 +0200)]
Remove NetconfUtil.checkIsMessageOk()

This method is not used anywhere except in test. Remove it to make it
clear NetconfUtil is the NormalizedNode integration thing.

Change-Id: I289ab3fc79f4d6fcde029213c5464043d1b53d1c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoIncrease timeout for ssh transport integration test 20/105720/2
Ruslan Kashapov [Thu, 27 Apr 2023 08:05:23 +0000 (11:05 +0300)]
Increase timeout for ssh transport integration test

JIRA: NETCONF-590
Change-Id: I9e36b66e3f3e0ba09b66d6c76f4da148c5973019
Signed-off-by: Ruslan Kashapov <ruslan.kashapov@pantheon.tech>
13 months agoRemove OperationalDatastoreListener 27/105727/8
Robert Varga [Fri, 28 Apr 2023 08:18:58 +0000 (10:18 +0200)]
Remove OperationalDatastoreListener

This is a pretty useless indirection, which is forcing us to store the
listener path in the object. Remove the class and adjust its users --
which allows us to no retain the listened path.

Change-Id: Id9c07d487c315dddbb1c072082aa4465c67a04db
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoMove FramingMechanism 28/105728/5
Robert Varga [Fri, 28 Apr 2023 09:14:56 +0000 (11:14 +0200)]
Move FramingMechanism

This is well-known construct defined in RFC6241 at messages layer.
Move the enumeration into netconf.api.messages.

JIRA: NETCONF-945
Change-Id: Ifab96b8bb7c72307062f31b6ad02c0dfca05c6cf
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRemove netconf-notifications-{api,impl} remnants 31/105731/3
Robert Varga [Fri, 28 Apr 2023 10:31:49 +0000 (12:31 +0200)]
Remove netconf-notifications-{api,impl} remnants

The previous patch did not clean up things completely, this patch
finishes the job.

JIRA: NETCONF-945
Change-Id: I39e64d830a45b118761f1deae76b5fe70e182dc7
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoIntegrate netconf-notifications-api into netconf-server 24/105724/3
Robert Varga [Thu, 27 Apr 2023 11:05:22 +0000 (13:05 +0200)]
Integrate netconf-notifications-api into netconf-server

netconf-notifications-api is decidedly server-side, integrate it into
netconf-server.

JIRA: NETCONF-945
Change-Id: I8c901429e054d4f3f29943118ec608293e24e5b3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoPromote Ivan Hraško to a committer 19/105719/3
Robert Varga [Wed, 26 Apr 2023 19:44:14 +0000 (21:44 +0200)]
Promote Ivan Hraško to a committer

Ivan has been contributing to various parts of the netconf project,
providing end-user support, patches and guiding others.

This patch grants him committer privileges.

Change-Id: I8a425c86f142249ab0970c204fb008cef09a9a6f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoClean up DummyMonitoringService 21/105721/2
Robert Varga [Thu, 27 Apr 2023 09:04:15 +0000 (11:04 +0200)]
Clean up DummyMonitoringService

Do not use Guava's Collections2 -- streams can do the same thing.

Change-Id: I40d783c772c7f62e05458611083c4e6307fd608b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoMove netconf.api.monitoring 15/105715/5
Robert Varga [Wed, 26 Apr 2023 17:55:44 +0000 (19:55 +0200)]
Move netconf.api.monitoring

This API is a server-side thing, rename it to
netconf.server.api.monitoring and document the package.

JIRA: NETCONF-945
Change-Id: I1cd390dcb3cfb6a75493485c8727c366c3f53e20
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoIntegrate netconf-mapping-api into netconf-server 14/105714/9
Robert Varga [Wed, 26 Apr 2023 18:40:02 +0000 (20:40 +0200)]
Integrate netconf-mapping-api into netconf-server

All interfaces in netconf-mapping-api are a server-side thing. Rehost
them to netconf.server.api.operations. This in turn forces artifacts
to declare which side of netconf-api they reside on.

This effects the rename to netconf.server.api.operations, which is more
descriptive than 'mapping'.

JIRA: NETCONF-945
Change-Id: Ia6ce8e944569c2e2487a2b14f01046ff2a144f73
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoUpdate Tomas's name 18/105718/2
Robert Varga [Wed, 26 Apr 2023 19:41:07 +0000 (21:41 +0200)]
Update Tomas's name

I18N is powerful, use the proper name.

Change-Id: Id3940c74789a69030afb63ec38ae5daa1b4aff5a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoUpdate timezones for committers 17/105717/2
Robert Varga [Wed, 26 Apr 2023 19:39:20 +0000 (21:39 +0200)]
Update timezones for committers

Current committers all sit in Europe/Bratislava, adjust that detail.

Change-Id: I7af9fc4b73f7e587924a5bb96134b5fd3758e9ad
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoMove NetconfServerDispatcher to netconf.server.api 13/105713/1
Robert Varga [Wed, 26 Apr 2023 17:09:33 +0000 (19:09 +0200)]
Move NetconfServerDispatcher to netconf.server.api

There is no point in polluting netconf-api with server-side constructs,
this move takes the first step in sanitizing the dependency tree.

Unfortunately we cannot move NetconfServerDispatcherImpl, as it is tied
down by mdsal-netconf-impl's configuration compatibility constraints
(i.e. the configuration is tied to NetconfMonitoringServiceImpl).

JIRA: NETCONF-945
Change-Id: I0d1b3631d2af50ca7291bfca06a9ddd490c26a71
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoIntroduce netconf.server.{api,impl} 12/105712/1
Robert Varga [Wed, 26 Apr 2023 17:01:15 +0000 (19:01 +0200)]
Introduce netconf.server.{api,impl}

We have server-side constructs strewn across multiple components,
starting with netconf-api, which makes reasoning about what is what a
bit difficult.

Introduce netconf.server.api package to hold public APIs for consumption
and netconf.server.impl for default implementations of those constructs.

Populate them with SessionIdProvider (and its default implementation).

JIRA: NETCONF-945
Change-Id: Id4ea72c6155c6341f4dc37c78edabba90ec55e93
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoNetconfOperationRouter should not expose close() 09/105709/4
Robert Varga [Wed, 26 Apr 2023 15:42:22 +0000 (17:42 +0200)]
NetconfOperationRouter should not expose close()

The close() method is a component contract, it should not be part of the
functional definition. This fixes a warning around the possibility of an
InterrupatedException.

JIRA: NETCONF-945
Change-Id: Ic26e9fe1d56b8aff6493ce6537196f525022a5f3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoClean up netconf-events-mdsal dependencies 11/105711/2
Robert Varga [Wed, 26 Apr 2023 16:12:21 +0000 (18:12 +0200)]
Clean up netconf-events-mdsal dependencies

We have a ton of warnings, fix them up by cleaning up the dependencies
section.

Change-Id: I3d06384f0177d7d666a78ca99f0e75fa58be6aa1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoSimplify OperationNameAndNamespace constructor 10/105710/2
Robert Varga [Wed, 26 Apr 2023 15:56:49 +0000 (17:56 +0200)]
Simplify OperationNameAndNamespace constructor

There is no point in assigning a temporary null to the element.

Change-Id: Id5e860b19d006ad1cad8a9e847535ef88413927d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoSharpen netconf-server methods used in tests 08/105708/2
Robert Varga [Wed, 26 Apr 2023 15:39:38 +0000 (17:39 +0200)]
Sharpen netconf-server methods used in tests

We have a couple of warnings around nulls from get* methods. Switch to
nonnull*/require* to make the testing intent clearer.

Change-Id: Ie6a46cecdcbfbbb1a6a02014cf34b5aa7022d59c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoMove mdsal-netconf-notification 93/105693/8
Robert Varga [Wed, 26 Apr 2023 01:10:57 +0000 (03:10 +0200)]
Move mdsal-netconf-notification

This is the core application supporting NETCONF notifications, as
defined by RFC5277. It provides services to the NETCONF server
component, as well as basic notification sources of RFC7895/RFC8255
YANG library.

Move it to apps/netconf-events-mdsal and document its purpose.

JIRA: NETCONF-944
Change-Id: Ie778218b6a302eb147391e46e649989477a892be
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoClean up mdsal.monitoring.GetSchema 96/105696/4
Robert Varga [Wed, 26 Apr 2023 03:06:13 +0000 (05:06 +0200)]
Clean up mdsal.monitoring.GetSchema

Handle non-null prerequisites as such, not allowing being null.

Change-Id: I250d7e1a85c70dd85ec15a93873eec34f5941442
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoAdd repostory documentation 95/105695/2
Robert Varga [Wed, 26 Apr 2023 02:09:23 +0000 (04:09 +0200)]
Add repostory documentation

To ease navigation for users of GitHub, add README.rst to document where
things are in the repository. This includes a ton of stale links, which
will be filled in by future constributions.

Change-Id: I2d8945911aa91008ce4ca45b25dd8004eb6ed2c7
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRename NetConf documentation 94/105694/2
Robert Varga [Wed, 26 Apr 2023 02:06:59 +0000 (04:06 +0200)]
Rename NetConf documentation

The headline is misleading: NetConf in this context really means
"netconf.git documentation", which in turn should be known as
"NETCONF/RESTCONF Documentation".

Change-Id: I9e4b68e8dd825f615fd486bad54ad431e6cc2b21
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRemove SchemaContext references 92/105692/1
Robert Varga [Wed, 26 Apr 2023 00:01:53 +0000 (02:01 +0200)]
Remove SchemaContext references

SchemaContext is going away, improve passed argument to
EffectiveModelContext and add a FIXME for migration.

Change-Id: I20bbae6277b677f991709e756d8589b3d5d30436
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoClean up MdsalNetconfOperationService 90/105690/1
Robert Varga [Tue, 25 Apr 2023 23:59:39 +0000 (01:59 +0200)]
Clean up MdsalNetconfOperationService

This class is an implementation detail, do not leak it outside of the
package. Also eliminate OperationProvider, as it is an useless
indirection.

Change-Id: I0fce710493cfdf9aafea52b645dba3683043fbdf
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoClean up tests a bit 89/105689/1
Robert Varga [Tue, 25 Apr 2023 23:53:06 +0000 (01:53 +0200)]
Clean up tests a bit

Reorder fields, fix raw type warnings, remove superfluous empty lines.

Change-Id: I5bc3b2ef61e76a5746eb6df9932224343a0c1414
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoClean up NotificationMessage 82/105682/7
Robert Varga [Tue, 25 Apr 2023 20:13:01 +0000 (22:13 +0200)]
Clean up NotificationMessage

Use java.time.Instant to carry an immutable event time -- addressing two
SpotBugs warnings and making integration with DOMEvent/EventInstantAware
much mode sealmess.

JIRA: NETCONF-1000
Change-Id: I043c21abf7eb96368acfd73a6fddbc036e3ed7d3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoMigrate netconf-api's use of xmlunit 86/105686/3
Robert Varga [Tue, 25 Apr 2023 22:48:11 +0000 (00:48 +0200)]
Migrate netconf-api's use of xmlunit

This is a rather straighforward migration, pretty much exactly as
documented in the migration guide.

Change-Id: I18f2dce0bf2855af2f7ade48eb449ee9fc9125cc
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoMigrate NotificationsTransformUtilTest's use of xmlunit 85/105685/4
Robert Varga [Tue, 25 Apr 2023 22:38:20 +0000 (00:38 +0200)]
Migrate NotificationsTransformUtilTest's use of xmlunit

Migration of xmlunit is rather straighforward here, ditch the dependency
on xmlunit-legacy. Since we have accurate whitespace, we ditch that
particular leniency off. We still needs to ignore element order because
these are inherently unpredictable at NormalizedNode layer.

Change-Id: I090ae73dbc5fcb3f5d66c9fa6f066ba30c751beb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoCleanup NotificationsTransformUtilTest 84/105684/1
Robert Varga [Tue, 25 Apr 2023 22:11:30 +0000 (00:11 +0200)]
Cleanup NotificationsTransformUtilTest

Improve string format to closely match expectations.

Change-Id: Ie1740f52c1a21bcae66ee4aad0b9140b2ad6b305
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRemove NotificationRegistration 81/105681/2
Robert Varga [Tue, 25 Apr 2023 20:04:46 +0000 (22:04 +0200)]
Remove NotificationRegistration

Migrate the final two users of NotificationRegistration to plain
Registration and remove NotificationRegistration. On the implementation
side we also unify notification handling, so that the underlying
contract is implemented by a base class and individual specializations
just pass down required inputs.

Change-Id: I677ced2b1553de6fdc7ffe59646e2c220fbd27b6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoDisconnect NotificationPublisherRegistration 80/105680/2
Robert Varga [Tue, 25 Apr 2023 19:43:41 +0000 (21:43 +0200)]
Disconnect NotificationPublisherRegistration

Use a play yangtools.concepts.Registration as the baseline, which allows
us to use AbstractRegistration to manage the tie to the manager -- and
allows for a better thread-safety around concurrent close().

Change-Id: I33871bd59894d4ff95315dddeedcdd7b4e68f962
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRemove NotificationListenerRegistration 76/105676/4
Robert Varga [Tue, 25 Apr 2023 19:09:17 +0000 (21:09 +0200)]
Remove NotificationListenerRegistration

Replace final user of this specialization with
Registration/AbstractObjectRegistration. This eliminates a bit of
custom code and improves thread safety around concurrent shutdown
and un-registration.

Change-Id: I6ef8bb5e47124c795762e7bba27d73c88651fd64
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoDisconnect NetconfNotificationCollector registration 75/105675/5
Robert Varga [Tue, 25 Apr 2023 18:42:49 +0000 (20:42 +0200)]
Disconnect NetconfNotificationCollector registration

NotificationRegistration does is actually the same thing as
Registration, except it does not enforce idempotence. Replace its use in
NetconfNotificationCollector with Registration and use an explicit
AbstractObjectRegistration subclass.

This fixes potential problems with multiple (un)registrations of the
same object and opens up the possibility for future removal of locking,
as AbstractObjectRegistration knows whether it is closed or not.

Change-Id: I1ed8e1f74ee755d344815c511499a8dbfc9cce8d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoPropagate eventTime during notification transformation 83/105683/3
Robert Varga [Tue, 25 Apr 2023 21:13:16 +0000 (23:13 +0200)]
Propagate eventTime during notification transformation

Binding Notification objects expose the time when the event was
generated through an optional EventInstantAware interface. Recognize
when a Notification carries this annotation and propagate it correctly.

JIRA: NETCONF-1001
Change-Id: I06ce94ffbe11bafeedb60aaa28765e151de53b3f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoClean up netconf-notifications-api 74/105674/2
Robert Varga [Tue, 25 Apr 2023 18:32:18 +0000 (20:32 +0200)]
Clean up netconf-notifications-api

Pass through the documentation and fixup whitespace and Javadocs a bit.

Change-Id: I0bcbf720d54e1f5a682f923b4cbfb99e13108366
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoHide DeserializerExceptionHandler 73/105673/2
Robert Varga [Tue, 25 Apr 2023 17:56:13 +0000 (19:56 +0200)]
Hide DeserializerExceptionHandler

This is an implementation-internal class and the only occupant of
netconf.server.util package. Move it to netconf.server and hide it.

JIRA: NETCONF-945
Change-Id: I2569e5343ac2e303101dd07cd73ce9cfb5e18ec3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRename NetconfHelloMessage to HelloMessage 68/105668/3
Robert Varga [Tue, 25 Apr 2023 16:19:05 +0000 (18:19 +0200)]
Rename NetconfHelloMessage to HelloMessage

Let's keep things consistent by renaming NetconfHelloMessage to
HelloMessage -- similar to how we have NotificationMessage.

JIRA: NETCONF-1000
Change-Id: I50bfb9200dc6c7624a76eeac2b13f5324bedd7cb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoFix odl-netconf-connector packaging 72/105672/2
Robert Varga [Tue, 25 Apr 2023 17:23:26 +0000 (19:23 +0200)]
Fix odl-netconf-connector packaging

sal-netconf-connector no longer requires netconf-topology, fix that
packaging leak -- and moving it down to the three users we have.

Change-Id: Ib93804a81f63af89768e7b175a63feaa66dad6e9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoFix odl-netconf-test-tools packaging 71/105671/2
Robert Varga [Tue, 25 Apr 2023 17:19:57 +0000 (19:19 +0200)]
Fix odl-netconf-test-tools packaging

This feature should depend on odl-netconf-connector for the southbound
plugin. Fix that, eliminating packaging leaks of:
- mdsal.model/ietf-topology
- netconf/sal-netconf-connector
- netconf/sal-netconf-connector

Change-Id: Iac1951254c31df968d0c9b456ca5adb0edb71a23
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agosal-netconf-connector should not depend on notifications-api 70/105670/2
Robert Varga [Tue, 25 Apr 2023 16:48:57 +0000 (18:48 +0200)]
sal-netconf-connector should not depend on notifications-api

netconf-notifications-api is now a server-side plugin thing, do not
depend on it in the southbound plugin.

JIRA: NETCONF-1000
Change-Id: I30ff686b448ddcb3cefd2f7e3f816d27c68fdad4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRename NetconfNotification to NotificationMessage 66/105666/4
Robert Varga [Tue, 25 Apr 2023 15:47:28 +0000 (17:47 +0200)]
Rename NetconfNotification to NotificationMessage

We want to keep the 'Message' tie to 'NetconfMessage' explicit, let's
rename the class.

JIRA: NETCONF-1000
Change-Id: I2dd345f42f4ed5bea4cddc2f151d120e78dfab6a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRemove console output 67/105667/1
Robert Varga [Tue, 25 Apr 2023 16:03:38 +0000 (18:03 +0200)]
Remove console output

Tests should not output things directly to console, remove this output
and the corresponding suppression.

Change-Id: I69a1687cbf4cdb2e0772605f9c121cb74c2318a5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoClean up NetconfNotification constants 65/105665/1
Robert Varga [Tue, 25 Apr 2023 15:45:37 +0000 (17:45 +0200)]
Clean up NetconfNotification constants

NOTIFICATION_NAMESPACE is something we already publish in
XmlNetconfConstants, so reuse that field. Also hide tag names,
explicitly naming them *_TAG -- and tests assert hard-coded values, so
the implementation and validation is disconnected.

JIRA: NETCONF-1000
Change-Id: I621cf05fd679b995eeed8ee9d08376eab6b1098b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoHide NetconfHelloMessage.HELLO_TAG 64/105664/1
Robert Varga [Tue, 25 Apr 2023 15:40:05 +0000 (17:40 +0200)]
Hide NetconfHelloMessage.HELLO_TAG

This constant is only used internally, hide it.

JIRA: NETCONF-1000
Change-Id: I676408145962dc2299e0dd8534170eef4e320feb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoMove NetconfNotification to netconf-api 63/105663/1
Robert Varga [Tue, 25 Apr 2023 15:29:42 +0000 (17:29 +0200)]
Move NetconfNotification to netconf-api

Notification is a well-known message, keep it in netconf-api itself.

JIRA: NETCONF-1000
Change-Id: I07a15d8d21143d540fe2c43d1e4a84f147623a0e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRemove FailedNetconfMessage 20/105220/4
Robert Varga [Tue, 4 Apr 2023 13:42:23 +0000 (15:42 +0200)]
Remove FailedNetconfMessage

FailedNetconfMessage does not have a document, which breaks our mojo.
Separate out exception handling to keep things sane.

JIRA: NETCONF-1000
Change-Id: Ib855ffb0415669734b5da27dc5cbcfd50434dbac
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoMove NetconfMessageUtil 60/105660/2
Robert Varga [Tue, 25 Apr 2023 14:30:41 +0000 (16:30 +0200)]
Move NetconfMessageUtil

These utilities are only used on client-side, move them to
netconf-client.

JIRA: NETCONF-945
Change-Id: Icc96e6afba710c635f770d5a6e6deaf1d80158c8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRename netconf-impl to netconf-server 51/105651/6
Robert Varga [Tue, 25 Apr 2023 09:37:06 +0000 (11:37 +0200)]
Rename netconf-impl to netconf-server

This artifact contains only server-side things. Make sure to rename it
to reflect that.

JIRA: NETCONF-945
Change-Id: I13322553c4bdd8979fe564ce1337dfb9e43c7e7a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRemove CloseableUtil 59/105659/2
Robert Varga [Tue, 25 Apr 2023 14:16:36 +0000 (16:16 +0200)]
Remove CloseableUtil

This class is only used by netconf-server, where the closed services
cannot legally thrown an exception -- rendering the use superfluous.

Replace the use of closeAll() with a simple iteration and remove
CloseableUtil along with its test.

Change-Id: I990bfc189bec85e4aa6784f8c82411ce59031b19
JIRA: NETCONF-945
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRemove NetconfDocumentedException throws 56/105656/3
Robert Varga [Tue, 25 Apr 2023 13:43:29 +0000 (15:43 +0200)]
Remove NetconfDocumentedException throws

NetconfMessageUtil methods do not throw this exception, remove the
declaration.

Change-Id: Ib0ab7993cbe66c62508e3b95f7dff040a1ca8e8b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoOptimize NetconfMessageUtil.isErrorMessage() 55/105655/1
Robert Varga [Tue, 25 Apr 2023 13:39:58 +0000 (15:39 +0200)]
Optimize NetconfMessageUtil.isErrorMessage()

We are acquiring children twice -- which is expensive. The logic is
actually shared between size == 1 and size != 1, so just examine the
children to see if there is a matching element.

Change-Id: Ib79fd5a08c485e3e9849c5f925d200ba4db34ecc
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoOptimize NetconfMessageUtil.isOKMessage() 54/105654/1
Robert Varga [Tue, 25 Apr 2023 13:32:45 +0000 (15:32 +0200)]
Optimize NetconfMessageUtil.isOKMessage()

We are acquiring child elements twice, which is rather suboptimal.
Retain the list in local variable, which means we do not need to worry
about exceptions being thrown.

Change-Id: Iee2fbd9ea169ef9ab209643ef3a07518af7f04b0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoAdapt new UI for ODL 19/105219/7
Ivan Hrasko [Tue, 4 Apr 2023 12:54:33 +0000 (14:54 +0200)]
Adapt new UI for ODL

After updating to the latest swagger UI we have to bring back
some ODL adjustments: to load ODL APIs by default, etc.

JIRA: NETCONF-987
Change-Id: I878640bb12825da2a03a1c57ce19723c1ddc9f4d
Signed-off-by: Ivan Hrasko <ivan.hrasko@pantheon.tech>
Signed-off-by: OleksandrZharov <Oleksandr.Zharov@pantheon.tech>
13 months agoUpdate to Swagger UI v4.18.1 11/105111/10
OleksandrZharov [Thu, 30 Mar 2023 09:49:06 +0000 (11:49 +0200)]
Update to Swagger UI v4.18.1

Our Swagger UI is looking old fashioned.
Update Swager UI to newer version.

JIRA: NETCONF-987
Change-Id: I50d6896b0971f6528c6a504bba5cfe600681c533
Signed-off-by: OleksandrZharov <Oleksandr.Zharov@pantheon.tech>
Signed-off-by: Ivan Hrasko <ivan.hrasko@pantheon.tech>
13 months agoEliminate operational concept 82/105482/3
tobias.pobocik [Tue, 18 Apr 2023 08:53:44 +0000 (10:53 +0200)]
Eliminate operational concept

In sal-rest-docgen package there still resist some
remnants of bierman-02 operational data concept.

Now, we have just "data" for both "config" and "nonconfig" data.
By eliminating "config" and "operational" split we can get rid
of some unnecessary logic.

JIRA: NETCONF-992
Change-Id: I6b03e8ce43d75cb53ed14862b783d84fe03e542c
Signed-off-by: tobias.pobocik <tobias.pobocik@pantheon.tech>
Signed-off-by: Ivan Hrasko <ivan.hrasko@pantheon.tech>
13 months agoRemove XmlUtil.loadSchema() 04/105604/1
Robert Varga [Sat, 22 Apr 2023 15:39:48 +0000 (17:39 +0200)]
Remove XmlUtil.loadSchema()

This method is not used anywhere, remove it.

Change-Id: I671542122608d52428421da72fe263ef5c121fad
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRemove netconf.api.util.NetconfConstants 03/105603/1
Robert Varga [Sat, 22 Apr 2023 15:37:02 +0000 (17:37 +0200)]
Remove netconf.api.util.NetconfConstants

These constants are no longer used anywhere, remove them.

Change-Id: I1218cc05d94f930ea326b84ed0835a0151e7ffa3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoClean up findNamespaceOfTextContent() 01/105601/2
Robert Varga [Sat, 22 Apr 2023 15:26:58 +0000 (17:26 +0200)]
Clean up findNamespaceOfTextContent()

Use local variable type inference and co-locate extractNamespaces() next
to it, so they can be co-evolved.

Change-Id: If3d19679c40dd8d303e3143f6505502484310eb9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRemove XmlElement.checkUnrecognisedElements() 00/105600/2
Robert Varga [Sat, 22 Apr 2023 15:04:37 +0000 (17:04 +0200)]
Remove XmlElement.checkUnrecognisedElements()

These methods are only used in unit tests, remove them.

Change-Id: I14708977516d161f9bab11790cd8cac5a456293a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRemove XmlElement.getChildElementsWithSameNamespace() 99/105599/1
Robert Varga [Sat, 22 Apr 2023 15:02:57 +0000 (17:02 +0200)]
Remove XmlElement.getChildElementsWithSameNamespace()

This method is used only in unit tests. Remove it.

Change-Id: I5b864a152ba059fcfe247a6eb573fdf96a4fb9f9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRemove deprecated XmlElement methods 98/105598/1
Robert Varga [Sat, 22 Apr 2023 15:01:03 +0000 (17:01 +0200)]
Remove deprecated XmlElement methods

These methods have been deprecated for removal, remove them, as they
have replacements with better names.

Change-Id: Ifa25b6672937c0afd043bb435a77a91b72b35d4e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoSpeed up XmlElement text content methods 97/105597/1
Robert Varga [Sat, 22 Apr 2023 14:59:33 +0000 (16:59 +0200)]
Speed up XmlElement text content methods

getTextContent() should cache the length of children.
getOnlyTextContentOptionally() should cache the children.

Change-Id: Ib1e6eb43c156dbf3149d8478fc5825659588999f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoDo not use Collections2.filter() in XmlElement 96/105596/1
Robert Varga [Sat, 22 Apr 2023 14:54:13 +0000 (16:54 +0200)]
Do not use Collections2.filter() in XmlElement

We end up collectiing the filtered collection: perform the same
operation with stream().filter().collect().

Change-Id: Ib016b9f2deb500e23616e12e4aa0d4f4b4e1eb6c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoClean up XmlElement namespace handing 88/105588/2
Robert Varga [Sat, 22 Apr 2023 12:20:56 +0000 (14:20 +0200)]
Clean up XmlElement namespace handing

Use foo()/findFoo()/getFoo() to simplify naming of methods, cutting down
on ceremony around namespace/namespaceAttribute accesses. This allows us
to forgo Optional wrapping and reduce code duplication.

Change-Id: Ib3a9393b78c406dcbee85d3d91f338295fac0d11
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoImprove XmlElement.getAttributes() 87/105587/3
Robert Varga [Sat, 22 Apr 2023 11:54:59 +0000 (13:54 +0200)]
Improve XmlElement.getAttributes()

Use local variable type inference, cache the size and make sure we
validate node being an Attr.

Change-Id: Id75b7cac90b4cd801c81a1c33ba10bed7efef558
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRemove XmlElement.ElementFilteringStrategy 86/105586/3
Robert Varga [Sat, 22 Apr 2023 11:48:08 +0000 (13:48 +0200)]
Remove XmlElement.ElementFilteringStrategy

This really is just a Predicate<Element>, so just inline the semantics.

Change-Id: I475c5e95694d1ff90f68a6f70b7d94356cb7950f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoSpeed up XmlElement.getChildElementsInternal() 85/105585/2
Robert Varga [Sat, 22 Apr 2023 11:46:34 +0000 (13:46 +0200)]
Speed up XmlElement.getChildElementsInternal()

Compute size of childList only once and keep it as a loop-invariant.
Also use local variable type inference.

Change-Id: If3dbc9ff1cbd038a15140fe1297c5dc17e4d1311
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoFixup accidental push 79/105579/3
Robert Varga [Fri, 21 Apr 2023 09:28:42 +0000 (11:28 +0200)]
Fixup accidental push

7bb5a9a41b90dae65ee238c7a58ccfe9eb5d8387 was pushed directly by accident
and it requires a fixup. This patch provides that fixup.

Change-Id: I85c9a2cf322139cf2a84fe98bc7ba8e9e648d2a1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoBump upstreams 69/105569/6
Robert Varga [Fri, 21 Apr 2023 09:28:42 +0000 (11:28 +0200)]
Bump upstreams

Adopt:
- odlparent-12.0.5
- infrautils-5.0.4
- yangtools-10.0.6
- mdsal-11.0.9
- controller-7.0.6
- aaa-0.17.8

Change-Id: I04ec184ebcfc1464f335835de528a8724bce1c8a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoClean up XmlElement a bit 77/105577/1
Robert Varga [Sat, 22 Apr 2023 10:07:35 +0000 (12:07 +0200)]
Clean up XmlElement a bit

Use Optional facilities to reduce orElseThrows() calls. Also improve
equals() by using instanceof pattern.

Change-Id: I932f4feb38c1f77c637c0844cd8f39bef5b47841
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoImprove XmlBodyReaderMountPointTest 76/105576/1
Robert Varga [Sat, 22 Apr 2023 10:06:41 +0000 (12:06 +0200)]
Improve XmlBodyReaderMountPointTest

Use getDataChildByArg() to simplify our asssertions, making the flow a
bit more obvious.

Change-Id: I2f19ad6b8f2dfecd58f97046290b711d97792b74
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoSimplify getSchemaFromRpc() a bit 75/105575/1
Robert Varga [Sat, 22 Apr 2023 10:05:14 +0000 (12:05 +0200)]
Simplify getSchemaFromRpc() a bit

We know the input is always ContainerNode and we have childByArg()
method which skips the Optional ceremony.

Change-Id: I451b93ec9a851b173bbb63097ed2886a48121670
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoTransactionProvider should be final 74/105574/1
Robert Varga [Sat, 22 Apr 2023 10:03:41 +0000 (12:03 +0200)]
TransactionProvider should be final

We have a bit of dancing around with Optional through methods which
might be subclassed by downstreams. Prevent that by making the class
final and drop back to talking to the internal field only.

Change-Id: Idfd7e3f9a9bd8368f59aff0441789078c0c4e875
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoUse List.isEmpty() in AbstractGet 73/105573/1
Robert Varga [Sat, 22 Apr 2023 10:02:49 +0000 (12:02 +0200)]
Use List.isEmpty() in AbstractGet

Checking the size is superfluous, just use isEmpty().

Change-Id: Iebe590ddb8f3fde13e2222f334325162a2df96e3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoMigrate users of Optional.get() 71/105571/4
Robert Varga [Fri, 21 Apr 2023 12:29:56 +0000 (14:29 +0200)]
Migrate users of Optional.get()

Upgraded modernizer points out callers of Optional.get(), which has a
better-named replacement in Optional.orElseThrow(). Migrate callers to
orElseThrow() or alternative facilities.

Change-Id: Ic36876b32443d341b3e838a9bb1dd079ea141b42
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 months agoRemove OpenAPI v2 76/104776/17
Yaroslav Lastivka [Fri, 3 Mar 2023 14:32:47 +0000 (16:32 +0200)]
Remove OpenAPI v2

Remove support for OpenAPI version 2, from now on we just support
OpenAPI version 3.

Remove OpenAPI v2 URLs, configuration and constants.

JIRA: NETCONF-981
Change-Id: Idd06ffd2f02b1f42bd9f52c889af7df8aa22853c
Signed-off-by: Yaroslav Lastivka <yaroslav.lastivka@pantheon.tech>
13 months agoFix parent reference 68/105568/1
Robert Varga [Fri, 21 Apr 2023 09:25:25 +0000 (11:25 +0200)]
Fix parent reference

Parent should be pointing to 6.0.0-SNAPSHOT, fix that.

Change-Id: I70403cac76ac32cba4aed01301aad4a1300c6bb9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 29fa68b1cb819fc1e2856832ad3bb53f26539cfe)