Currently AssignmentManager handles clean startup and failover very differently.
Different logic is mingled together so it is hard to find out which is for which.
We should clean it up and share the same logic so that AssignmentManager handles
both cases the same way. This way, the code will much easier to understand and