[BGPCEP-884] BGP deadlock on session up/down in quick succession Created: 29/Oct/19  Updated: 02/Dec/19  Resolved: 02/Dec/19

Status: Resolved
Project: bgpcep
Component/s: BGP
Affects Version/s: Fluorine SR1
Fix Version/s: Neon SR3, Magnesium, Sodium SR1

Type: Bug Priority: Medium
Reporter: Ajay Lele Assignee: Ajay Lele
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

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) 

 


Generated at Wed Feb 07 19:14:24 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.