A method comprising: receiving, at data processing hardware , a stream of data blocks for storage at a first storage location of a distributed storage system and at a second storage location of the distributed storage system , the first storage location associated with a first geographical region and the second storage location associated with a second geographical region different than the first geographical region; synchronously writing, by the data processing hardware , the stream of data blocks to the first storage location and to the second storage location ; while synchronously writing the stream of data blocks to the first storage location and to the second storage location , determining, by the data processing hardware , an unrecoverable failure at the second storage location that prohibits further writing of the stream of data blocks to the second storage location ; determining, by the data processing hardware , a failure point in the writing of the stream of data blocks , the failure point demarcating data blocks that were successfully written to the second storage location and data blocks that were not successfully written to the second storage location ; and synchronously writing, by the data processing hardware , starting at the failure point , the stream of data blocks to the first storage location and to a third storage location of the distributed storage system , the third storage location associated with a third geographical region different than the first geographical region and the second geographical region, further comprising, asynchronously writing, by the data processing hardware , from a beginning point of the stream of data blocks to the failure point , the stream of data blocks to the third storage location . receiving, at data processing hardware , a stream of data blocks for storage at a first storage location of a distributed storage system and at a second storage location of the distributed storage system , the first storage location associated with a first geographical region and the second storage location associated with a second geographical region different than the first geographical region; synchronously writing, by the data processing hardware , the stream of data blocks to the first storage location and to the second storage location ; while synchronously writing the stream of data blocks to the first storage location and to the second storage location , determining, by the data processing hardware , an unrecoverable failure at the second storage location that prohibits further writing of the stream of data blocks to the second storage location ; determining, by the data processing hardware , a failure point in the writing of the stream of data blocks , the failure point demarcating data blocks that were successfully written to the second storage location and data blocks that were not successfully written to the second storage location ; and synchronously writing, by the data processing hardware , starting at the failure point , the stream of data blocks to the first storage location and to a third storage location of the distributed storage system , the third storage location associated with a third geographical region different than the first geographical region and the second geographical region, further comprising, asynchronously writing, by the data processing hardware , from a beginning point of the stream of data blocks to the failure point , the stream of data blocks to the third storage location . <EOS>