From ceea43115ba5126d05ecc7b7d3780933333f3fd2 Mon Sep 17 00:00:00 2001 From: yzhangal Date: Mon, 8 Feb 2021 08:03:43 -0800 Subject: [PATCH] HADOOP-16767 Handle non-IO exceptions in reopen() (#2685) Contributed by Sergei Poganshev. Catches Exception instead of IOException in closeStream() and so handle exceptions such as SdkClientException by aborting the wrapped stream. This will increase resilience to failures, as any which occuring during stream closure will be caught. Furthermore, because the underlying HTTP connection is aborted, rather than closed, it will not be recycled to cause problems on subsequent operations. --- .../src/main/java/org/apache/hadoop/fs/s3a/S3AInputStream.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/S3AInputStream.java b/hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/S3AInputStream.java index 62c6635f27e..c93e9dbd8a4 100644 --- a/hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/S3AInputStream.java +++ b/hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/S3AInputStream.java @@ -476,7 +476,7 @@ private void closeStream(String reason, long length, boolean forceAbort) { // and an abort is triggered, the initial attempt's statistics // aren't collected. streamStatistics.streamClose(false, drained); - } catch (IOException e) { + } catch (Exception e) { // exception escalates to an abort LOG.debug("When closing {} stream for {}", uri, reason, e); shouldAbort = true;