docs(tvix/store): add README, document services and store model
These are intended to help digest the protocol definitions for tvix- store, and how they tie into the whole concept. Co-Authored-By: Vincent Ambo <mail@tazj.in> Change-Id: Ic1ba3ba41ef599209453f15d0ac2e07a6144bcca Reviewed-on: https://cl.tvl.fyi/c/depot/+/7439 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
This commit is contained in:
parent
2403871bed
commit
e05e8bdd03
4 changed files with 391 additions and 2 deletions
59
tvix/store/README.md
Normal file
59
tvix/store/README.md
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
# //tvix/store
|
||||
|
||||
This contains the code hosting the tvix-store.
|
||||
|
||||
For the local store, Nix realizes files on the filesystem in `/nix/store` (and
|
||||
maintains some metadata in a SQLite database). For "remote stores", it
|
||||
communicates this metadata in NAR (Nix ARchive) and NARInfo format.
|
||||
|
||||
Compared to the Nix model, `tvix-store` stores data on a much more granular
|
||||
level than that, which provides more deduplication possibilities, and more
|
||||
granular copying.
|
||||
|
||||
However, enough information is preserved to still be able to render NAR and
|
||||
NARInfo (handled by `//tvix/nar-bridge`).
|
||||
|
||||
## More Information
|
||||
Check the `protos/` subfolder for the definition of the exact RPC methods and
|
||||
messages.
|
||||
|
||||
|
||||
## Interacting with the GRPC service manually
|
||||
The shell environment in `//tvix` provides `evans`, which is an interactive
|
||||
REPL-based gPRC client.
|
||||
|
||||
You can use it to connect to a `tvix-store` and call the various RPC methods.
|
||||
|
||||
```shell
|
||||
$ cargo run &
|
||||
$ evans --host localhost --port 8000 -r repl
|
||||
______
|
||||
| ____|
|
||||
| |__ __ __ __ _ _ __ ___
|
||||
| __| \ \ / / / _. | | '_ \ / __|
|
||||
| |____ \ V / | (_| | | | | | \__ \
|
||||
|______| \_/ \__,_| |_| |_| |___/
|
||||
|
||||
more expressive universal gRPC client
|
||||
|
||||
|
||||
tvix.store.v1@localhost:8000> service BlobService
|
||||
|
||||
tvix.store.v1.BlobService@localhost:8000> call Put --bytes-from-file
|
||||
data (TYPE_BYTES) => /run/current-system/system
|
||||
{
|
||||
"digest": "KOM3/IHEx7YfInAnlJpAElYezq0Sxn9fRz7xuClwNfA="
|
||||
}
|
||||
|
||||
tvix.store.v1.BlobService@localhost:8000> call Get --bytes-as-base64
|
||||
digest (TYPE_BYTES) => KOM3/IHEx7YfInAnlJpAElYezq0Sxn9fRz7xuClwNfA=
|
||||
{
|
||||
"data": "eDg2XzY0LWxpbnV4"
|
||||
}
|
||||
|
||||
$ echo eDg2XzY0LWxpbnV4 | base64 -d
|
||||
x86_64-linux
|
||||
```
|
||||
|
||||
Thanks to `tvix-store` providing gRPC Server Reflection (with `reflection`
|
||||
feature), you don't need to point `evans` to the `.proto` files.
|
||||
Loading…
Add table
Add a link
Reference in a new issue