Skip to content

Commit 7bd5679

Browse files
committed
HBASE-25535 Set span kind to CLIENT in AbstractRpcClient (#2907)
Signed-off-by: Guanghao Zhang <[email protected]>
1 parent 79026a7 commit 7bd5679

File tree

3 files changed

+26
-6
lines changed

3 files changed

+26
-6
lines changed

hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/AbstractRpcClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ private void onCallFinished(Call call, HBaseRpcController hrc, Address addr,
395395
private Call callMethod(final Descriptors.MethodDescriptor md, final HBaseRpcController hrc,
396396
final Message param, Message returnType, final User ticket, final Address addr,
397397
final RpcCallback<Message> callback) {
398-
Span span = TraceUtil.createSpan("RpcClient.callMethod")
398+
Span span = TraceUtil.createClientSpan("RpcClient.callMethod")
399399
.setAttribute(TraceUtil.RPC_SERVICE_KEY, md.getService().getName())
400400
.setAttribute(TraceUtil.RPC_METHOD_KEY, md.getName())
401401
.setAttribute(TraceUtil.REMOTE_HOST_KEY, addr.getHostName())

hbase-common/src/main/java/org/apache/hadoop/hbase/trace/TraceUtil.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,13 @@ public static Span createRemoteSpan(String name, Context ctx) {
105105
return getGlobalTracer().spanBuilder(name).setParent(ctx).setSpanKind(Kind.SERVER).startSpan();
106106
}
107107

108+
/**
109+
* Create a span with {@link Kind#CLIENT}.
110+
*/
111+
public static Span createClientSpan(String name) {
112+
return createSpan(name, Kind.CLIENT);
113+
}
114+
108115
/**
109116
* Trace an asynchronous operation for a table.
110117
*/

hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/AbstractTestIPC.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import static org.mockito.Mockito.verify;
3535
import static org.mockito.internal.verification.VerificationModeFactory.times;
3636

37+
import io.opentelemetry.api.trace.Span.Kind;
3738
import io.opentelemetry.api.trace.StatusCode;
3839
import io.opentelemetry.sdk.testing.junit4.OpenTelemetryRule;
3940
import io.opentelemetry.sdk.trace.data.SpanData;
@@ -455,14 +456,22 @@ private SpanData waitSpan(String name) {
455456
return traceRule.getSpans().stream().filter(s -> s.getName().equals(name)).findFirst().get();
456457
}
457458

458-
private void assertRpcAttribute(SpanData data, String methodName, InetSocketAddress addr) {
459+
private void assertRpcAttribute(SpanData data, String methodName, InetSocketAddress addr,
460+
Kind kind) {
459461
assertEquals(SERVICE.getDescriptorForType().getName(),
460462
data.getAttributes().get(TraceUtil.RPC_SERVICE_KEY));
461463
assertEquals(methodName, data.getAttributes().get(TraceUtil.RPC_METHOD_KEY));
462464
if (addr != null) {
463465
assertEquals(addr.getHostName(), data.getAttributes().get(TraceUtil.REMOTE_HOST_KEY));
464466
assertEquals(addr.getPort(), data.getAttributes().get(TraceUtil.REMOTE_PORT_KEY).intValue());
465467
}
468+
assertEquals(kind, data.getKind());
469+
}
470+
471+
private void assertRemoteSpan() {
472+
SpanData data = waitSpan("RpcServer.process");
473+
assertTrue(data.getParentSpanContext().isRemote());
474+
assertEquals(Kind.SERVER, data.getKind());
466475
}
467476

468477
@Test
@@ -474,8 +483,10 @@ public void testTracing() throws IOException, ServiceException {
474483
rpcServer.start();
475484
BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());
476485
stub.pause(null, PauseRequestProto.newBuilder().setMs(100).build());
477-
assertRpcAttribute(waitSpan("RpcClient.callMethod"), "pause", rpcServer.getListenerAddress());
478-
assertRpcAttribute(waitSpan("RpcServer.callMethod"), "pause", null);
486+
assertRpcAttribute(waitSpan("RpcClient.callMethod"), "pause", rpcServer.getListenerAddress(),
487+
Kind.CLIENT);
488+
assertRpcAttribute(waitSpan("RpcServer.callMethod"), "pause", null, Kind.INTERNAL);
489+
assertRemoteSpan();
479490
assertSameTraceId();
480491
for (SpanData data : traceRule.getSpans()) {
481492
assertThat(
@@ -487,8 +498,10 @@ public void testTracing() throws IOException, ServiceException {
487498
traceRule.clearSpans();
488499
assertThrows(ServiceException.class,
489500
() -> stub.error(null, EmptyRequestProto.getDefaultInstance()));
490-
assertRpcAttribute(waitSpan("RpcClient.callMethod"), "error", rpcServer.getListenerAddress());
491-
assertRpcAttribute(waitSpan("RpcServer.callMethod"), "error", null);
501+
assertRpcAttribute(waitSpan("RpcClient.callMethod"), "error", rpcServer.getListenerAddress(),
502+
Kind.CLIENT);
503+
assertRpcAttribute(waitSpan("RpcServer.callMethod"), "error", null, Kind.INTERNAL);
504+
assertRemoteSpan();
492505
assertSameTraceId();
493506
for (SpanData data : traceRule.getSpans()) {
494507
assertEquals(StatusCode.ERROR, data.getStatus().getStatusCode());

0 commit comments

Comments
 (0)