hadoop-hdfs-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "James Clampffer (JIRA)" <j...@apache.org>
Subject [jira] [Created] (HDFS-9326) Create a generic function to synchronize async functions and methods.
Date Wed, 28 Oct 2015 15:29:27 GMT
James Clampffer created HDFS-9326:
-------------------------------------

             Summary: Create a generic function to synchronize async functions and methods.

                 Key: HDFS-9326
                 URL: https://issues.apache.org/jira/browse/HDFS-9326
             Project: Hadoop HDFS
          Issue Type: Sub-task
            Reporter: James Clampffer


The majority of the functionality in libhdfs++ is asynchronous, but some applications need
synchronous operations.  At the time of filing this only happens in 3 places in the C API,
however that number is going to grow a lot once the C and high level C++ APIs expose all of
the namenode functions.

This synchronization is typically implemented like this:
auto promise = std::make_shared<std::promise<T>>()
std::future<T> = future(promise->get_future());

auto async_callback = [promise] () {promise->set_value(val);};

SomeClass::AsyncMethod(async_callback); 

auto result = future.get()

Ideally this could all be pushed into a templated function so that the promise and future
don't need to be defined at the call site.  This would probably take the form of doing a std::bind
to get all the arguments in place at the call site and then passing that to the synchronize
function.

This appears to require some template magic that isn't always well supported; see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51979.




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message