mirror of https://github.com/grpc/grpc-java.git
core: Update gRPC to use span kind and raw full method. (#5328)
This commit is contained in:
parent
b03a793405
commit
d47379947f
|
|
@ -37,6 +37,7 @@ import io.opencensus.trace.EndSpanOptions;
|
||||||
import io.opencensus.trace.MessageEvent;
|
import io.opencensus.trace.MessageEvent;
|
||||||
import io.opencensus.trace.MessageEvent.Type;
|
import io.opencensus.trace.MessageEvent.Type;
|
||||||
import io.opencensus.trace.Span;
|
import io.opencensus.trace.Span;
|
||||||
|
import io.opencensus.trace.Span.Kind;
|
||||||
import io.opencensus.trace.SpanContext;
|
import io.opencensus.trace.SpanContext;
|
||||||
import io.opencensus.trace.Status;
|
import io.opencensus.trace.Status;
|
||||||
import io.opencensus.trace.Tracer;
|
import io.opencensus.trace.Tracer;
|
||||||
|
|
@ -234,10 +235,9 @@ final class CensusTracingModule {
|
||||||
this.isSampledToLocalTracing = method.isSampledToLocalTracing();
|
this.isSampledToLocalTracing = method.isSampledToLocalTracing();
|
||||||
this.span =
|
this.span =
|
||||||
censusTracer
|
censusTracer
|
||||||
.spanBuilderWithExplicitParent(
|
.spanBuilderWithExplicitParent(method.getFullMethodName(), parentSpan)
|
||||||
generateTraceSpanName(false, method.getFullMethodName()),
|
|
||||||
parentSpan)
|
|
||||||
.setRecordEvents(true)
|
.setRecordEvents(true)
|
||||||
|
.setSpanKind(Kind.CLIENT)
|
||||||
.startSpan();
|
.startSpan();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -303,10 +303,9 @@ final class CensusTracingModule {
|
||||||
checkNotNull(fullMethodName, "fullMethodName");
|
checkNotNull(fullMethodName, "fullMethodName");
|
||||||
this.span =
|
this.span =
|
||||||
censusTracer
|
censusTracer
|
||||||
.spanBuilderWithRemoteParent(
|
.spanBuilderWithRemoteParent(fullMethodName, remoteSpan)
|
||||||
generateTraceSpanName(true, fullMethodName),
|
|
||||||
remoteSpan)
|
|
||||||
.setRecordEvents(true)
|
.setRecordEvents(true)
|
||||||
|
.setSpanKind(Kind.SERVER)
|
||||||
.startSpan();
|
.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('/', '.');
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,7 @@ import io.opencensus.trace.EndSpanOptions;
|
||||||
import io.opencensus.trace.MessageEvent;
|
import io.opencensus.trace.MessageEvent;
|
||||||
import io.opencensus.trace.MessageEvent.Type;
|
import io.opencensus.trace.MessageEvent.Type;
|
||||||
import io.opencensus.trace.Span;
|
import io.opencensus.trace.Span;
|
||||||
|
import io.opencensus.trace.Span.Kind;
|
||||||
import io.opencensus.trace.SpanBuilder;
|
import io.opencensus.trace.SpanBuilder;
|
||||||
import io.opencensus.trace.SpanContext;
|
import io.opencensus.trace.SpanContext;
|
||||||
import io.opencensus.trace.Tracer;
|
import io.opencensus.trace.Tracer;
|
||||||
|
|
@ -294,12 +295,14 @@ public class CensusModulesTest {
|
||||||
|
|
||||||
if (nonDefaultContext) {
|
if (nonDefaultContext) {
|
||||||
verify(tracer).spanBuilderWithExplicitParent(
|
verify(tracer).spanBuilderWithExplicitParent(
|
||||||
eq("Sent.package1.service2.method3"), same(fakeClientParentSpan));
|
eq("package1.service2/method3"), same(fakeClientParentSpan));
|
||||||
verify(spyClientSpanBuilder).setRecordEvents(eq(true));
|
verify(spyClientSpanBuilder).setRecordEvents(eq(true));
|
||||||
|
verify(spyClientSpanBuilder).setSpanKind(eq(Kind.CLIENT));
|
||||||
} else {
|
} else {
|
||||||
verify(tracer).spanBuilderWithExplicitParent(
|
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).setRecordEvents(eq(true));
|
||||||
|
verify(spyClientSpanBuilder).setSpanKind(eq(Kind.CLIENT));
|
||||||
}
|
}
|
||||||
verify(spyClientSpan, never()).end(any(EndSpanOptions.class));
|
verify(spyClientSpan, never()).end(any(EndSpanOptions.class));
|
||||||
|
|
||||||
|
|
@ -497,7 +500,7 @@ public class CensusModulesTest {
|
||||||
ClientStreamTracer clientStreamTracer =
|
ClientStreamTracer clientStreamTracer =
|
||||||
callTracer.newClientStreamTracer(CallOptions.DEFAULT, headers);
|
callTracer.newClientStreamTracer(CallOptions.DEFAULT, headers);
|
||||||
verify(tracer).spanBuilderWithExplicitParent(
|
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));
|
verify(spyClientSpan, never()).end(any(EndSpanOptions.class));
|
||||||
|
|
||||||
clientStreamTracer.outboundMessage(0);
|
clientStreamTracer.outboundMessage(0);
|
||||||
|
|
@ -604,8 +607,9 @@ public class CensusModulesTest {
|
||||||
CensusTracingModule.ClientCallTracer callTracer =
|
CensusTracingModule.ClientCallTracer callTracer =
|
||||||
censusTracing.newClientCallTracer(fakeClientParentSpan, method);
|
censusTracing.newClientCallTracer(fakeClientParentSpan, method);
|
||||||
verify(tracer).spanBuilderWithExplicitParent(
|
verify(tracer).spanBuilderWithExplicitParent(
|
||||||
eq("Sent.package1.service2.method3"), same(fakeClientParentSpan));
|
eq("package1.service2/method3"), same(fakeClientParentSpan));
|
||||||
verify(spyClientSpanBuilder).setRecordEvents(eq(true));
|
verify(spyClientSpanBuilder).setRecordEvents(eq(true));
|
||||||
|
verify(spyClientSpanBuilder).setSpanKind(eq(Kind.CLIENT));
|
||||||
|
|
||||||
callTracer.callEnded(Status.DEADLINE_EXCEEDED.withDescription("3 seconds"));
|
callTracer.callEnded(Status.DEADLINE_EXCEEDED.withDescription("3 seconds"));
|
||||||
verify(spyClientSpan).end(
|
verify(spyClientSpan).end(
|
||||||
|
|
@ -780,8 +784,9 @@ public class CensusModulesTest {
|
||||||
verify(mockTracingPropagationHandler).toByteArray(same(fakeClientSpanContext));
|
verify(mockTracingPropagationHandler).toByteArray(same(fakeClientSpanContext));
|
||||||
verifyNoMoreInteractions(mockTracingPropagationHandler);
|
verifyNoMoreInteractions(mockTracingPropagationHandler);
|
||||||
verify(tracer).spanBuilderWithExplicitParent(
|
verify(tracer).spanBuilderWithExplicitParent(
|
||||||
eq("Sent.package1.service2.method3"), same(fakeClientParentSpan));
|
eq("package1.service2/method3"), same(fakeClientParentSpan));
|
||||||
verify(spyClientSpanBuilder).setRecordEvents(eq(true));
|
verify(spyClientSpanBuilder).setRecordEvents(eq(true));
|
||||||
|
verify(spyClientSpanBuilder).setSpanKind(eq(Kind.CLIENT));
|
||||||
verifyNoMoreInteractions(tracer);
|
verifyNoMoreInteractions(tracer);
|
||||||
assertTrue(headers.containsKey(censusTracing.tracingHeader));
|
assertTrue(headers.containsKey(censusTracing.tracingHeader));
|
||||||
|
|
||||||
|
|
@ -790,8 +795,9 @@ public class CensusModulesTest {
|
||||||
method.getFullMethodName(), headers);
|
method.getFullMethodName(), headers);
|
||||||
verify(mockTracingPropagationHandler).fromByteArray(same(binarySpanContext));
|
verify(mockTracingPropagationHandler).fromByteArray(same(binarySpanContext));
|
||||||
verify(tracer).spanBuilderWithRemoteParent(
|
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).setRecordEvents(eq(true));
|
||||||
|
verify(spyServerSpanBuilder).setSpanKind(eq(Kind.SERVER));
|
||||||
|
|
||||||
Context filteredContext = serverTracer.filterContext(Context.ROOT);
|
Context filteredContext = serverTracer.filterContext(Context.ROOT);
|
||||||
assertSame(spyServerSpan, ContextUtils.CONTEXT_SPAN_KEY.get(filteredContext));
|
assertSame(spyServerSpan, ContextUtils.CONTEXT_SPAN_KEY.get(filteredContext));
|
||||||
|
|
@ -861,8 +867,10 @@ public class CensusModulesTest {
|
||||||
censusTracing.getServerTracerFactory().newServerStreamTracer(
|
censusTracing.getServerTracerFactory().newServerStreamTracer(
|
||||||
method.getFullMethodName(), headers);
|
method.getFullMethodName(), headers);
|
||||||
verify(tracer).spanBuilderWithRemoteParent(
|
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).setRecordEvents(eq(true));
|
||||||
|
verify(spyServerSpanBuilder).setSpanKind(eq(Kind.SERVER));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -1013,8 +1021,9 @@ public class CensusModulesTest {
|
||||||
tracerFactory.newServerStreamTracer(method.getFullMethodName(), new Metadata());
|
tracerFactory.newServerStreamTracer(method.getFullMethodName(), new Metadata());
|
||||||
verifyZeroInteractions(mockTracingPropagationHandler);
|
verifyZeroInteractions(mockTracingPropagationHandler);
|
||||||
verify(tracer).spanBuilderWithRemoteParent(
|
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).setRecordEvents(eq(true));
|
||||||
|
verify(spyServerSpanBuilder).setSpanKind(eq(Kind.SERVER));
|
||||||
|
|
||||||
Context filteredContext = serverStreamTracer.filterContext(Context.ROOT);
|
Context filteredContext = serverStreamTracer.filterContext(Context.ROOT);
|
||||||
assertSame(spyServerSpan, ContextUtils.CONTEXT_SPAN_KEY.get(filteredContext));
|
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) {
|
private static void assertNoServerContent(StatsTestUtils.MetricsRecord record) {
|
||||||
assertNull(record.getMetric(DeprecatedCensusConstants.RPC_SERVER_ERROR_COUNT));
|
assertNull(record.getMetric(DeprecatedCensusConstants.RPC_SERVER_ERROR_COUNT));
|
||||||
assertNull(record.getMetric(DeprecatedCensusConstants.RPC_SERVER_REQUEST_COUNT));
|
assertNull(record.getMetric(DeprecatedCensusConstants.RPC_SERVER_REQUEST_COUNT));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue