chore(snix/nix-daemon): Fix queryValidPaths operation.
Query valid paths is supposed to return List<StorePath> while our nix-daemon is returning List<UnkeyedValidPathInfo> which crashes nix. Change-Id: Ibd2d984b6d0d37fd77ecd612bd7acfb4ca69c048 Reviewed-on: https://cl.snix.dev/c/snix/+/30072 Autosubmit: Vova Kryachko <v.kryachko@gmail.com> Tested-by: besadii Reviewed-by: Florian Klink <flokli@flokli.de>
This commit is contained in:
parent
bc62fc0354
commit
bca46bf1cf
2 changed files with 15 additions and 16 deletions
|
|
@ -117,7 +117,9 @@ where
|
|||
let io = self.io.clone();
|
||||
loop {
|
||||
let op_code = self.reader.read_number().await?;
|
||||
match TryInto::<Operation>::try_into(op_code) {
|
||||
let op = TryInto::<Operation>::try_into(op_code);
|
||||
debug!(?op, "Received operation");
|
||||
match op {
|
||||
// Note: please keep operations sorted in ascending order of their numerical op number.
|
||||
Ok(operation) => match operation {
|
||||
Operation::IsValidPath => {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ pub mod worker_protocol;
|
|||
|
||||
use std::io::Result;
|
||||
|
||||
use futures::future::try_join_all;
|
||||
use tokio::io::AsyncRead;
|
||||
use tracing::warn;
|
||||
use types::{AddToStoreNarRequest, QueryValidPaths, UnkeyedValidPathInfo};
|
||||
|
|
@ -39,19 +38,21 @@ pub trait NixDaemonIO: Sync {
|
|||
fn query_valid_paths(
|
||||
&self,
|
||||
request: &QueryValidPaths,
|
||||
) -> impl std::future::Future<Output = Result<Vec<UnkeyedValidPathInfo>>> + Send {
|
||||
) -> impl std::future::Future<Output = Result<Vec<StorePath<String>>>> + Send {
|
||||
async move {
|
||||
if request.substitute {
|
||||
warn!("snix does not yet support substitution, ignoring the 'substitute' flag...");
|
||||
}
|
||||
// Using try_join_all here to avoid returning partial results to the client.
|
||||
// The only reason query_path_info can fail is due to transient IO errors,
|
||||
// so we return such errors to the client as opposed to only returning paths
|
||||
// that succeeded.
|
||||
let results =
|
||||
try_join_all(request.paths.iter().map(|path| self.query_path_info(path))).await?;
|
||||
|
||||
Ok(results.into_iter().flatten().collect())
|
||||
let mut results: Vec<StorePath<String>> = Vec::with_capacity(request.paths.len());
|
||||
|
||||
for path in request.paths.iter() {
|
||||
if self.is_valid_path(path).await? {
|
||||
results.push(path.clone());
|
||||
}
|
||||
}
|
||||
|
||||
Ok(results)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -178,16 +179,12 @@ mod tests {
|
|||
|
||||
let result = io
|
||||
.query_valid_paths(&QueryValidPaths {
|
||||
paths: vec![path],
|
||||
paths: vec![path.clone()],
|
||||
substitute: false,
|
||||
})
|
||||
.await
|
||||
.expect("expected to get a non-empty response");
|
||||
assert_eq!(
|
||||
result,
|
||||
vec![UnkeyedValidPathInfo::default()],
|
||||
"expected to get non empty response"
|
||||
);
|
||||
assert_eq!(result, vec![path], "expected to get non empty response");
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue