Following corner scenario happened in one of our cluster.
1. NN1 was Active and NN2 was Standby
2. NN2 machine's network was slow
3. NN1 got shutdown.
4. NN2 ZKFC got the notification and trying to check for old active for fencing. (This took little more time, again due to slow network)
5. In between, NN1 got restarted by our automatic monitoring, and ZKFC made it Active.
6. Now NN2 ZKFC got Old Active as NN1 and it did graceful fencing of NN1 to STANBY.
7. Before writing ActiveBreadCrumb to ZK, NN2 ZKFC got session timeout and got shutdown before making NN2 Active.
Now cluster having both NameNodes as STANDBY.
NN1 ZKFC still thinks that its nameNode is in Active state.
NN2 ZKFC waiting for election.