You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-issues@hadoop.apache.org by "Hairong Kuang (JIRA)" <ji...@apache.org> on 2010/08/18 20:19:16 UTC

[jira] Created: (HDFS-1346) DFSClient receives out of order packet ack

DFSClient receives out of order packet ack
------------------------------------------

                 Key: HDFS-1346
                 URL: https://issues.apache.org/jira/browse/HDFS-1346
             Project: Hadoop HDFS
          Issue Type: Bug
          Components: data-node, hdfs client
    Affects Versions: 0.20-append
            Reporter: Hairong Kuang
            Assignee: Hairong Kuang
             Fix For: 0.20-append


When running 0.20 patched with HDFS-101, we sometimes see an error as follow:
WARN hdfs.DFSClient: DFSOutputStream ResponseProcessor exception for block blk_-2871223654872350746_21421120java.io.IOException: Responseprocessor: Expecting seq
no for block blk_-2871223654872350746_21421120 10280 but received 10281
at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$ResponseProcessor.run(DFSClient.java:2570)

This indicates that DFS client expects an ack for packet N, but receives an ack for packet N+1.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (HDFS-1346) DFSClient receives out of order packet ack

Posted by "Todd Lipcon (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/HDFS-1346?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Todd Lipcon updated HDFS-1346:
------------------------------

    Attachment: blockrecv-diff.txt

I'm noticing that the HDFS-101 implementation we've been running with is a bit different than what made it into the branch-0.20-append, and I don't think susceptible to the issue. Attaching a diff of our BlockReceiver.java against the branch-20-append one - ignore the bit at the end with checkDiskError, etc - that's from another patch.

I think the relevent diff chunk here is the first - we detect a HEART_BEAT seqno immediately and "continue" around the loop in that case. Is this a cleaner fix than the local variable?

> DFSClient receives out of order packet ack
> ------------------------------------------
>
>                 Key: HDFS-1346
>                 URL: https://issues.apache.org/jira/browse/HDFS-1346
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: data-node, hdfs client
>    Affects Versions: 0.20-append
>            Reporter: Hairong Kuang
>            Assignee: Hairong Kuang
>             Fix For: 0.20-append
>
>         Attachments: blockrecv-diff.txt, outOfOrder.patch
>
>
> When running 0.20 patched with HDFS-101, we sometimes see an error as follow:
> WARN hdfs.DFSClient: DFSOutputStream ResponseProcessor exception for block blk_-2871223654872350746_21421120java.io.IOException: Responseprocessor: Expecting seq
> no for block blk_-2871223654872350746_21421120 10280 but received 10281
> at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$ResponseProcessor.run(DFSClient.java:2570)
> This indicates that DFS client expects an ack for packet N, but receives an ack for packet N+1.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (HDFS-1346) DFSClient receives out of order packet ack

Posted by "Hairong Kuang (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/HDFS-1346?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12900465#action_12900465 ] 

Hairong Kuang commented on HDFS-1346:
-------------------------------------

Todd, yours is missing this patch: https://issues.apache.org/jira/secure/attachment/12439379/pipelineHeartbeat.patch. HDFS-101 says that  it fixes a bug of incorrect handle of pipeline heartbeat in yahoo's hadoop security branch 0.20.  But I did not put the bug description there.

Koji, do you still remember what exact problem that pipelineHeartbeat.patch is fixed?

> DFSClient receives out of order packet ack
> ------------------------------------------
>
>                 Key: HDFS-1346
>                 URL: https://issues.apache.org/jira/browse/HDFS-1346
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: data-node, hdfs client
>    Affects Versions: 0.20-append
>            Reporter: Hairong Kuang
>            Assignee: Hairong Kuang
>             Fix For: 0.20-append
>
>         Attachments: blockrecv-diff.txt, outOfOrder.patch
>
>
> When running 0.20 patched with HDFS-101, we sometimes see an error as follow:
> WARN hdfs.DFSClient: DFSOutputStream ResponseProcessor exception for block blk_-2871223654872350746_21421120java.io.IOException: Responseprocessor: Expecting seq
> no for block blk_-2871223654872350746_21421120 10280 but received 10281
> at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$ResponseProcessor.run(DFSClient.java:2570)
> This indicates that DFS client expects an ack for packet N, but receives an ack for packet N+1.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (HDFS-1346) DFSClient receives out of order packet ack

Posted by "Hairong Kuang (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/HDFS-1346?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12899942#action_12899942 ] 

Hairong Kuang commented on HDFS-1346:
-------------------------------------

