ZkStateWriter should process all the ZkWriteCommands correspond to a message in atomic ( we are processing one by one command right now ). Some ZkWriteCommands can get lost. Here is the case :
1. We process DOWNNODE message ( whatever message that produces multiple ZkWriteComand ).
2. We poll that message from stateUpdateQueue and push it to workQueue ( for backup ).
3. The DOWNNODE message is converted into multiple ZkWriteCommand
4. We enqueue one by one ZkWriteCommand into ZkStateWriter. Any command can trigger flush, which calls the onWrite() callback to empty workQueue
5. The Overseer gets restarted, and the rest of ZkWriteCommands (which not get processed in step 4) will be lost because the workQueue is empty now (because onWrite() callback in step 4)