feat(nix-daemon): Implement QueryPathInfo and IsValidPath.

Change-Id: Ia601e2eae24a2bc13d8851b2e8ed9d6c1808bb35
Reviewed-on: https://cl.tvl.fyi/c/depot/+/12745
Reviewed-by: flokli <flokli@flokli.de>
Autosubmit: Vladimir Kryachko <v.kryachko@gmail.com>
Tested-by: BuildkiteCI
This commit is contained in:
Vova Kryachko 2024-11-08 14:22:23 -05:00 committed by Vladimir Kryachko
parent b564ed9d43
commit 9d114bf040
4 changed files with 182 additions and 12 deletions

View file

@ -1,7 +1,11 @@
use std::sync::Arc;
use std::{io::Result, sync::Arc};
use nix_compat::nix_daemon::NixDaemonIO;
use tvix_store::pathinfoservice::PathInfoService;
use nix_compat::{
nix_daemon::{types::UnkeyedValidPathInfo, NixDaemonIO},
nixbase32,
store_path::StorePath,
};
use tvix_store::{path_info::PathInfo, pathinfoservice::PathInfoService};
#[allow(dead_code)]
pub struct TvixDaemon {
@ -15,4 +19,30 @@ impl TvixDaemon {
}
/// Implements [NixDaemonIO] backed by tvix services.
impl NixDaemonIO for TvixDaemon {}
impl NixDaemonIO for TvixDaemon {
async fn query_path_info(
&self,
path: &StorePath<String>,
) -> Result<Option<UnkeyedValidPathInfo>> {
match self.path_info_service.get(*path.digest()).await? {
Some(path_info) => Ok(Some(into_unkeyed_path_info(path_info))),
None => Ok(None),
}
}
}
// PathInfo lives in the tvix-store crate, but does not depend on nix-compat's wire feature,
// while UnkeyedValidPathInfo is only available if that feature is enabled. To avoid complexity
// we manually convert as opposed to creating a From<PathInfo>.
fn into_unkeyed_path_info(info: PathInfo) -> UnkeyedValidPathInfo {
UnkeyedValidPathInfo {
deriver: info.deriver,
nar_hash: nixbase32::encode(&info.nar_sha256),
references: info.references,
registration_time: 0,
nar_size: info.nar_size,
ultimate: false,
signatures: info.signatures,
ca: info.ca,
}
}