valiant
public text v1 · immutableUser 1 moves X from A to B
User 2 moves A.getParent() from A.getParent().getParent() to C
A is read locked, B is read locked
X write locked
A.getParent() is write locked
A.getParent().getParent() is read locked
C is read locked
For some reason, user 2's request is faster:
A.getParent() is moved
User 2's request is gets now processed further
G2 tries to move X but it's file location is no longer valid because X.getParent().getParent() has been moved