|
|
|
|
|
by hexomancer
2571 days ago
|
|
First of all, most files are nowhere near 10 levels deep, let alone hundreds of levels. Second, we don't have to do a naive update every single time a file is changed. We can amortize the cost by updating the parent folder sizes only when the file size is changed by a significant amount since last update (say, 10%). And we can do this process recursively is the parent directories. This was it only takes O(1) time to update folder metadata for each file operation and all the metadata are accurate within 10%. Also I don't see how drives and hard linked files are any different than regular files in this context. |
|
Filesystem (and low-level in general) stuff must consider worst cases. There is a lot of software out there doing weird things. For instance, npm created a very deep folder hierarchy for a long time (so deep it messed up some path length restrictions in fact).
One way or another the worst case is going to be hit. And then what? The entire computer grinds to a halt? How is the user supposed to discover why?
> We can amortize the cost by updating the parent folder sizes only when the file size is changed by a significant amount since last update (say, 10%).
So you have a log file inside a folder. Because it just keeps growing line by line then the folder's size is never updated. Now you have many Gb's of log file in that folder, and the folder says it is using "4Kbytes".
Moreover, this propagates upwards the filesystem. In the end, your root drive has a "folder size" of X but its actual usage is Y >> X. How is that not going to confuse everyone?
Put in another way, who is going to trust the X number ever? Why would you pay all that accounting penalty for every write to every file to end up with a half-asset broken-by-design feature?
> Also I don't see how drives and hard linked files are any different than regular files in this context.
They are different in that they exist in multiple folders at the same time (so they would trigger multiple size-updating branches).