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)))
     }

Reply via email to