From c0c74e01bf47ec4c01aec1c81aa26944cbef3ce9 Mon Sep 17 00:00:00 2001 From: Ankit Saurabh Date: Mon, 27 Nov 2023 10:47:00 +0000 Subject: [PATCH] Added Filename in InodeError Signed-off-by: Ankit Saurabh --- mountpoint-s3/src/fs.rs | 2 +- mountpoint-s3/src/fs/error.rs | 2 +- mountpoint-s3/src/inode.rs | 14 +++++++------- mountpoint-s3/src/prefetch/part_stream.rs | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/mountpoint-s3/src/fs.rs b/mountpoint-s3/src/fs.rs index 640acb4d3..07bf18b49 100644 --- a/mountpoint-s3/src/fs.rs +++ b/mountpoint-s3/src/fs.rs @@ -742,7 +742,7 @@ where let len = { let mut request = match &handle.typ { FileHandleType::Write(request) => request.lock().await, - FileHandleType::Read { .. } => return Err(err!(libc::EBADF, "file handle is not open for writes")), + FileHandleType::Read { .. } => return Err(err!(libc::EBADF, "file handle is not open for writes (key={:?})", handle.full_key)), }; request.write(offset, data, &handle.full_key).await? }; diff --git a/mountpoint-s3/src/fs/error.rs b/mountpoint-s3/src/fs/error.rs index 73fd10643..b9e5b46f0 100644 --- a/mountpoint-s3/src/fs/error.rs +++ b/mountpoint-s3/src/fs/error.rs @@ -111,7 +111,7 @@ impl ToErrno for InodeError { fn to_errno(&self) -> libc::c_int { match self { InodeError::ClientError(_) => libc::EIO, - InodeError::FileDoesNotExist => libc::ENOENT, + InodeError::FileDoesNotExist(_) => libc::ENOENT, InodeError::InodeDoesNotExist(_) => libc::ENOENT, InodeError::InvalidFileName(_) => libc::EINVAL, InodeError::NotADirectory(_) => libc::ENOTDIR, diff --git a/mountpoint-s3/src/inode.rs b/mountpoint-s3/src/inode.rs index c7e61472a..b4cfc5113 100644 --- a/mountpoint-s3/src/inode.rs +++ b/mountpoint-s3/src/inode.rs @@ -314,7 +314,7 @@ impl Superblock { .await; match existing { Ok(lookup) => return Err(InodeError::FileAlreadyExists(lookup.inode.err())), - Err(InodeError::FileDoesNotExist) => (), + Err(InodeError::FileDoesNotExist(_)) => (), Err(e) => return Err(e), } @@ -787,7 +787,7 @@ impl SuperblockInner { InodeKindData::Directory { children, .. } => children.get(name), }; match (remote, inode) { - (None, None) => Err(InodeError::FileDoesNotExist), + (None, None) => Err(InodeError::FileDoesNotExist(name.into())), (Some(remote), Some(existing_inode)) => { let mut existing_state = existing_inode.get_mut_inode_state()?; let existing_is_remote = existing_state.write_status == WriteStatus::Remote; @@ -824,7 +824,7 @@ impl SuperblockInner { InodeKindData::Directory { children, .. } => children.get(name).cloned(), }; match (remote, inode) { - (None, None) => Err(InodeError::FileDoesNotExist), + (None, None) => Err(InodeError::FileDoesNotExist(name.into())), (None, Some(existing_inode)) => { let InodeKindData::Directory { children, @@ -854,7 +854,7 @@ impl SuperblockInner { // being written. It must have previously existed but been removed on the remote // side. children.remove(name); - Err(InodeError::FileDoesNotExist) + Err(InodeError::FileDoesNotExist(name.into())) } } (Some(remote), None) => { @@ -1471,8 +1471,8 @@ impl InodeStat { pub enum InodeError { #[error("error from ObjectClient")] ClientError(#[source] anyhow::Error), - #[error("file does not exist")] - FileDoesNotExist, + #[error("file {0:?} does not exist")] + FileDoesNotExist(OsString), #[error("inode {0} does not exist")] InodeDoesNotExist(InodeNo), #[error("invalid file name {0:?}")] @@ -2315,7 +2315,7 @@ mod tests { // All nested dirs disappear let dirname = nested_dirs.first().unwrap(); let lookedup = superblock.lookup(&client, FUSE_ROOT_INODE, dirname.as_ref()).await; - assert!(matches!(lookedup, Err(InodeError::FileDoesNotExist))); + assert!(matches!(lookedup, Err(InodeError::FileDoesNotExist(_)))); } #[tokio::test] diff --git a/mountpoint-s3/src/prefetch/part_stream.rs b/mountpoint-s3/src/prefetch/part_stream.rs index 96acb535b..5c9f3872e 100644 --- a/mountpoint-s3/src/prefetch/part_stream.rs +++ b/mountpoint-s3/src/prefetch/part_stream.rs @@ -196,7 +196,7 @@ where { Ok(get_object_result) => get_object_result, Err(e) => { - error!(error=?e, "GetObject request failed"); + error!(key, error=?e, "GetObject request failed"); part_queue_producer.push(Err(PrefetchReadError::GetRequestFailed(e))); return; } @@ -227,7 +227,7 @@ where } } Some(Err(e)) => { - error!(error=?e, "GetObject body part failed"); + error!(key, error=?e, "GetObject body part failed"); part_queue_producer.push(Err(PrefetchReadError::GetRequestFailed(e))); break; }