hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hadoop QA (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-8389) HBASE-8354 DDoSes Namenode with lease recovery requests
Date Mon, 22 Apr 2013 19:05:16 GMT

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

Hadoop QA commented on HBASE-8389:
----------------------------------

{color:red}-1 overall{color}.  Here are the results of testing the latest attachment 
  http://issues.apache.org/jira/secure/attachment/12579863/8389-trunk-v2.txt
  against trunk revision .

    {color:green}+1 @author{color}.  The patch does not contain any @author tags.

    {color:red}-1 tests included{color}.  The patch doesn't appear to include any new or modified
tests.
                        Please justify why no new tests are needed for this patch.
                        Also please list what manual steps were performed to verify this patch.

    {color:green}+1 hadoop2.0{color}.  The patch compiles against the hadoop 2.0 profile.

    {color:green}+1 javadoc{color}.  The javadoc tool did not generate any warning messages.

    {color:green}+1 javac{color}.  The applied patch does not increase the total number of
javac compiler warnings.

    {color:green}+1 findbugs{color}.  The patch does not introduce any new Findbugs (version
1.3.9) warnings.

    {color:green}+1 release audit{color}.  The applied patch does not increase the total number
of release audit warnings.

    {color:green}+1 lineLengths{color}.  The patch does not introduce lines longer than 100

  {color:green}+1 site{color}.  The mvn site goal succeeds with this patch.

    {color:green}+1 core tests{color}.  The patch passed unit tests in .

Test results: https://builds.apache.org/job/PreCommit-HBASE-Build/5383//testReport/
Findbugs warnings: https://builds.apache.org/job/PreCommit-HBASE-Build/5383//artifact/trunk/patchprocess/newPatchFindbugsWarningshbase-prefix-tree.html
Findbugs warnings: https://builds.apache.org/job/PreCommit-HBASE-Build/5383//artifact/trunk/patchprocess/newPatchFindbugsWarningshbase-client.html
Findbugs warnings: https://builds.apache.org/job/PreCommit-HBASE-Build/5383//artifact/trunk/patchprocess/newPatchFindbugsWarningshbase-common.html
Findbugs warnings: https://builds.apache.org/job/PreCommit-HBASE-Build/5383//artifact/trunk/patchprocess/newPatchFindbugsWarningshbase-protocol.html
Findbugs warnings: https://builds.apache.org/job/PreCommit-HBASE-Build/5383//artifact/trunk/patchprocess/newPatchFindbugsWarningshbase-server.html
Findbugs warnings: https://builds.apache.org/job/PreCommit-HBASE-Build/5383//artifact/trunk/patchprocess/newPatchFindbugsWarningshbase-hadoop1-compat.html
Findbugs warnings: https://builds.apache.org/job/PreCommit-HBASE-Build/5383//artifact/trunk/patchprocess/newPatchFindbugsWarningshbase-examples.html
Findbugs warnings: https://builds.apache.org/job/PreCommit-HBASE-Build/5383//artifact/trunk/patchprocess/newPatchFindbugsWarningshbase-hadoop-compat.html
Console output: https://builds.apache.org/job/PreCommit-HBASE-Build/5383//console

This message is automatically generated.
                
> HBASE-8354 DDoSes Namenode with lease recovery requests
> -------------------------------------------------------
>
>                 Key: HBASE-8389
>                 URL: https://issues.apache.org/jira/browse/HBASE-8389
>             Project: HBase
>          Issue Type: Bug
>            Reporter: Varun Sharma
>            Assignee: Varun Sharma
>            Priority: Critical
>             Fix For: 0.94.8
>
>         Attachments: 8389-0.94.txt, 8389-0.94-v2.txt, 8389-0.94-v3.txt, 8389-0.94-v4.txt,
8389-trunk-v1.txt, 8389-trunk-v2.patch, 8389-trunk-v2.txt, nn1.log, nn.log, sample.patch
>
>
> We ran hbase 0.94.3 patched with 8354 and observed too many outstanding lease recoveries
because of the short retry interval of 1 second between lease recoveries.
> The namenode gets into the following loop:
> 1) Receives lease recovery request and initiates recovery choosing a primary datanode
every second
> 2) A lease recovery is successful and the namenode tries to commit the block under recovery
as finalized - this takes < 10 seconds in our environment since we run with tight HDFS
socket timeouts.
> 3) At step 2), there is a more recent recovery enqueued because of the aggressive retries.
This causes the committed block to get preempted and we enter a vicious cycle
> So we do,  <initiate_recovery> --> <commit_block> --> <commit_preempted_by_another_recovery>
> This loop is paused after 300 seconds which is the "hbase.lease.recovery.timeout". Hence
the MTTR we are observing is 5 minutes which is terrible. Our ZK session timeout is 30 seconds
and HDFS stale node detection timeout is 20 seconds.
> Note that before the patch, we do not call recoverLease so aggressively - also it seems
that the HDFS namenode is pretty dumb in that it keeps initiating new recoveries for every
call. Before the patch, we call recoverLease, assume that the block was recovered, try to
get the file, it has zero length since its under recovery, we fail the task and retry until
we get a non zero length. So things just work.
> Fixes:
> 1) Expecting recovery to occur within 1 second is too aggressive. We need to have a more
generous timeout. The timeout needs to be configurable since typically, the recovery takes
as much time as the DFS timeouts. The primary datanode doing the recovery tries to reconcile
the blocks and hits the timeouts when it tries to contact the dead node. So the recovery is
as fast as the HDFS timeouts.
> 2) We have another issue I report in HDFS 4721. The Namenode chooses the stale datanode
to perform the recovery (since its still alive). Hence the first recovery request is bound
to fail. So if we want a tight MTTR, we either need something like HDFS 4721 or we need something
like this
>   recoverLease(...)
>   sleep(1000)
>   recoverLease(...)
>   sleep(configuredTimeout)
>   recoverLease(...)
>   sleep(configuredTimeout)
> Where configuredTimeout should be large enough to let the recovery happen but the first
timeout is short so that we get past the moot recovery in step #1.
>  

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message