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

Duo Zhang commented on HBASE-17904:
-----------------------------------

Looks like a typo... Give me a second, let me try to recall if there is some 
reason I use queue.remove() instead queue.remove(call).

And the call IS under the lock protection, see the comment of the last 
notifyOnCancel method in HBaseRpcController, the callbacks will be executed 
directly, which means they will be called directly inside sendRequest, which is 
synchronized. It looks weird but I haven't found way to better implement it, 
other solutions are also ugly... So I think you just need to change 
callsToWrite.remove() to callsToWrite.remove(call). This is enough.

The test is great.

Thanks for digging in here.

> Get runs into NoSuchElementException when using Read Replica, with hbase. 
> ipc.client.specificThreadForWriting to be true and hbase.rpc.client.impl to 
> be org.apache.hadoop.hbase.ipc.RpcClientImpl
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HBASE-17904
>                 URL: https://issues.apache.org/jira/browse/HBASE-17904
>             Project: HBase
>          Issue Type: Bug
>          Components: Client
>    Affects Versions: 2.0.0
>            Reporter: huaxiang sun
>            Assignee: huaxiang sun
>         Attachments: HBASE-17904-master-v001.patch
>
>
> When testing read replica with 2.0.0 code, with the following config
> {code}
>   <property>
>     <name>hbase.ipc.client.specificThreadForWriting</name>
>     <value>true</value>
>   </property>
>   <property>
>     <name>hbase.rpc.client.impl</name>
>     <value>org.apache.hadoop.hbase.ipc.RpcClientImpl</value>
>   </property>
> {code}
> The hbase client runs into the following exception
> {code}
> Exception in thread "main" java.util.NoSuchElementException
>         at java.util.ArrayDeque.removeFirst(ArrayDeque.java:280)
>         at java.util.ArrayDeque.remove(ArrayDeque.java:447)
>         at 
> org.apache.hadoop.hbase.ipc.BlockingRpcConnection$CallSender.remove(BlockingRpcConnection.java:159)
>         at 
> org.apache.hadoop.hbase.ipc.BlockingRpcConnection$3.run(BlockingRpcConnection.java:760)
>         at 
> org.apache.hadoop.hbase.ipc.HBaseRpcControllerImpl.startCancel(HBaseRpcControllerImpl.java:229)
>         at 
> org.apache.hadoop.hbase.client.CancellableRegionServerCallable.cancel(CancellableRegionServerCallable.java:86)
>         at 
> org.apache.hadoop.hbase.client.ResultBoundedCompletionService$QueueingFuture.cancel(ResultBoundedCompletionService.java:106)
>         at 
> org.apache.hadoop.hbase.client.ResultBoundedCompletionService.cancelAll(ResultBoundedCompletionService.java:274)
>         at 
> org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.call(RpcRetryingCallerWithReadReplicas.java:224)
>         at org.apache.hadoop.hbase.client.HTable.get(HTable.java:445)
>         at org.apache.hadoop.hbase.client.HTable.get(HTable.java:409)
>         at HBaseThreadedGet.doWork(HBaseThreadedGet.java:45)
>         at HBaseThreadedGet.main(HBaseThreadedGet.java:19)
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to