Coder Social home page Coder Social logo

pantheontech / lighty Goto Github PK

View Code? Open in Web Editor NEW
130.0 17.0 74.0 8.74 MB

Lightweight OpenDaylight runtime library

Home Page: https://lighty.io

License: Eclipse Public License 1.0

Java 99.39% Shell 0.31% Dockerfile 0.07% Smarty 0.10% Mustache 0.13%
opendaylight yang netconf sdn restconf gnmi openconfig lighty sdn-controller springboot

lighty's Introduction

lighty.io 21

lighty.io is a Software Development Kit powered by OpenDaylight to support, ease & accelerate the development of Software-Defined Networking (SDN) solutions in Java. Developed by PANTHEON.tech.

It utilizes core OpenDaylight components, which are available as a set of libraries and are adapted to run in a plain Java SE environment.

Build Status Maven Central License

This branch maintains compatibility with OpenDaylight 2024-09 Scandium, release.

Features

  • Removed Karaf: Having Java SE as a runtime, you can use a framework of your choice, not only Karaf
  • Improved Speed: Improved memory management & speed
  • Modularity: Your application code can start, stop & restart modules, as required

Use Cases

Modules, Examples & Apps

Modules Examples Applications
AAA Integration Tests NETCONF/RESTCONF App RESTCONF-NETCONF Application
Integration Tests gNMI/RESTCONF App gNMI RESTCONF Application
AAA SpringBoot Integration
gNMI
Jetty Server
NETCONF SouthBound
RESTCONF NouthBound
OpenApi

Components

architecture

Build & Install

In order to build and install lighty.io artifacts locally, follow the steps below:

  1. Install JDK - make sure JDK 17 is installed
  2. Install maven - make sure you have maven 3.8.5 or later installed
  3. Setup maven - make sure you have the proper settings.xml in your ~/.m2 directory
  4. Build & Install locally - by running command: mvn clean install -DskipTests

controller startup sequence

Migration from OpenDaylight to lighty.io

This guide describes the migration procedure from OpenDaylight/Karaf application to lighty.io. It contains a summary of practical experiences, based on real-life OpenDaylight project migrations.

Run JUnit & IT tests

lighty.io project contains JUnit & integration tests. Because a complete OpenDaylight/lighty.io controller is often started with south-bound and north-bound plugins, these tests are often required. IT tests are comparable with single-feature tests in ODL/Karaf environment - but much faster.

Before starting IT tests, please make sure that ports 8080, 8888, 8185, 2550 are free on localhost.

To run unit and integration tests, use the command:

mvn clean install

Support & More Information

If you are interested in lighty.io, require technical support, need blogs, FAQ, technical articles and more examples, visit lighty.io

lighty's People

Contributors

annapuchyova avatar bobekebob avatar caladi avatar dependabot[bot] avatar guillaumelambert avatar ihrasko avatar jakubt4 avatar jakubtoth avatar janobono avatar jlinkes avatar ken-duck avatar leonshaw avatar marekzatko avatar martinbugan-pt avatar michal-cmarada avatar miroslavkovacpantheon avatar mmiklus avatar petersuna avatar pyro2266 avatar rovarga avatar sezerb avatar snyk-bot avatar tiborkral avatar tobianas avatar vainyksi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lighty's Issues

DOMNotification converted to Notification

Hello,
I want to convert the DOMNotification received from the device to Notification, but I encountered a problem.

import org.opendaylight.yang.gen.v1.urn.test.params.xml.ns.yang.test.lldp.rev210803.LldpNeighborStatusChange;

@Autowired
private MountPointService mountPointService;

@Autowired
private DOMMountPointService domMountPointService;

@Autowired
private BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer;

private void test() {
    mountPointService.registerListener(NETCONF_TOPOLOGY_IID, new MountPointService.MountPointListener() {
        @Override
        public void onMountPointCreated(InstanceIdentifier<?> path) {
            YangInstanceIdentifier yangInstanceIdentifier = bindingNormalizedNodeSerializer.toYangInstanceIdentifier(path);
            DOMNotificationService domNotificationService = domMountPointService.getMountPoint(yangInstanceIdentifier).get().getService(DOMNotificationService.class).get();
            domNotificationService.registerNotificationListener(
                new DOMNotificationListener() {
                        @Override
                        public void onNotification(DOMNotification notification) {
                            Notification notification = bindingNormalizedNodeSerializer.fromNormalizedNodeNotification(domNotification.getType(), domNotification.getBody(), ((DOMEvent) domNotification).getEventInstant());
                        }
                    },
                SchemaNodeIdentifier.Absolute.of(InterfaceStatusChange.QNAME)
            );
        }

        @Override
        public void onMountPointRemoved(InstanceIdentifier<?> path) {

        }
    });
}
2021-09-29 16:05:27.624  WARN [sw-device-mgmr,,,] 34159 --- [ntLoopGroup-6-2] s.c.n.s.NetconfDeviceNotificationService : Listener com.test.sw.device.mgmr.notification.DOMNotificationListenerImpl@43d5a01f threw an uncaught exception during processing notification org.opendaylight.netconf.sal.connect.netconf.schema.mapping.NetconfMessageTransformer$NetconfDeviceNotification@39b802f3

java.lang.IllegalStateException: java.lang.NoSuchMethodException: org.opendaylight.yang.gen.v1.urn.test.params.xml.ns.yang.test.interfaces.rev201104.InterfaceStatusChange.bindingHashCode(org.opendaylight.yang.gen.v1.urn.test.params.xml.ns.yang.test.interfaces.rev201104.InterfaceStatusChange)
	at org.opendaylight.mdsal.binding.dom.codec.impl.ByteBuddyUtils.getMethod(ByteBuddyUtils.java:168)
	at org.opendaylight.mdsal.binding.dom.codec.impl.ByteBuddyUtils.describe(ByteBuddyUtils.java:84)
	at org.opendaylight.mdsal.binding.dom.codec.impl.ByteBuddyUtils.invokeMethod(ByteBuddyUtils.java:52)
	at org.opendaylight.mdsal.binding.dom.codec.impl.CodecDataObjectGenerator.codecHashCode(CodecDataObjectGenerator.java:313)
	at org.opendaylight.mdsal.binding.dom.codec.impl.CodecDataObjectGenerator.generateClass(CodecDataObjectGenerator.java:296)
	at org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader.doGenerateClass(CodecClassLoader.java:192)
	at org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader.generateClass(CodecClassLoader.java:146)
	at org.opendaylight.mdsal.binding.dom.codec.impl.CodecDataObjectGenerator.generateAugmentable(CodecDataObjectGenerator.java:268)
	at org.opendaylight.mdsal.binding.dom.codec.impl.DataObjectCodecContext.<init>(DataObjectCodecContext.java:155)
	at org.opendaylight.mdsal.binding.dom.codec.impl.DataObjectCodecContext.<init>(DataObjectCodecContext.java:94)
	at org.opendaylight.mdsal.binding.dom.codec.impl.NotificationCodecContext.<init>(NotificationCodecContext.java:73)
	at org.opendaylight.mdsal.binding.dom.codec.impl.SchemaRootCodecContext.createNotificationDataContext(SchemaRootCodecContext.java:258)
	at org.opendaylight.mdsal.binding.dom.codec.impl.SchemaRootCodecContext$1.load(SchemaRootCodecContext.java:62)
	at org.opendaylight.mdsal.binding.dom.codec.impl.SchemaRootCodecContext$1.load(SchemaRootCodecContext.java:58)
	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529)
	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278)
	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155)
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045)
	at com.google.common.cache.LocalCache.get(LocalCache.java:3951)
	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3974)
	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4958)
	at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4964)
	at org.opendaylight.mdsal.binding.dom.codec.impl.SchemaRootCodecContext.getOrRethrow(SchemaRootCodecContext.java:321)
	at org.opendaylight.mdsal.binding.dom.codec.impl.SchemaRootCodecContext.streamChild(SchemaRootCodecContext.java:150)
	at org.opendaylight.mdsal.binding.dom.codec.impl.SchemaRootCodecContext.getNotification(SchemaRootCodecContext.java:174)
	at org.opendaylight.mdsal.binding.dom.codec.impl.SchemaRootCodecContext$6.load(SchemaRootCodecContext.java:126)
	at org.opendaylight.mdsal.binding.dom.codec.impl.SchemaRootCodecContext$6.load(SchemaRootCodecContext.java:117)
	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529)
	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278)
	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155)
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045)
	at com.google.common.cache.LocalCache.get(LocalCache.java:3951)
	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3974)
	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4958)
	at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4964)
	at org.opendaylight.mdsal.binding.dom.codec.impl.SchemaRootCodecContext.getOrRethrow(SchemaRootCodecContext.java:321)
	at org.opendaylight.mdsal.binding.dom.codec.impl.SchemaRootCodecContext.getNotification(SchemaRootCodecContext.java:178)
	at org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext.getNotificationContext(BindingCodecContext.java:335)
	at org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext.fromNormalizedNodeNotification(BindingCodecContext.java:553)
	at org.opendaylight.mdsal.binding.dom.codec.spi.ForwardingBindingDOMCodecServices.fromNormalizedNodeNotification(ForwardingBindingDOMCodecServices.java:105)
	at com.test.sw.device.mgmr.notification.DOMNotificationListenerImpl.onNotification(DOMNotificationListenerImpl.java:40)
	at org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceNotificationService.publishNotification(NetconfDeviceNotificationService.java:35)
	at org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceSalProvider$MountInstance.publish(NetconfDeviceSalProvider.java:175)
	at org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceSalFacade.onNotification(NetconfDeviceSalFacade.java:71)
	at org.opendaylight.netconf.sal.connect.netconf.NotificationHandler.passNotification(NotificationHandler.java:90)
	at org.opendaylight.netconf.sal.connect.netconf.NotificationHandler.handleNotification(NotificationHandler.java:48)
	at org.opendaylight.netconf.sal.connect.netconf.NetconfDevice.onNotification(NetconfDevice.java:368)
	at org.opendaylight.netconf.sal.connect.netconf.NetconfDevice.onNotification(NetconfDevice.java:88)
	at org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator.processNotification(NetconfDeviceCommunicator.java:405)
	at org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator.onMessage(NetconfDeviceCommunicator.java:267)
	at org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator.onMessage(NetconfDeviceCommunicator.java:48)
	at org.opendaylight.netconf.nettyutil.AbstractNetconfSession.handleMessage(AbstractNetconfSession.java:64)
	at org.opendaylight.netconf.nettyutil.AbstractNetconfSession.channelRead0(AbstractNetconfSession.java:187)
	at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
	at io.netty.channel.AbstractChannelHandlerContext.access$600(AbstractChannelHandlerContext.java:61)
	at io.netty.channel.AbstractChannelHandlerContext$7.run(AbstractChannelHandlerContext.java:370)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:164)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java)
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.NoSuchMethodException: org.opendaylight.yang.gen.v1.urn.test.params.xml.ns.yang.test.interfaces.rev201104.InterfaceStatusChange.bindingHashCode(org.opendaylight.yang.gen.v1.urn.test.params.xml.ns.yang.test.interfaces.rev201104.InterfaceStatusChange)
	at java.base/java.lang.Class.getDeclaredMethod(Class.java:2475)
	at org.opendaylight.mdsal.binding.dom.codec.impl.ByteBuddyUtils.getMethod(ByteBuddyUtils.java:166)
	... 74 common frames omitted

