1 | #include <Common/config.h> |
---|---|
2 | #include <memory> |
3 | #include <type_traits> |
4 | |
5 | #if USE_HDFS |
6 | #include <hdfs/hdfs.h> |
7 | |
8 | namespace DB |
9 | { |
10 | namespace detail |
11 | { |
12 | struct HDFSBuilderDeleter |
13 | { |
14 | void operator()(hdfsBuilder * builder_ptr) |
15 | { |
16 | hdfsFreeBuilder(builder_ptr); |
17 | } |
18 | }; |
19 | struct HDFSFsDeleter |
20 | { |
21 | void operator()(hdfsFS fs_ptr) |
22 | { |
23 | hdfsDisconnect(fs_ptr); |
24 | } |
25 | }; |
26 | |
27 | } |
28 | |
29 | struct HDFSFileInfo |
30 | { |
31 | hdfsFileInfo * file_info; |
32 | int length; |
33 | |
34 | HDFSFileInfo() |
35 | : file_info(nullptr) |
36 | , length(0) |
37 | { |
38 | } |
39 | HDFSFileInfo(const HDFSFileInfo & other) = delete; |
40 | HDFSFileInfo(HDFSFileInfo && other) = default; |
41 | HDFSFileInfo & operator=(const HDFSFileInfo & other) = delete; |
42 | HDFSFileInfo & operator=(HDFSFileInfo && other) = default; |
43 | |
44 | ~HDFSFileInfo() |
45 | { |
46 | hdfsFreeFileInfo(file_info, length); |
47 | } |
48 | }; |
49 | using HDFSBuilderPtr = std::unique_ptr<hdfsBuilder, detail::HDFSBuilderDeleter>; |
50 | using HDFSFSPtr = std::unique_ptr<std::remove_pointer_t<hdfsFS>, detail::HDFSFsDeleter>; |
51 | |
52 | // set read/connect timeout, default value in libhdfs3 is about 1 hour, and too large |
53 | /// TODO Allow to tune from query Settings. |
54 | HDFSBuilderPtr createHDFSBuilder(const std::string & hdfs_uri); |
55 | HDFSFSPtr createHDFSFS(hdfsBuilder * builder); |
56 | } |
57 | #endif |
58 |