Hi all,
I am working on Beryllium-SR2 and faced a problem that notification could not
be properly handled when we configured more than 180 devices with openflow. I
think the reason may be LLDPDiscoveryListener class which handles the
notification, however also publishes notification in the same thread.
Following is the stack trace of the notification thread when problem appears.
"pool-29-thread-1" #828 prio=5 os_prio=0 tid=0x00007f8f25816000 nid=0x650f
runnable [0x00007f91b5c85000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
at
java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:338)
at
com.lmax.disruptor.MultiProducerSequencer.next(MultiProducerSequencer.java:136)
at
com.lmax.disruptor.MultiProducerSequencer.next(MultiProducerSequencer.java:105)
at com.lmax.disruptor.RingBuffer.next(RingBuffer.java:246)
at
org.opendaylight.controller.md.sal.dom.broker.impl.DOMNotificationRouter.putNotification(DOMNotificationRouter.java:200)
at
org.opendaylight.controller.md.sal.binding.impl.BindingDOMNotificationPublishServiceAdapter.putNotification(BindingDOMNotificationPublishServiceAdapter.java:51)
at
org.opendaylight.controller.md.sal.binding.compat.HeliumNotificationProviderServiceAdapter.publish(HeliumNotificationProviderServiceAdapter.java:33)
at
org.opendaylight.controller.md.sal.binding.util.AbstractBindingSalProviderInstance.publish(AbstractBindingSalProviderInstance.java:49)
at
org.opendaylight.openflowplugin.applications.topology.lldp.LLDPDiscoveryListener.onPacketReceived(LLDPDiscoveryListener.java:38)
at
java.lang.invoke.LambdaForm$DMH/576349521.invokeInterface_LL_V(LambdaForm$DMH)
at java.lang.invoke.LambdaForm$BMH/1978006025.reinvoke(LambdaForm$BMH)
at
java.lang.invoke.LambdaForm$MH/895324468.invokeExact_MT(LambdaForm$MH)
at
org.opendaylight.yangtools.yang.binding.util.NotificationListenerInvoker.invokeNotification(NotificationListenerInvoker.java:91)
at
org.opendaylight.controller.md.sal.binding.impl.BindingDOMNotificationListenerAdapter.onNotification(BindingDOMNotificationListenerAdapter.java:44)
at
org.opendaylight.controller.md.sal.dom.broker.impl.DOMNotificationRouterEvent.deliverNotification(DOMNotificationRouterEvent.java:56)
at
org.opendaylight.controller.md.sal.dom.broker.impl.DOMNotificationRouter$1.onEvent(DOMNotificationRouter.java:68)
at
org.opendaylight.controller.md.sal.dom.broker.impl.DOMNotificationRouter$1.onEvent(DOMNotificationRouter.java:65)
at
com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:128)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
We did some test by changing the LLDPDiscoveryListener class as followings( red
color), and the problem above was gone. So please help us confirm this problem
and give us some advice.
class LLDPDiscoveryListener implements PacketProcessingListener {
private static final Logger LOG =
LoggerFactory.getLogger(LLDPDiscoveryListener.class);
private static final ExecutorService executorService =
Executors.newSingleThreadExecutor();
private LLDPLinkAger lldpLinkAger;
private NotificationProviderService notificationService;
LLDPDiscoveryListener(NotificationProviderService notificationService) {
this.notificationService = notificationService;
}
public void onPacketReceived(PacketReceived lldp) {
NodeConnectorRef src =
LLDPDiscoveryUtils.lldpToNodeConnectorRef(lldp.getPayload(), true);
if(src != null) {
LinkDiscoveredBuilder ldb = new LinkDiscoveredBuilder();
ldb.setDestination(lldp.getIngress());
ldb.setSource(new NodeConnectorRef(src));
final LinkDiscovered ld = ldb.build();
executorService.execute(new Runnable() {
@Override
public void run() {
notificationService.publish(ld);
lldpLinkAger.put(ld);
}
});
}
}
public void setLldpLinkAger(LLDPLinkAger lldpLinkAger) {
this.lldpLinkAger = lldpLinkAger;
}
}
Thanks again and best regards.
Qishun Jiao_______________________________________________
openflowplugin-dev mailing list
[email protected]
https://lists.opendaylight.org/mailman/listinfo/openflowplugin-dev