Revert HDFS-10543 patch due to correctness issues it caused. Done by James Clampffer

This commit is contained in:
James 2016-07-27 17:02:11 -04:00 committed by James Clampffer
parent a586ccbcfa
commit d75c835696
1 changed files with 15 additions and 23 deletions

View File

@ -78,34 +78,26 @@ Status FileHandleImpl::PositionRead(void *buf, size_t *nbyte, off_t offset) {
LOG_TRACE(kFileHandle, << "FileHandleImpl::[sync]PositionRead(" LOG_TRACE(kFileHandle, << "FileHandleImpl::[sync]PositionRead("
<< FMT_THIS_ADDR << ", buf=" << buf << FMT_THIS_ADDR << ", buf=" << buf
<< ", nbyte=" << *nbyte << ") called"); << ", nbyte=" << *nbyte << ") called");
size_t totalBytesRead = 0;
Status stat = Status::OK();
while (*nbyte != 0 && offset < (off_t)(file_info_->file_length_)) {
auto callstate = std::make_shared<std::promise<std::tuple<Status, size_t>>>();
std::future<std::tuple<Status, size_t>> future(callstate->get_future());
/* wrap async call with promise/future to make it blocking */ auto callstate = std::make_shared<std::promise<std::tuple<Status, size_t>>>();
auto callback = [callstate](const Status &s, size_t bytes) { std::future<std::tuple<Status, size_t>> future(callstate->get_future());
callstate->set_value(std::make_tuple(s,bytes));
};
PositionRead(buf, *nbyte, offset, callback); /* wrap async call with promise/future to make it blocking */
auto callback = [callstate](const Status &s, size_t bytes) {
callstate->set_value(std::make_tuple(s,bytes));
};
/* wait for async to finish */ PositionRead(buf, *nbyte, offset, callback);
auto returnstate = future.get();
stat = std::get<0>(returnstate);
if (!stat.ok()) { /* wait for async to finish */
return stat; auto returnstate = future.get();
} auto stat = std::get<0>(returnstate);
size_t bytesRead = std::get<1>(returnstate); if (!stat.ok()) {
*nbyte = *nbyte - bytesRead; return stat;
totalBytesRead += bytesRead;
offset += bytesRead;
} }
/* Update the bytes read for return */
*nbyte = totalBytesRead; *nbyte = std::get<1>(returnstate);
return stat; return stat;
} }
@ -118,8 +110,8 @@ Status FileHandleImpl::Read(void *buf, size_t *nbyte) {
if(!stat.ok()) { if(!stat.ok()) {
return stat; return stat;
} }
offset_ += *nbyte;
offset_ += *nbyte;
return Status::OK(); return Status::OK();
} }