Idea #17849
Updated by Peter Amstutz 9 months ago
Background: Major features: Python+llfuse was expedient and has done lots of good work for us, but it's not promising as a long term (fast+reliable+maintainable) solution. Implementation: * collection-backed filesystem from #12483, plus more general arvados-backed filesystem ("by_id" directory, etc, same as the one exported via webdav) from #13111 * present as fuse using a library like https://godoc.org/bazil.org/fuse or https://godoc.org/github.com/billziss-gh/cgofuse/fuse * package as a subcommand ("mount") of the source:cmd/arvados-client program TBD: * Approach for handling websocket "update" events * Selectable mechanisms/options for syncing to server (fflush, fsync, close) (on a shell node, flush-on-close, flush-periodically, or flush-after-idle-time might be best; Written in crunch-run, flush-on-exit might be best) * Desired behavior when updates conflict (write error? clobber? create "oops,clobbered" file?) Other current bugs/limitations: * Old keep block signatures don't get refreshed, so reading a collection that's been cached for too long returns an I/O error * Not command-line compatible Go, sharing code with arv-mount keep-web * Logging is not great Windows support * No docs * No way to control overall cache size (currently collectionfs can use lots Usable by crunch-run instead of RAM in certain non-sequential write scenarios; we need the ability to trade speed for space efficiency in memory-constrained environments) * No warnings given when cache is thrashing * No application level instrumentation (just optional Go pprof) * Special @.arvados#collection@ file is incomplete (has manifest_text but not uuid, pdh) * No automatic flush on sigint/sigterm * No warning given when trying to exit but filesystem can't be unmounted yet (filehandle is open, or a process's cwd is in the mount) * Mac port has a race bug (see notes below) * Windows port is untested * Cross-compiling recipe for Mac/Windows ports is fragile * chmod is a no-op (chmod 0700 succeeds, but the file mode will still be 0755) arv-mount