[ 
https://issues.apache.org/jira/browse/HBASE-17212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15710701#comment-15710701
 ] 

Yu Li commented on HBASE-17212:
-------------------------------

Checking the post commit UT report, the change here has introduced a regression 
failure on TestHTableMultiplexer (thanks [~tedyu] for the reminder), and we 
could see below exception in the UT log:
{noformat}
2016-11-30 22:53:00,301 ERROR [htable-pool20-t1] 
client.AsyncRequestFutureImpl$SingleServerRequestRunnable(259): Internal 
AsyncProcess #24 error for null processing for 
asf902.gq1.ygridcore.net,44046,1480546369625
java.lang.IllegalArgumentException: Given tableName is null
        at 
org.apache.hadoop.hbase.client.RegionServerCallable.<init>(RegionServerCallable.java:82)
        at 
org.apache.hadoop.hbase.client.ClientServiceCallable.<init>(ClientServiceCallable.java:38)
        at 
org.apache.hadoop.hbase.client.CancellableRegionServerCallable.<init>(CancellableRegionServerCallable.java:44)
        at 
org.apache.hadoop.hbase.client.MultiServerCallable.<init>(MultiServerCallable.java:59)
        at 
org.apache.hadoop.hbase.client.AsyncRequestFutureImpl.createCallable(AsyncRequestFutureImpl.java:1298)
        at 
org.apache.hadoop.hbase.client.AsyncRequestFutureImpl.access$1000(AsyncRequestFutureImpl.java:70)
        at 
org.apache.hadoop.hbase.client.AsyncRequestFutureImpl$SingleServerRequestRunnable.run(AsyncRequestFutureImpl.java:223)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
{noformat}

After investigation, there's some case we allow cross-table Rpc call through 
{{AsyncProcess#submitMultiActions}}, just like it does in 
{{HTableMultiplexer}}, which will group the puts from different tables against 
the same RS and send in a batch. And we could also see special handling for 
such cross-table call in {{AsyncRequestFutureImpl#receiveGlobalFailure}}:
{code}
    if (tableName == null && ClientExceptionsUtil.isMetaClearingException(t)) {
      // tableName is null when we made a cross-table RPC call.
      asyncProcess.connection.clearCaches(server);
    }
{code}

So instead of forbidding table name to be null in RegionServerCallable 
constructor, we should add null checker on table name wherever it's used inside 
RegionServerCallable.

Will make an addendum soon.

> Should add null checker on table name in HTable and RegionServerCallable 
> constructor
> ------------------------------------------------------------------------------------
>
>                 Key: HBASE-17212
>                 URL: https://issues.apache.org/jira/browse/HBASE-17212
>             Project: HBase
>          Issue Type: Improvement
>    Affects Versions: 2.0.0
>            Reporter: Yu Li
>            Assignee: Yu Li
>             Fix For: 2.0.0, 1.4.0
>
>         Attachments: HBASE-17212.patch, HBASE-17212.v2.patch
>
>
> If we run below codes:
> {code}
> Table table = connection.getTable(null);
> {code}
> we will see below exception:
> {noformat}
> java.lang.NullPointerException
>       at org.apache.hadoop.hbase.client.HTable.finishSetup(HTable.java:221)
>       at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:182)
>       at 
> org.apache.hadoop.hbase.client.ConnectionImplementation.getTable(ConnectionImplementation.java:298)
>       at 
> org.apache.hadoop.hbase.client.ConnectionImplementation.getTable(ConnectionImplementation.java:293)
> {noformat}
> And in this JIRA we will add a null checker and throw a more graceful 
> {{IllegalArgumentException}}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to