mirror of https://github.com/grpc/grpc-java.git
gcp-observability: add grpc-census as a dependency and update opencensus version (#9140)
This commit is contained in:
parent
de7db565a3
commit
15ecc0714e
|
|
@ -60,7 +60,7 @@ subprojects {
|
||||||
googleauthVersion = '1.4.0'
|
googleauthVersion = '1.4.0'
|
||||||
protobufVersion = '3.19.2'
|
protobufVersion = '3.19.2'
|
||||||
protocVersion = protobufVersion
|
protocVersion = protobufVersion
|
||||||
opencensusVersion = '0.28.0'
|
opencensusVersion = '0.31.0'
|
||||||
autovalueVersion = '1.9'
|
autovalueVersion = '1.9'
|
||||||
|
|
||||||
configureProtoCompilation = {
|
configureProtoCompilation = {
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,6 @@ 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;
|
||||||
import io.opencensus.trace.propagation.BinaryFormat;
|
import io.opencensus.trace.propagation.BinaryFormat;
|
||||||
import io.opencensus.trace.unsafe.ContextUtils;
|
|
||||||
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
|
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
@ -366,12 +365,18 @@ final class CensusTracingModule {
|
||||||
span.end(createEndSpanOptions(status, isSampledToLocalTracing));
|
span.end(createEndSpanOptions(status, isSampledToLocalTracing));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
TODO(dnvindhya): Replace deprecated ContextUtils usage with ContextHandleUtils to interact
|
||||||
|
with io.grpc.Context as described in {@link io.opencensus.trace.unsafeContextUtils} to remove
|
||||||
|
SuppressWarnings annotation.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@Override
|
@Override
|
||||||
public Context filterContext(Context context) {
|
public Context filterContext(Context context) {
|
||||||
// Access directly the unsafe trace API to create the new Context. This is a safe usage
|
// Access directly the unsafe trace API to create the new Context. This is a safe usage
|
||||||
// because gRPC always creates a new Context for each of the server calls and does not
|
// because gRPC always creates a new Context for each of the server calls and does not
|
||||||
// inherit from the parent Context.
|
// inherit from the parent Context.
|
||||||
return ContextUtils.withValue(context, span);
|
return io.opencensus.trace.unsafe.ContextUtils.withValue(context, span);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -404,6 +409,8 @@ final class CensusTracingModule {
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
final class TracingClientInterceptor implements ClientInterceptor {
|
final class TracingClientInterceptor implements ClientInterceptor {
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@Override
|
@Override
|
||||||
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
|
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
|
||||||
MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next) {
|
MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next) {
|
||||||
|
|
@ -412,7 +419,8 @@ final class CensusTracingModule {
|
||||||
// as Tracer.getCurrentSpan() except when no value available when the return value is null
|
// as Tracer.getCurrentSpan() except when no value available when the return value is null
|
||||||
// for the direct access and BlankSpan when Tracer API is used.
|
// for the direct access and BlankSpan when Tracer API is used.
|
||||||
final CallAttemptsTracerFactory tracerFactory =
|
final CallAttemptsTracerFactory tracerFactory =
|
||||||
newClientCallTracer(ContextUtils.getValue(Context.current()), method);
|
newClientCallTracer(
|
||||||
|
io.opencensus.trace.unsafe.ContextUtils.getValue(Context.current()), method);
|
||||||
ClientCall<ReqT, RespT> call =
|
ClientCall<ReqT, RespT> call =
|
||||||
next.newCall(
|
next.newCall(
|
||||||
method,
|
method,
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,6 @@ import io.opencensus.trace.SpanContext;
|
||||||
import io.opencensus.trace.Tracer;
|
import io.opencensus.trace.Tracer;
|
||||||
import io.opencensus.trace.propagation.BinaryFormat;
|
import io.opencensus.trace.propagation.BinaryFormat;
|
||||||
import io.opencensus.trace.propagation.SpanContextParseException;
|
import io.opencensus.trace.propagation.SpanContextParseException;
|
||||||
import io.opencensus.trace.unsafe.ContextUtils;
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -247,6 +246,7 @@ public class CensusModulesTest {
|
||||||
// Test that Census ClientInterceptors uses the TagContext and Span out of the current Context
|
// Test that Census ClientInterceptors uses the TagContext and Span out of the current Context
|
||||||
// to create the ClientCallTracer, and that it intercepts ClientCall.Listener.onClose() to call
|
// to create the ClientCallTracer, and that it intercepts ClientCall.Listener.onClose() to call
|
||||||
// ClientCallTracer.callEnded().
|
// ClientCallTracer.callEnded().
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
private void testClientInterceptors(boolean nonDefaultContext) {
|
private void testClientInterceptors(boolean nonDefaultContext) {
|
||||||
grpcServerRule.getServiceRegistry().addService(
|
grpcServerRule.getServiceRegistry().addService(
|
||||||
ServerServiceDefinition.builder("package1.service2").addMethod(
|
ServerServiceDefinition.builder("package1.service2").addMethod(
|
||||||
|
|
@ -284,7 +284,7 @@ public class CensusModulesTest {
|
||||||
.emptyBuilder()
|
.emptyBuilder()
|
||||||
.putLocal(StatsTestUtils.EXTRA_TAG, TagValue.create("extra value"))
|
.putLocal(StatsTestUtils.EXTRA_TAG, TagValue.create("extra value"))
|
||||||
.build());
|
.build());
|
||||||
ctx = ContextUtils.withValue(ctx, fakeClientParentSpan);
|
ctx = io.opencensus.trace.unsafe.ContextUtils.withValue(ctx, fakeClientParentSpan);
|
||||||
Context origCtx = ctx.attach();
|
Context origCtx = ctx.attach();
|
||||||
try {
|
try {
|
||||||
call = interceptedChannel.newCall(method, CALL_OPTIONS);
|
call = interceptedChannel.newCall(method, CALL_OPTIONS);
|
||||||
|
|
@ -295,7 +295,8 @@ public class CensusModulesTest {
|
||||||
assertEquals(
|
assertEquals(
|
||||||
io.opencensus.tags.unsafe.ContextUtils.getValue(Context.ROOT),
|
io.opencensus.tags.unsafe.ContextUtils.getValue(Context.ROOT),
|
||||||
io.opencensus.tags.unsafe.ContextUtils.getValue(Context.current()));
|
io.opencensus.tags.unsafe.ContextUtils.getValue(Context.current()));
|
||||||
assertEquals(ContextUtils.getValue(Context.current()), BlankSpan.INSTANCE);
|
assertEquals(io.opencensus.trace.unsafe.ContextUtils.getValue(Context.current()),
|
||||||
|
BlankSpan.INSTANCE);
|
||||||
call = interceptedChannel.newCall(method, CALL_OPTIONS);
|
call = interceptedChannel.newCall(method, CALL_OPTIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1035,6 +1036,7 @@ public class CensusModulesTest {
|
||||||
assertSame(tagger.empty(), headers.get(censusStats.statsHeader));
|
assertSame(tagger.empty(), headers.get(censusStats.statsHeader));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@Test
|
@Test
|
||||||
public void traceHeadersPropagateSpanContext() throws Exception {
|
public void traceHeadersPropagateSpanContext() throws Exception {
|
||||||
CallAttemptsTracerFactory callTracer =
|
CallAttemptsTracerFactory callTracer =
|
||||||
|
|
@ -1062,7 +1064,7 @@ public class CensusModulesTest {
|
||||||
verify(spyServerSpanBuilder).setRecordEvents(eq(true));
|
verify(spyServerSpanBuilder).setRecordEvents(eq(true));
|
||||||
|
|
||||||
Context filteredContext = serverTracer.filterContext(Context.ROOT);
|
Context filteredContext = serverTracer.filterContext(Context.ROOT);
|
||||||
assertSame(spyServerSpan, ContextUtils.getValue(filteredContext));
|
assertSame(spyServerSpan, io.opencensus.trace.unsafe.ContextUtils.getValue(filteredContext));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -1279,6 +1281,7 @@ public class CensusModulesTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@Test
|
@Test
|
||||||
public void serverBasicTracingNoHeaders() {
|
public void serverBasicTracingNoHeaders() {
|
||||||
ServerStreamTracer.Factory tracerFactory = censusTracing.getServerTracerFactory();
|
ServerStreamTracer.Factory tracerFactory = censusTracing.getServerTracerFactory();
|
||||||
|
|
@ -1290,7 +1293,7 @@ public class CensusModulesTest {
|
||||||
verify(spyServerSpanBuilder).setRecordEvents(eq(true));
|
verify(spyServerSpanBuilder).setRecordEvents(eq(true));
|
||||||
|
|
||||||
Context filteredContext = serverStreamTracer.filterContext(Context.ROOT);
|
Context filteredContext = serverStreamTracer.filterContext(Context.ROOT);
|
||||||
assertSame(spyServerSpan, ContextUtils.getValue(filteredContext));
|
assertSame(spyServerSpan, io.opencensus.trace.unsafe.ContextUtils.getValue(filteredContext));
|
||||||
|
|
||||||
serverStreamTracer.serverCallStarted(
|
serverStreamTracer.serverCallStarted(
|
||||||
new CallInfo<>(method, Attributes.EMPTY, null));
|
new CallInfo<>(method, Attributes.EMPTY, null));
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ description = "gRPC: Google Cloud Platform Observability"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
def cloudLoggingVersion = '3.6.1'
|
def cloudLoggingVersion = '3.6.1'
|
||||||
|
def opencensusExporterVersion = '0.31.0'
|
||||||
|
|
||||||
annotationProcessor libraries.autovalue
|
annotationProcessor libraries.autovalue
|
||||||
api project(':grpc-api')
|
api project(':grpc-api')
|
||||||
|
|
@ -28,9 +29,11 @@ dependencies {
|
||||||
implementation project(':grpc-protobuf'),
|
implementation project(':grpc-protobuf'),
|
||||||
project(':grpc-stub'),
|
project(':grpc-stub'),
|
||||||
project(':grpc-alts'),
|
project(':grpc-alts'),
|
||||||
|
project(':grpc-census'),
|
||||||
libraries.google_auth_oauth2_http,
|
libraries.google_auth_oauth2_http,
|
||||||
libraries.autovalue_annotation,
|
libraries.autovalue_annotation,
|
||||||
libraries.perfmark,
|
libraries.perfmark,
|
||||||
|
libraries.opencensus_contrib_grpc_metrics,
|
||||||
('com.google.guava:guava:31.0.1-jre'),
|
('com.google.guava:guava:31.0.1-jre'),
|
||||||
('com.google.errorprone:error_prone_annotations:2.11.0'),
|
('com.google.errorprone:error_prone_annotations:2.11.0'),
|
||||||
('com.google.auth:google-auth-library-credentials:1.4.0'),
|
('com.google.auth:google-auth-library-credentials:1.4.0'),
|
||||||
|
|
@ -39,7 +42,11 @@ dependencies {
|
||||||
('com.google.http-client:google-http-client:1.41.0'),
|
('com.google.http-client:google-http-client:1.41.0'),
|
||||||
('com.google.http-client:google-http-client-gson:1.41.0'),
|
('com.google.http-client:google-http-client-gson:1.41.0'),
|
||||||
('com.google.api.grpc:proto-google-common-protos:2.7.1'),
|
('com.google.api.grpc:proto-google-common-protos:2.7.1'),
|
||||||
("com.google.cloud:google-cloud-logging:${cloudLoggingVersion}")
|
("com.google.cloud:google-cloud-logging:${cloudLoggingVersion}"),
|
||||||
|
("io.opencensus:opencensus-exporter-stats-stackdriver:${opencensusExporterVersion}"),
|
||||||
|
("io.opencensus:opencensus-exporter-trace-stackdriver:${opencensusExporterVersion}")
|
||||||
|
|
||||||
|
runtimeOnly libraries.opencensus_impl
|
||||||
|
|
||||||
testImplementation project(':grpc-testing'),
|
testImplementation project(':grpc-testing'),
|
||||||
project(':grpc-testing-proto'),
|
project(':grpc-testing-proto'),
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,6 @@ import io.opencensus.tags.TagValue;
|
||||||
import io.opencensus.trace.Span;
|
import io.opencensus.trace.Span;
|
||||||
import io.opencensus.trace.SpanContext;
|
import io.opencensus.trace.SpanContext;
|
||||||
import io.opencensus.trace.Tracing;
|
import io.opencensus.trace.Tracing;
|
||||||
import io.opencensus.trace.unsafe.ContextUtils;
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
@ -1547,6 +1546,7 @@ public abstract class AbstractInteropTest {
|
||||||
Collections.singleton(streamingRequest), Collections.singleton(goldenStreamingResponse));
|
Collections.singleton(streamingRequest), Collections.singleton(goldenStreamingResponse));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@Test(timeout = 10000)
|
@Test(timeout = 10000)
|
||||||
public void censusContextsPropagated() {
|
public void censusContextsPropagated() {
|
||||||
Assume.assumeTrue("Skip the test because server is not in the same process.", server != null);
|
Assume.assumeTrue("Skip the test because server is not in the same process.", server != null);
|
||||||
|
|
@ -1561,7 +1561,7 @@ public abstract class AbstractInteropTest {
|
||||||
.emptyBuilder()
|
.emptyBuilder()
|
||||||
.putLocal(StatsTestUtils.EXTRA_TAG, TagValue.create("extra value"))
|
.putLocal(StatsTestUtils.EXTRA_TAG, TagValue.create("extra value"))
|
||||||
.build());
|
.build());
|
||||||
ctx = ContextUtils.withValue(ctx, clientParentSpan);
|
ctx = io.opencensus.trace.unsafe.ContextUtils.withValue(ctx, clientParentSpan);
|
||||||
Context origCtx = ctx.attach();
|
Context origCtx = ctx.attach();
|
||||||
try {
|
try {
|
||||||
blockingStub.unaryCall(SimpleRequest.getDefaultInstance());
|
blockingStub.unaryCall(SimpleRequest.getDefaultInstance());
|
||||||
|
|
@ -1581,7 +1581,7 @@ public abstract class AbstractInteropTest {
|
||||||
}
|
}
|
||||||
assertTrue("tag not found", tagFound);
|
assertTrue("tag not found", tagFound);
|
||||||
|
|
||||||
Span span = ContextUtils.getValue(serverCtx);
|
Span span = io.opencensus.trace.unsafe.ContextUtils.getValue(serverCtx);
|
||||||
assertNotNull(span);
|
assertNotNull(span);
|
||||||
SpanContext spanContext = span.getContext();
|
SpanContext spanContext = span.getContext();
|
||||||
assertEquals(clientParentSpan.getContext().getTraceId(), spanContext.getTraceId());
|
assertEquals(clientParentSpan.getContext().getTraceId(), spanContext.getTraceId());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue