core: Update gRPC to use span kind and raw full method. (#5328)

This commit is contained in:
Bogdan Drutu 2019-02-11 11:04:20 -08:00 committed by Kun Zhang
parent b03a793405
commit d47379947f
2 changed files with 22 additions and 38 deletions

View File

@ -37,6 +37,7 @@ import io.opencensus.trace.EndSpanOptions;
import io.opencensus.trace.MessageEvent;
import io.opencensus.trace.MessageEvent.Type;
import io.opencensus.trace.Span;
import io.opencensus.trace.Span.Kind;
import io.opencensus.trace.SpanContext;
import io.opencensus.trace.Status;
import io.opencensus.trace.Tracer;
@ -234,10 +235,9 @@ final class CensusTracingModule {
this.isSampledToLocalTracing = method.isSampledToLocalTracing();
this.span =
censusTracer
.spanBuilderWithExplicitParent(
generateTraceSpanName(false, method.getFullMethodName()),
parentSpan)
.spanBuilderWithExplicitParent(method.getFullMethodName(), parentSpan)
.setRecordEvents(true)
.setSpanKind(Kind.CLIENT)
.startSpan();
}
@ -303,10 +303,9 @@ final class CensusTracingModule {
checkNotNull(fullMethodName, "fullMethodName");
this.span =
censusTracer
.spanBuilderWithRemoteParent(
generateTraceSpanName(true, fullMethodName),
remoteSpan)
.spanBuilderWithRemoteParent(fullMethodName, remoteSpan)
.setRecordEvents(true)
.setSpanKind(Kind.SERVER)
.startSpan();
}
@ -402,19 +401,4 @@ final class CensusTracingModule {
};
}
}
/**
* Convert a full method name to a tracing span name.
*
* @param isServer {@code false} if the span is on the client-side, {@code true} if on the
* server-side
* @param fullMethodName the method name as returned by
* {@link MethodDescriptor#getFullMethodName}.
*/
@VisibleForTesting
static String generateTraceSpanName(boolean isServer, String fullMethodName) {
String prefix = isServer ? "Recv" : "Sent";
return prefix + "." + fullMethodName.replace('/', '.');
}
}

View File

