[
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)