Comment by yourbandsucks

7 years ago

Basically every time that POSIX makes a guarantee which is difficult to fulfill performantly in a distributed environment.

* Some directory operations require an atomic update to 2 different inodes, confounding sharding strategies and requiring some form of global synchronization.

* write() -- write syscall guarantees that when it returns, the filesystem will serve all future read() calls appropriately, with the contents of the write. This matches up poorly with big streaming writes -- in order to fulfill the spec, you need all these giant pockets of latency waiting for an ACK from the remote host, instead of just streaming it all and getting one ACK at the end.