Details
-
Bug
-
Status: Resolved
-
Medium
-
Resolution: Done
-
Fluorine SR1
-
None
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)
Attachments
| # | Subject | Branch | Project | Status | CR | V |
|---|---|---|---|---|---|---|
| 85426,3 | Address deadlock scenarios in BGP peer, session mgmt code | master | bgpcep | Status: MERGED | +2 | +1 |
| 86009,2 | Address deadlock scenarios in BGP peer, session mgmt code | stable/sodium | bgpcep | Status: MERGED | +2 | +1 |
| 86010,3 | Address deadlock scenarios in BGP peer, session mgmt code | stable/neon | bgpcep | Status: MERGED | +2 | +1 |