Sergey Shelukhin created HDFS-7825:
--------------------------------------
Summary: read(ByteBuffer) method doesn't conform to its API
Key: HDFS-7825
URL: https://issues.apache.org/jira/browse/HDFS-7825
Project: Hadoop HDFS
Issue Type: Bug
Reporter: Sergey Shelukhin
ByteBufferReadable::read(ByteBuffer) javadoc says:
{noformat}
After a successful call, buf.position() and buf.limit() should be unchanged,
and therefore any data can be immediately read from buf. buf.mark() may be
cleared or updated.
{noformat}
I have the following code:
{noformat}
ByteBuffer directBuf = ByteBuffer.allocateDirect(len);
int pos = directBuf.position();
int count = file.read(directBuf);
if (count < 0) throw new EOFException();
if (directBuf.position() != pos) {
RecordReaderImpl.LOG.info("Warning - position mismatch from " +
file.getClass()
+ ": after reading " + count + ", expected " + pos + " but
got " + directBuf.position());
}
{noformat}
and I get:
{noformat}
15/02/23 15:30:56 [pool-4-thread-1] INFO orc.RecordReaderImpl : Warning -
position mismatch from class org.apache.hadoop.hdfs.client.HdfsDataInputStream:
after reading 6, expected 0 but got 6
{noformat}
So the position is changed, unlike the API doc indicates.
Also, while I haven't verified yet, it may be that the 0-length read is not
handled properly.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)