Abhishek Kumar created HBASE-14771:
--------------------------------------

             Summary: 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


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