File operations under /actor/<id>/fs/ become messages from `fs` to <id> (fs_read, fs_write, fs_mkdir, fs_remove, fs_rename) with a 10 s timeout. vfs.rs wraps the wasi:filesystem implementation of wasmtime-wasi.
This commit is contained in:
+27
@@ -78,6 +78,33 @@ so that readers never see half of it, write a temporary file and `rename` it
|
||||
Send large or binary data as a path under `/actor/<id>/public/`, not inside a
|
||||
message.
|
||||
|
||||
### Actor-served files: `/actor/<id>/fs/`
|
||||
|
||||
Files under `/actor/<id>/fs/` are not on disk: the actor `<id>` serves them.
|
||||
Every actor can read and write them. The host turns each file operation into a
|
||||
message from `fs` to `<id>` and waits up to 10 seconds for the reply. `path`
|
||||
is relative to `fs/` and starts with `/` (the folder itself is `/`).
|
||||
|
||||
| Request | Reply |
|
||||
| --- | --- |
|
||||
| `{"type": "fs_read", "path"}` | `{"type": "fs_file", "text"}` (or `"base64"` instead of `"text"`), or `{"type": "fs_dir", "entries": [{"name", "type": "file" \| "dir"}]}` |
|
||||
| `{"type": "fs_write", "path", "text"}` (or `"base64"` for non-UTF-8 data) | `{"type": "fs_done"}` |
|
||||
| `{"type": "fs_mkdir", "path"}`, `{"type": "fs_remove", "path"}` | `{"type": "fs_done"}` |
|
||||
| `{"type": "fs_rename", "path", "to"}` | `{"type": "fs_done"}` |
|
||||
|
||||
Any request can be answered with `{"type": "fs_error", "errno": "no-entry"}`.
|
||||
`errno` is a `wasi:filesystem` error code: `no-entry`, `exist`,
|
||||
`not-directory`, `is-directory`, `not-empty`, `access`, `not-permitted`,
|
||||
`invalid`, `unsupported`, `busy`, or `io` (also for anything else).
|
||||
|
||||
- Opening a file sends `fs_read` once. Reads come from that copy.
|
||||
- After a change, closing (or syncing) the file sends the whole file in one
|
||||
`fs_write`.
|
||||
- No reply within 10 seconds, or an actor that does not exist, makes the
|
||||
operation fail (`io`, or `no-entry`). An actor that opens its own `fs/`
|
||||
waits for itself and fails after the timeout.
|
||||
- `fs` is reserved: no actor can have that ID.
|
||||
|
||||
## The broker
|
||||
|
||||
Requests to `broker`. The answer is a message whose `reply_to` is the ID of
|
||||
|
||||
Reference in New Issue
Block a user