You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by pl...@apache.org on 2024/04/09 04:56:00 UTC

(doris) branch branch-2.1 updated: [fix](cooldown) Fix hdfs path (#33315)

This is an automated email from the ASF dual-hosted git repository.

plat1ko pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new 97850cf2bbf [fix](cooldown) Fix hdfs path (#33315)
97850cf2bbf is described below

commit 97850cf2bbf6d3fac993094e70731af5966f94f9
Author: plat1ko <pl...@gmail.com>
AuthorDate: Tue Apr 9 12:55:53 2024 +0800

    [fix](cooldown) Fix hdfs path (#33315)
---
 be/src/io/fs/hdfs_file_system.cpp |  7 ++++---
 be/src/util/hdfs_util.cpp         | 22 ++++++++++++----------
 2 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/be/src/io/fs/hdfs_file_system.cpp b/be/src/io/fs/hdfs_file_system.cpp
index 5b5dbba16b2..22b4784ea61 100644
--- a/be/src/io/fs/hdfs_file_system.cpp
+++ b/be/src/io/fs/hdfs_file_system.cpp
@@ -283,11 +283,12 @@ Status HdfsFileSystem::list_impl(const Path& path, bool only_file, std::vector<F
         if (only_file && file.mKind == kObjectKindDirectory) {
             continue;
         }
-        FileInfo file_info;
-        file_info.file_name = file.mName;
+        auto& file_info = files->emplace_back();
+        std::string_view fname(file.mName);
+        fname.remove_prefix(fname.rfind('/') + 1);
+        file_info.file_name = fname;
         file_info.file_size = file.mSize;
         file_info.is_file = (file.mKind != kObjectKindDirectory);
-        files->emplace_back(std::move(file_info));
     }
     hdfsFreeFileInfo(hdfs_file_info, numEntries);
     return Status::OK();
diff --git a/be/src/util/hdfs_util.cpp b/be/src/util/hdfs_util.cpp
index 6e99fdea3d3..794c53f15e4 100644
--- a/be/src/util/hdfs_util.cpp
+++ b/be/src/util/hdfs_util.cpp
@@ -42,17 +42,19 @@ hdfsFS HDFSHandle::create_hdfs_fs(HDFSCommonBuilder& hdfs_builder) {
 }
 
 Path convert_path(const Path& path, const std::string& namenode) {
-    Path real_path(path);
-    if (path.string().find(namenode) != std::string::npos) {
-        std::string real_path_str = path.string().substr(namenode.size());
-        if (!real_path_str.starts_with("/")) {
-            // The real path must starts with "/"
-            // Or the hadoop client will add a prefix like "/user/hadoop".
-            real_path_str = "/" + real_path_str;
-        }
-        real_path = real_path_str;
+    std::string fs_path;
+    if (path.native().starts_with(namenode)) {
+        // `path` is URI format, remove the namenode part in `path`
+        fs_path = path.native().substr(namenode.size());
+    } else {
+        fs_path = path;
     }
-    return real_path;
+
+    // Always use absolute path (start with '/') in hdfs
+    if (fs_path.empty() || fs_path[0] != '/') {
+        fs_path.insert(fs_path.begin(), '/');
+    }
+    return fs_path;
 }
 
 bool is_hdfs(const std::string& path_or_fs) {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org