An efficient communication induced rollforward checkpointing and recover protocol for distributed systems