Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
serviceTypes:
- code: 2750
name: 'H2'
desc: 'H2'
property:
terminal: true
includeDestinationId: true
- code: 2751
name: 'H2_EXECUTE_QUERY'
desc: 'H2_EXECUTE_QUERY'
property:
recordStatistics: true
terminal: true
includeDestinationId: true
Comment on lines +1 to +14
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.navercorp.pinpoint.loader.service.ServiceTypeRegistryService;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;

Expand Down Expand Up @@ -73,7 +74,7 @@ public class OtlpDbSystemTypeResolver {
private static void put(Map<String, String[]> map, String baseName, String executeQueryName, String... dbSystemKeys) {
String[] names = {baseName, executeQueryName};
for (String key : dbSystemKeys) {
map.put(key, names);
map.put(normalizeDbSystem(key), names);
}
}

Expand Down Expand Up @@ -106,15 +107,19 @@ short resolveBaseCode(String dbSystem) {
if (dbSystem == null) {
return DEFAULT_BASE;
}
short[] codes = codeMap.get(dbSystem);
short[] codes = codeMap.get(normalizeDbSystem(dbSystem));
return codes != null ? codes[0] : DEFAULT_BASE;
}

short resolveExecuteQueryCode(String dbSystem) {
if (dbSystem == null) {
return DEFAULT_EXECUTE_QUERY;
}
short[] codes = codeMap.get(dbSystem);
short[] codes = codeMap.get(normalizeDbSystem(dbSystem));
return codes != null ? codes[1] : DEFAULT_EXECUTE_QUERY;
}

private static String normalizeDbSystem(String dbSystem) {
return dbSystem.trim().toLowerCase(Locale.ROOT);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,12 @@ void resolveBaseCode_legacyAliases() {
assertThat(resolver.resolveBaseCode("h2")).isEqualTo((short) 2750);
}

@Test
void resolveBaseCode_normalizesDbSystem() {
assertThat(resolver.resolveBaseCode(" H2DATABASE ")).isEqualTo((short) 2750);
assertThat(resolver.resolveBaseCode(" H2 ")).isEqualTo((short) 2750);
}

@Test
void resolveExecuteQueryCode_legacyAliases() {
assertThat(resolver.resolveExecuteQueryCode("mssql")).isEqualTo((short) 2251);
Expand All @@ -141,6 +147,12 @@ void resolveExecuteQueryCode_legacyAliases() {
assertThat(resolver.resolveExecuteQueryCode("h2")).isEqualTo((short) 2751);
}

@Test
void resolveExecuteQueryCode_normalizesDbSystem() {
assertThat(resolver.resolveExecuteQueryCode(" H2DATABASE ")).isEqualTo((short) 2751);
assertThat(resolver.resolveExecuteQueryCode(" H2 ")).isEqualTo((short) 2751);
}

// =======================================================================
// null / unknown → UNKNOWN_DB fallback
// =======================================================================
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,16 @@

class OtlpTraceSpanEventMapperTest {

// Stub registry pre-loaded with the client-side RPC ServiceTypes so client/RPC dispatch
// tests resolve to the real plugin codes. DB / messaging resolvers fall back gracefully
// when their plugin names are absent.
// Stub registry pre-loaded with the ServiceTypes needed for targeted dispatch tests.
// Unregistered DB / messaging plugin names still fall back gracefully.
private static final ServiceTypeRegistryService TEST_REGISTRY = buildRegistry();

private static ServiceTypeRegistryService buildRegistry() {
Map<String, ServiceType> byName = new HashMap<>();
byName.put("GRPC", ServiceTypeFactory.of(9160, "GRPC", "GRPC"));
byName.put("APACHE_DUBBO_CONSUMER", ServiceTypeFactory.of(9997, "APACHE_DUBBO_CONSUMER", "APACHE_DUBBO_CONSUMER"));
byName.put("H2", ServiceTypeFactory.of(2750, "H2", "H2"));
byName.put("H2_EXECUTE_QUERY", ServiceTypeFactory.of(2751, "H2_EXECUTE_QUERY", "H2_EXECUTE_QUERY"));
return new ServiceTypeRegistryService() {
@Override
public ServiceType findServiceType(int serviceType) {
Expand Down Expand Up @@ -403,6 +404,28 @@ void map_producer_activemq_destinationIdIsQueueName() {
assertThat(event.getDestinationId()).isEqualTo("orders.queue");
}

@Test
void map_database_h2StableDbSystemName_setsH2ServiceType() {
Span span = span(Span.SpanKind.SPAN_KIND_CLIENT,
kv("db.system.name", strVal("h2database")),
kv("db.namespace", strVal("mem:testdb")));

SpanEventBo event = mapSingle(span);
assertThat(event.getServiceType()).isEqualTo((short) 2750); // H2
assertThat(event.getDestinationId()).isEqualTo("mem:testdb");
}

@Test
void map_database_h2LegacyDbSystem_setsH2ExecuteQueryServiceType() {
Span span = span(Span.SpanKind.SPAN_KIND_CLIENT,
kv("db.system", strVal("h2")),
kv("db.statement", strVal("SELECT 1")));

SpanEventBo event = mapSingle(span);
assertThat(event.getServiceType()).isEqualTo((short) 2751); // H2_EXECUTE_QUERY
assertThat(event.getDestinationId()).isEqualTo("h2");
}

@Test
void map_client_grpc_setsGrpcServiceType() {
// OTel grpc-1.6 agent emits rpc.system="grpc" on the client-side instrumenter.
Expand Down
Loading