hadoop-hdfs-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Yongjun Zhang (JIRA)" <j...@apache.org>
Subject [jira] [Created] (HDFS-6937) Another issue in handling checksum errors in write pipeline
Date Mon, 25 Aug 2014 06:12:58 GMT
Yongjun Zhang created HDFS-6937:

             Summary: Another issue in handling checksum errors in write pipeline
                 Key: HDFS-6937
                 URL: https://issues.apache.org/jira/browse/HDFS-6937
             Project: Hadoop HDFS
          Issue Type: Bug
          Components: datanode, hdfs-client
    Affects Versions: 2.5.0
            Reporter: Yongjun Zhang

Given a write pipeline:

DN1 -> DN2 -> DN3

DN3 detected cheksum error and terminate, DN2 truncates its replica to the ACKed size. Then
a new pipeline is attempted as

DN1 -> DN2 -> DN4

DN4 detects checksum error again. Later when replaced DN4 with DN5 (and so on), it failed
for the same reason. This led to the observation that DN2's data is corrupted. 

Found that the software currently truncates DN2's replca to the ACKed size after DN3 terminates.
But it doesn't check the correctness of the data already written to disk.

So intuitively, a solution would be, when downstream DN (DN3 here) found checksum error, propagate
this info back to upstream DN (DN2 here), DN2 checks the correctness of the data already written
to disk, and truncate the replica to to MIN(correctDataSize, ACKedSize).

Found this issue is similar to what was reported by HDFS-3875, and the truncation at DN2 was
actually introduced as part of the HDFS-3875 solution. 

Filing this jira for the issue reported here. HDFS-3875 was filed by [~tlipcon]
and found he proposed something similar there.
if the tail node in the pipeline detects a checksum error, then it returns a special error
code back up the pipeline indicating this (rather than just disconnecting)
if a non-tail node receives this error code, then it immediately scans its own block on disk
(from the beginning up through the last acked length). If it detects a corruption on its local
copy, then it should assume that it is the faulty one, rather than the downstream neighbor.
If it detects no corruption, then the faulty node is either the downstream mirror or the network
link between the two, and the current behavior is reasonable.


This message was sent by Atlassian JIRA

View raw message