@Override public ClientStream<RequestT> internalCall( ResponseObserver<ResponseT> responseObserver, ClientStreamReadyObserver<RequestT> onReady, ApiCallContext context) { ApiTracer tracer = tracerFactory.newTracer(spanName); context = context.withTracer(tracer); AtomicBoolean wasCancelled = new AtomicBoolean(); ResponseObserver<ResponseT> tracedObserver = new TracedResponseObserver<>(tracer, responseObserver, wasCancelled); ClientStreamReadyObserver<RequestT> tracedReadyObserver = new TracedClientStreamReadyObserver<>(tracer, onReady, wasCancelled); try { ClientStream<RequestT> clientStream = innerCallable.internalCall(tracedObserver, tracedReadyObserver, context); return new TracingClientStream<>(tracer, clientStream, wasCancelled); } catch (RuntimeException e) { tracer.operationFailed(e); throw e; } }
@Override public void onReady(ClientStream<RequestT> stream) { innerObserver.onReady(new TracingClientStream<>(tracer, stream, wasCancelled)); } }