This seems to be caused by a race condition in BlockReceiver#PacketResponder.run(). It has the following piece of code where mirrorError is shared by two threads:
{code}
1:  if (!mirrorError) {
2:    // read an ack from downstream datanode
3:    ack.readFields(mirrorIn);
4:    ...
5:    seqno = ack.getSeqno();
6:  }
7:  if (seqno >= 0 || mirrorError) {
8:    Packet pkt = null;
9:    synchronized (this) {
10:    ...
11:    pkt = ackQueue.removeFirst();
12:    expected = pkt.seqno;
13:    ...;
14:   }
15: }
{code}

If starting at line 1, mirrorError is false, the thread reads an ack from a downsream datanode (line 3). If it happens that the ack is for a heartbeat packet, seqno is -1 (line 5). Then if it happens that the other thread changes mirrorError to be true in between lines 4 and 5, the condition becomes true on line 7. A data packet is removed from ackQueue on line 12, which should not because the ack is for a heartbeat packet not for a data packet. So an ack for a data packet ends up being dropped.

> DFSClient receives out of order packet ack
> ------------------------------------------
>
>                 Key: HDFS-1346
>                 URL: https://issues.apache.org/jira/browse/HDFS-1346
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: data-node, hdfs client
>    Affects Versions: 0.20-append
>            Reporter: Hairong Kuang
>            Assignee: Hairong Kuang
>             Fix For: 0.20-append
>
>
> When running 0.20 patched with HDFS-101, we sometimes see an error as follow:
> WARN hdfs.DFSClient: DFSOutputStream ResponseProcessor exception for block blk_-2871223654872350746_21421120java.io.IOException: Responseprocessor: Expecting seq
> no for block blk_-2871223654872350746_21421120 10280 but received 10281
> at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$ResponseProcessor.run(DFSClient.java:2570)
> This indicates that DFS client expects an ack for packet N, but receives an ack for packet N+1.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (HDFS-1346) DFSClient receives out of order packet ack

Posted by "sam rash (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/HDFS-1346?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12900105#action_12900105 ] 

sam rash commented on HDFS-1346:
--------------------------------

not easily--PacketResponder is a non-static inner class.  Constructing a BlockReceiver requires a Datanode instance.  
If you can harness a Datanode, then you need to stub out the DataInputStream and figure out when to fire a callback (somehow when ack.readFields() reads from the DatainputStream, but not before).

I think it's possible, but we haven't had time yet


> DFSClient receives out of order packet ack
> ------------------------------------------
>
>                 Key: HDFS-1346
>                 URL: https://issues.apache.org/jira/browse/HDFS-1346
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: data-node, hdfs client
>    Affects Versions: 0.20-append
>            Reporter: Hairong Kuang
>            Assignee: Hairong Kuang
>             Fix For: 0.20-append
>
>         Attachments: outOfOrder.patch
>
>
> When running 0.20 patched with HDFS-101, we sometimes see an error as follow:
> WARN hdfs.DFSClient: DFSOutputStream ResponseProcessor exception for block blk_-2871223654872350746_21421120java.io.IOException: Responseprocessor: Expecting seq
> no for block blk_-2871223654872350746_21421120 10280 but received 10281
> at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$ResponseProcessor.run(DFSClient.java:2570)
> This indicates that DFS client expects an ack for packet N, but receives an ack for packet N+1.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (HDFS-1346) DFSClient receives out of order packet ack

Posted by "dhruba borthakur (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/HDFS-1346?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12913396#action_12913396 ] 

dhruba borthakur commented on HDFS-1346:
----------------------------------------

Hi Hairong, I agree with your observation.  Please commit it to 0.20 append branch too. Thanks.

> DFSClient receives out of order packet ack
> ------------------------------------------
>
>                 Key: HDFS-1346
>                 URL: https://issues.apache.org/jira/browse/HDFS-1346
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: data-node, hdfs client
>    Affects Versions: 0.20-append
>            Reporter: Hairong Kuang
>            Assignee: Hairong Kuang
>             Fix For: 0.20-append
>
>         Attachments: blockrecv-diff.txt, outOfOrder.patch
>
>
> When running 0.20 patched with HDFS-101, we sometimes see an error as follow:
> WARN hdfs.DFSClient: DFSOutputStream ResponseProcessor exception for block blk_-2871223654872350746_21421120java.io.IOException: Responseprocessor: Expecting seq
> no for block blk_-2871223654872350746_21421120 10280 but received 10281
> at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$ResponseProcessor.run(DFSClient.java:2570)
> This indicates that DFS client expects an ack for packet N, but receives an ack for packet N+1.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (HDFS-1346) DFSClient receives out of order packet ack

Posted by "Hairong Kuang (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/HDFS-1346?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Hairong Kuang updated HDFS-1346:
--------------------------------

    Attachment: outOfOrder.patch

This patch introduces a local variable localMirrorError to avoid the race condition. 

