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)