I donโ€™t know if itโ€™s caused by improper configuration. Can you help me and solve this problem? Thank you very much!

Leaf Node in a CONTAINER cannot be deleted via RESTCONF HTTP DELETE Method

Describe the bug
According to the RFC, I understand that if one can access a resource with GET, then it's a target resource.
I can get the content of a leaf node in a container with GET method, however I cannot delete it via DELETE method via RESTCONF.

Branch
lighty.io branch [14.0.x and 15.0.x]

To Reproduce
Steps to reproduce the behavior:

  1. Setup a netconf server with tailf-d dhcpd yang example
  2. Setup lighty-app-rnc
  3. Register netconf server to lighty
  4. Send a GET request ( http://localhost:8888/restconf/data/network-topology:network-topology/topology=topology-netconf/node=dhcp-test/yang-ext:mount/dhcpd:dhcp/default-lease-time ) and check it's working.
  5. Send a DELETE request ( http://localhost:8888/restconf/data/network-topology:network-topology/topology=topology-netconf/node=dhcp-test/yang-ext:mount/dhcpd:dhcp/default-lease-time )
  6. Result:
{
    "errors": {
        "error": [
            {
                "error-type": "application",
                "error-tag": "operation-failed",
                "error-info": "java.lang.IllegalStateException: Value has not been set",
                "error-message": "Transaction failed"
            }
        ]
    }
}
  1. Send a DELETE request to http://localhost:8888/restconf/data/network-topology:network-topology/topology=topology-netconf/node=dhcp-test/yang-ext:mount/dhcpd:dhcp and the container will be deleted successfully.

So I cannot figure out that why it's not working for a leaf node while it's working for the container of the leaf node.

Expected behavior
The data shall be deleted. When I try it with a netconf client and edit configuration as below, it's working properly:
Request:

<dhcp xmlns='http://tail-f.com/ns/example/dhcpd' xmlns:nc='urn:ietf:params:xml:ns:netconf:base:1.0'>
  <default-lease-time nc:operation='delete'>
    PT300M
  </default-lease-time>
</dhcp>

Response:

<?xml version='1.0' encoding='UTF-8'?>
<ok xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"/>

Screenshots
Not applicable

Environment (please complete the following information):

  • OS: [Linux EVT01479NB 5.4.72-microsoft-standard-WSL2]
  • Java Version [11.0.11]
  • Maven version [3.8.1]
  • Please note that lighty-rnc-app is already containerized and running as a container.

Additional context
I come to this point while I was trying Yang-Patch to delete a leaf node. This is another yang module that we are using, but the structure is similar.
Yang-Patch request to: http://localhost:8888/restconf/data/network-topology:network-topology/topology=topology-netconf/node={{node}}/yang-ext:mount/dhcpd-kea:dhcp-kea/subnetscon/subnets={{subnet_uuid}}
Request Body:

{
    "ietf-yang-patch:yang-patch": {
        "patch-id": "delete-patch-1",
        "edit": [
            {
                "edit-id": "edit1",
                "operation": "delete",
                "target": "/dhcpd-kea:max-lease-time"
            }
        ]
    }
}

Response:

{
    "ietf-yang-patch:yang-patch-status": {
        "patch-id": "delete-patch-1",
        "errors": {
            "error": [
                {
                    "error-type": "application",
                    "error-tag": "operation-failed",
                    "error-message": "Transaction failed",
                    "error-info": "java.lang.IllegalStateException: Value has not been set"
                }
            ]
        },
        "edit-status": {
            "edit": [
                {
                    "edit-id": "edit1",
                    "ok": [
                        null
                    ]
                }
            ]
        }
    }
}

I'm pretty sure that the request body is OK for yang-patch, but again the problem is I cannot DELETE a leaf node in a container.

Appendix example dhcp yang module:

module dhcpd {

  namespace "http://tail-f.com/ns/example/dhcpd";
  prefix dhcpd;

  import ietf-inet-types {
    prefix inet;
  }

  import tailf-xsd-types {
    prefix xs;
  }

  organization "Tail-f Systems (a Cisco company)";

  contact "[email protected]";

  description
    "YANG datamodel for ConfD Subscriber intro example
     (C) 2005-2018 Tail-f Systems

     Permission to use this code as a starting point hereby granted
     This is ConfD Sample Code.

     See the README file for more information";

  revision 2019-02-14 {
    description "Normalized YANG identifier names.";
  }

  revision 2018-11-20 {
    description "YANG header information updated";
  }

  revision 2009-05-19 {
    description "Initial revision.";
  }

  typedef loglevel {
    type enumeration {
        enum kern;
        enum mail;
        enum local7;
    }
  }

  grouping subnet {
    list subnet {
      key "net mask";
      leaf net {
        type inet:ipv4-address;
      }
      leaf mask {
        type inet:ipv4-address;
      }
      container range {
        presence "";
        leaf dynamic-bootp {
          type boolean;
          default false;
          description "Enable BOOTP for this instance.";
        }
        leaf low-addr {
          type inet:ipv4-address;
          mandatory true;
          description "Enable BOOTP for this instance.";
        }
        leaf high-addr {
          type inet:ipv4-address;
          description "Enable BOOTP for this instance.";
        }
      }
      leaf routers {
        type string;
      }
      leaf max-lease-time {
        type xs:duration;
        default PT7200S;
      }
    }
  }

  container dhcp {
    leaf default-lease-time {
      type xs:duration;
      default PT600S;
    }
    leaf max-lease-time {
      type xs:duration;
      default PT7200S;
    }
    leaf log-facility {
      type loglevel;
      default local7;
    }
    container subnets {
      uses subnet;
    }
    container shared-networks {
      list shared-network {
        key name;
        max-elements 1024;
        leaf name {
          type string;
        }
        container subnets {
          uses subnet;
        }
      }
    }
  }
}

Thanks in advance,
Sezer

Lighty.io responds back success message even if device returns error message

Describe the bug
The netconf devices return error message as we saw in the screenshot. Then lighty.io response back success message.

Branch
lighty.io branch 15.1.0

To Reproduce
Steps to reproduce the behavior:

  1. set a leaf by using swagger interface
  2. device should return error message
  3. see the result

Expected behavior
lighty.io should return error message

Actual behavior
lighty.io returns success message

Screenshots
image

Update time tracking

Lighty bootup emits information messages about timimg based on conversion to milliseconds. This is not always appropriate, as some things are at seconds-scale.
Unify all time tracking around Guava's Stopwatch, which performs automatic conversion, such that the timings are human-readable down to microseconds.

Data and notification streams are not found

When using OpenDaylight, I'm able to open and use data and notification streams.
First opening the stream with POST request: 'http://localhost:8181/restconf/operations/sal-remote:create-data-change-event-subscription'.
After that using GET with the url that the previous request has returned. And after that opening the WebSocket connection with the url that the GET request returns.

When using Lighty, I'm able to open the stream using the POST request. It returns the stream name, but the stream can not be found using the GET request (404).
The stream seems to disappear. What could be causing this? Or what's the difference in this case between ODL and Lighty?

lighty does not work after time consuming task running

We are calling an endpoint on lighty which triggers time consuming job ( up to 2 mins ) behind the confd we are getting following rpc failure error after 60 seconds. And never working again. If we try to call any endpoint we see Mount point does not exist error. After restarting lighty everything works as expected.

 INFO [nioEventLoopGroup-9-3] (AbstractInternalLogger.java:148) - [id: 0x7a5bd6f2, L:/172.20.0.9:55834 - R:host.docker.internal/172.17.0.1:2022] FLUSH
2022-01-26T05:41:39.176110517Z  WARN [default-scheduled-pool-6-1] (KeepaliveSalFacade.java:305) - RemoteDevice{4}: Rpc failure detected. Reconnecting netconf session
2022-01-26T05:41:39.176148296Z java.util.concurrent.CancellationException: Task was cancelled.
2022-01-26T05:41:39.176165651Z 	at com.google.common.util.concurrent.AbstractFuture.cancellationExceptionWithCause(AbstractFuture.java:1425)
2022-01-26T05:41:39.176169697Z 	at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:564)
2022-01-26T05:41:39.176172772Z 	at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:527)
2022-01-26T05:41:39.176175825Z 	at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:104)
2022-01-26T05:41:39.176179024Z 	at com.google.common.util.concurrent.Uninterruptibles.getUninterruptibly(Uninterruptibles.java:240)
2022-01-26T05:41:39.176182079Z 	at com.google.common.util.concurrent.Futures.getDone(Futures.java:1122)
2022-01-26T05:41:39.176185091Z 	at com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1072)
2022-01-26T05:41:39.176188316Z 	at com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:30)
2022-01-26T05:41:39.176191419Z 	at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:1213)
2022-01-26T05:41:39.176194539Z 	at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:983)
2022-01-26T05:41:39.176197681Z 	at com.google.common.util.concurrent.AbstractFuture.cancel(AbstractFuture.java:628)
2022-01-26T05:41:39.176200810Z 	at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.cancel(AbstractFuture.java:132)
2022-01-26T05:41:39.176204010Z 	at org.opendaylight.netconf.sal.connect.netconf.sal.KeepaliveSalFacade$RequestTimeoutTask.run(KeepaliveSalFacade.java:288)
2022-01-26T05:41:39.176207164Z 	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
2022-01-26T05:41:39.176271066Z 	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
2022-01-26T05:41:39.176276578Z 	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
2022-01-26T05:41:39.176279904Z 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
2022-01-26T05:41:39.176283020Z 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
2022-01-26T05:41:39.176286039Z 	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
2022-01-26T05:41:39.176289055Z 	at java.base/java.lang.Thread.run(Unknown Source)
2022-01-26T05:41:39.177998003Z  INFO [default-scheduled-pool-6-1] (KeepaliveSalFacade.java:110) - RemoteDevice{4}: Reconnecting inactive netconf session
2022-01-26T05:41:39.178175036Z  WARN [default-scheduled-pool-6-1] (NetconfDeviceCommunicator.java:259) - RemoteDevice{4}: Session terminated Session closed

