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

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

getRemoteAddress() always returns null because CurCall is thread local variable 
and is only set in threads responsible for executing CallRunners (executor in 
FifoRpcScheduler and those being created in RpcExecutor.startHandlers).
RpcServer.getRemoteIp also uses CurCall, so it'll always return null here. 
Using {code}this.addr{code} makes sense.
It'll definitely fix 2 of the 3 uses of getRemoteAddress(). I am not sure about 
the use in AccessController since I don't know it's internals.
[~a72877] what do you mean by "... fixing this issue"? Where are you seeing the 
null values which change to legitimate address after this change?

> 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.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