> DFSClient receives out of order packet ack
> ------------------------------------------
>
>                 Key: HDFS-1346
>                 URL: https://issues.apache.org/jira/browse/HDFS-1346
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: data-node, hdfs client
>    Affects Versions: 0.20-append
>            Reporter: Hairong Kuang
>            Assignee: Hairong Kuang
>             Fix For: 0.20-append
>
>         Attachments: outOfOrder.patch
>
>
> When running 0.20 patched with HDFS-101, we sometimes see an error as follow:
> WARN hdfs.DFSClient: DFSOutputStream ResponseProcessor exception for block blk_-2871223654872350746_21421120java.io.IOException: Responseprocessor: Expecting seq
> no for block blk_-2871223654872350746_21421120 10280 but received 10281
> at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$ResponseProcessor.run(DFSClient.java:2570)
> This indicates that DFS client expects an ack for packet N, but receives an ack for packet N+1.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (HDFS-1346) DFSClient receives out of order packet ack

Posted by "Hairong Kuang (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/HDFS-1346?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12913180#action_12913180 ] 

Hairong Kuang commented on HDFS-1346:
-------------------------------------

This patch has been deployed on our production cluster for a while and it seems to have fixed the bug. The fix helps reducing the chance of losing data when hflushing.

Shall we commit it to the 0.20 append branch?

> DFSClient receives out of order packet ack
> ------------------------------------------
>
>                 Key: HDFS-1346
>                 URL: https://issues.apache.org/jira/browse/HDFS-1346
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: data-node, hdfs client
>    Affects Versions: 0.20-append
>            Reporter: Hairong Kuang
>            Assignee: Hairong Kuang
>             Fix For: 0.20-append
>
>         Attachments: blockrecv-diff.txt, outOfOrder.patch
>
>
> When running 0.20 patched with HDFS-101, we sometimes see an error as follow:
> WARN hdfs.DFSClient: DFSOutputStream ResponseProcessor exception for block blk_-2871223654872350746_21421120java.io.IOException: Responseprocessor: Expecting seq
> no for block blk_-2871223654872350746_21421120 10280 but received 10281
> at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$ResponseProcessor.run(DFSClient.java:2570)
> This indicates that DFS client expects an ack for packet N, but receives an ack for packet N+1.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (HDFS-1346) DFSClient receives out of order packet ack

Posted by "Todd Lipcon (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/HDFS-1346?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12900081#action_12900081 ] 

Todd Lipcon commented on HDFS-1346:
-----------------------------------

Any way to trigger this with a unit test that would inject a Thread.sleep in there using mockito? Or just too hard? (I'm surprised I haven't run into this ever in append testing)

> DFSClient receives out of order packet ack
> ------------------------------------------
>
>                 Key: HDFS-1346
>                 URL: https://issues.apache.org/jira/browse/HDFS-1346
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: data-node, hdfs client
>    Affects Versions: 0.20-append
>            Reporter: Hairong Kuang
>            Assignee: Hairong Kuang
>             Fix For: 0.20-append
>
>         Attachments: outOfOrder.patch
>
>
> When running 0.20 patched with HDFS-101, we sometimes see an error as follow:
> WARN hdfs.DFSClient: DFSOutputStream ResponseProcessor exception for block blk_-2871223654872350746_21421120java.io.IOException: Responseprocessor: Expecting seq
> no for block blk_-2871223654872350746_21421120 10280 but received 10281
> at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$ResponseProcessor.run(DFSClient.java:2570)
> This indicates that DFS client expects an ack for packet N, but receives an ack for packet N+1.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Resolved: (HDFS-1346) DFSClient receives out of order packet ack

Posted by "Hairong Kuang (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/HDFS-1346?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Hairong Kuang resolved HDFS-1346.
---------------------------------

    Hadoop Flags: [Reviewed]
      Resolution: Fixed

I've committed this.

> DFSClient receives out of order packet ack
> ------------------------------------------
>
>                 Key: HDFS-1346
>                 URL: https://issues.apache.org/jira/browse/HDFS-1346
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: data-node, hdfs client
>    Affects Versions: 0.20-append
>            Reporter: Hairong Kuang
>            Assignee: Hairong Kuang
>             Fix For: 0.20-append
>
>         Attachments: blockrecv-diff.txt, outOfOrder.patch
>
>
> When running 0.20 patched with HDFS-101, we sometimes see an error as follow:
> WARN hdfs.DFSClient: DFSOutputStream ResponseProcessor exception for block blk_-2871223654872350746_21421120java.io.IOException: Responseprocessor: Expecting seq
> no for block blk_-2871223654872350746_21421120 10280 but received 10281
> at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$ResponseProcessor.run(DFSClient.java:2570)
> This indicates that DFS client expects an ack for packet N, but receives an ack for packet N+1.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.