I haven't read the code, so I can't comment on how and when FastLeaderElection works(Maybe it is some kind of optimization and won't be able to handle catastrophic failures, just a wild guess...)
BTW I want to ask how the ZAB protocol works in the following situation: Suppose a ZK cluster consists of 5 nodes(A,B,C,D,E). Leader A proposed a new message: case a) A,B logged successfully, quorum not reached, commit should fail. case b) A,B,C logged successfully, quorum has been reached, commit should success. Now A crashed and went away, how the new leader distinguish case a> and case b> since neither of them(B or B+C) has reached the quorum?