diff --git a/tvix/glue/src/tvix_store_io.rs b/tvix/glue/src/tvix_store_io.rs
index 178bf6c77..251023ba3 100644
--- a/tvix/glue/src/tvix_store_io.rs
+++ b/tvix/glue/src/tvix_store_io.rs
@@ -60,20 +60,16 @@ where
/// In case there is no PathInfo yet, this means we need to build it
/// (which currently is stubbed out still).
#[instrument(skip(self), ret, err)]
- fn store_path_to_node(
+ async fn store_path_to_node(
&self,
store_path: &StorePath,
sub_path: &Path,
) -> io::Result> {
let root_node = match self
- .tokio_handle
- .block_on(async {
- self.path_info_service
- .as_ref()
- .get(*store_path.digest())
- .await
- })
- .unwrap()
+ .path_info_service
+ .as_ref()
+ .get(*store_path.digest())
+ .await?
{
// if we have a PathInfo, we know there will be a root_node (due to validation)
Some(path_info) => path_info.node.expect("no node").node.expect("no node"),
@@ -90,11 +86,18 @@ where
};
// with the root_node and sub_path, descend to the node requested.
- Ok(self.tokio_handle.block_on({
- async {
- directoryservice::descend_to(&self.directory_service, root_node, sub_path).await
- }
- })?)
+ directoryservice::descend_to(&self.directory_service, root_node, sub_path)
+ .await
+ .map_err(|e| std::io::Error::new(io::ErrorKind::Other, e))
+ }
+
+ fn store_path_to_node_sync(
+ &self,
+ store_path: &StorePath,
+ sub_path: &Path,
+ ) -> io::Result > {
+ self.tokio_handle
+ .block_on(async { self.store_path_to_node(store_path, sub_path).await })
}
}
@@ -109,7 +112,10 @@ where
if let Ok((store_path, sub_path)) =
StorePath::from_absolute_path_full(&path.to_string_lossy())
{
- if self.store_path_to_node(&store_path, &sub_path)?.is_some() {
+ if self
+ .store_path_to_node_sync(&store_path, &sub_path)?
+ .is_some()
+ {
Ok(true)
} else {
// As tvix-store doesn't manage /nix/store on the filesystem,
@@ -127,7 +133,7 @@ where
if let Ok((store_path, sub_path)) =
StorePath::from_absolute_path_full(&path.to_string_lossy())
{
- if let Some(node) = self.store_path_to_node(&store_path, &sub_path)? {
+ if let Some(node) = self.store_path_to_node_sync(&store_path, &sub_path)? {
// depending on the node type, treat read_to_string differently
match node {
Node::Directory(_) => {
@@ -195,7 +201,7 @@ where
if let Ok((store_path, sub_path)) =
StorePath::from_absolute_path_full(&path.to_string_lossy())
{
- if let Some(node) = self.store_path_to_node(&store_path, &sub_path)? {
+ if let Some(node) = self.store_path_to_node_sync(&store_path, &sub_path)? {
match node {
Node::Directory(directory_node) => {
// fetch the Directory itself.