Hello again, community

As a follow-up to my previous question regarding the issue with shaded 
exception class names in the HBase client, I wanted to let you know that I’ve 
created a patch that addresses this problem.
The patch modifies IPCUtil.createRemoteException and 
IPCUtil.isFatalConnectionException to support mapping of exception class names 
to a shaded package name.

I’ve submitted a PR here: https://github.com/apache/hbase/pull/6917

If anyone has time to take a look, I’d really appreciate any feedback or 
suggestions.
Thanks again for your guidance and support.

Kind regards,
Minwoo Kang


On 2024/09/09 14:40:50 "张铎(Duo Zhang)" wrote:
> I searched on master branch, ExceptionResponse.getExceptionClassName
> and ExceptionResponse.getStackTrace, they are only called in
> IPCUtil.createRemoteException and IPCUtil.isFatalConnectionException,
> so you just need to patch these two methods. I guess for other
> branches are almost the same.
> 
> Basically there are two possible ways, one is to introduce a
> configuration, to config what package name you want to map
> org.apache.hadoop.hbase in the package to. Another is to check the
> package name for IPCUtil to automatically map the package name.
> 
> Thanks.
> 
> Bryan Beaudreault <bb...@apache.org> 于2024年9月9日周一 20:35写道:
> 
> >
> > We used to do this years ago at my company. You have to find the various
> > ProtobufUtil and RemoteException related classes, wherever the remote
> > classname string is parsed from a protobuf into a Class. You need to push
> > some custom code to rewrite the strings there. I think there were two or
> > three spots where we shimmed in that code. I don't have any more specifics
> > than that, because it was a while ago.
> >
> > I don't think there are currently plans to add support for shaded class
> > names, but it's an open source project so you're more than welcome to
> > create a JIRA and even contribute to it. I don't think it's too hard of a
> > task.
> >
> > On Mon, Sep 9, 2024 at 8:15 AM Minwoo Kang <it...@gmail.com>
> > wrote:
> >
> > > Hello, community
> > >
> > > I am creating an in-house library using the HBase client library and
> > > distributing it so that other users can use it.
> > > To prevent conflicts with the user library, we shaded the HBase package.
> > > (For example, org.apahce.hadoop.hbase... ->
> > > good.company.org.apahce.hadoop.hbase...)
> > >
> > > However, there is one problem here.
> > > When an error occurs on the HBase server, it passes the class name to the
> > > client.
> > > The client, which receives the error class name from the server, attempts
> > > to create an error object with that class name.
> > > However, because the error class is shaded, the client cannot find the
> > > appropriate error class received from the server.
> > >
> > > There is a problem where the client does not find the appropriate error
> > > class and mistakenly determines it to be a DoNotRetryIOException, even
> > > though it should be retried.
> > >
> > > To solve this problem, I am considering forcing the shading package prefix
> > > when creating an object from the class received from the server in the
> > > HBase client.
> > > (For example, if the error class name received from the server is
> > > org.apache.hadoop.hbase.regionserver.RegionServerStoppedException, I am
> > > considering making it also find
> > >
> > > good.company.org.apache.hadoop.hbase.regionserver.RegionServerStoppedException.)
> > >
> > > Is there a nicer way to do this than the method mentioned above?
> > > I wonder if there are any plans to add support features for shade users in
> > > HBase.
> > > (For example, a feature that allows the client to find the shaded class
> > > name when creating an object from the class name received from the 
> > > server.)
> > >
> > > Kind Regards
> > >
> 

Reply via email to