[
https://issues.apache.org/jira/browse/HDFS-3122?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13404950#comment-13404950
]
Uma Maheswara Rao G commented on HDFS-3122:
-------------------------------------------
Hi Nicholas,
I feel this issue is still valid after HDFS-3157 and when all blocks marked as
corrupt.
Also we are seeing many race conditions with recovery and close,
commitBlockSynchronization. see HDFS-3584 and HDFS-3585 just reported by
Brahma. Once it corrupts all the blocks, leter even though DN sends with
correct block, there is no use, as it already put them into corrupt. Also there
will not be any replication as there is no live replicas.
Thanks
Uma
> Block recovery with closeFile flag true can race with blockReport. Due to
> this blocks are getting marked as corrupt.
> --------------------------------------------------------------------------------------------------------------------
>
> Key: HDFS-3122
> URL: https://issues.apache.org/jira/browse/HDFS-3122
> Project: Hadoop HDFS
> Issue Type: Bug
> Components: data-node, name-node
> Affects Versions: 0.23.0, 0.24.0
> Reporter: Uma Maheswara Rao G
> Assignee: Uma Maheswara Rao G
> Priority: Critical
> Attachments: blockCorrupt.txt
>
>
> *Block Report* can *race* with *Block Recovery* with closeFile flag true.
> Block report generated just before block recovery at DN side and due to N/W
> problems, block report got delayed to NN.
> After this, recovery success and generation stamp modifies to new one.
> And primary DN invokes the commitBlockSynchronization and block got updated
> in NN side. Also block got marked as complete, since the closeFile flag was
> true. Updated with new genstamp.
> Now blockReport started processing at NN side. This particular block from RBW
> (when it generated the BR at DN), and file was completed at NN side.
> Finally block will be marked as corrupt because of genstamp mismatch.
> {code}
> case RWR:
> if (!storedBlock.isComplete()) {
> return null; // not corrupt
> } else if (storedBlock.getGenerationStamp() !=
> iblk.getGenerationStamp()) {
> return new BlockToMarkCorrupt(storedBlock,
> "reported " + reportedState + " replica with genstamp " +
> iblk.getGenerationStamp() + " does not match COMPLETE block's " +
> "genstamp in block map " + storedBlock.getGenerationStamp());
> } else { // COMPLETE block, same genstamp
> {code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira