HDFS-10705: libhdfs++: FileSystem should have a convenience no-args ctor. Contributed by James Clampffer.

This commit is contained in:
James 2016-09-07 10:52:29 -04:00 committed by James Clampffer
parent 4f6cb5d1a1
commit 9d1c902159
2 changed files with 26 additions and 6 deletions

View File

@ -155,18 +155,25 @@ class FileSystem {
* initializes the RPC connections to the NameNode and returns an * initializes the RPC connections to the NameNode and returns an
* FileSystem object. * FileSystem object.
* *
* Note: The FileSystem takes ownership of the IoService passed in the
* constructor. The FileSystem destructor will call delete on it.
*
* If user_name is blank, the current user will be used for a default. * If user_name is blank, the current user will be used for a default.
**/ **/
static FileSystem * New( static FileSystem *New(
IoService *&io_service, const std::string &user_name, const Options &options); IoService *&io_service, const std::string &user_name, const Options &options);
virtual void Connect(const std::string &server, /**
const std::string &service, * Returns a new instance with default user and option, with the default IOService.
**/
static FileSystem *New();
virtual void Connect(const std::string &server, const std::string &service,
const std::function<void(const Status &, FileSystem *)> &handler) = 0; const std::function<void(const Status &, FileSystem *)> &handler) = 0;
/* Synchronous call of Connect */ /* Synchronous call of Connect */
virtual Status Connect(const std::string &server, virtual Status Connect(const std::string &server, const std::string &service) = 0;
const std::string &service) = 0;
/** /**

View File

@ -40,6 +40,9 @@ using ::asio::ip::tcp;
static constexpr uint16_t kDefaultPort = 8020; static constexpr uint16_t kDefaultPort = 8020;
// forward declarations
const std::string get_effective_user_name(const std::string &);
uint32_t FileSystem::GetDefaultFindMaxDepth() { uint32_t FileSystem::GetDefaultFindMaxDepth() {
return std::numeric_limits<uint32_t>::max(); return std::numeric_limits<uint32_t>::max();
} }
@ -72,11 +75,21 @@ Status FileSystem::CheckValidReplication(uint16_t replication) {
* FILESYSTEM BASE CLASS * FILESYSTEM BASE CLASS
****************************************************************************/ ****************************************************************************/
FileSystem * FileSystem::New( FileSystem *FileSystem::New(
IoService *&io_service, const std::string &user_name, const Options &options) { IoService *&io_service, const std::string &user_name, const Options &options) {
return new FileSystemImpl(io_service, user_name, options); return new FileSystemImpl(io_service, user_name, options);
} }
FileSystem *FileSystem::New() {
// No, this pointer won't be leaked. The FileSystem takes ownership.
IoService *io_service = IoService::New();
if(!io_service)
return nullptr;
std::string user_name = get_effective_user_name("");
Options options;
return new FileSystemImpl(io_service, user_name, options);
}
/***************************************************************************** /*****************************************************************************
* FILESYSTEM IMPLEMENTATION * FILESYSTEM IMPLEMENTATION
****************************************************************************/ ****************************************************************************/