[ 
https://issues.apache.org/jira/browse/HDFS-9133?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14906000#comment-14906000
 ] 

Yi Liu edited comment on HDFS-9133 at 9/24/15 1:19 PM:
-------------------------------------------------------

Thanks Colin for the work. 

*1.*
This comment is for {{ExternalBlockReader}}, not only for the patch:
There is some mismatched between {{ExternalBlockReader}}  and other BlockReaders

{code}
ExternalBlockReader(ReplicaAccessor accessor, long visibleLength,
                      long startOffset) {
    this.accessor = accessor;
    this.visibleLength = visibleLength;
    this.pos = startOffset;
  }
{code}

{code}
return new ExternalBlockReader(accessor, length, startOffset);
{code}

{code}
/**
   * Number of bytes to read.  -1 indicates no limit.
   */
  private long length = -1;

/**
   * The offset within the block to start reading at.
   */
  private long startOffset;
{code}

For other block readers, the {{length}} means the number of bytes to read,  but 
in {{ExternalBlockReader}}, it means "visible length" which assumes it's the 
block length? Since from the calculation of {{skip}} and {{available}} in 
{{ExternalBlockReader}} , it indicates it assumes it's the block length, or at 
least assume {{startOffset}} is 0.


was (Author: hitliuyi):
Thanks Colin for the work. 

*1.*
This comment is for {{ExternalBlockReader}}, not only for the patch:
There is some mismatched between {{ExternalBlockReader}}  and other BlockReaders

{code}
ExternalBlockReader(ReplicaAccessor accessor, long visibleLength,
                      long startOffset) {
    this.accessor = accessor;
    this.visibleLength = visibleLength;
    this.pos = startOffset;
  }
{code}

{code}
return new ExternalBlockReader(accessor, length, startOffset);
{code}

{code}
/**
   * Number of bytes to read.  -1 indicates no limit.
   */
  private long length = -1;

/**
   * The offset within the block to start reading at.
   */
  private long startOffset;
{code}

For other block readers, the {{length}} means the number of bytes to read,  but 
in {{ExternalBlockReader}}, it means "visible length" which assumes it's the 
block length? Since from the calculation of {{skip}} and {{available}} in 
{{ExternalBlockReader}} , it indicates it assumes it's the block length, or at 
least assume {{startOffset}} is 0.

*2.*
I think if reach the end of block, we should also update the {{pos}}, otherwise 
the calculation in {{available()}} is wrong.

> ExternalBlockReader and ReplicaAccessor need to return -1 on read when at EOF
> -----------------------------------------------------------------------------
>
>                 Key: HDFS-9133
>                 URL: https://issues.apache.org/jira/browse/HDFS-9133
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: hdfs-client
>    Affects Versions: 2.8.0
>            Reporter: Colin Patrick McCabe
>            Assignee: Colin Patrick McCabe
>         Attachments: HDFS-9133.001.patch
>
>
> ExternalBlockReader and ReplicaAccessor need to return -1 on read when at 
> EOF, as per the JavaDoc in BlockReader.java.



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

Reply via email to