@ -72,6 +72,7 @@ import io.opencensus.trace.EndSpanOptions;
import io.opencensus.trace.MessageEvent;
import io.opencensus.trace.MessageEvent.Type;
import io.opencensus.trace.Span;
import io.opencensus.trace.Span.Kind;
import io.opencensus.trace.SpanBuilder;
import io.opencensus.trace.SpanContext;
import io.opencensus.trace.Tracer;
@ -294,12 +295,14 @@ public class CensusModulesTest {
if (nonDefaultContext) {
verify(tracer).spanBuilderWithExplicitParent(
eq("Sent.package1.service2.method3"), same(fakeClientParentSpan));
eq("package1.service2/method3"), same(fakeClientParentSpan));
verify(spyClientSpanBuilder).setRecordEvents(eq(true));
verify(spyClientSpanBuilder).setSpanKind(eq(Kind.CLIENT));
} else {
verify(tracer).spanBuilderWithExplicitParent(
eq("Sent.package1.service2.method3"), isNull(Span.class));
eq("package1.service2/method3"), isNull(Span.class));
verify(spyClientSpanBuilder).setRecordEvents(eq(true));
verify(spyClientSpanBuilder).setSpanKind(eq(Kind.CLIENT));
}
verify(spyClientSpan, never()).end(any(EndSpanOptions.class));
@ -497,7 +500,7 @@ public class CensusModulesTest {
ClientStreamTracer clientStreamTracer =
callTracer.newClientStreamTracer(CallOptions.DEFAULT, headers);
verify(tracer).spanBuilderWithExplicitParent(
eq("Sent.package1.service2.method3"), isNull(Span.class));
eq("package1.service2/method3"), isNull(Span.class));
verify(spyClientSpan, never()).end(any(EndSpanOptions.class));
clientStreamTracer.outboundMessage(0);
@ -604,8 +607,9 @@ public class CensusModulesTest {
CensusTracingModule.ClientCallTracer callTracer =
censusTracing.newClientCallTracer(fakeClientParentSpan, method);
verify(tracer).spanBuilderWithExplicitParent(
eq("Sent.package1.service2.method3"), same(fakeClientParentSpan));
eq("package1.service2/method3"), same(fakeClientParentSpan));
verify(spyClientSpanBuilder).setRecordEvents(eq(true));
verify(spyClientSpanBuilder).setSpanKind(eq(Kind.CLIENT));
callTracer.callEnded(Status.DEADLINE_EXCEEDED.withDescription("3 seconds"));
verify(spyClientSpan).end(
@ -780,8 +784,9 @@ public class CensusModulesTest {
verify(mockTracingPropagationHandler).toByteArray(same(fakeClientSpanContext));
verifyNoMoreInteractions(mockTracingPropagationHandler);
verify(tracer).spanBuilderWithExplicitParent(
eq("Sent.package1.service2.method3"), same(fakeClientParentSpan));
eq("package1.service2/method3"), same(fakeClientParentSpan));
verify(spyClientSpanBuilder).setRecordEvents(eq(true));
verify(spyClientSpanBuilder).setSpanKind(eq(Kind.CLIENT));
verifyNoMoreInteractions(tracer);
assertTrue(headers.containsKey(censusTracing.tracingHeader));
@ -790,8 +795,9 @@ public class CensusModulesTest {
method.getFullMethodName(), headers);
verify(mockTracingPropagationHandler).fromByteArray(same(binarySpanContext));
verify(tracer).spanBuilderWithRemoteParent(
eq("Recv.package1.service2.method3"), same(spyClientSpan.getContext()));
eq("package1.service2/method3"), same(spyClientSpan.getContext()));
verify(spyServerSpanBuilder).setRecordEvents(eq(true));
verify(spyServerSpanBuilder).setSpanKind(eq(Kind.SERVER));
Context filteredContext = serverTracer.filterContext(Context.ROOT);
assertSame(spyServerSpan, ContextUtils.CONTEXT_SPAN_KEY.get(filteredContext));
@ -861,8 +867,10 @@ public class CensusModulesTest {
censusTracing.getServerTracerFactory().newServerStreamTracer(
method.getFullMethodName(), headers);
verify(tracer).spanBuilderWithRemoteParent(
eq("Recv.package1.service2.method3"), isNull(SpanContext.class));
eq("package1.service2/method3"), isNull(SpanContext.class));
verify(spyServerSpanBuilder).setRecordEvents(eq(true));
verify(spyServerSpanBuilder).setSpanKind(eq(Kind.SERVER));
}
@Test
@ -1013,8 +1021,9 @@ public class CensusModulesTest {
tracerFactory.newServerStreamTracer(method.getFullMethodName(), new Metadata());
verifyZeroInteractions(mockTracingPropagationHandler);
verify(tracer).spanBuilderWithRemoteParent(
eq("Recv.package1.service2.method3"), isNull(SpanContext.class));
eq("package1.service2/method3"), isNull(SpanContext.class));
verify(spyServerSpanBuilder).setRecordEvents(eq(true));
verify(spyServerSpanBuilder).setSpanKind(eq(Kind.SERVER));
Context filteredContext = serverStreamTracer.filterContext(Context.ROOT);
assertSame(spyServerSpan, ContextUtils.CONTEXT_SPAN_KEY.get(filteredContext));
@ -1110,15 +1119,6 @@ public class CensusModulesTest {
}
}
@Test
public void generateTraceSpanName() {
assertEquals(
"Sent.io.grpc.Foo", CensusTracingModule.generateTraceSpanName(false, "io.grpc/Foo"));
assertEquals(
"Recv.io.grpc.Bar", CensusTracingModule.generateTraceSpanName(true, "io.grpc/Bar"));
}
private static void assertNoServerContent(StatsTestUtils.MetricsRecord record) {
assertNull(record.getMetric(DeprecatedCensusConstants.RPC_SERVER_ERROR_COUNT));
assertNull(record.getMetric(DeprecatedCensusConstants.RPC_SERVER_REQUEST_COUNT));