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 26ff46396 Create file first before append
26ff46396 is described below
commit 26ff4639694ed2263dac4afe19b77ae0f8adcb80
Author: Xuanwo <[email protected]>
AuthorDate: Wed Jul 26 14:12:50 2023 +0800
Create file first before append
Signed-off-by: Xuanwo <[email protected]>
---
core/src/services/hdfs/backend.rs | 29 ++++++++++++++++++++---------
1 file changed, 20 insertions(+), 9 deletions(-)
diff --git a/core/src/services/hdfs/backend.rs
b/core/src/services/hdfs/backend.rs
index b240e88fc..69a92f8cb 100644
--- a/core/src/services/hdfs/backend.rs
+++ b/core/src/services/hdfs/backend.rs
@@ -258,15 +258,26 @@ impl Accessor for HdfsBackend {
.create_dir(&parent.to_string_lossy())
.map_err(parse_io_error)?;
- let f = self
- .client
- .open_file()
- .create(true)
- .write(true)
- .append(true)
- .async_open(&p)
- .await
- .map_err(parse_io_error)?;
+ let f = match self.client.metadata(&p) {
+ Ok(_) =>self
+ .client
+ .open_file()
+ .append(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))
+ };
Ok((RpAppend::new(), HdfsAppender::new(f)))
}