The updates should be performed in an atomic way: if any part of the update fails, the whole update should fail and the intermediate changes reverted