From 86d7b89f918f3b5332510647a004c20b5d8dbbbb Mon Sep 17 00:00:00 2001 From: Xuanwo Date: Wed, 10 Apr 2024 23:22:22 +0800 Subject: [PATCH 1/3] Revert "fix(integrations/webdav): Fix read file API changes (#4462)" This reverts commit f6b4accd1adac7feea1af70ac818b734f799a35b. --- integrations/dav-server/src/file.rs | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/integrations/dav-server/src/file.rs b/integrations/dav-server/src/file.rs index c5dc2090c078..008b35e3f835 100644 --- a/integrations/dav-server/src/file.rs +++ b/integrations/dav-server/src/file.rs @@ -18,7 +18,7 @@ use std::fmt; use std::io::SeekFrom; -use bytes::{Bytes, BytesMut}; +use bytes::Bytes; use dav_server::fs::DavFile; use dav_server::fs::DavMetaData; use dav_server::fs::FsFuture; @@ -34,7 +34,6 @@ pub struct WebdavFile { op: Operator, path: String, state: WebdavFileState, - pos: u64, } struct WebdavFileState { @@ -54,7 +53,6 @@ impl WebdavFile { op, path, state: WebdavFileState { reader, writer }, - pos: 0, } } } @@ -62,15 +60,12 @@ impl WebdavFile { impl DavFile for WebdavFile { fn read_bytes(&mut self, count: usize) -> FsFuture { async move { - let mut buf = BytesMut::with_capacity(count); - let n = self - .state + self.state .reader - .read(&mut buf, self.pos, count) + .read(count) .await - .map_err(convert_error)?; - self.pos += n as u64; - Ok(buf.split().freeze()) + .map(Bytes::from) + .map_err(convert_error) } .boxed() } From 39906a6a3dd1f0cd7318fbadf9001768abfb4791 Mon Sep 17 00:00:00 2001 From: Xuanwo Date: Wed, 10 Apr 2024 23:22:30 +0800 Subject: [PATCH 2/3] Revert "fix(oay): support `WebdavFile` continuous reading and writing (#4374)" This reverts commit 95cc62ea46e7c1e0ff5fa3550fac6d86e1ce3659. --- integrations/dav-server/src/file.rs | 41 ++++++++------------- integrations/dav-server/src/opendalfs.rs | 5 +-- integrations/dav-server/tests/test.rs | 45 ++---------------------- 3 files changed, 17 insertions(+), 74 deletions(-) diff --git a/integrations/dav-server/src/file.rs b/integrations/dav-server/src/file.rs index 008b35e3f835..c8983d1fc258 100644 --- a/integrations/dav-server/src/file.rs +++ b/integrations/dav-server/src/file.rs @@ -15,54 +15,37 @@ // specific language governing permissions and limitations // under the License. -use std::fmt; use std::io::SeekFrom; use bytes::Bytes; +use dav_server::davpath::DavPath; use dav_server::fs::DavFile; use dav_server::fs::DavMetaData; use dav_server::fs::FsFuture; use futures::FutureExt; use opendal::Operator; -use opendal::Reader; -use opendal::Writer; use super::metadata::WebdavMetaData; #[derive(Debug)] pub struct WebdavFile { op: Operator, - path: String, - state: WebdavFileState, -} - -struct WebdavFileState { - reader: Reader, - writer: Writer, -} - -impl fmt::Debug for WebdavFileState { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.debug_struct("WebdavFileState").finish() - } + path: DavPath, } impl WebdavFile { - pub fn new(op: Operator, reader: Reader, writer: Writer, path: String) -> Self { - Self { - op, - path, - state: WebdavFileState { reader, writer }, - } + pub fn new(op: Operator, path: DavPath) -> Self { + Self { op, path } } } impl DavFile for WebdavFile { fn read_bytes(&mut self, count: usize) -> FsFuture { async move { - self.state - .reader - .read(count) + let file_path = self.path.as_url_string(); + self.op + .read_with(&file_path) + .range(0..count as u64) .await .map(Bytes::from) .map_err(convert_error) @@ -73,7 +56,7 @@ impl DavFile for WebdavFile { fn metadata(&mut self) -> FsFuture> { async move { self.op - .stat(&self.path) + .stat(self.path.as_url_string().as_str()) .await .map(|opendal_metadata| { Box::new(WebdavMetaData::new(opendal_metadata)) as Box @@ -88,7 +71,11 @@ impl DavFile for WebdavFile { } fn write_bytes(&mut self, buf: Bytes) -> FsFuture<()> { - async move { self.state.writer.write(buf).await.map_err(convert_error) }.boxed() + async move { + let file_path = self.path.as_url_string(); + self.op.write(&file_path, buf).await.map_err(convert_error) + } + .boxed() } fn seek(&mut self, _pos: SeekFrom) -> FsFuture { diff --git a/integrations/dav-server/src/opendalfs.rs b/integrations/dav-server/src/opendalfs.rs index 5c2671df078b..92a2d7783749 100644 --- a/integrations/dav-server/src/opendalfs.rs +++ b/integrations/dav-server/src/opendalfs.rs @@ -48,10 +48,7 @@ impl DavFileSystem for OpendalFs { _options: dav_server::fs::OpenOptions, ) -> dav_server::fs::FsFuture> { async move { - let path = path.as_url_string(); - let reader = self.op.reader(&path).await.map_err(convert_error)?; - let writer = self.op.writer(&path).await.map_err(convert_error)?; - let file = WebdavFile::new(self.op.clone(), reader, writer, path.clone()); + let file = WebdavFile::new(self.op.clone(), path.clone()); Ok(Box::new(file) as Box) } .boxed() diff --git a/integrations/dav-server/tests/test.rs b/integrations/dav-server/tests/test.rs index c9856b51fd4b..0ad79f720762 100644 --- a/integrations/dav-server/tests/test.rs +++ b/integrations/dav-server/tests/test.rs @@ -16,7 +16,6 @@ // under the License. use anyhow::Result; -use bytes::Bytes; use dav_server::davpath::DavPath; use dav_server::fs::DavFileSystem; use dav_server_opendalfs::OpendalFs; @@ -24,7 +23,7 @@ use opendal::services::Fs; use opendal::Operator; #[tokio::test] -async fn test_metadata() -> Result<()> { +async fn test() -> Result<()> { let mut builder = Fs::default(); builder.root("/tmp"); @@ -36,47 +35,7 @@ async fn test_metadata() -> Result<()> { .metadata(&DavPath::new("/").unwrap()) .await .unwrap(); - assert!(metadata.is_dir()); + println!("{}", metadata.is_dir()); Ok(()) } - -#[tokio::test] -async fn test_write_and_read() -> Result<()> { - let mut builder = Fs::default(); - builder.root("/tmp"); - - let op = Operator::new(builder)?.finish(); - - let webdavfs = OpendalFs::new(op); - - let path = &DavPath::new("/test_opendalfs_write_read.txt").expect("path must be valid"); - let content = "Hello dav-server-opendalfs."; - - let mut davfile = webdavfs - .open(path, dav_server::fs::OpenOptions::default()) - .await - .expect("open file must succeed"); - - let num = 999; - for i in 0..num { - davfile - .write_bytes(Bytes::from(format!("{}{}", content, i))) - .await - .expect("write file must succeed"); - } - - for i in 0..num { - let read_content = davfile - .read_bytes(content.len() + i.to_string().len()) - .await - .expect("read file must succeed"); - assert_eq!(read_content, Bytes::from(format!("{}{}", content, i))); - } - - webdavfs - .remove_file(path) - .await - .expect("remove file must succeed"); - Ok(()) -} From db0dd5982676b603a80f76ab3e5cf493c769896b Mon Sep 17 00:00:00 2001 From: Xuanwo Date: Wed, 10 Apr 2024 23:22:53 +0800 Subject: [PATCH 3/3] ci: Revert oay changes to fix CI Signed-off-by: Xuanwo --- .github/workflows/ci_bin_oay.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci_bin_oay.yml b/.github/workflows/ci_bin_oay.yml index 189283f495b2..e5666f4245bd 100644 --- a/.github/workflows/ci_bin_oay.yml +++ b/.github/workflows/ci_bin_oay.yml @@ -26,6 +26,7 @@ on: - main paths: - "bin/oay/**" + - "integrations/dav-server/**" - "core/**" - ".github/workflows/ci_bin_oay.yml"