hadoop-hdfs-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daryn Sharp (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HDFS-1907) BlockMissingException upon concurrent read and write: reader was doing file position read while writer is doing write without hflush
Date Wed, 01 Jun 2011 15:10:47 GMT

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

Daryn Sharp commented on HDFS-1907:
-----------------------------------

I'd suggest a temporary boolean for whether the read went past the end of the finalized block.
 You might even consider simplifying all the logic to:

{code}
-    final List<LocatedBlock> blocks;
-    if (locatedBlocks.isLastBlockComplete()) {
-      blocks = getFinalizedBlockRange(offset, length);
-    }
-    else {
-      if (length + offset > locatedBlocks.getFileLength()) {
-        length = locatedBlocks.getFileLength() - offset;
-      }
-      blocks = getFinalizedBlockRange(offset, length);
+    boolean readPastEnd = (offset + length > locatedBlocks.getFileLength());
+    if (readPastEnd) length = locatedBlocks.getFileLength() - offset;
+
+    final List<LocatedBlock> blocks = getFinalizedBlockRange(offset, length);
+    if (readPastEnd && !locatedBlocks.isLastBlockComplete()) {
       blocks.add(locatedBlocks.getLastLocatedBlock());
     }
{code}

> BlockMissingException upon concurrent read and write: reader was doing file position
read while writer is doing write without hflush
> ------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HDFS-1907
>                 URL: https://issues.apache.org/jira/browse/HDFS-1907
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: hdfs client
>    Affects Versions: 0.23.0
>         Environment: Run on a real cluster. Using the latest 0.23 build.
>            Reporter: CW Chung
>            Assignee: John George
>         Attachments: HDFS-1907.patch
>
>
> BlockMissingException is thrown under this test scenario:
> Two different processes doing concurrent file r/w: one read and the other write on the
same file
>   - writer keep doing file write
>   - reader doing position file read from beginning of the file to the visible end of
file, repeatedly
> The reader is basically doing:
>   byteRead = in.read(currentPosition, buffer, 0, byteToReadThisRound);
> where CurrentPostion=0, buffer is a byte array buffer, byteToReadThisRound = 1024*10000;
> Usually it does not fail right away. I have to read, close file, re-open the same file
a few times to create the problem. I'll pose a test program to repro this problem after I've
cleaned up a bit my current test program.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message