[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)
|