What is a two phase commit?