Feature #13272

Updated by Tom Morris almost 2 years ago

Continue where #13111 leaves off, bringing the /users/ tree exported by keep-web up to (at least) a level of functionality and performance similar to arv-mount.

* Add/remove/update files/dirs in collections
* Add/remove collections by name using mkcol/delete
* Copy/move files/dirs from one collection to another (possibly /users/* to /c=*/)

See #13310 Performance:
* Cache the filesystem layout, so a sequence of N webdav requests with the same token and same/overlapping paths don't need to retrieve the whole filesystem layout from API server N times
* Use a single cache entry
for performance work associated with this any given {collection, token} tuple, regardless of whether it's accessed via /c=UUID/, /by_id/UUID/, /by_id/PDH/, /users/alice/foo/, etc.

Unlike arv-mount, webdav writes should continue to be atomic: after concurrent requests to write content A to F and write content B to F, F should contain either A or B, not a mix of the two.