hadoop-hdfs-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Chris Nauroth (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HDFS-3519) Checkpoint upload may interfere with a concurrent saveNamespace
Date Mon, 19 Jan 2015 20:56:34 GMT

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

Chris Nauroth commented on HDFS-3519:

[~mingma], thank you for working on this.

I think the test failures shown in the last Jenkins run are unrelated.  I did multiple test
runs locally, and they always passed.

A few comments on the patch:
* {{FSImage#saveNamespace}}: It's possible to leave this method after adding the transaction
ID to the checkpointing set, but without removing it.  This would leave the transaction ID
in the set permanently, and I believe it would then be impossible to checkpoint at that transaction
ID again.  Even though {{removeFromCheckpointing}} is called in a {{finally}} block, it is
preceded by a call to {{FSEditLog#startLogSegmentAndWriteHeaderTxn}}, which can throw {{IOException}}.
 I think we'll need to wrap the whole logic in a second layer of try-finally to guarantee
the transaction ID gets removed from the set.
* {{FSImage#saveFSImageInAllDirs}}: Now that this is wrapped in try-finally, there is an existing
line of code that needs to be indented.

> Checkpoint upload may interfere with a concurrent saveNamespace
> ---------------------------------------------------------------
>                 Key: HDFS-3519
>                 URL: https://issues.apache.org/jira/browse/HDFS-3519
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: namenode
>            Reporter: Todd Lipcon
>            Assignee: Ming Ma
>            Priority: Critical
>         Attachments: HDFS-3519-2.patch, HDFS-3519.patch, test-output.txt
> TestStandbyCheckpoints failed in [precommit build 2620|https://builds.apache.org/job/PreCommit-HDFS-Build/2620//testReport/]
due to the following issue:
> - both nodes were in Standby state, and configured to checkpoint "as fast as possible"
> - NN1 starts to save its own namespace
> - NN2 starts to upload a checkpoint for the same txid. So, both threads are writing to
the same file fsimage.ckpt_12, but the actual file contents correspond to the uploading thread's
> - NN1 finished its saveNamespace operation while NN2 was still uploading. So, it renamed
the ckpt file. However, the contents of the file are still empty since NN2 hasn't sent any
> - NN2 finishes the upload, and the rename() call fails, which causes the directory to
be marked failed, etc.
> The result is that there is a file fsimage_12 which appears to be a finalized image but
in fact is incompletely transferred. When the transfer completes, the problem "heals itself"
so there wouldn't be persistent corruption unless the machine crashes at the same time. And
even then, we'd still have the earlier checkpoint to restore from.
> This same race could occur in a non-HA setup if a user puts the NN in safe mode and issues
saveNamespace operations concurrent with a 2NN checkpointing, I believe.

This message was sent by Atlassian JIRA

View raw message