[
https://issues.apache.org/jira/browse/HBASE-20686?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16542494#comment-16542494
]
Wei-Chiu Chuang commented on HBASE-20686:
-----------------------------------------
Thanks [~chia7712] for review comments. I removed unwrapping other exceptions
because they are not part of focus.
Attach v002 patch. I realized the check for RetryStartFileException was in the
code, but it was checked at the wrong place – RetryStartFileException is thrown
from NameNode when a create() RPC is called. So removed the check of the
exception that was previously there incorrectly.
In addition, added a test to verify the check & retry is successful. The test
code is very hacky because I had to replace a static final variable
(FileCreator) in FanOutOneBlockAsyncDFSOutputHelper for test. The test code
uses Java reflection to forcefully replace FileCreator. This approach was
inspired by this web page:
[https://caffinc.github.io/2015/12/static-final-java-junit-test/]
[~Apache9] how do you feel about this test approach? I tried a few approaches
but this one is the "cleanest" one.
> Asyncfs should retry upon RetryStartFileException
> -------------------------------------------------
>
> Key: HBASE-20686
> URL: https://issues.apache.org/jira/browse/HBASE-20686
> Project: HBase
> Issue Type: Bug
> Components: asyncclient
> Affects Versions: 2.0.0-beta-1
> Environment: HBase 2.0, Hadoop 3 with at-rest encryption
> Reporter: Wei-Chiu Chuang
> Assignee: Wei-Chiu Chuang
> Priority: Major
> Attachments: HBASE-20686.master.001.patch,
> HBASE-20686.master.002.patch
>
>
> In Hadoop-2.6 and above, HDFS client retries on RetryStartFileException when
> NameNode experience encryption zone related issue. The code exists in
> DFSOutputStream#newStreamForCreate(). (HDFS-6970)
> In HBase-2's asyncfs implementation,
> FanOutOneBlockAsyncDFSOutputHelper#createOutput() is somewhat an imitation of
> HDFS's DFSOutputStream#newStreamForCreate(). However it does not retry upon
> RetryStartFileException. So it is less resilient to such issues.
> Also, DFSOutputStream#newStreamForCreate() upwraps RemoteExceptions, but
> asyncfs does not. Therefore, hbase gets different exceptions than before.
> File this jira to get this corrected.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)