Uploaded image for project: 'ovsdb'
  1. ovsdb
  2. OVSDB-110

ovsdb throws exception, fails to try to program flows if ovs is running already at controller startup

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • None
    • unspecified
    • None
    • Operating System: All
      Platform: All

    • 2024

      Reproduction steps:

      1) On the host (this must be done first without the controller running to reproduce):
      sudo ovs-vsctl set-manager tcp:10.0.2.2:6640;sudo ovs-vsctl add-br br-int;sudo ovs-vsctl set bridge br-int protocols=["OpenFlow13"];sudo ovs-vsctl set-controller br-int tcp:10.0.2.2:6633

      2) The controller:
      cd integration/distributions/extra/karaf
      mvn clean install
      cd target/assembly/bin
      ./karaf
      feature:install odl-ovsdb-openstack

      No flows get programmed to ovs, but the following exception is in the logs:

      2014-09-22 09:16:55,555 | ERROR | g-notification-1 | ProviderNetworkManagerImpl | 336 - org.opendaylight.ovsdb.openstack.net-virt - 1.0.0.SNAPSHOT | No providers matching OpenFlow13 found
      2014-09-22 09:16:55,555 | ERROR | g-notification-1 | NotifyTask | 270 - org.opendaylight.controller.sal-binding-broker-impl - 1.1.0.SNAPSHOT | Unhandled exception thrown by listener: org.opendaylight.controller.sal.compatibility.InventoryAndReadAdapter$$Broker$ListenerInvoker@3542281b
      java.util.NoSuchElementException
      at com.google.common.collect.AbstractIterator.next(AbstractIterator.java:154)[119:com.google.guava:14.0.1]
      at org.opendaylight.ovsdb.openstack.netvirt.impl.ProviderNetworkManagerImpl.getProvider(ProviderNetworkManagerImpl.java:65)[336:org.opendaylight.ovsdb.openstack.net-virt:1.0.0.SNAPSHOT]
      at org.opendaylight.ovsdb.openstack.netvirt.SouthboundHandler.notifyNode(SouthboundHandler.java:303)[336:org.opendaylight.ovsdb.openstack.net-virt:1.0.0.SNAPSHOT]
      at org.opendaylight.controller.switchmanager.internal.SwitchManager.notifyNode(SwitchManager.java:1827)[307:org.opendaylight.controller.switchmanager.implementation:0.4.2.SNAPSHOT]
      at org.opendaylight.controller.switchmanager.internal.SwitchManager.addNode(SwitchManager.java:1049)[307:org.opendaylight.controller.switchmanager.implementation:0.4.2.SNAPSHOT]
      at org.opendaylight.controller.switchmanager.internal.SwitchManager.updateNode(SwitchManager.java:1150)[307:org.opendaylight.controller.switchmanager.implementation:0.4.2.SNAPSHOT]
      at org.opendaylight.controller.sal.implementation.internal.Inventory.updateNode(Inventory.java:115)[82:org.opendaylight.controller.sal.implementation:0.4.2.SNAPSHOT]
      at org.opendaylight.controller.sal.compatibility.InventoryAndReadAdapter.publishNodeUpdate(InventoryAndReadAdapter.java:721)[335:org.opendaylight.controller.sal-compatibility:1.1.0.SNAPSHOT]
      at org.opendaylight.controller.sal.compatibility.InventoryAndReadAdapter.onNodeUpdated(InventoryAndReadAdapter.java:456)[335:org.opendaylight.controller.sal-compatibility:1.1.0.SNAPSHOT]
      at org.opendaylight.controller.sal.compatibility.InventoryAndReadAdapter$$Broker$ListenerInvoker.onNotification(InventoryAndReadAdapter$$Broker$ListenerInvoker.java)[335:org.opendaylight.controller.sal-compatibility:1.1.0.SNAPSHOT]
      at org.opendaylight.controller.sal.binding.impl.AbstractNotificationListenerRegistration.notify(AbstractNotificationListenerRegistration.java:38)[270:org.opendaylight.controller.sal-binding-broker-impl:1.1.0.SNAPSHOT]
      at org.opendaylight.controller.sal.binding.impl.NotifyTask.run(NotifyTask.java:42)[270:org.opendaylight.controller.sal-binding-broker-impl:1.1.0.SNAPSHOT]
      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)[:1.7.0_65]
      at java.util.concurrent.FutureTask.run(FutureTask.java:262)[:1.7.0_65]
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[:1.7.0_65]
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)[:1.7.0_65]
      at java.lang.Thread.run(Thread.java:745)[:1.7.0_65]

      This is basically two things:
      a) ProviderNetworkManagerImpl throwing an exception
      b) MD-SAL reporting that it threw the exception

      Interesting additional data.

      If after reproducing you do on the host:
      sudo ovs-vsctl del-br br-int

      and then

      sudo ovs-vsctl set-manager tcp:10.0.2.2:6640;sudo ovs-vsctl add-br br-int;sudo ovs-vsctl set bridge br-int protocols=["OpenFlow13"];sudo ovs-vsctl set-controller br-int tcp:10.0.2.2:6633

      the exception does not recur, and the flows get programmed to ovs.

      This looks like a startup race condition in ovsdb.

            Unassigned Unassigned
            hagbard Ed Warnicke
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: