about summary refs log tree commit diff
path: root/users/picnoir/tvix-daemon/src
AgeCommit message (Collapse)AuthorFilesLines
2024-11-02 r/8880 fix(tvix/nix_compat): Fix nix-daemon handshakeVova Kryachko1-3/+3
Existing handshake behavior assumed that the server version is always at least as new as the client. Meaning that the client's version was always picked the handshake details as well as for further communication This change removes that assumption and correctly uses min(server_version, client_version). Change-Id: Ia5dad4613dd5f69a0aeb6c9d86982f1f36fe1a4c Reviewed-on: https://cl.tvl.fyi/c/depot/+/12722 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
2024-04-30 r/8042 refactor(nix-compat/wire): drop primitive functionsedef1-3/+5
These may as well be inlined, and hardly need tests, since they just alias AsyncReadExt::read_u64_le / AsyncWriteExt::write_u64_le. Boolean reading is worth making explicit, since callers may differ on how they want to handle values other than 0 and 1. Boolean writing simplifies to `.write_u64_le(x as u64)`, which is also fine to inline. Change-Id: Ief9722fe886688693feb924ff0306b5bc68dd7a2 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11549 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
2024-04-18 r/7955 feat(tvix/nix-compat/nix_daemon/version): add ProtocolVersionFlorian Klink1-5/+4
This provides a nice wrapper struct to deal with versions. Change-Id: I6acc03bc9f8d84a0583196073b52776c45d3fe92 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11454 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: picnoir picnoir <picnoir@alternativebit.fr>
2024-04-13 r/7897 refactor(tvix/nix-compat): move worker_protocol into nix_daemon modFlorian Klink1-4/+2
This doesn't have much to do with the plain "wire" format, it's merely one user of it. Also, use the more "public" `wire::` API to read/write bytes, strings, bools and u64s. Change-Id: I98dddcc3004dfde7a0c009958fe84a840f77b188 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11390 Tested-by: BuildkiteCI Autosubmit: flokli <flokli@flokli.de> Reviewed-by: raitobezarius <tvl@lahfa.xyz> Reviewed-by: Brian Olsen <me@griff.name>
2024-04-13 r/7896 refactor(tvix/nix-compat): reorganize wire and bytesFlorian Klink1-3/+3
Move everything bytes-related into its own module, and re-export both bytes and primitive in a flat space from wire/mod.rs. Expose this if a `wire` feature flag is set. We only have `async` stuff in here. Change-Id: Ia4ce4791f13a5759901cc9d6ce6bd6bbcca587c7 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11389 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: raitobezarius <tvl@lahfa.xyz> Tested-by: BuildkiteCI Reviewed-by: Brian Olsen <me@griff.name>
2024-04-08 r/7876 refactor(tvix/nix-compat): move handshake function to nix-compatPicnoir1-119/+19
Moving out the handshake route out of tvix-daemon to nix-compat. We're bumping the protocol to version 37. It does not change anything for us. Version 37 introduced a change in the build result serialization. We do not implement that for now. Tested tvix-daemon against Nix via the integration test to make sure we did not break anything in the process. Taking advantage of this refactor to remove the unused anyhow dependency in tvix-daemon. Change-Id: I8a2aad0b6dbb0aaa997446a612a365fd7d70336c Reviewed-on: https://cl.tvl.fyi/c/depot/+/11379 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
2024-04-08 r/7875 refactor(tvix/nix-compat/wire): express magics as u64Florian Klink1-13/+10
This allows using read_u64, write_u64, which is a bit easier to juggle with. Also, update names to align with the nix codebase, which makes it easier to spot both the constant name as well as the value. Leave the ASCII interpretation as a comment afterwards. Change-Id: I0b9ab187acd22807e2785b0722aa4300dab37c51 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11378 Tested-by: BuildkiteCI Reviewed-by: picnoir picnoir <picnoir@alternativebit.fr> Autosubmit: flokli <flokli@flokli.de>
2024-04-08 r/7874 refactor(tvix/nix-compat/wire): move magic bytes to worker_protocolFlorian Klink1-9/+11
`primitive.rs` implements reading and writing primitive (fixed-length) types in the wire format, used in the the nix daemon protocol and NAR format. Move worker-protocol specific magic bytes to worker_protocol.rs (and possibly further split there once needed) Change-Id: If681c01e9460294619f1d000229b81f0ac745810 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11377 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: picnoir picnoir <picnoir@alternativebit.fr>
2024-04-08 r/7873 feat(tvix/nix-compat/wire): have write_bytes accept AsRef<[u8]> payloadsFlorian Klink1-1/+1
This includes String, &str etc. An example testcase with &str is provided. Change-Id: I900186d6ceb52f52bd41ef4596524c1f5b52470b Reviewed-on: https://cl.tvl.fyi/c/depot/+/11376 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: picnoir picnoir <picnoir@alternativebit.fr>
2024-04-07 r/7868 feat(users/picnoir/tvix-daemon): implement set_options operationPicnoir1-9/+52
The protocol is more stateful than I initially thought. We need to keep track to a bunch of things, including but not limited to: the client settings, the client version. I moved things around a bit to keep this state along with the client socket. Change-Id: Ibd34fbe7821c20a460934ea1af0719f5de46e491 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11359 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
2024-04-03 r/7849 chore(users/picnoir/tvix-daemon): apply clippy suggestionsPicnoir1-3/+3
Remove potential partial reads/writes and instead read/write the full buffer size: we want those to be 64 bits. Change-Id: I1f767baf23fa80c2babb8113f61d1a9e72a8d8dd Reviewed-on: https://cl.tvl.fyi/c/depot/+/11350 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
2024-04-03 r/7847 feat(users/picnoir/tvix-daemon): add log verbosity flagPicnoir1-3/+12
Adding a verbosity flag available through the CLI/ENV variable. Change-Id: If04cc2e6e26e7cb3c2df7821fce222da2b85a95a Reviewed-on: https://cl.tvl.fyi/c/depot/+/11349 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
2024-04-03 r/7846 refactor(tvix/nix-compat): drop read_u32Picnoir1-2/+2
Actually these are all u64 LE encoded on the wire. Change-Id: I5ca22c7639607ac47117cd946e036a444271885a Reviewed-on: https://cl.tvl.fyi/c/depot/+/11348 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
2024-04-03 r/7845 feat(users/picnoir/tvix-daemon): parse up to the operationPicnoir1-11/+32
Using all the primitives recently implemented to nix-compat to reach the point where the Nix client start to send us operation requests. Using a small integration test script (or the VM test, but let's face it, it's too slow to be useful), we manage to reach the point where we're able to read a store operation: 2024-03-21T18:53:27.624876Z INFO tvix_daemon: Incoming connection addr=unix 2024-03-21T18:53:27.625312Z INFO worker:perform_init_handshake: tvix_daemon: Trust sent conn=Connection(unix) conn=Connection(unix) 2024-03-21T18:53:27.625406Z INFO worker: tvix_daemon: Client hanshake succeeded conn=Connection(unix) 2024-03-21T18:53:27.625488Z INFO worker: tvix_daemon: Operation received op=SetOptions conn=Connection(unix) We had to take some shortcuts wrt. stderr/log management. The CPP Nix codebase is a bit confusing in that area. I'll need to spend more time reading this to fully understand what's happening there. For now, sending the STDERR_LAST command to the client does the trick. Change-Id: I9b0e20a52d885e64fe29188496aac5334de61edd Reviewed-on: https://cl.tvl.fyi/c/depot/+/11233 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
2024-03-25 r/7781 feat(users/picnoir/tvix-daemon): implement full handshakePicnoir1-2/+58
Implementing the full connection handshake. The integration test is a bit naive, but there's not much to test yet. Tested this against cpp nix. We reach the stage where cppnix sends the opcode. Change-Id: I98322832848ee5b048f22105731b0adeb44b2ce0 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11227 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
2024-03-19 r/7742 feat(users/picnoir/tvix-daemon): introduce tvix-daemonPicnoir1-0/+89
This daemon is a re-implementation of the Nix daemon except it uses tvix-store as a remote store. For now, it's very barebones, this is just a quick and dirty setup to get started with the project. We bind to the unix socket provided by systemd, wait for cpp Nix to send the magic hello bytes, respond with the magic hello bytes and call it a day. Storing this under my username for now, the project is mostly irrelevant as it is. We'll move it to Tvix if it gets complete and relevant at some point. Change-Id: Ifc5dce2df37413504f9de1942c5b7d425eddf759 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11198 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI