[ https://issues.apache.org/jira/browse/HDFS-8766?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14905488#comment-14905488 ]
James Clampffer commented on HDFS-8766: --------------------------------------- Thanks for the input! Re: It looks like that the code needs a lot of clean ups. The code needs to follow the Google C++ styling guide and be formatted using clang-format. Agreed. I didn't know we were using automated tools to check the code style, I'll look into that. What's the biggest motivation for choosing Google's C++ standards on a new project like this? The main thing that bothers me is never using exceptions particularly in the context of constructors, I'd rather let RAII handle cleanup and avoid lots of checks at the call site. I'm not using much RAII at the moment because I'd like to wait until we settle on an object ownership convention and keep it consistent throughout the library. Re: I think it's important to have several abstractions. There should be C++ classes that correspond FileSystem / FileHandle as Bob mentioned. We should probably spend some time talking about what we want out of the different abstractions before too much more work is done, my rough ideas for implementing FileSystem / FileHandle in order of personal preference would be: 1) Turn hdfs_internal into FileSystem and hdfsFile_internal into FileHandle; this is the approach I started taking here. It separates the compatibility layer from changes in the underlying classes and provides simple examples about how to use the lower level async APIs. A nice bonus here is that it gives a good opportunity to hide some of the type traits and templates for people who just want a simple object oriented interface. 2) Take the stuff from compatibility and add it directly to the InputStream/FileSystem objects. Less code to maintain but pushes a lot of code that isn't too useful for C++11 programmers into the main classes. 3) Implement the FileHandle/FileSystem directly on top of the block_reader, rpc_engine, and IoService classes. I'd like to avoid this because it seems like a whole lot of code would be duplicated. It seems like a perfect time to begin working on HDFS-9115 as a group so we are all on the same page. Re: It should be a generic template to abstract the operations of wrapping async calls to synchronous calls. I strongly agree; before I do much more work on this I'm going to write a little macro or templated class to wrap up async calls. > Implement a libhdfs(3) compatible API > ------------------------------------- > > Key: HDFS-8766 > URL: https://issues.apache.org/jira/browse/HDFS-8766 > Project: Hadoop HDFS > Issue Type: Sub-task > Components: hdfs-client > Reporter: James Clampffer > Assignee: James Clampffer > Attachments: HDFS-8766.HDFS-8707.000.patch > > > Add a synchronous API that is compatible with the hdfs.h header used in > libhdfs and libhdfs3. This will make it possible for projects using > libhdfs/libhdfs3 to relink against libhdfspp with minimal changes. > This also provides a pure C interface that can be linked against projects > that aren't built in C++11 mode for various reasons but use the same > compiler. It also allows many other programming languages to access > libhdfspp through builtin FFI interfaces. > The libhdfs API is very similar to the posix file API which makes it easier > for programs built using posix filesystem calls to be modified to access HDFS. -- This message was sent by Atlassian JIRA (v6.3.4#6332)