[ https://issues.apache.org/jira/browse/HDFS-7854?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14358357#comment-14358357 ]
Li Bo commented on HDFS-7854: ----------------------------- hi, Jing we may encounter some problems in your way of handling of {{queueCurrentPacket}} and {{waitAndQueueCurrentPacket}}, and also {{waitForAckedSeqno}}. {{DFSOutputStream#closed}} is different with {{DataStreamer#streamClosed}}. If we move these three methods to DataStreamer and replace {{DFSOutputStream#closed}} with {{DataStreamer#streamClosed}}, we have changed some logic of the original code. For example, two threads(t1, t2) share the same DFSOutputStream, if t1 call {{ DFSOutputStream #close()}}, and an exception is thrown in this function before closing streamer, then {{DFSOutputStream#closed}} is true and {{DataStreamer#streamClosed}} is still false. If t2 calls {{ waitForAckedSeqno }}, originally it will immediately quit this function because {{DFSOutputStream#closed}} is true; if we call {{streamer. waitForAckedSeqno ()}}, now {{DataStreamer#streamClosed}} is still false, so t2 will wait for the while loop to exit. I remember that I have encountered such kinds of problems before. Because DFSOutputStream also generates packets, I think it’s not bad for DFSOutputStream to maintain a queue shared with a DataStreamer, and it gives less changes to the original code. > Separate class DataStreamer out of DFSOutputStream > -------------------------------------------------- > > Key: HDFS-7854 > URL: https://issues.apache.org/jira/browse/HDFS-7854 > Project: Hadoop HDFS > Issue Type: Sub-task > Reporter: Li Bo > Assignee: Li Bo > Attachments: HDFS-7854-001.patch, HDFS-7854-002.patch, > HDFS-7854-003.patch > > > This sub task separate DataStreamer from DFSOutputStream. New DataStreamer > will accept packets and write them to remote datanodes. -- This message was sent by Atlassian JIRA (v6.3.4#6332)