Skip to content

Commit 4989331

Browse files
authored
Fix HBase stable DB semconv attributes (#18990)
1 parent 44b62ae commit 4989331

5 files changed

Lines changed: 62 additions & 13 deletions

File tree

instrumentation/hbase-client-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hbase/client/v2_0/HbaseAttributesGetter.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DbSystemNameIncubatingValues;
1010
import java.net.InetSocketAddress;
1111
import javax.annotation.Nullable;
12+
import org.apache.hadoop.hbase.TableName;
1213

1314
final class HbaseAttributesGetter implements DbClientAttributesGetter<HbaseRequest, Void> {
1415

@@ -21,12 +22,29 @@ public String getDbSystemName(HbaseRequest hbaseRequest) {
2122
@Nullable
2223
@Override
2324
public String getDbNamespace(HbaseRequest hbaseRequest) {
24-
return hbaseRequest.getTable();
25+
TableName tableName = hbaseRequest.getTableName();
26+
return tableName == null ? null : tableName.getNamespaceAsString();
2527
}
2628

2729
@Nullable
2830
@Override
29-
// Old database semconv still use db.user, so we must implement the deprecated hook.
31+
public String getDbCollectionName(HbaseRequest hbaseRequest) {
32+
TableName tableName = hbaseRequest.getTableName();
33+
return tableName == null ? null : tableName.getNameAsString();
34+
}
35+
36+
@Nullable
37+
@Override
38+
// Old database semconv still uses db.name, so we must implement the deprecated hook.
39+
@SuppressWarnings("deprecation")
40+
public String getDbName(HbaseRequest hbaseRequest) {
41+
TableName tableName = hbaseRequest.getTableName();
42+
return tableName == null ? null : tableName.getNameAsString();
43+
}
44+
45+
@Nullable
46+
@Override
47+
// Old database semconv still uses db.user, so we must implement the deprecated hook.
3048
@SuppressWarnings("deprecation")
3149
public String getUser(HbaseRequest hbaseRequest) {
3250
return hbaseRequest.getUser();

instrumentation/hbase-client-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hbase/client/v2_0/HbaseRequest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,25 @@
77

88
import com.google.auto.value.AutoValue;
99
import javax.annotation.Nullable;
10+
import org.apache.hadoop.hbase.TableName;
1011

1112
@AutoValue
1213
public abstract class HbaseRequest {
1314

1415
public static HbaseRequest create(
1516
@Nullable String operation,
16-
@Nullable String table,
17+
@Nullable TableName tableName,
1718
@Nullable String user,
1819
@Nullable String host,
1920
@Nullable Integer port) {
20-
return new AutoValue_HbaseRequest(operation, table, user, host, port);
21+
return new AutoValue_HbaseRequest(operation, tableName, user, host, port);
2122
}
2223

2324
@Nullable
2425
public abstract String getOperation();
2526

2627
@Nullable
27-
public abstract String getTable();
28+
public abstract TableName getTableName();
2829

2930
@Nullable
3031
public abstract String getUser();

instrumentation/hbase-client-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hbase/client/v2_0/HbaseSingletons.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,22 @@
1212
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
1313
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
1414
import javax.annotation.Nullable;
15+
import org.apache.hadoop.hbase.TableName;
1516

1617
public class HbaseSingletons {
1718

1819
private static final String INSTRUMENTATION_NAME = "io.opentelemetry.hbase-client-2.0";
19-
private static final ThreadLocal<String> tableNameThreadLocal = new ThreadLocal<>();
20+
private static final ThreadLocal<TableName> tableNameThreadLocal = new ThreadLocal<>();
2021
private static final ThreadLocal<RequestAndContext> requestAndContextThreadLocal =
2122
new ThreadLocal<>();
2223
private static final Instrumenter<HbaseRequest, Void> instrumenter = createInstrumenter();
2324

24-
public static void setTableName(String tableName) {
25+
public static void setTableName(TableName tableName) {
2526
tableNameThreadLocal.set(tableName);
2627
}
2728

2829
@Nullable
29-
public static String getTableName() {
30+
public static TableName getTableName() {
3031
return tableNameThreadLocal.get();
3132
}
3233

instrumentation/hbase-client-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hbase/client/v2_0/RegionServerCallableInstrumentation.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ public void transform(TypeTransformer transformer) {
3434
@SuppressWarnings("unused")
3535
public static class RpcCallAdvice {
3636
@Advice.OnMethodEnter(suppress = Throwable.class)
37-
public static void onEnter(@Advice.FieldValue(value = "tableName") TableName table) {
38-
if (table != null) {
39-
setTableName(table.getNameAsString());
37+
public static void onEnter(@Advice.FieldValue(value = "tableName") TableName tableName) {
38+
if (tableName != null) {
39+
setTableName(tableName);
4040
}
4141
}
4242

instrumentation/hbase-client-2.0/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/hbase/testing/AbstractHbaseTest.java

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStableDbSystemName;
1212
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
1313
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies;
14+
import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME;
1415
import static io.opentelemetry.semconv.DbAttributes.DB_SYSTEM_NAME;
1516
import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE;
1617
import static io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_MESSAGE;
@@ -273,7 +274,16 @@ void testGetTimeout() throws IOException {
273274
maybeStable(DB_SYSTEM),
274275
maybeStableDbSystemName(DB_SYSTEM_VALUE)),
275276
equalTo(maybeStable(DB_OPERATION), GET),
276-
equalTo(maybeStable(DB_NAME), TABLE_NAME.getNameAsString()),
277+
equalTo(
278+
maybeStable(DB_NAME),
279+
emitStableDatabaseSemconv()
280+
? TABLE_NAME.getNamespaceAsString()
281+
: TABLE_NAME.getNameAsString()),
282+
equalTo(
283+
DB_COLLECTION_NAME,
284+
emitStableDatabaseSemconv()
285+
? TABLE_NAME.getNameAsString()
286+
: null),
277287
equalTo(SERVER_ADDRESS, hostname),
278288
equalTo(SERVER_PORT, REGION_SERVER_PORT),
279289
equalTo(
@@ -509,6 +519,7 @@ void hasDurationMetric() throws IOException {
509519
DB_SYSTEM_NAME,
510520
maybeStable(DB_OPERATION),
511521
maybeStable(DB_NAME),
522+
DB_COLLECTION_NAME,
512523
SERVER_ADDRESS,
513524
SERVER_PORT);
514525
}
@@ -531,7 +542,8 @@ protected Consumer<TraceAssert> traceAssertConsumer(
531542
.hasAttributesSatisfyingExactly(
532543
equalTo(maybeStable(DB_SYSTEM), maybeStableDbSystemName(DB_SYSTEM_VALUE)),
533544
equalTo(maybeStable(DB_OPERATION), operation),
534-
equalTo(maybeStable(DB_NAME), hasTable ? table.getNameAsString() : null),
545+
equalTo(maybeStable(DB_NAME), dbNamespace(table, hasTable)),
546+
equalTo(DB_COLLECTION_NAME, dbCollectionName(table, hasTable)),
535547
equalTo(SERVER_ADDRESS, hostname),
536548
equalTo(SERVER_PORT, port),
537549
satisfies(
@@ -540,4 +552,21 @@ protected Consumer<TraceAssert> traceAssertConsumer(
540552
? AbstractAssert::isNull
541553
: AbstractAssert::isNotNull)));
542554
}
555+
556+
private static String dbNamespace(TableName table, boolean hasTable) {
557+
if (!hasTable) {
558+
return null;
559+
}
560+
if (emitStableDatabaseSemconv()) {
561+
return table.getNamespaceAsString();
562+
}
563+
return table.getNameAsString();
564+
}
565+
566+
private static String dbCollectionName(TableName table, boolean hasTable) {
567+
if (hasTable && emitStableDatabaseSemconv()) {
568+
return table.getNameAsString();
569+
}
570+
return null;
571+
}
543572
}

0 commit comments

Comments
 (0)