[ https://issues.apache.org/jira/browse/HDFS-8287?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14681550#comment-14681550 ]
Rakesh R commented on HDFS-8287: -------------------------------- Thanks [~kaisasak], nice work. I've few comments, please take a look at it: # Please close the {{parityGenerator}} daemon thread when closing the DFSStripedOutputStream. Here, please make sure the writeParityCellsForLastStripe() gets a fair chance to finish. # Few queries about {{synchronized (bufferQueue)}} statement/block. Is that your intention is to block the {{cellBufferses(currentIndex)}} till writeParity() function is completed, considering that encoder will take more time than next {{ParityGenerator#enqueue}} arrives. If yes, then I think we should make {{ParityGenerator#enqueue()}} function also synchronized on {{bufferQueue}}. If not, then will wrap only {{bufferQueue.wait();}}, right? # Please pass the exception object as argument. This will help to get the complete trace. {code} LOG.warn("Caught exception " + e); {code} modify to {code} LOG.warn("Caught exception ", e); {code} # Presently {{DFSStripedOutputStream#writeParity}} method have package/default visibility. With this change {{ParityGenerator}} is consuming the buffer, its good to limit this function accessibility to private. {code} void writeParity(int index, ByteBuffer buffer, byte[] checksumBuf ) throws IOException { {code} # Can we make {{class ParityGeneratorEntity}} and {{class ParityGenerator}} private? # IMHO, keep the var name {{cellBuffers[]}} instead of {{cellBufferses[]}}. Probably we can add comment saying that 'Uses double buffering. In the beginning, client writes data to the first buffer. When the first cell stripe is full, client continues writing to the second buffer. Now, the ParityGenerator will pick the first buffer and writes parity, then releases the first buffer so that when the second buffer is full, the client can continue write to the first buffer again.' # For {{ParityGenerator#run}} thread, its good to catch try/throwable or use {{java.lang.Thread.UncaughtExceptionHandler}}. Improves debuggability to know the Thread abruptly terminates due to an uncaught exception. > DFSStripedOutputStream.writeChunk should not wait for writing parity > --------------------------------------------------------------------- > > Key: HDFS-8287 > URL: https://issues.apache.org/jira/browse/HDFS-8287 > Project: Hadoop HDFS > Issue Type: Sub-task > Components: hdfs-client > Reporter: Tsz Wo Nicholas Sze > Assignee: Kai Sasaki > Attachments: HDFS-8287-HDFS-7285.00.patch, > HDFS-8287-HDFS-7285.01.patch > > > When a stripping cell is full, writeChunk computes and generates parity > packets. It sequentially calls waitAndQueuePacket so that user client cannot > continue to write data until it finishes. > We should allow user client to continue writing instead but not blocking it > when writing parity. -- This message was sent by Atlassian JIRA (v6.3.4#6332)