[
https://issues.apache.org/jira/browse/HDFS-10351?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Chris Nauroth updated HDFS-10351:
---------------------------------
Attachment: HDFS-10351-HDFS-7240.002.patch
[~anu] and [~jingzhao], thank you for the code reviews.
bq. Technically this can happen even if there is an overflow. But I would
rather have this check and fail the write than otherwise
{{OutputStream}} defines a very specific contract about throwing particular
kinds of runtime exceptions in response to invalid inputs. To ensure adherence
to this contract, I actually adapted the code from OpenJDK's base
{{OutputStream}} class implementation:
http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/df209f221cca/src/share/classes/java/io/OutputStream.java#l106
bq. Where are we using this call from ?
This is called from {{org.apache.hadoop.ozone.web.handlers.KeyHandler#putKey}},
which calls {{DistributedStorageHandler}} to get a {{ChunkOutputStream}}, and
then loops reading from the input HTTP request and writing the bytes.
{code}
stream.write(buffer, 0, len);
{code}
Before my patch, this would enter the base class bulk {{OutputStream#write}}
implementation, which is an inefficient loop over the single-byte {{write}}
method. After this patch, this call site instead enters the more efficient
implementation of the bulk {{write}}. This prevents a lot of method call
overhead and allows us to take advantage of the bulk {{ByteBuffer}} operations
for faster transfer.
bq. One minor comment: maybe the following code can be simplified as "int
writeLen = Math.min(CHUNK_SIZE - buffer.position(), len);".
That's a good idea. Here is patch v002 with that change.
> Ozone: Optimize key writes to chunks by providing a bulk write implementation
> in ChunkOutputStream.
> ---------------------------------------------------------------------------------------------------
>
> Key: HDFS-10351
> URL: https://issues.apache.org/jira/browse/HDFS-10351
> Project: Hadoop HDFS
> Issue Type: Sub-task
> Components: ozone
> Reporter: Chris Nauroth
> Assignee: Chris Nauroth
> Attachments: HDFS-10351-HDFS-7240.001.patch,
> HDFS-10351-HDFS-7240.002.patch
>
>
> HDFS-10268 introduced the {{ChunkOutputStream}} class as part of end-to-end
> integration of Ozone receiving key content and writing it to chunks in a
> container. That patch provided an implementation of the mandatory
> single-byte write method. We can improve performance by adding an
> implementation of the bulk write method too.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]