I have a custom implementation of request marshaller (overriding 
io.grpc.MethodDescriptor.Marshaller) 
which I want to use, but I would need context information related to the 
microservice call (specifically microservice method name being invoked). I 
tried populating it in ServerInterceptor's interceptCall. My interceptor 
code looks like this:
​@Override
public <ReqT, RespT> Listener<ReqT> interceptCall(ServerCall<ReqT, RespT> 
serverCall, Metadata metadata, ServerCallHandler<ReqT, RespT> 
serverCallHandler) {
  
Context context = Context.current().withValue(MS_METHOD_NAME, 
call.getMethodDescriptor().getFullMethodName());
   
return Contexts.interceptCall(context, serverCall, metadata, serverCallHandler);
}

But the context populated does not persist when unmarshalling of the 
request stream takes place.

This is because 
io.grpc.internal.ServerImpl.ServerTransportListenerImpl#streamCreatedInternal 
creates new 
io.grpc.internal.ServerImpl.JumpToApplicationThreadServerStreamListener and 
populates context using 
io.grpc.internal.ServerImpl.ServerTransportListenerImpl#createContext which 
just adds deadline and serverImpl instance fields over rootContext. So, the 
information I populated was not available during unmarshalling. Also, 
populating it in onMessage would not be useful too, since 
io.grpc.internal.ServerCallImpl.ServerStreamListenerImpl#messagesAvailableInternal
 
uses 
​listener.onMessage(call.method.parseRequest(message));

so parseRequest executes before onMessage is triggered.

Is there some way to pass context information to marshaller, or maybe use 
method name there. I am constructing methodDescriptor using 
io.grpc.MethodDescriptor.Builder

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to grpc-io+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/3d7873fd-025b-4b09-8538-e55563ef053an%40googlegroups.com.

Reply via email to