When running some stress tests, I saw a failure where the DURefreshThread failed due to the filesystem changing underneath it:
(the block was probably finalized while the du process was running, which caused it to fail)
The next block write, then, called getUsed(), and the exception got propagated causing the write to fail. Since it was a pseudo-distributed cluster, the client was unable to pick a different node to write to and failed.
The current behavior of propagating the exception to the next (and only the next) caller doesn't seem well-thought-out.