Whenever a listener is being removed from the leader, a notification is sent to leader's change channel. This is done while holding a lock. If the channel is full, the function will block here.
On the other side, if leaderServer is processing a notification on leader's change channel, It will call GetActiveEnsembleSize which also attempts to take same lock (which is held by removeListener), and hence leading to a deadlock.
|For Gerrit Dashboard: MB-43047|
|142893,2||MB-43047: Avoid deadlock in leader if changech is full||6.5.2||gometa||Status: MERGED||+2||+1|
|142895,2||MB-43047: Increase size of the change notification channel in leader||6.5.2||gometa||Status: MERGED||+2||+1|