Branch
lighty.io branch >>15.1

To Reproduce
Steps to reproduce the behavior:

  1. Call an endpoint which takes up to 2 mins
  2. You will get the rpc failure error.
  3. Doesn't work until lighty restart

Expected behavior
In every circumstances lighty should response, even if crashes because of the previous requests

Environment (please complete the following information):

  • OS: "Ubuntu 20.04.3 LTS (Focal Fossa)"
  • Java Version =openjdk 11.0.13
  • Maven version=Apache Maven 3.6.3

Thanks in advance.

Lighty Registration to Netconf Server fails

Describe the bug
I am using 3gpp yang models link and when I boot up an example netconf server with those yang files, lighty gives errors although the netconf server seems connected.

Branch
lighty.io branch 16.x

To Reproduce
Steps to reproduce the behavior:

  1. Clone lighty repo
  2. git checkout 16.x
  3. cd lighty
  4. build the project using mvn clean install
  5. go to target directory cd lighty-examples/lighty-community-restconf-netconf-app/target
  6. unzip example application bundle unzip lighty-community-restconf-netconf-app-16.1.0-SNAPSHOT-bin.zip
  7. go to unzipped application directory cd lighty-community-restconf-netconf-app-16.1.0-SNAPSHOT
  8. start controller example controller application java -jar lighty-community-restconf-netconf-app-16.1.0-SNAPSHOT.jar
  9. Register netconf server to lighty using localhost from Postman
  10. See the error

Expected behavior
No error logs need to be observed in lighty logs. But encountered errors. Error logs can be seen in https://github.com/guraybaydur/lighty-error-repo/blob/main/lighty_logs

Screenshots
errorlighty

image

Environment (please complete the following information):

  • OS: Linux ubuntu 5.13.0-44-generic 49~20.04.1-Ubuntu SMP Wed May 18 18:44:28 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
  • Java Version openjdk version "11.0.15" 2022-04-19
  • Maven version Apache Maven 3.6.3
    Maven home: /usr/share/maven
    Java version: 11.0.15, vendor: Private Build, runtime: /usr/lib/jvm/java-11-openjdk-amd64
    Default locale: en_US, platform encoding: UTF-8
    OS name: "linux", version: "5.13.0-44-generic", arch: "amd64", family: "unix"

testSerializeNotification can not work

11.1.x/lighty-core/lighty-codecs/src/test/java/io/lighty/codecs/XmlNodeConverterTest.java

@test
@ignore
public void testSerializeNotification() throws Exception {
String notification = loadResourceAsString("notification.xml");
Optional loadNotification =
ConverterUtils.loadNotification(schemaContext, QName.create(TOASTER_NAMESPACE, TOASTER_REVISION,
"toasterRestocked"));
NormalizedNode nodes =
bindingSerializer.deserialize(loadNotification.get(), new StringReader(notification));
Assert.assertNotNull(nodes);
}

An exception occurs๏ผš

java.lang.IllegalArgumentException: Instance of DataSchemaNode class awaited.

at com.google.common.base.Preconditions.checkArgument(Preconditions.java:141)
at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.create(XmlParserStream.java:127)
at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.create(XmlParserStream.java:158)
at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.create(XmlParserStream.java:148)

Cleanup javadoc warnings

Our build throws a significant amount of javadoc warnings. Make sure our classes are properly document.

Increasing restconf >> netconf time out while calling time consuming job

Hi everyone,

We have a time consuming job behind the confd and when we trigger the related lighty endpoint we are getting below error.

 RemoteDevice{4}: Rpc failure detected. Reconnecting netconf session
2022-01-26T05:41:39.176148296Z java.util.concurrent.CancellationException: Task was cancelled.

As far as I understand my request is being executed some kind of executor service and my task is being cancelled exactly 60 secs later and doesn't work after this behaviour until lighty io restart. I have already opened an issue regarding this problem So until that issue is solved I am trying to find a workaround solution to configure this duration.

Is there a way to increase this duration in order to prevent lighty crash via configuration file?

Thanks in advance !

Content of Config Data Store

Dear colleague;

Is there a way to see the content of configuration data store (like exporting raw data or something else)?

Thanks

gNMI simulator: Error when trying to set augmented data

Describe the bug

