Colin Marc created HADOOP-12319:
-----------------------------------
Summary: S3AFastOutputStream has no ability to apply backpressure
Key: HADOOP-12319
URL: https://issues.apache.org/jira/browse/HADOOP-12319
Project: Hadoop Common
Issue Type: Improvement
Components: fs/s3
Affects Versions: 2.7.0
Reporter: Colin Marc
Priority: Critical
Currently, users of S3AFastOutputStream can control memory usage with a few
settings: {{fs.s3a.threads.{core/max}}}, which controls the number of active
uploads (specifically as arguments to a {{ThreadPoolExecutor}}), and
{{fs.s3a.max.total.tasks}}, which controls the size of the feeding queue for
the {{ThreadPoolExecutor}}.
However, a user can get an almost *guaranteed* crash if the throughput of the
writing job is higher than the total S3 throughput, because there is never any
backpressure or blocking on calls to {{write}}.
If {{fs.s3a.max.total.tasks}} is set high (the default is 1000), then {{write}}
calls will continue to add data to the queue, which can eventually OOM. But if
the user tries to set it lower, then writes will fail when the queue is full;
the {{ThreadPoolExecutor}} will reject the part with
{{java.util.concurrent.RejectedExecutionException}}.
Ideally, calls to {{write}} should *block, not fail* when the queue is full, so
as to apply backpressure on whatever the writing process is.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)