You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by xu...@apache.org on 2024/04/10 15:23:12 UTC
(opendal) 02/03: Revert "fix(oay): support `WebdavFile` continuous reading and writing (#4374)"
This is an automated email from the ASF dual-hosted git repository.
xuanwo pushed a commit to branch fix-oay
in repository https://gitbox.apache.org/repos/asf/opendal.git
commit 39906a6a3dd1f0cd7318fbadf9001768abfb4791
Author: Xuanwo <gi...@xuanwo.io>
AuthorDate: Wed Apr 10 23:22:30 2024 +0800
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 008b35e3f8..c8983d1fc2 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<Bytes> {
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<Box<dyn DavMetaData>> {
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<dyn DavMetaData>
@@ -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<u64> {
diff --git a/integrations/dav-server/src/opendalfs.rs b/integrations/dav-server/src/opendalfs.rs
index 5c2671df07..92a2d77837 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<Box<dyn dav_server::fs::DavFile>> {
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<dyn DavFile>)
}
.boxed()
diff --git a/integrations/dav-server/tests/test.rs b/integrations/dav-server/tests/test.rs
index c9856b51fd..0ad79f7207 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(())
-}