[
https://issues.apache.org/jira/browse/HDFS-9108?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
James Clampffer updated HDFS-9108:
----------------------------------
Description:
Somewhere between InputStream->PositionRead and the asio code the pointer to
the destination buffer gets lost. PositionRead will correctly return the
number of bytes read but the buffer won't be filled.
This only seems to effect the remote_block_reader, RPC calls are working.
Valgrind error:
Syscall param recvmsg(msg.msg_iov) points to uninitialised byte(s)
msg.msg_iov[0] should equal the buffer pointer passed to PositionRead
Hit when using a promise to make the async call block until completion.
auto stat = std::make_shared<std::promise<Status>>();
std::future<Status> future(stat->get_future());
size_t readCount = 0;
auto h = [stat, &readCount,buf](const Status &s, size_t bytes) {
stat->set_value(s);
readCount = bytes;
};
char buf[50];
inputStream->PositionRead(buf, 50, 0, h);
//wait for async to finish
future.get();
was:
Somewhere between InputStream->PositionRead and the asio code the pointer to
the destination buffer gets lost. PositionRead will correctly return the
number of bytes read but the buffer won't be filled.
This only seems to effect the remote_block_reader, RPC calls are working.
Valgrind error:
Syscall param recvmsg(msg.msg_iov) points to uninitialised byte(s)
msg.msg_iov[0] should equal the buffer passed to PositionRead
Hit when using a promise to make the async call block until completion.
auto stat = std::make_shared<std::promise<Status>>();
std::future<Status> future(stat->get_future());
size_t readCount = 0;
auto h = [stat, &readCount,buf](const Status &s, size_t bytes) {
stat->set_value(s);
readCount = bytes;
};
char buf[50];
inputStream->PositionRead(buf, 50, 0, h);
//wait for async to finish
future.get();
> Pointer to read buffer isn't being passed to kernel
> ---------------------------------------------------
>
> Key: HDFS-9108
> URL: https://issues.apache.org/jira/browse/HDFS-9108
> Project: Hadoop HDFS
> Issue Type: Sub-task
> Components: hdfs-client
> Environment: Ubuntu x86_64, gcc 4.8.2
> Reporter: James Clampffer
> Assignee: James Clampffer
>
> Somewhere between InputStream->PositionRead and the asio code the pointer to
> the destination buffer gets lost. PositionRead will correctly return the
> number of bytes read but the buffer won't be filled.
> This only seems to effect the remote_block_reader, RPC calls are working.
> Valgrind error:
> Syscall param recvmsg(msg.msg_iov) points to uninitialised byte(s)
> msg.msg_iov[0] should equal the buffer pointer passed to PositionRead
> Hit when using a promise to make the async call block until completion.
> auto stat = std::make_shared<std::promise<Status>>();
> std::future<Status> future(stat->get_future());
> size_t readCount = 0;
> auto h = [stat, &readCount,buf](const Status &s, size_t bytes) {
> stat->set_value(s);
> readCount = bytes;
> };
> char buf[50];
> inputStream->PositionRead(buf, 50, 0, h);
>
> //wait for async to finish
> future.get();
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)