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

Derek Schenk commented on THRIFT-435:
-------------------------------------

Looking to find a resolution to this issue as a possible way to implement call 
auditing for the handlers.   I need access to the calling transport to get the 
remote address, but I'm not able to use the TServerEventHandler because when 
using TThreadedSelectorServer the underlying transport is a 
TMemoryInputTransport instead of the original socket.

I was planning to put together a possible Java patch for this, and was 
wondering if a ThreadLocal would be an acceptable way to handle this.

For example, in AbstractNonblockingServer, in the invoke()  method, just before 
calling processorFactory_.getProcessor(inTrans_).process(inProt_, outProt_);  a 
call could be made to a ThreadLocal (i.e. ThriftContext) which would set the 
values for (context_, inTrans_, outTrans_, inProt_, outProt_, trans_).  These 
values would be cleared in a finally block added to the current try/catch to 
ensure that they are always unset ( or even the entire thread local cleared).

This would provide a non-invasive way to get access to all of the underlying 
information, without requiring changes to any of the processors or IDL.   This 
would also provide a way to get information from the beginContext and 
processContext calls into the processor without needing the static maps and 
other methods that have been suggested.

Is this a viable option?

> Connection context information within TProcessor implementations
> ----------------------------------------------------------------
>
>                 Key: THRIFT-435
>                 URL: https://issues.apache.org/jira/browse/THRIFT-435
>             Project: Thrift
>          Issue Type: New Feature
>            Reporter: Todd Lipcon
>
> It would be nice if there were a way to get some TServer-level context 
> information from within a service implementation. Specifically, I'd like to 
> be able to get the remote IP/port for a couple of different use cases.
> I'm not sure exactly where the hook point for this is... will take some 
> investigation to find the right amount of abstraction.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to