This is an automated email from the ASF dual-hosted git repository.
xuanwo pushed a commit to branch hdfs-append
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git
The following commit(s) were added to refs/heads/hdfs-append by this push:
new 83add78e0 Create file instead of use write
83add78e0 is described below
commit 83add78e0bd61f6ab35843d621af90dea1f1ec64
Author: Xuanwo <[email protected]>
AuthorDate: Wed Jul 26 14:33:06 2023 +0800
Create file instead of use write
Signed-off-by: Xuanwo <[email protected]>
---
core/src/services/hdfs/backend.rs | 36 ++++++++++++++++++++----------------
1 file changed, 20 insertions(+), 16 deletions(-)
diff --git a/core/src/services/hdfs/backend.rs
b/core/src/services/hdfs/backend.rs
index 69a92f8cb..c1e188a50 100644
--- a/core/src/services/hdfs/backend.rs
+++ b/core/src/services/hdfs/backend.rs
@@ -24,6 +24,7 @@ use std::path::PathBuf;
use std::sync::Arc;
use async_trait::async_trait;
+use futures::AsyncWriteExt;
use log::debug;
use super::appender::HdfsAppender;
@@ -258,26 +259,29 @@ impl Accessor for HdfsBackend {
.create_dir(&parent.to_string_lossy())
.map_err(parse_io_error)?;
- let f = match self.client.metadata(&p) {
- Ok(_) =>self
+ if let Err(err) = self.client.metadata(&p) {
+ // Early return if other error happened.
+ if err.kind() != io::ErrorKind::NotFound {
+ return Err(parse_io_error(err));
+ }
+
+ let mut f = self
.client
.open_file()
- .append(true)
+ .create(true)
.async_open(&p)
.await
- .map_err(parse_io_error)?,
- Err(err) if err.kind() == io::ErrorKind::NotFound => {
- self
- .client
- .open_file()
- .create(true)
- .write(true)
- .async_open(&p)
- .await
- .map_err(parse_io_error)?
- },
- Err(err) => return Err(parse_io_error(err))
- };
+ .map_err(parse_io_error)?;
+ f.close().await.map_err(parse_io_error)?;
+ }
+
+ let f = self
+ .client
+ .open_file()
+ .append(true)
+ .async_open(&p)
+ .await
+ .map_err(parse_io_error)?;
Ok((RpAppend::new(), HdfsAppender::new(f)))
}