Uploaded image for project: 'bgpcep'
  1. bgpcep
  2. BGPCEP-884

BGP deadlock on session up/down in quick succession

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Medium Medium
    • Neon SR3, Magnesium, Sodium SR1
    • Fluorine SR1
    • BGP
    • None

      Few scenarios of BGP threads getting deadlocked were encountered when session goes up/down in quick succession. To repro, add/remove BGP peer config with very short delay in-between them.

       

      Scenario 1:

      disconnect thread, owns BGPSessionImpl, waiting BGPPeer
               at org.opendaylight.protocol.bgp.rib.impl.BGPPeer.releaseConnection(BGPPeer.java:445)
               at org.opendaylight.protocol.bgp.rib.impl.BGPPeer.onSessionDown(BGPPeer.java:418)
               at org.opendaylight.protocol.bgp.rib.impl.BGPSessionImpl.endOfInput(BGPSessionImpl.java:271)
               at org.opendaylight.protocol.bgp.rib.impl.BGPSessionImpl.channelInactive(BGPSessionImpl.java:450)
      
      
      DCN thread, owns BGPPeer BgpPeer, waiting BGPSessionImpl
               at org.opendaylight.protocol.bgp.rib.impl.BGPSessionImpl.close(BGPSessionImpl.java:204)
               at org.opendaylight.protocol.bgp.rib.impl.BGPPeer.releaseConnection(BGPPeer.java:453)
               at org.opendaylight.protocol.bgp.rib.impl.BGPPeer.close(BGPPeer.java:222)
               at org.opendaylight.protocol.bgp.rib.impl.config.BgpPeer$BgpPeerSingletonService.closeServiceInstance(BgpPeer.java:265)
               at org.opendaylight.protocol.bgp.rib.impl.config.BgpPeer$BgpPeerSingletonService.access$200(BgpPeer.java:209)
               at org.opendaylight.protocol.bgp.rib.impl.config.BgpPeer.closeServiceInstance(BgpPeer.java:159)
               at org.opendaylight.protocol.bgp.rib.impl.config.BGPClusterSingletonService.closePeer(BGPClusterSingletonService.java:271)
               at org.opendaylight.protocol.bgp.rib.impl.config.BGPClusterSingletonService.onNeighborRemoved(BGPClusterSingletonService.java:283)
               at org.opendaylight.protocol.bgp.rib.impl.config.BGPClusterSingletonService.onNeighborsChanged(BGPClusterSingletonService.java:220)
               at org.opendaylight.protocol.bgp.rib.impl.config.BgpDeployerImpl.onNeighborsChanged(BgpDeployerImpl.java:218)
               at org.opendaylight.protocol.bgp.rib.impl.config.BgpDeployerImpl.handlePeersChange(BgpDeployerImpl.java:165)
               at org.opendaylight.protocol.bgp.rib.impl.config.BgpDeployerImpl.handleModifications(BgpDeployerImpl.java:134)
               at org.opendaylight.protocol.bgp.rib.impl.config.BgpDeployerImpl.onDataTreeChanged(BgpDeployerImpl.java:118)  

       

      Scenario 2:

      epollEventLoopGroup-9-5 locked on org.opendaylight.protocol.bgp.rib.impl.protocol.BGPProtocolSessionPromise@34593547 (owned by opendaylight-cluster-data-notification-dispatcher-35587):
               at org.opendaylight.protocol.bgp.rib.impl.protocol.BGPProtocolSessionPromise$PeerRegistrySessionListenerImpl.onSessionCreated(BGPProtocolSessionPromise.java:177)
               at org.opendaylight.protocol.bgp.rib.impl.StrictBGPPeerRegistry.getPeer(StrictBGPPeerRegistry.java:196)
               at org.opendaylight.protocol.bgp.rib.impl.AbstractBGPSessionNegotiator.handleOpen(AbstractBGPSessionNegotiator.java:204)
               at org.opendaylight.protocol.bgp.rib.impl.AbstractBGPSessionNegotiator.handleMessage(AbstractBGPSessionNegotiator.java:173)
               at org.opendaylight.protocol.bgp.rib.impl.AbstractBGPSessionNegotiator.channelRead(AbstractBGPSessionNegotiator.java:286)
      
      
      opendaylight-cluster-data-notification-dispatcher-35587 locked on org.opendaylight.protocol.bgp.rib.impl.StrictBGPPeerRegistry@3066a793 (owned by epollEventLoopGroup-9-5):
               at org.opendaylight.protocol.bgp.rib.impl.StrictBGPPeerRegistry$2.removeRegistration(StrictBGPPeerRegistry.java:388)
               at org.opendaylight.yangtools.concepts.AbstractRegistration.close(AbstractRegistration.java:41)
               at org.opendaylight.protocol.bgp.rib.impl.protocol.BGPProtocolSessionPromise.closePeerSessionListener(BGPProtocolSessionPromise.java:127)
               at org.opendaylight.protocol.bgp.rib.impl.protocol.BGPProtocolSessionPromise.cancel(BGPProtocolSessionPromise.java:115)
               at org.opendaylight.protocol.bgp.rib.impl.protocol.BGPReconnectPromise.cancel(BGPReconnectPromise.java:107)
               at org.opendaylight.protocol.bgp.rib.impl.config.BgpPeer$BgpPeerSingletonService.closeServiceInstance(BgpPeer.java:262)
               at org.opendaylight.protocol.bgp.rib.impl.config.BgpPeer$BgpPeerSingletonService.access$200(BgpPeer.java:209)
               at org.opendaylight.protocol.bgp.rib.impl.config.BgpPeer.closeServiceInstance(BgpPeer.java:159)
               at org.opendaylight.protocol.bgp.rib.impl.config.BGPClusterSingletonService.closePeer(BGPClusterSingletonService.java:271)
               at org.opendaylight.protocol.bgp.rib.impl.config.BGPClusterSingletonService.onNeighborUpdated(BGPClusterSingletonService.java:260)
               at org.opendaylight.protocol.bgp.rib.impl.config.BGPClusterSingletonService.onNeighborModified(BGPClusterSingletonService.java:238)
               at org.opendaylight.protocol.bgp.rib.impl.config.BGPClusterSingletonService.onNeighborsChanged(BGPClusterSingletonService.java:224)
               at org.opendaylight.protocol.bgp.rib.impl.config.BgpDeployerImpl.onNeighborsChanged(BgpDeployerImpl.java:218)
               at org.opendaylight.protocol.bgp.rib.impl.config.BgpDeployerImpl.handlePeersChange(BgpDeployerImpl.java:165)
               at org.opendaylight.protocol.bgp.rib.impl.config.BgpDeployerImpl.handleModifications(BgpDeployerImpl.java:134)
               at org.opendaylight.protocol.bgp.rib.impl.config.BgpDeployerImpl.onDataTreeChanged(BgpDeployerImpl.java:118) 

       

            ajayslele Ajay Lele
            ajayslele Ajay Lele
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: