diff options
author | Florian Klink <flokli@flokli.de> | 2023-11-27T18·52+0200 |
---|---|---|
committer | flokli <flokli@flokli.de> | 2023-11-28T14·54+0000 |
commit | fce9c0e99ef219a97bd8ba14cf0eed6c998a1c80 (patch) | |
tree | e407a16b4d20103e30dfca012404633e98c8fe97 /tvix/store/src/fs/mod.rs | |
parent | 84a846a3a253160178037996bbd4b3e527be7b4f (diff) |
fix(tvix/store/fs): don't panic on PathInfoService error r/7080
An error in the PathInfoService request can appear in case the underlying request returns an error. We shouldn't panic and bork the fuse mount, but instead return an IO error. Change-Id: I2daeae629e1627d06adcd7b82ddb76c50c602212 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10154 Tested-by: BuildkiteCI Reviewed-by: Connor Brewster <cbrewster@hey.com>
Diffstat (limited to 'tvix/store/src/fs/mod.rs')
-rw-r--r-- | tvix/store/src/fs/mod.rs | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/tvix/store/src/fs/mod.rs b/tvix/store/src/fs/mod.rs index f942cc962257..c1ae6c9c1901 100644 --- a/tvix/store/src/fs/mod.rs +++ b/tvix/store/src/fs/mod.rs @@ -232,19 +232,17 @@ impl TvixStoreFs { } // We don't have it yet, look it up in [self.path_info_service]. - match self - .tokio_handle - .block_on({ - let path_info_service = self.path_info_service.clone(); - let digest = *store_path.digest(); - async move { path_info_service.get(digest).await } - }) - .unwrap() - { + match self.tokio_handle.block_on({ + let path_info_service = self.path_info_service.clone(); + let digest = *store_path.digest(); + async move { path_info_service.get(digest).await } + }) { + // if there was an error looking up the path_info, propagate up an IO error. + Err(_e) => Err(io::Error::from_raw_os_error(libc::EIO)), // the pathinfo doesn't exist, so the file doesn't exist. - None => Err(io::Error::from_raw_os_error(libc::ENOENT)), + Ok(None) => Err(io::Error::from_raw_os_error(libc::ENOENT)), // The pathinfo does exist - Some(path_info) => { + Ok(Some(path_info)) => { // There must be a root node (ensured by the validation happening inside clients) let root_node = path_info.node.unwrap().node.unwrap(); |