Can`t update data added by augmentation.
Error: Instance identifier references (http://openconfig.net/yang/vxlan/extension?revision=2019-12-03)vxlan-vni-instances but data identifier is AugmentationIdentifier{childNames=[(http://openconfig.net/yang/vxlan/extension?revision=2019-12-03)vxlan-vni-instances]}

Branch

15.0.1

To Reproduce

Start gNMI simulator with these yang files:
yangs.zip
Send gNMI set requests:
Payload:
{
"vni-instance": [
{
"config": {
"source-nve": "vtepbrcm",
"vni-id": 10
},
"source-nve": "vtepbrcm",
"vni-id": 10
}
]
}
Request:
gnmic set --update-path openconfig-network-instance:network-instances/network-instance[name=Vlan10]/openconfig-vxlan:vxlan-vni-instances --update-file $file --encoding json_ietf

Expected behavior

Successful gnmi request

Environment

  • Java Version 11
  • Maven version 3.6.3

Lighty does not support RESTCONF notifications models

Describe the bug

Default RESTCONF configuration is missing YANG models:

  • sal-remote
  • sal-remote-augment
  • subscribe-to-notification

from RESTCONF common models.

Making the POST request to http://localhost:8888/restconf/operations/sal-remote:create-data-change-event-subscription
with body:

{ "input": { "path": "/toaster:toaster/toaster:toasterStatus", "sal-remote-augment:datastore": "OPERATIONAL", "sal-remote-augment:scope": "ONE" } }

fail with:

{ "errors": { "error": [ { "error-tag": "unknown-element", "error-type": "protocol", "error-message": "Failed to lookup for module with name 'sal-remote'." } ] } }

Branch
all active branches

Not possible to listen to notifications

Describe the bug

Even after resolving #531 it is not possible to listen for notifications on URL with returned stream name.

Branch
all active branches (web-sockets), master (web-sockets + SSE)

To Reproduce

Do the POST request to http://localhost:8888/restconf/operations/sal-remote:create-data-change-event-subscription
with body:

{ "input": { "path": "/toaster:toaster/toaster:toasterStatus", "sal-remote-augment:datastore": "OPERATIONAL", "sal-remote-augment:scope": "ONE" } }

Get the response:

{ "sal-remote:output": { "stream-name": "data-change-event-subscription/toaster:toaster/toasterStatus/datastore=OPERATIONAL/scope=ONE" } }

Use stream name to listen to notifications with web-sockets:

wscat -c ws://127.0.0.1:8185/restconf/notif/data-change-event-sucription/toaster:toaster/toasterStatus/datastore=OPERATIONAL/scope=ONE

You get error:

error: Unexpected server response: 500

Error log:

ERROR [nioEventLoopGroup-8-3] (WebSocketServerHandler.java:87) - Listener for stream with name 'restconf/notif/data-change-event-subscription/toaster:toaster/toasterStatus/datastore=OPERATIONAL/scope=ONE' was not found.

Use stream name to listen to notifications with SSE:

curl -X GET http://127.0.0.1:8888/restconf/notif/data-change-event-subscription/toaster:toaster/toasterStatus/datastore=OPERATIONAL/scope=ONE -H "Content-Type: text/event-stream"

You get error:

...<body><h2>HTTP ERROR 404 Not Found</h2>...

There are no logs in console.

Lighty.io couldn't respond after one fail post operation

Describe the bug
If registered device is not up. i mean link/connection which is between device and lighty is down. if lighty.io tries to submit a operation such as put/post. Even if connection is recovered. Lighty.io doesn't send success post/put operation till restart the lighty.io or de-register/register device.

Branch
15.1.0

To Reproduce
Steps to reproduce the behavior:

  1. install the lighty 15.1.0 version
  2. register a device
  3. set a leaf over the swagger UI (post or put operation)
  4. get success message
  5. down the registered device (not deregister)
  6. repeat step 3 many times
  7. get fail message
  8. bring up the registered device
  9. repeat step 3

Expected behavior
user couldn't get fail message

Actual behavior
user get fail message

Environment (please complete the following information):

  • OS: debian 11
  • jre-11
  • maven 3.x

Lighty.io is not Compliant with RFC about Returned Error Message

Describe the bug
RFC described returned error message like this:
image

but lighty.io response is like this:
image

"error-tag"s are not consistence with each other.

Is this a bug or is there an other RFC which i don't know?

Many Thanks

Branch
lighty.io branch [eg. 12.2.x]

Expected behavior
Lighty.io should compliant with RFC

gNMI simulator: Unable to update data by its path

Describe the bug

Unable to update data using its path.
Error : Schema for node with name network-instance and namespace http://openconfig.net/yang/network-instance does not exist at list network-instance

Branch

15.0.1

To Reproduce

Start gNMI simulator with these yang files:
yangs.zip
Send gNMI set request
Payload
{
"openconfig-network-instance:network-instance": [
{
"config": {
"name": "Vlan10",
"type": "openconfig-network-instance-types:L2L3"
},
"name": "Vlan10",
"vlans": {
"vlan": [
{
"config": {
"name": "Vlan10",
"vlan-id": 10
},
"vlan-id": 10
}
]
}
}
]
}
Request
gnmi set --update-path /openconfig-network-instance:network-instances/network-instance[name=Vlan10] --update-file $file --encoding json_ietf

Expected behavior

Successful gnmi request

Environment

  • Java Version 11
  • Maven version 3.6.3

Release preparation fails on io.lighty.kit.examples.community.CommunityAAARestconfAppTest

Describe the bug
Attempting mvn release:prepare fails with:

[INFO] [ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 41.787 s <<< FAILURE! - in io.lighty.kit.examples.community.CommunityAAARestconfAppTest
[INFO] [ERROR] io.lighty.kit.examples.community.CommunityAAARestconfAppTest.readDataCorrectCredentials on readDataCorrectCredentials(io.lighty.kit.examples.community.CommunityAAARestconfAppTest)  Time elapsed: 1.075 s  <<< FAILURE!
[INFO] java.lang.AssertionError: expected:<200> but was:<401>
[INFO]  at io.lighty.kit.examples.community.CommunityAAARestconfAppTest.readDataCorrectCredentials(CommunityAAARestconfAppTest.java:54)
[INFO] 
[INFO] [INFO] 
[INFO] [INFO] Results:
[INFO] [INFO] 
[INFO] [ERROR] Failures: 
[INFO] [ERROR]   CommunityAAARestconfAppTest.readDataCorrectCredentials:54 expected:<200> but was:<401>
[INFO] [INFO] 
[INFO] [ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0

Branch
14.2.x

To Reproduce
Steps to reproduce the behavior:

  1. git checkout https://...
  2. cd lighty
  3. mvn release:prepare
  4. See error

Expected behavior
Execution of release:prepare finishes successfully.

Environment (please complete the following information):

  • OS: Linux nitebug.nitenet.local 5.13.12-200.fc34.x86_64 #1 SMP Wed Aug 18 13:27:18 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
  • Java Version
    openjdk version "11.0.12" 2021-07-20
    OpenJDK Runtime Environment 18.9 (build 11.0.12+7)
    OpenJDK 64-Bit Server VM 18.9 (build 11.0.12+7, mixed mode, sharing)
  • Maven version
    Apache Maven 3.8.2 (ea98e05a04480131370aa0c110b8c54cf726c06f)
    Maven home: /home/nite/local/apache-maven-3.8.2
    Java version: 11.0.12, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.fc34.x86_64
    Default locale: en_GB, platform encoding: UTF-8
    OS name: "linux", version: "5.13.12-200.fc34.x86_64", arch: "amd64", family: "unix"

java docs for lighty core classes and interfaces

Question
How can we help?

Thank you for creating your report! We will get back to you, as soon as possible. Please note, that our support on GitHub is based on a non-guaranteed best effort. As soon as we are able, we will get back to you.

If you are in a hurry and have an inquiry regarding commercial support, please via this contact form: https://pantheon.tech/contact-us

Hello,

I am searching for javadocs covering the lighty-core (public)classes and interfaces.
Are these made available anywhere?

Lighty does not suport YANG Patch model

Describe the bug

Default RESTCONF configuration is missing YANG model:

  • instance-identifier-patch-module

from RESTCONF common models

Making the PATCH request to http://localhost:8888/restconf/data/instance-identifier-patch-module:patch-cont with body:

{ "ietf-yang-patch:yang-patch" : { "patch-id" : "test-patch", "comment" : "Test to create data in container directly using / sign as a target", "edit" : [ { "edit-id": "edit1", "operation": "replace", "target": "/", "value": { "patch-cont": { "my-list1": [ { "name": "my-list1 - A", "my-leaf11": "I am leaf11-0", "my-leaf12": "I am leaf12-1" }, { "name": "my-list1 - B", "my-leaf11": "I am leaf11-0", "my-leaf12": "I am leaf12-1" } ] } } } ] } }

fail with:

{ "errors": { "error": [ { "error-tag": "unknown-element", "error-type": "protocol", "error-message": "Failed to lookup for module with name 'instance-identifier-patch-module'." } ] } }

Branch
all active branches

Vulnerability Management

Hello all,

  1. How do you apply vulnerability management for lighty-rnc application?

  2. Do you have a security page available which informs about vulnerabilities?

  3. Do you have any "point of contact" for reporting vulnerabilities?

Regards,

Problems encountered while receiving Netconf notifications

My project needed to receive notifications from the netconf device, but had problems registering listeners.
Send notice of my equipment successfully into the controller, and entered into the NetconfDeviceNotificationService.class, but in to the registered listener, I can't get NetconfDeviceNotificationService instance of this class, lead to publishNotification method to distribute notice, listeners have been empty.

Then I try to get NetconfDeviceNotificationService instance is found that in this class, NetconfDeviceSalFacade instance is like this new directly.

    @Override
    public synchronized void onDeviceConnected(final MountPointContext mountContext,
                                               final NetconfSessionPreferences netconfSessionPreferences,
                                               final DOMRpcService deviceRpc, final DOMActionService deviceAction) {
        final SchemaContext schemaContext = mountContext.getSchemaContext();
        final NetconfDeviceDataBroker netconfDeviceDataBroker =
                new NetconfDeviceDataBroker(id, schemaContext, deviceRpc, netconfSessionPreferences);
        registerLockListener(netconfDeviceDataBroker);
        final NetconfDeviceNotificationService notificationService = new NetconfDeviceNotificationService();

        salProvider.getMountInstance()
                .onTopologyDeviceConnected(schemaContext, netconfDeviceDataBroker, deviceRpc, notificationService,
                        deviceAction);
        salProvider.getTopologyDatastoreAdapter()
                .updateDeviceData(true, netconfSessionPreferences.getNetconfDeviceCapabilities());
    }

I want to know how to get NetconfDeviceNotificationService instance and register the listener? Or can I use another class to get notifications from netconf devices?
thank you

Lighty.io doensn't consider error-msg statement in yang file

Describe the bug
Lighty.io returns default error (or generated by itself) to client.

I have yang file like this:
image

If i make request like this:
image

I got this error:
image

But if make request with other netconf client, i got correct error:
image

Expected behavior
We should see error message which is in the yang file

Rework test logging

Currently we output copious amount of test logs, which is fine for debugging, but usually is completely useless (as the build passes).
Rework test logging by having surefire-plugin redirect console log to files. Those log files need to be stored somewhere -- I believe Travis has some options we could use.

An exception occurred when putting netconf

I want to set an ME object, but there is an exception. I don't know whether the code I set is wrong or whether the Yang structure containing list in the container is not supported. Can anyone help ME? Thx

Code:
private static final InstanceIdentifier ME_IID = InstanceIdentifier.create(Me.class);

@PostMapping("/id/{netconfDeviceId}")
public ResponseEntity postMeConfig(@PathVariable final String netconfDeviceId,
@requestbody final String meName, Authentication authentication) {
Utils.logUserData(LOG, authentication);
try (final ReadTransaction tx = dataBroker.newReadOnlyTransaction()) {
final Optional netconfTopoOptional =
tx.read(LogicalDatastoreType.OPERATIONAL, NETCONF_TOPOLOGY_IID).get(TIMEOUT, TimeUnit.SECONDS);
if (netconfTopoOptional.isPresent() && netconfTopoOptional.get().getNode() != null) {
for (Node node : netconfTopoOptional.get().getNode()) {
final Optional netconfMountPoint =
mountPointService.getMountPoint(NETCONF_TOPOLOGY_IID
.child(Node.class, new NodeKey(node.getNodeId())));
if (netconfMountPoint.isPresent()) {
final Optional netconfDataBroker =
netconfMountPoint.get().getService(DataBroker.class);
if (netconfDataBroker.isPresent()) {
final WriteTransaction netconfWriteTx =
netconfDataBroker.get().newWriteOnlyTransaction();

                        final ReadTransaction netconfReadTx =
                                netconfDataBroker.get().newReadOnlyTransaction();

                            final Optional<Me> MEData = netconfReadTx
                                .read(LogicalDatastoreType.OPERATIONAL, ME_IID).get(TIMEOUT, TimeUnit.SECONDS);
                        
                            if(MEData.isPresent()){
                                Me meRequest = new MeBuilder().setNtpEnable(false)
                                		.setIpAddress(new Ipv4Address("192.192.4.250"))
                                		.setMask(new DottedQuad("255.255.255.0"))
                                		.setGateWay1(new Ipv4Address("192.192.4.250"))
                                		.build();
                                 
                                netconfWriteTx.put(LogicalDatastoreType.CONFIGURATION, ME_IID, meRequest);
                                try {
                                	netconfWriteTx.commit().get(TIMEOUT, TimeUnit.SECONDS);
                                    LOG.info("Post : {}", meRequest);
                                    return ResponseEntity.ok().build();
                                } catch (Exception e) {
                                    LOG.error("Post Error: {}", meRequest, e);
                                    return ResponseEntity.status(500).build();
                                }
                            }
                    }
                }
            }
        }
        return ResponseEntity.ok().build();
    }  catch (Exception ex) {
        LOG.error("Post ME Error: {}", "", ex);
        return ResponseEntity.status(500).build();
    }
}

Exception:

com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalStateException: Failed to instantiate prototype org.opendaylight.mdsal.binding.dom.codec.gen.impl.DataObjectSerializerPrototype as org.opendaylight.yang.gen.v1.urn.ccsa.yang.acc.devm.rev190213.me.NtpServers$StreamWriter
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2050) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache.get(LocalCache.java:3951) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3973) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4957) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4963) ~[guava-25.1-jre.jar:na]
at org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry.getSerializer(BindingNormalizedNodeCodecRegistry.java:82) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry.toNormalizedNode(BindingNormalizedNodeCodecRegistry.java:117) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.adapter.BindingToNormalizedNodeCodec.toNormalizedNode(BindingToNormalizedNodeCodec.java:162) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.adapter.AbstractWriteTransaction.toNormalized(AbstractWriteTransaction.java:58) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.adapter.AbstractWriteTransaction.put(AbstractWriteTransaction.java:37) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.adapter.BindingDOMWriteTransactionAdapter.put(BindingDOMWriteTransactionAdapter.java:28) ~[classes/:na]
at io.lighty.core.controller.springboot.rest.NetconfDeviceRestService.postMeConfig(NetconfDeviceRestService.java:217) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_151]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_151]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_151]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_151]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209) [spring-web-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) [spring-web-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) [spring-webmvc-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:891) [spring-webmvc-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) [spring-webmvc-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) [spring-webmvc-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991) [spring-webmvc-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925) [spring-webmvc-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:981) [spring-webmvc-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:884) [spring-webmvc-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) [javax.servlet-api-3.1.0.jar:3.1.0]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:858) [spring-webmvc-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [javax.servlet-api-3.1.0.jar:3.1.0]
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:867) [jetty-servlet-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1623) [jetty-servlet-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:214) [websocket-server-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610) [jetty-servlet-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at io.lighty.core.controller.springboot.config.JCasBinFilter.doFilter(JCasBinFilter.java:61) [classes/:na]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:74) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178) [spring-security-web-5.0.11.RELEASE.jar:5.0.11.RELEASE]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357) [spring-web-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270) [spring-web-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610) [jetty-servlet-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) [spring-web-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610) [jetty-servlet-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109) [spring-web-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610) [jetty-servlet-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) [spring-web-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610) [jetty-servlet-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) [spring-web-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.12.RELEASE.jar:5.0.12.RELEASE]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610) [jetty-servlet-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:540) [jetty-servlet-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146) [jetty-server-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) [jetty-security-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) [jetty-server-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257) [jetty-server-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1588) [jetty-server-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255) [jetty-server-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1345) [jetty-server-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203) [jetty-server-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480) [jetty-servlet-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1557) [jetty-server-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201) [jetty-server-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1247) [jetty-server-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144) [jetty-server-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126) [jetty-server-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) [jetty-server-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.server.Server.handle(Server.java:502) [jetty-server-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:364) [jetty-server-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260) [jetty-server-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305) [jetty-io-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103) [jetty-io-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118) [jetty-io-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765) [jetty-util-9.4.14.v20181114.jar:9.4.14.v20181114]
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683) [jetty-util-9.4.14.v20181114.jar:9.4.14.v20181114]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_151]
Caused by: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalStateException: Failed to instantiate prototype org.opendaylight.mdsal.binding.dom.codec.gen.impl.DataObjectSerializerPrototype as org.opendaylight.yang.gen.v1.urn.ccsa.yang.acc.devm.rev190213.me.NtpServers$StreamWriter
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2050) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache.get(LocalCache.java:3951) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3973) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4957) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4963) ~[guava-25.1-jre.jar:na]
at org.opendaylight.mdsal.binding.dom.codec.gen.impl.AbstractStreamWriterGenerator.getSerializer(AbstractStreamWriterGenerator.java:107) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry$GeneratorLoader.load(BindingNormalizedNodeCodecRegistry.java:332) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry$GeneratorLoader.load(BindingNormalizedNodeCodecRegistry.java:1) ~[classes/:na]
at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2276) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2154) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2044) ~[guava-25.1-jre.jar:na]
... 97 common frames omitted
Caused by: com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalStateException: Failed to instantiate prototype org.opendaylight.mdsal.binding.dom.codec.gen.impl.DataObjectSerializerPrototype as org.opendaylight.yang.gen.v1.urn.ccsa.yang.acc.devm.rev190213.me.NtpServers$StreamWriter
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2050) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache.get(LocalCache.java:3951) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3973) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4957) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4963) ~[guava-25.1-jre.jar:na]
at org.opendaylight.mdsal.binding.dom.codec.gen.impl.AbstractStreamWriterGenerator.getSerializer(AbstractStreamWriterGenerator.java:107) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.codec.gen.impl.AbstractStreamWriterGenerator.loadSerializerFor(AbstractStreamWriterGenerator.java:118) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.codec.gen.impl.DataObjectSerializerSource.staticInvokeEmitter(DataObjectSerializerSource.java:145) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.codec.gen.impl.DataNodeContainerSerializerSource.emitChildInner(DataNodeContainerSerializerSource.java:164) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.codec.gen.impl.DataNodeContainerSerializerSource.emitChild(DataNodeContainerSerializerSource.java:138) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.codec.gen.impl.DataNodeContainerSerializerSource.emitBody(DataNodeContainerSerializerSource.java:128) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.codec.gen.impl.DataNodeContainerSerializerSource.getSerializerBody(DataNodeContainerSerializerSource.java:80) ~[classes/:na]
at org.opendaylight.yangtools.util.ClassLoaderUtils.getWithClassLoader(ClassLoaderUtils.java:102) ~[util-2.1.10.jar:na]
at org.opendaylight.mdsal.binding.dom.codec.gen.impl.AbstractStreamWriterGenerator.generateEmitter0(AbstractStreamWriterGenerator.java:227) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.codec.gen.impl.AbstractStreamWriterGenerator.access$2(AbstractStreamWriterGenerator.java:215) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.codec.gen.impl.AbstractStreamWriterGenerator$SerializerImplementationLoader.generateSerializer(AbstractStreamWriterGenerator.java:161) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.codec.gen.impl.AbstractStreamWriterGenerator$SerializerImplementationLoader.load(AbstractStreamWriterGenerator.java:145) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.codec.gen.impl.AbstractStreamWriterGenerator$SerializerImplementationLoader.load(AbstractStreamWriterGenerator.java:1) ~[classes/:na]
at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2276) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2154) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2044) ~[guava-25.1-jre.jar:na]
... 108 common frames omitted
Caused by: java.lang.IllegalStateException: Failed to instantiate prototype org.opendaylight.mdsal.binding.dom.codec.gen.impl.DataObjectSerializerPrototype as org.opendaylight.yang.gen.v1.urn.ccsa.yang.acc.devm.rev190213.me.NtpServers$StreamWriter
at org.opendaylight.mdsal.binding.generator.util.JavassistUtils.instantiatePrototype(JavassistUtils.java:80) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.codec.gen.impl.AbstractStreamWriterGenerator.generateEmitter0(AbstractStreamWriterGenerator.java:231) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.codec.gen.impl.AbstractStreamWriterGenerator.access$2(AbstractStreamWriterGenerator.java:215) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.codec.gen.impl.AbstractStreamWriterGenerator$SerializerImplementationLoader.generateSerializer(AbstractStreamWriterGenerator.java:161) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.codec.gen.impl.AbstractStreamWriterGenerator$SerializerImplementationLoader.load(AbstractStreamWriterGenerator.java:145) ~[classes/:na]
at org.opendaylight.mdsal.binding.dom.codec.gen.impl.AbstractStreamWriterGenerator$SerializerImplementationLoader.load(AbstractStreamWriterGenerator.java:1) ~[classes/:na]
at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2276) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2154) ~[guava-25.1-jre.jar:na]
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2044) ~[guava-25.1-jre.jar:na]
... 129 common frames omitted
Caused by: java.lang.RuntimeException: cannot find org.opendaylight.yang.gen.v1.urn.ccsa.yang.acc.devm.rev190213.me: org.opendaylight.yang.gen.v1.urn.ccsa.yang.acc.devm.rev190213.Me found in org/opendaylight/yang/gen/v1/urn/ccsa/yang/acc/devm/rev190213/me.class
at javassist.CtClassType.getClassFile3(CtClassType.java:213) ~[javassist-3.24.1-GA.jar:na]
at javassist.CtClassType.makeFieldCache(CtClassType.java:970) ~[javassist-3.24.1-GA.jar:na]
at javassist.CtClassType.getMembers(CtClassType.java:961) ~[javassist-3.24.1-GA.jar:na]
at javassist.CtClassType.getDeclaredField2(CtClassType.java:1086) ~[javassist-3.24.1-GA.jar:na]
at javassist.CtClassType.getField2(CtClassType.java:1038) ~[javassist-3.24.1-GA.jar:na]
at javassist.CtClassType.getField(CtClassType.java:1019) ~[javassist-3.24.1-GA.jar:na]
at javassist.CtClass.getField(CtClass.java:838) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.MemberResolver.lookupFieldByJvmName2(MemberResolver.java:292) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.TypeChecker.fieldAccess2(TypeChecker.java:941) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.TypeChecker.fieldAccess(TypeChecker.java:898) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.TypeChecker.atFieldRead(TypeChecker.java:831) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.TypeChecker.atExpr(TypeChecker.java:605) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.ast.Expr.accept(Expr.java:71) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.TypeChecker.fieldAccess(TypeChecker.java:888) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.TypeChecker.atFieldRead(TypeChecker.java:831) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.TypeChecker.atExpr(TypeChecker.java:605) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.ast.Expr.accept(Expr.java:71) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.TypeChecker.fieldAccess(TypeChecker.java:888) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.TypeChecker.atFieldRead(TypeChecker.java:831) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.TypeChecker.atExpr(TypeChecker.java:605) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.ast.Expr.accept(Expr.java:71) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:693) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:170) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.ast.CallExpr.accept(CallExpr.java:49) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:693) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:170) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.ast.CallExpr.accept(CallExpr.java:49) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:266) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:360) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:381) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.CodeGen.atIfStmnt(CodeGen.java:428) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:385) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:381) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.CodeGen.atWhileStmnt(CodeGen.java:467) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:387) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:381) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.CodeGen.atIfStmnt(CodeGen.java:428) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:385) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:381) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.CodeGen.atMethodBody(CodeGen.java:321) ~[javassist-3.24.1-GA.jar:na]
at javassist.compiler.Javac.compileBody(Javac.java:228) ~[javassist-3.24.1-GA.jar:na]
at javassist.CtBehavior.setBody(CtBehavior.java:466) ~[javassist-3.24.1-GA.jar:na]
at javassist.CtBehavior.setBody(CtBehavior.java:440) ~[javassist-3.24.1-GA.jar:na]
at org.opendaylight.mdsal.binding.dom.codec.gen.impl.AbstractStreamWriterGenerator.lambda$2(AbstractStreamWriterGenerator.java:242) ~[classes/:na]
at org.opendaylight.mdsal.binding.generator.util.JavassistUtils.instantiatePrototype(JavassistUtils.java:73) ~[classes/:na]
... 138 common frames omitted
Yang:
container me {
leaf name {
type string{
length "1..64";
}
description "name";
}
leaf uuid {
type string;
config false;
description "Universal unique identifier, MAC address is suggested.";
}
leaf status {
type me-status;
description "";
}
leaf manufacturer {
mandatory true;
type string{
length "1..32";
}
config false;
description "Manufacturer";
}
leaf product-name {
mandatory true;
type string{
length "1..32";
}
config false;
description "Product name";
}
leaf software-version {
mandatory true;
type string{
length "1..32";
}
config false;
description "Software version";
}
leaf hardware-version {
mandatory true;
type string{
length "1..32";
}
config false;
description "Hardware version";
}
leaf device-type {
mandatory true;
type device-type;
config false;
description "Device type";
}
leaf-list layer-protocol-name {
type identityref {
base acc-type:layer-protocol-name;
}
min-elements 1;
config false;
description "Layer protocol name";
}
leaf ip-address {
mandatory true;
type inet:ipv4-address;
description "Ip address(ipv4)";
}
leaf mask {
mandatory true;
type yang:dotted-quad;
description "Mask";
}
leaf ntp-enable {
mandatory true;
type boolean;
description "Support ntp or not.";
}
container ntp-servers {
list ntp-server {
key 'name';
leaf name {
type string {
length "1..32";
}
description "Name of ntp server.";
}
leaf ip-address {
mandatory true;
type inet:ipv4-address;
description "Ip address of ntp";
}
leaf port {
type inet:port-number;
default 123;
description "Port number of ntp";
}
leaf ntp-version {
type string {
length "1..64";
}
description "Ntp version";
}
leaf ntp-state {
type ntp-state;
config false;
description "Ntp state";
}
description "ntp";
}
}
leaf gate-way1 {
mandatory true;
type inet:ipv4-address;
description "Gat way1(ipv4)";
}
leaf gate-way2 {
type inet:ipv4-address;
description "Gat way2(ipv4)";
}
leaf-list eq {
type leafref {
path '/acc-devm:eqs/acc-devm:eq/acc-devm:name';
}
min-elements 1;
config false;
description "Eq list";
}
description "me";
}

Lighty.io doesn't support post method to add item to list, even related yang file has one key leaf in a list.

Lighty.io renders yang endpoint but it doesn't properly work as it said.
Rendered endpoint and input are like this:
image

If i call in this way error message is like this:
image

Branch
lighty.io branch [v 14.x]

To Reproduce
Steps to reproduce the behavior:

  1. git checkout https://...
  2. cd lighty
  3. mvn clean install
  4. run restconf-netconf example
  5. add valid netconf device
  6. goto restconf swagger page
  7. go to dhcpd-kea module dhcp-kea container subnets list to post request
  8. make request

Expected behavior
user shouldn't get an error.

Environment (please complete the following information):

  • OS: ubuntu 20.04
  • Java Version [11]
  • Maven version [3]

Here is the yang file
module dhcpd-kea {

namespace "http://xxx-dhcp.xxx.com/ns/example/dhcpd";
prefix dhcpd;

import ietf-inet-types {
prefix inet;
}

import tailf-xsd-types {
prefix xs;
}

organization "xxx AG";

contact "[email protected]";

description
"YANG datamodel for kea server subnet config
(C) 2021-2024 xxx AG";

revision 2021-06-15 {
description "Adding key leaf as key into the subnet list";
}

revision 2019-02-14 {
description "Normalized YANG identifier names.";
}

revision 2018-11-20 {
description "YANG header information updated";
}

revision 2009-05-19 {
description "Initial revision.";
}

typedef loglevel {
type enumeration {
enum kern;
enum mail;
enum local7;
}
}

grouping subnet4-list {
list subnets {
key id;
unique "net mask";
leaf id {
type uint32;
}
leaf net {
type inet:ipv4-address;
}
leaf mask {
type inet:ipv4-address;
}
container range {
presence "";
leaf dynamic-bootp {
type boolean;
default false;
description "Enable BOOTP for this instance.";
}
leaf low-addr {
type inet:ipv4-address;
mandatory true;
description "Enable BOOTP for this instance.";
}
leaf high-addr {
type inet:ipv4-address;
mandatory true;
description "Enable BOOTP for this instance.";
}
}
leaf routers {
type string;
}
leaf tftpAddrs {
type string;
}
leaf ntpAddrs {
type string;
}
leaf dnsAddrs {
type string;
}
leaf max-lease-time {
type xs:duration;
default PT7200S;
}
leaf default-lease-time {
type xs:duration;
default PT600S;
}
}
}

container dhcp-kea {
leaf default-lease-time {
type xs:duration;
default PT600S;
}
leaf max-lease-time {
type xs:duration;
default PT7200S;
}
leaf log-facility {
type loglevel;
default local7;
}
uses subnet4-list;
list shared-network {
key name;
max-elements 1024;
leaf name {
type string;
}
uses subnet4-list;
}
}
}

unable to deserialize or serialize container like this

closed: unable to reproduce

Originally posted by @mmiklus in #328 (comment)

I used lighty-core/lighty-codec to serialize and deserialize container like :

container food {
container rice {
}
}

or

container teacher {
list course {

}
}

but there is an exception. I don't know whether the code I set is wrong or whether the Yang structure containing list in the container is not supported. Can anyone help me ?

Caused by: java.lang.RuntimeException: cannot find org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces: org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces found in org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/interfaces/rev140508/interfaces.class
at javassist.CtClassType.getClassFile3(CtClassType.java:213) ~[javassist-3.26.0-GA.jar:na]
at javassist.CtClassType.makeFieldCache(CtClassType.java:970) ~[javassist-3.26.0-GA.jar:na]
at javassist.CtClassType.getMembers(CtClassType.java:961) ~[javassist-3.26.0-GA.jar:na]
at javassist.CtClassType.getDeclaredField2(CtClassType.java:1086) ~[javassist-3.26.0-GA.jar:na]
at javassist.CtClassType.getField2(CtClassType.java:1038) ~[javassist-3.26.0-GA.jar:na]
at javassist.CtClassType.getField(CtClassType.java:1019) ~[javassist-3.26.0-GA.jar:na]
at javassist.CtClass.getField(CtClass.java:846) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.MemberResolver.lookupFieldByJvmName2(MemberResolver.java:292) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.TypeChecker.fieldAccess2(TypeChecker.java:941) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.TypeChecker.fieldAccess(TypeChecker.java:898) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.TypeChecker.atFieldRead(TypeChecker.java:831) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.TypeChecker.atExpr(TypeChecker.java:605) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.ast.Expr.accept(Expr.java:71) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:693) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:170) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.ast.CallExpr.accept(CallExpr.java:49) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:693) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:170) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.ast.CallExpr.accept(CallExpr.java:49) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:266) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:360) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:381) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.CodeGen.atIfStmnt(CodeGen.java:428) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:385) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:381) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.CodeGen.atWhileStmnt(CodeGen.java:467) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:387) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:381) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.CodeGen.atIfStmnt(CodeGen.java:428) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:385) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:381) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.CodeGen.atMethodBody(CodeGen.java:321) ~[javassist-3.26.0-GA.jar:na]
at javassist.compiler.Javac.compileBody(Javac.java:228) ~[javassist-3.26.0-GA.jar:na]
at javassist.CtBehavior.setBody(CtBehavior.java:466) ~[javassist-3.26.0-GA.jar:na]
at javassist.CtBehavior.setBody(CtBehavior.java:440) ~[javassist-3.26.0-GA.jar:na]

"RemoteDevice{yuma}: No more sources for schema context",

Question
How can i add device as a node into the lighty.io

Hello All,

I have been working with lighty.io for long time. Till that moment, i added many device as a node. But nowadays, i'm working on yumawork sdk. But I couldn't add it into the lighy.io.

it gives error like this:
image

What should i check in that case, do u have suggestion?

Many thanks in advance,
Have a nice and healthy day,
With My Best Regards,
Onur.

Demo lighty.io project for SpringBoot fails on start

Hi,
I cloned the repo and imported the SpringBoot lighty.io demo into Eclipse.
For some reason the Spring Boot Starter Parent cant be found. I get the following error.

For artifact {io.lighty.core:lighty-controller-spring-di:null:jar}: The version cannot be empty. (org.apache.maven.plugins:maven-resources-plugin:3.0.2:resources:default-resources:process-resources)

Maven Version:

$ mvn -v
Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-04T15:00:29-04:00)
Maven home: /usr/local/src/apache-maven
Java version: 1.8.0_172, vendor: Oracle Corporation, runtime: /opt/eti/java/jdk1.8.0_172-x64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.21.2.el7.x86_64", arch: "amd64", family: "unix"

Can you please advise me on how to resolve this?

Doubts/queries regarding Lighty.io core libraries

Hi Team,

Hope you are doing well.

We are doing a hackathon POC for implementing a basic Network controller.We have some minor doubts/queries regarding Lighty.io core libraries.Hope you will provide us the resolution.

Following are the doubts:

1.What is Lighty.io core.Is it an SDN controller or base for SDN controller development? Since Light.io core provided us NBI and SBI support and also uses the controller component of ODL because of that it looks as a controller.

2.Since Lighty.io core uses ODL components like MDSAL. Is there any performance improvement(Memory,CPU usage) in light.io core with respect to ODL?

We are expecting a positive response.

Thanks and Regards
Ratna Shanker Mishra

Lighty.io doesn't support patch request for container config

pathc operation doesn't work for container config

Branch
lighty.io branch [v 14.x]

To Reproduce
Steps to reproduce the behavior:

  1. git checkout https://...
  2. cd lighty
  3. mvn clean install
  4. run restconf-netconf example
  5. add valid netconf device
  6. call this request:
    URL:
    http://localhost:8888/restconf/data/network-topology:network-topology/topology=topology-netconf/node=xxx-dhcp/yang-ext:mount/dhcpd-kea:dhcp-kea

BODY:
{
"subnets": [
{
"id":8,
"net": "192.168.8.0",
"mask": "255.255.255.0",
"routers": "192.168.1.3, 192.168.1.8",
"tftpAddrs": "192.168.1.3"
}
]
}
7. see error:
image

Expected behavior
user shouldn't get an error.

Environment (please complete the following information):

  • OS: [ubuntu 20.04]
  • Java Version [11]
  • Maven version [3]

Here is the yang file

module dhcpd-kea {

  namespace "http://xxx-dhcp.xxx.com/ns/example/dhcpd";
  prefix dhcpd;

  import ietf-inet-types {
    prefix inet;
  }

  import tailf-xsd-types {
    prefix xs;
  }

  organization "xxx AG";

  contact "[email protected]";

  description
    "YANG datamodel for kea server subnet config
     (C) 2021-2024 xxx AG";

  revision 2021-06-15 {
    description "Adding key leaf as key into the subnet list";
  }

  revision 2019-02-14 {
    description "Normalized YANG identifier names.";
  }

  revision 2018-11-20 {
    description "YANG header information updated";
  }

  revision 2009-05-19 {
    description "Initial revision.";
  }

  typedef loglevel {
    type enumeration {
        enum kern;
        enum mail;
        enum local7;
    }
  }

  grouping subnet4-list {
    list subnets {
      key id;
      unique "net mask";
      leaf id {
        type uint32;
        }
      leaf net {
        type inet:ipv4-address;
      }
      leaf mask {
        type inet:ipv4-address;
      }
      container range {
        presence "";
        leaf dynamic-bootp {
          type boolean;
          default false;
          description "Enable BOOTP for this instance.";
        }
        leaf low-addr {
          type inet:ipv4-address;
          mandatory true;
          description "Enable BOOTP for this instance.";
        }
        leaf high-addr {
          type inet:ipv4-address;
          mandatory true;
          description "Enable BOOTP for this instance.";
        }
      }
      leaf routers {
        type string;
      }
      leaf tftpAddrs {
        type string;
      }
      leaf ntpAddrs {
        type string;
      }
      leaf dnsAddrs {
        type string;
      }
      leaf max-lease-time {
        type xs:duration;
        default PT7200S;
      }
      leaf default-lease-time {
        type xs:duration;
        default PT600S;
      }
    }
  }

  container dhcp-kea {
    leaf default-lease-time {
      type xs:duration;
      default PT600S;
    }
    leaf max-lease-time {
      type xs:duration;
      default PT7200S;
    }
    leaf log-facility {
      type loglevel;
      default local7;
    }
    uses subnet4-list;
    list shared-network {
      key name;
      max-elements 1024;
      leaf name {
        type string;
      }
      uses subnet4-list;
    }
  }
}

lighty-community-aaa-restconf-app start fails with exception

when started, lighty-examples/lighty-community-aaa-restconf-app fails with exception

INFO [main] (AbstractLightyModule.java:113) - Submitted start of LightyModule AAALighty.
Exception in thread "pool-12-thread-1" java.lang.RuntimeException: java.lang.RuntimeException: javassist.NotFoundException: getInstance(..) is not found in org.opendaylight.aaa.AAAShiroProvider
at io.lighty.kit.examples.community.aaa.restconf.Main$1.onFailure(Main.java:131)
at com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1349)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.RuntimeException: javassist.NotFoundException: getInstance(..) is not found in org.opendaylight.aaa.AAAShiroProvider
at io.lighty.aaa.AAALightyShiroProvider.injectLightyShiroProviderMethodsToOriginalProvider(AAALightyShiroProvider.java:296)
at io.lighty.aaa.AAALightyShiroProvider.(AAALightyShiroProvider.java:91)
at io.lighty.aaa.AAALightyShiroProvider.newInstance(AAALightyShiroProvider.java:158)
at io.lighty.aaa.AAALighty.initProcedure(AAALighty.java:68)
at io.lighty.core.controller.api.AbstractLightyModule.lambda$start$0(AbstractLightyModule.java:117)
at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:125)
at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:57)
at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78)
... 3 more
Caused by: javassist.NotFoundException: getInstance(..) is not found in org.opendaylight.aaa.AAAShiroProvider
at javassist.CtClassType.getDeclaredMethod(CtClassType.java:1343)
at io.lighty.aaa.AAALightyShiroProvider.injectLightyShiroProviderMethodsToOriginalProvider(AAALightyShiroProvider.java:242)
... 10 more

Test lighty-rcgnmi package (v16.1.0) with the cnf-testsuite

Describe the bug
cnf-testsuite show some problematic parts with lighty-rcgnmi helm application. See more in their research repot:
https://github.com/cncf/cnf-testsuite/issues/1562

Branch
lighty.io branch [16.1.0]

To Reproduce
Steps to reproduce:
https://github.com/cncf/cnf-certification/blob/main/instructions.md#running

Expected behavior
Test should pass for the following problems:

  • FAILED single_process_type
    Recommendation: Using exec might help remove the parent process after executing the java command.
  • FAILED liveness
    Recommendation: Add liveness probe to deployment spec.
  • FAILED readiness
    Recommendation: Add readiness probe to deployment spec.
  • FAILED resource_policies
    Recommendation: Define resource limits in the deployment spec.

Test lighty-rnc package (v16.1.0) with the cnf-testsuite

Describe the bug
cnf-testsuite show some problematic parts with lighty-rnc helm application. See more in their research report:
https://github.com/cncf/cnf-testsuite/issues/1561

Branch
lighty.io branch [16.1.0]

To Reproduce
Steps to reproduce:
https://github.com/cncf/cnf-certification/blob/main/instructions.md#running

Expected behavior
Test should pass for the following problems:

  • FAILED single_process_type
    Recommendation: Using exec might help remove the parent process after executing the java command.
  • FAILED liveness
    Recommendation: Add liveness probe to deployment spec.
  • FAILED readiness
    Recommendation: Add readiness probe to deployment spec.
  • FAILED resource_policies
    Recommendation: Define resource limits in the deployment spec.

Persistent Configurational Datastore and Mount Points

Hi all,

First of all thanks for your RNC work which is very easy to setup and work on it.

In the architectural view that you provided for your RNC solution, MD-SAL has configurational and operational datastores.

1- According to my understanding these are reflecting configuration mount points for network devices/services. I'm running a ConfD netconf server. It has also its own configurational and operational datastores. Using the rendered restconf endpoints I can do some basic configurations at the netconf server side. Is it also possible to store these configurations in the MD-SAL's configurational datastores persistently or is it just a mount point? I want to use SDN Controller for both configuration of network services and also for configuration store like a backup. Is it possible?

2- When I check ODL controller example and mount a netconf server, it automatically sends a get-schema request and save the yang module under the cache folder. In lighty.io example I checked the cache folder and could not see the yang module. Am I missing something? Because rendered restconf endpoints are working successfully with lighty.io. (Does it support ietf-network-monitoring?)

Thanks in advance.

Strange startup behavior in Lighty RNC App

Hi colleagues,

We are using lighty 15.1.0 version in our project. From time to time, we face an issue which lighty.io refuses connection although it seems the docker container running it is up and running. While we are investigating the issue, we found out that, sometimes although initialization fails, lighty continues start up procedure.

Part of what we see from initialization log is below:

ERROR [pool-1-thread-1] (RncLightyModule.java:86) - Unable to initialize and start RNC lighty.io module!
io.lighty.applications.rnc.module.exception.RncLightyAppStartException: Exception was thrown during initialization of lighty.io module (class io.lighty.core.controller.impl.LightyControllerImpl)!
	at io.lighty.applications.rnc.module.RncLightyModule.startAndWaitLightyModule(RncLightyModule.java:161)
	at io.lighty.applications.rnc.module.RncLightyModule.initProcedure(RncLightyModule.java:69)
	at io.lighty.core.controller.api.AbstractLightyModule.lambda$start$0(AbstractLightyModule.java:119)
	at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:125)
	at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:69)
	at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.util.concurrent.TimeoutException: Waited 60 seconds (plus 8116241 nanoseconds delay) for TrustedListenableFutureTask@794c96c0[status=PENDING, info=[task=[running=[RUNNING ON pool-4-thread-1], io.lighty.core.controller.api.AbstractLightyModule$$Lambda$92/0x00000008401dc440@5f2447a7]]]
	at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:508)
	at com.google.common.util.concurrent.FluentFuture$TrustedFuture.get(FluentFuture.java:95)
	at io.lighty.applications.rnc.module.RncLightyModule.startAndWaitLightyModule(RncLightyModule.java:152)
	... 8 more
 INFO [pool-1-thread-1] (AbstractLightyModule.java:121) - LightyModule RncLightyModule started.

What we trace from code based on this log is, in package io.lighty.applications.rnc.app.Main:102 code tries to call rncLightyModule.start.get() and this method returns boolean which is false when start-up fails. But since this return value is not handled (and also the exception thrown from RncLightyModule which is RncLightyAppStartException is not handled neither), startup procedure continues although initialization failed.

Please kindly feedback about the issue.

Kind regards,

Ercan

Adding a new netconf device using confd

Hello everyone,

I deployed a netconf server on Docker using confd. When trying to add a new netconf device using RestCONF API (using lighty-community-restonf-netconf-app), I get an exception thrown.

RuntimeException while executing runnable CallbackListener{org.opendaylight.netconf.sal.connect.netconf.NetconfDevice$1@3266cc3c} with executor MoreExecutors.directExecutor()
org.opendaylight.mdsal.binding.dom.codec.impl.MissingSchemaForClassException: Schema is not available for interface org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.optional.rev190614.NetconfNodeFieldsOptional

PUT request on URL : http://localhost:8888/restconf/data/network-topology:network-topology/topology=topology-netconf/node=confd-node

with body
{
"node": [
{
"node-id": "confd-node",
"netconf-node-topology:host": "172.17.0.2",
"netconf-node-topology:port": 2022,
"netconf-node-topology:tcp-only": false,
"netconf-node-topology:username": "admin",
"netconf-node-topology:password": "admin",
"netconf-node-topology:schemaless": "false"
}
]
}

GET request http://localhost:8888/restconf/data/network-topology:network-topology/topology=topology-netconf/node=confd-node

{
"network-topology:node": [
{
"node-id": "confd-node",
"netconf-node-topology:schemaless": false,
"netconf-node-topology:host": "172.17.0.2",
"netconf-node-topology:password": "admin",
"netconf-node-topology:username": "admin",
"netconf-node-topology:tcp-only": false,
"netconf-node-topology:connection-status": "connecting",
"netconf-node-topology:port": 2022
}
]
}

Any idea to go from connecting state into connected state ?

Build of branch 11.2.x fails on missing dependency org.fusesource.leveldbjni:leveldbjni-all:jar:1.8-odl

I'm new to lighty and just trying to compile an example, specifically lighty-examples/lighty-controller-springboot-netconf. I cloned the repo and tried "mvn compile" in the top-level directory, lighty-core. I did NOT modify any of my maven settings files, and I see no repositories listed in the pom, all jars were downloaded from https://repo.maven.apache.org/maven2. The build soon ran aground with this error in the lighty-controller project:

[ERROR] Failed to execute goal on project lighty-controller: Could not resolve dependencies for project io.lighty.core:lighty-controller:jar:11.2.1-SNAPSHOT: Failure to find org.fusesource.leveldbjni:leveldbjni-all:jar:1.8-odl in https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced -> [Help 1]

I checked https://repo.maven.apache.org/maven2/org/fusesource/leveldbjni/leveldbjni-all/ and found version 1.8 of this jar, but not version 1.8-odl.

Please advise, thanks.

Integration tests are unstable

Running a build, there is a decent change to get across:

[INFO] [ERROR] Failures:
[INFO] [ERROR] io.lighty.modules.southbound.netconf.tests.TopologyPluginsTest.testMountDevice(io.lighty.modules.southbound.netconf.tests.TopologyPluginsTest)
[INFO] [ERROR] Run 1: TopologyPluginsTest.testMountDevice:145
[INFO] dispatcher.createReconnectingClient();
[INFO] Wanted 1 time:
[INFO] -> at io.lighty.modules.southbound.netconf.tests.TopologyPluginsTest.testMountDevice(TopologyPluginsTest.java:145)
[INFO] But was 2 times. Undesired invocation:
[INFO] -> at org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator.initializeRemoteConnection(NetconfDeviceCommunicator.java:150)

This needs to be investigated and fixed.

Instructions to access the Java API to add/remove flow entries and to retrieve flow statistics using Openflow Plugin

I found the OpenFlow integration example given in https://github.com/PANTHEONtech/lighty/tree/13.0.x/lighty-examples/lighty-community-restconf-ofp-app. But I am trying to understand how can I add/remove flow entries and retrieve the statistics without using any northbound rest api rather interested in using this as a library and accessing the relevant services using JAVA APIs. Could you please point me to the documentation or an example to achieve this task?

Lighty.io doesn't support post, if related yang file has multiple key leaf in a list.

Lighty.io renders yang endpoint but it doesn't properly work as it said.
Rendered endpoint and input are like this:
image

If i call in this way error message is like this:
image

Branch
lighty.io branch [v 14.x]

To Reproduce
Steps to reproduce the behavior:

  1. git checkout https://...
  2. cd lighty
  3. mvn clean install
  4. run restconf-netconf example
  5. add valid netconf device
  6. goto restconf swagger page
  7. go to subnet post request
  8. make request

Expected behavior
user shouldn't get an error.

Environment (please complete the following information):

  • OS: ubuntu 20.04
  • Java Version [11]
  • Maven version [3]

Yang file:
module dhcpd {

namespace "http://example.com/ns/example/dhcpd";
prefix dhcpd;

import ietf-inet-types {
prefix inet;
}

import tailf-xsd-types {
prefix xs;
}

revision 2019-02-14 {
description "Normalized YANG identifier names.";
}

revision 2018-11-20 {
description "YANG header information updated";
}

revision 2009-05-19 {
description "Initial revision.";
}

typedef loglevel {
type enumeration {
enum kern;
enum mail;
enum local7;
}
}

grouping subnet {
list subnet {
key "net mask";
leaf net {
type inet:ipv4-address;
}
leaf mask {
type inet:ipv4-address;
}
container range {
presence "";
leaf dynamic-bootp {
type boolean;
default false;
description "Enable BOOTP for this instance.";
}
leaf low-addr {
type inet:ipv4-address;
mandatory true;
description "Enable BOOTP for this instance.";
}
leaf high-addr {
type inet:ipv4-address;
description "Enable BOOTP for this instance.";
}
}
leaf routers {
type string;
}
leaf tftpAddrs {
type string;
}
leaf ntpAddrs {
type string;
}
leaf dnsAddrs {
type string;
}
leaf max-lease-time {
type xs:duration;
default PT7200S;
}
leaf default-lease-time {
type xs:duration;
default PT600S;
}
}
}

container dhcp {
leaf serverActivity {
type boolean;
default true;
}
leaf default-lease-time {
type xs:duration;
default PT600S;
}
leaf max-lease-time {
type xs:duration;
default PT7200S;
}
leaf log-facility {
type loglevel;
default local7;
}
container subnets {
uses subnet;
}
container shared-networks {
list shared-network {
key name;
max-elements 1024;
leaf name {
type string;
}
container subnets {
uses subnet;
}
}
}
}
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.