feat(nix-daemon): Implement client handler.
This change includes only the basic nix handshake protocol handling and sets up a client session. The only supported operation at this point is SetOptions. Additional operations will be implemented in subsequent cls. Change-Id: I3eccd9e0ceb270c3865929543c702f1491768852 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12743 Autosubmit: Vladimir Kryachko <v.kryachko@gmail.com> Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de> Reviewed-by: edef <edef@edef.eu> Reviewed-by: Brian Olsen <me@griff.name>
This commit is contained in:
parent
72bc4e0270
commit
b564ed9d43
25 changed files with 1822 additions and 253 deletions
79
users/picnoir/tvix-daemon/Cargo.lock
generated
79
users/picnoir/tvix-daemon/Cargo.lock
generated
|
|
@ -402,6 +402,12 @@ dependencies = [
|
|||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "equivalent"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
|
||||
|
||||
[[package]]
|
||||
name = "fiat-crypto"
|
||||
version = "0.2.9"
|
||||
|
|
@ -508,6 +514,12 @@ version = "0.3.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.15.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3"
|
||||
|
||||
[[package]]
|
||||
name = "heck"
|
||||
version = "0.5.0"
|
||||
|
|
@ -601,6 +613,16 @@ dependencies = [
|
|||
"tower-service",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "2.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da"
|
||||
dependencies = [
|
||||
"equivalent",
|
||||
"hashbrown",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "is_terminal_polyfill"
|
||||
version = "1.70.1"
|
||||
|
|
@ -738,6 +760,7 @@ dependencies = [
|
|||
"nix-compat-derive",
|
||||
"nom",
|
||||
"num-traits",
|
||||
"num_enum",
|
||||
"pin-project-lite",
|
||||
"serde",
|
||||
"serde_json",
|
||||
|
|
@ -785,6 +808,27 @@ dependencies = [
|
|||
"autocfg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num_enum"
|
||||
version = "0.7.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179"
|
||||
dependencies = [
|
||||
"num_enum_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num_enum_derive"
|
||||
version = "0.7.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56"
|
||||
dependencies = [
|
||||
"proc-macro-crate",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "object"
|
||||
version = "0.36.5"
|
||||
|
|
@ -877,6 +921,15 @@ dependencies = [
|
|||
"spki",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-crate"
|
||||
version = "3.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b"
|
||||
dependencies = [
|
||||
"toml_edit",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.87"
|
||||
|
|
@ -1240,6 +1293,23 @@ dependencies = [
|
|||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_datetime"
|
||||
version = "0.6.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41"
|
||||
|
||||
[[package]]
|
||||
name = "toml_edit"
|
||||
version = "0.22.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5"
|
||||
dependencies = [
|
||||
"indexmap",
|
||||
"toml_datetime",
|
||||
"winnow",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tower"
|
||||
version = "0.5.1"
|
||||
|
|
@ -1470,6 +1540,15 @@ version = "0.52.6"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
||||
|
||||
[[package]]
|
||||
name = "winnow"
|
||||
version = "0.6.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zeroize"
|
||||
version = "1.8.1"
|
||||
|
|
|
|||
|
|
@ -1311,6 +1311,13 @@ rec {
|
|||
}
|
||||
];
|
||||
|
||||
};
|
||||
"equivalent" = rec {
|
||||
crateName = "equivalent";
|
||||
version = "1.0.1";
|
||||
edition = "2015";
|
||||
sha256 = "1malmx5f4lkfvqasz319lq6gb3ddg19yzf9s8cykfsgzdmyq0hsl";
|
||||
|
||||
};
|
||||
"fiat-crypto" = rec {
|
||||
crateName = "fiat-crypto";
|
||||
|
|
@ -1596,6 +1603,28 @@ rec {
|
|||
];
|
||||
|
||||
};
|
||||
"hashbrown" = rec {
|
||||
crateName = "hashbrown";
|
||||
version = "0.15.1";
|
||||
edition = "2021";
|
||||
sha256 = "1czsvasi3azv2079fcvbhvpisa16w6fi1mfk8zm2c5wbyqdgr6rs";
|
||||
authors = [
|
||||
"Amanieu d'Antras <amanieu@gmail.com>"
|
||||
];
|
||||
features = {
|
||||
"alloc" = [ "dep:alloc" ];
|
||||
"allocator-api2" = [ "dep:allocator-api2" ];
|
||||
"compiler_builtins" = [ "dep:compiler_builtins" ];
|
||||
"core" = [ "dep:core" ];
|
||||
"default" = [ "default-hasher" "inline-more" "allocator-api2" "equivalent" "raw-entry" ];
|
||||
"default-hasher" = [ "dep:foldhash" ];
|
||||
"equivalent" = [ "dep:equivalent" ];
|
||||
"nightly" = [ "allocator-api2?/nightly" "bumpalo/allocator_api" ];
|
||||
"rayon" = [ "dep:rayon" ];
|
||||
"rustc-dep-of-std" = [ "nightly" "core" "compiler_builtins" "alloc" "rustc-internal-api" "raw-entry" ];
|
||||
"serde" = [ "dep:serde" ];
|
||||
};
|
||||
};
|
||||
"heck" = rec {
|
||||
crateName = "heck";
|
||||
version = "0.5.0";
|
||||
|
|
@ -1901,6 +1930,34 @@ rec {
|
|||
};
|
||||
resolvedDefaultFeatures = [ "default" "http1" "server" "service" "tokio" ];
|
||||
};
|
||||
"indexmap" = rec {
|
||||
crateName = "indexmap";
|
||||
version = "2.6.0";
|
||||
edition = "2021";
|
||||
sha256 = "1nmrwn8lbs19gkvhxaawffzbvrpyrb5y3drcrr645x957kz0fybh";
|
||||
dependencies = [
|
||||
{
|
||||
name = "equivalent";
|
||||
packageId = "equivalent";
|
||||
usesDefaultFeatures = false;
|
||||
}
|
||||
{
|
||||
name = "hashbrown";
|
||||
packageId = "hashbrown";
|
||||
usesDefaultFeatures = false;
|
||||
}
|
||||
];
|
||||
features = {
|
||||
"arbitrary" = [ "dep:arbitrary" ];
|
||||
"borsh" = [ "dep:borsh" ];
|
||||
"default" = [ "std" ];
|
||||
"quickcheck" = [ "dep:quickcheck" ];
|
||||
"rayon" = [ "dep:rayon" ];
|
||||
"rustc-rayon" = [ "dep:rustc-rayon" ];
|
||||
"serde" = [ "dep:serde" ];
|
||||
};
|
||||
resolvedDefaultFeatures = [ "default" "std" ];
|
||||
};
|
||||
"is_terminal_polyfill" = rec {
|
||||
crateName = "is_terminal_polyfill";
|
||||
version = "1.70.1";
|
||||
|
|
@ -2299,6 +2356,10 @@ rec {
|
|||
name = "num-traits";
|
||||
packageId = "num-traits";
|
||||
}
|
||||
{
|
||||
name = "num_enum";
|
||||
packageId = "num_enum";
|
||||
}
|
||||
{
|
||||
name = "pin-project-lite";
|
||||
packageId = "pin-project-lite";
|
||||
|
|
@ -2325,7 +2386,7 @@ rec {
|
|||
name = "tokio";
|
||||
packageId = "tokio";
|
||||
optional = true;
|
||||
features = [ "io-util" "macros" ];
|
||||
features = [ "io-util" "macros" "sync" ];
|
||||
}
|
||||
{
|
||||
name = "tracing";
|
||||
|
|
@ -2345,13 +2406,14 @@ rec {
|
|||
features = {
|
||||
"async" = [ "tokio" ];
|
||||
"bytes" = [ "dep:bytes" ];
|
||||
"default" = [ "async" "wire" "nix-compat-derive" ];
|
||||
"daemon" = [ "tokio" "nix-compat-derive" ];
|
||||
"default" = [ "async" "daemon" "wire" "nix-compat-derive" ];
|
||||
"nix-compat-derive" = [ "dep:nix-compat-derive" ];
|
||||
"pin-project-lite" = [ "dep:pin-project-lite" ];
|
||||
"tokio" = [ "dep:tokio" ];
|
||||
"wire" = [ "tokio" "pin-project-lite" "bytes" ];
|
||||
};
|
||||
resolvedDefaultFeatures = [ "async" "bytes" "default" "nix-compat-derive" "pin-project-lite" "tokio" "wire" ];
|
||||
resolvedDefaultFeatures = [ "async" "bytes" "daemon" "default" "nix-compat-derive" "pin-project-lite" "tokio" "wire" ];
|
||||
};
|
||||
"nix-compat-derive" = rec {
|
||||
crateName = "nix-compat-derive";
|
||||
|
|
@ -2455,6 +2517,76 @@ rec {
|
|||
};
|
||||
resolvedDefaultFeatures = [ "default" "std" ];
|
||||
};
|
||||
"num_enum" = rec {
|
||||
crateName = "num_enum";
|
||||
version = "0.7.3";
|
||||
edition = "2021";
|
||||
sha256 = "0yai0vafhy85mvhknzfqd7lm04hzaln7i5c599rhy8mj831kyqaf";
|
||||
authors = [
|
||||
"Daniel Wagner-Hall <dawagner@gmail.com>"
|
||||
"Daniel Henry-Mantilla <daniel.henry.mantilla@gmail.com>"
|
||||
"Vincent Esche <regexident@gmail.com>"
|
||||
];
|
||||
dependencies = [
|
||||
{
|
||||
name = "num_enum_derive";
|
||||
packageId = "num_enum_derive";
|
||||
usesDefaultFeatures = false;
|
||||
}
|
||||
];
|
||||
features = {
|
||||
"complex-expressions" = [ "num_enum_derive/complex-expressions" ];
|
||||
"default" = [ "std" ];
|
||||
"std" = [ "num_enum_derive/std" ];
|
||||
};
|
||||
resolvedDefaultFeatures = [ "default" "std" ];
|
||||
};
|
||||
"num_enum_derive" = rec {
|
||||
crateName = "num_enum_derive";
|
||||
version = "0.7.3";
|
||||
edition = "2021";
|
||||
sha256 = "0mksna1jj87ydh146gn6jcqkvvs920c3dgh0p4f3xk184kpl865g";
|
||||
procMacro = true;
|
||||
authors = [
|
||||
"Daniel Wagner-Hall <dawagner@gmail.com>"
|
||||
"Daniel Henry-Mantilla <daniel.henry.mantilla@gmail.com>"
|
||||
"Vincent Esche <regexident@gmail.com>"
|
||||
];
|
||||
dependencies = [
|
||||
{
|
||||
name = "proc-macro-crate";
|
||||
packageId = "proc-macro-crate";
|
||||
optional = true;
|
||||
}
|
||||
{
|
||||
name = "proc-macro2";
|
||||
packageId = "proc-macro2";
|
||||
}
|
||||
{
|
||||
name = "quote";
|
||||
packageId = "quote";
|
||||
}
|
||||
{
|
||||
name = "syn";
|
||||
packageId = "syn";
|
||||
features = [ "parsing" ];
|
||||
}
|
||||
];
|
||||
devDependencies = [
|
||||
{
|
||||
name = "syn";
|
||||
packageId = "syn";
|
||||
features = [ "extra-traits" "parsing" ];
|
||||
}
|
||||
];
|
||||
features = {
|
||||
"complex-expressions" = [ "syn/full" ];
|
||||
"default" = [ "std" ];
|
||||
"proc-macro-crate" = [ "dep:proc-macro-crate" ];
|
||||
"std" = [ "proc-macro-crate" ];
|
||||
};
|
||||
resolvedDefaultFeatures = [ "proc-macro-crate" "std" ];
|
||||
};
|
||||
"object" = rec {
|
||||
crateName = "object";
|
||||
version = "0.36.5";
|
||||
|
|
@ -2692,6 +2824,23 @@ rec {
|
|||
};
|
||||
resolvedDefaultFeatures = [ "alloc" "std" ];
|
||||
};
|
||||
"proc-macro-crate" = rec {
|
||||
crateName = "proc-macro-crate";
|
||||
version = "3.2.0";
|
||||
edition = "2021";
|
||||
sha256 = "0yzsqnavb3lmrcsmbrdjfrky9vcbl46v59xi9avn0796rb3likwf";
|
||||
libName = "proc_macro_crate";
|
||||
authors = [
|
||||
"Bastian Köcher <git@kchr.de>"
|
||||
];
|
||||
dependencies = [
|
||||
{
|
||||
name = "toml_edit";
|
||||
packageId = "toml_edit";
|
||||
}
|
||||
];
|
||||
|
||||
};
|
||||
"proc-macro2" = rec {
|
||||
crateName = "proc-macro2";
|
||||
version = "1.0.87";
|
||||
|
|
@ -3772,6 +3921,51 @@ rec {
|
|||
};
|
||||
resolvedDefaultFeatures = [ "codec" "default" "net" ];
|
||||
};
|
||||
"toml_datetime" = rec {
|
||||
crateName = "toml_datetime";
|
||||
version = "0.6.8";
|
||||
edition = "2021";
|
||||
sha256 = "0hgv7v9g35d7y9r2afic58jvlwnf73vgd1mz2k8gihlgrf73bmqd";
|
||||
authors = [
|
||||
"Alex Crichton <alex@alexcrichton.com>"
|
||||
];
|
||||
features = {
|
||||
"serde" = [ "dep:serde" ];
|
||||
};
|
||||
};
|
||||
"toml_edit" = rec {
|
||||
crateName = "toml_edit";
|
||||
version = "0.22.22";
|
||||
edition = "2021";
|
||||
sha256 = "1xf7sxfzmnc45f75x302qrn5aph52vc8w226v59yhrm211i8vr2a";
|
||||
authors = [
|
||||
"Andronik Ordian <write@reusable.software>"
|
||||
"Ed Page <eopage@gmail.com>"
|
||||
];
|
||||
dependencies = [
|
||||
{
|
||||
name = "indexmap";
|
||||
packageId = "indexmap";
|
||||
features = [ "std" ];
|
||||
}
|
||||
{
|
||||
name = "toml_datetime";
|
||||
packageId = "toml_datetime";
|
||||
}
|
||||
{
|
||||
name = "winnow";
|
||||
packageId = "winnow";
|
||||
optional = true;
|
||||
}
|
||||
];
|
||||
features = {
|
||||
"default" = [ "parse" "display" ];
|
||||
"parse" = [ "dep:winnow" ];
|
||||
"perf" = [ "dep:kstring" ];
|
||||
"serde" = [ "dep:serde" "toml_datetime/serde" "dep:serde_spanned" ];
|
||||
};
|
||||
resolvedDefaultFeatures = [ "default" "display" "parse" ];
|
||||
};
|
||||
"tower" = rec {
|
||||
crateName = "tower";
|
||||
version = "0.5.1";
|
||||
|
|
@ -4673,6 +4867,28 @@ rec {
|
|||
];
|
||||
|
||||
};
|
||||
"winnow" = rec {
|
||||
crateName = "winnow";
|
||||
version = "0.6.20";
|
||||
edition = "2021";
|
||||
sha256 = "16y4i8z9vh8hazjxg5mvmq0c5i35wlk8rxi5gkq6cn5vlb0zxh9n";
|
||||
dependencies = [
|
||||
{
|
||||
name = "memchr";
|
||||
packageId = "memchr";
|
||||
optional = true;
|
||||
usesDefaultFeatures = false;
|
||||
}
|
||||
];
|
||||
features = {
|
||||
"debug" = [ "std" "dep:anstream" "dep:anstyle" "dep:is-terminal" "dep:terminal_size" ];
|
||||
"default" = [ "std" ];
|
||||
"simd" = [ "dep:memchr" ];
|
||||
"std" = [ "alloc" "memchr?/std" ];
|
||||
"unstable-doc" = [ "alloc" "std" "simd" "unstable-recover" ];
|
||||
};
|
||||
resolvedDefaultFeatures = [ "alloc" "default" "std" ];
|
||||
};
|
||||
"zeroize" = rec {
|
||||
crateName = "zeroize";
|
||||
version = "1.8.1";
|
||||
|
|
|
|||
|
|
@ -108,7 +108,9 @@ async fn op_set_options<R>(conn: &mut ClientConnection<R>) -> std::io::Result<Cl
|
|||
where
|
||||
R: AsyncReadExt + AsyncWriteExt + Unpin + std::fmt::Debug,
|
||||
{
|
||||
let settings = worker_protocol::read_client_settings(&mut conn.conn, conn.version).await?;
|
||||
// TODO: This code used read_client_settings which did not implement the protocol correctly,
|
||||
// returning default() for now to unblock CI.
|
||||
let settings = ClientSettings::default();
|
||||
// The client expects us to send some logs when we're processing
|
||||
// the settings. Sending STDERR_LAST signal we're done processing.
|
||||
conn.conn.write_u64_le(worker_protocol::STDERR_LAST).await?;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue