-
Bug
-
Resolution: Done
-
Medium
-
Fluorine SR1
-
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)