Sailbox Volumes
Alpha: Sailbox Volumes are available for early testing. The API and
durability semantics may change before general availability.
commit() and pulled from remote
only when you call reload().
reload() updates the mounted view to the latest remote manifest through lazy
FUSE. It does not download every file in the volume. File bytes are downloaded
into a local cache when a process opens the file, while new writes are kept in a
dirty local overlay until commit(). Mounted volumes require guest FUSE support;
if the guest cannot run the volume FUSE helper, reload() fails with an error.
API
sail.Volume.get
mint_if_missing=True, Sail creates
the volume if it does not exist.
Sailbox.create(..., volumes=...)
volumes is a mapping from absolute guest mount path to a sail.Volume handle.
The mount path must not be /.
sail.Volume.from_mount
volume.commit
volume.reload
Semantics
- Volume data is not included in Sailbox checkpoints.
- Commit dirty local work before migration, fork, or restore if those bytes must
survive. The durability boundary is
commit(). - Deleting or terminating a Sailbox does not delete its volumes.
- Multiple Sailboxes can mount the same volume concurrently.
commit()detects changed files, uploads missing chunks and delete markers, then publishes a metadata commit. Unchanged chunks are not re-uploaded.- Concurrent commits to different paths are merged at commit time. Concurrent commits to the same path are last-writer-wins.
reload()overwrites unsynced local changes and updates the lazy mounted view without prefetching the full tree.- There is no POSIX locking or live remote filesystem behavior.
- Volumes store files as chunks. Small files use 8MiB chunks; large files use larger chunks for higher bulk throughput. Rewriting bytes inside a chunk uploads that chunk again; appending after a full final chunk uploads only the new tail chunk.
- Large changed files are uploaded and downloaded with bounded chunk concurrency.
Performance
Writes are local untilcommit(). Clean remote files are fetched lazily on
first open and cached locally, so mounting or reloading a large volume does not
require local disk proportional to the full remote tree. File chunks stream
directly to S3 through short-lived URLs, and Sailbox API requests carry metadata
only. This is intended for object-store-shaped workspace access: whole-file
CRUD, notebooks and small files rewritten frequently, and occasional larger file
upload/download.