Skip to content

Commit fc4410f

Browse files
authored
api, census: add new pendingStreamCreated on clientStreamTracer and new tracer annotation (#10014)
1 parent 8d98e5f commit fc4410f

File tree

6 files changed

+36
-0
lines changed

6 files changed

+36
-0
lines changed

api/src/main/java/io/grpc/ClientStreamTracer.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,18 @@ public abstract class ClientStreamTracer extends StreamTracer {
3939
public void streamCreated(@Grpc.TransportAttr Attributes transportAttrs, Metadata headers) {
4040
}
4141

42+
/**
43+
* Name resolution is completed and the connection starts getting established. This method is only
44+
* invoked on the streams that encounter such delay.
45+
*
46+
* </p>gRPC buffers the client call if the remote address and configurations, e.g. timeouts and
47+
* retry policy, are not ready. Asynchronously gRPC internally does the name resolution to get
48+
* this information. The streams that are processed immediately on ready transports by the time
49+
* the RPC comes do not go through the pending process, thus this callback will not be invoked.
50+
*/
51+
public void createPendingStream() {
52+
}
53+
4254
/**
4355
* Headers has been sent to the socket.
4456
*/

census/src/main/java/io/grpc/census/CensusTracingModule.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,7 @@ private final class ClientTracer extends ClientStreamTracer {
299299
final Metadata.Key<SpanContext> tracingHeader;
300300
final boolean isSampledToLocalTracing;
301301
volatile int seqNo;
302+
boolean isPendingStream;
302303

303304
ClientTracer(
304305
Span span, Span parentSpan, Metadata.Key<SpanContext> tracingHeader,
@@ -315,6 +316,14 @@ public void streamCreated(Attributes transportAtts, Metadata headers) {
315316
headers.discardAll(tracingHeader);
316317
headers.put(tracingHeader, span.getContext());
317318
}
319+
if (isPendingStream) {
320+
span.addAnnotation("Delayed LB pick complete");
321+
}
322+
}
323+
324+
@Override
325+
public void createPendingStream() {
326+
isPendingStream = true;
318327
}
319328

320329
@Override

census/src/test/java/io/grpc/census/CensusModulesTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -746,6 +746,7 @@ public void clientBasicTracingDefaultSpan() {
746746
censusTracing.newClientCallTracer(spyClientSpan, method);
747747
Metadata headers = new Metadata();
748748
ClientStreamTracer clientStreamTracer = callTracer.newClientStreamTracer(STREAM_INFO, headers);
749+
clientStreamTracer.createPendingStream();
749750
clientStreamTracer.streamCreated(Attributes.EMPTY, headers);
750751
verify(tracer).spanBuilderWithExplicitParent(
751752
eq("Attempt.package1.service2.method3"), eq(spyClientSpan));
@@ -767,6 +768,7 @@ public void clientBasicTracingDefaultSpan() {
767768
.putAttribute("previous-rpc-attempts", AttributeValue.longAttributeValue(0));
768769
inOrder.verify(spyAttemptSpan)
769770
.putAttribute("transparent-retry", AttributeValue.booleanAttributeValue(false));
771+
inOrder.verify(spyAttemptSpan).addAnnotation("Delayed LB pick complete");
770772
inOrder.verify(spyAttemptSpan, times(2)).addMessageEvent(messageEventCaptor.capture());
771773
List<MessageEvent> events = messageEventCaptor.getAllValues();
772774
assertEquals(

core/src/main/java/io/grpc/internal/DelayedClientTransport.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,9 @@ private PendingStream createPendingStream(
183183
if (getPendingStreamsCount() == 1) {
184184
syncContext.executeLater(reportTransportInUse);
185185
}
186+
for (ClientStreamTracer streamTracer : tracers) {
187+
streamTracer.createPendingStream();
188+
}
186189
return pendingStream;
187190
}
188191

core/src/main/java/io/grpc/internal/ForwardingClientStreamTracer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ public void streamCreated(Attributes transportAttrs, Metadata headers) {
3434
delegate().streamCreated(transportAttrs, headers);
3535
}
3636

37+
@Override
38+
public void createPendingStream() {
39+
delegate().createPendingStream();
40+
}
41+
3742
@Override
3843
public void outboundHeaders() {
3944
delegate().outboundHeaders();

core/src/main/java/io/grpc/util/ForwardingClientStreamTracer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ public void streamCreated(Attributes transportAttrs, Metadata headers) {
3333
delegate().streamCreated(transportAttrs, headers);
3434
}
3535

36+
@Override
37+
public void createPendingStream() {
38+
delegate().createPendingStream();
39+
}
40+
3641
@Override
3742
public void outboundHeaders() {
3843
delegate().outboundHeaders();

0 commit comments

Comments
 (0)