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

Appy commented on HBASE-14771:
------------------------------

Thanks [~a72877] for adding the test.
So we check that's it's not null, but am a bit confused here, what is the real 
value of address here since "AbstractRpcClient client = createRpcClient(conf);" 
creates client with localAddr as null.

Also, tests which do not change functionality of non-test code (FifoScheduler 
here) are better ones. The added test is only checking that Call.remoteAddress 
is set correctly, but if we check that RpcServer.getRemoteAddress works 
correctly, it'll cover the former case and also will be a more robust test of 
functionality.
So how about trying this..change ping method to return value of 
Rpc.getRemoteAddress and check it's equal to some expected address.

> RpcServer.getRemoteAddress always returns null.
> -----------------------------------------------
>
>                 Key: HBASE-14771
>                 URL: https://issues.apache.org/jira/browse/HBASE-14771
>             Project: HBase
>          Issue Type: Bug
>          Components: IPC/RPC
>    Affects Versions: 1.2.0
>            Reporter: Abhishek Kumar
>            Assignee: Abhishek Kumar
>            Priority: Minor
>         Attachments: HBASE-14771-V1.patch, HBASE-14771.patch
>
>
> RpcServer.getRemoteAddress always returns null, because Call object is 
> getting initialized with null.This seems to be happening because of using 
> RpcServer.getRemoteIp() in  Call object constructor before RpcServer thread 
> local 'CurCall' being set in CallRunner.run method:
> {noformat}
> // --- RpcServer.java ---
> protected void processRequest(byte[] buf) throws IOException, 
> InterruptedException {
>  .................................
> // Call object getting initialized here with address 
> // obtained from RpcServer.getRemoteIp()
> Call call = new Call(id, this.service, md, header, param, cellScanner, this, 
> responder,
>               totalRequestSize, traceInfo, RpcServer.getRemoteIp());
>   scheduler.dispatch(new CallRunner(RpcServer.this, call));
>  }
> // getRemoteIp method gets address from threadlocal 'CurCall' which 
> // gets set in CallRunner.run and calling it before this as in above case, 
> will return null
> // --- CallRunner.java ---
> public void run() {
>   .........................   
>   Pair<Message, CellScanner> resultPair = null;
>   RpcServer.CurCall.set(call);
>   ..............................
> }
> // Using 'this.addr' in place of getRemoteIp method in RpcServer.java seems 
> to be fixing this issue
> Call call = new Call(id, this.service, md, header, param, cellScanner, this, 
> responder,
>               totalRequestSize, traceInfo, this.addr);
> {noformat}



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

Reply via email to