Skip to content

Commit c7a35b2

Browse files
committed
DBM: Inject DD_SERVICE_HASH
Extract getBaseHash to be available for SQLCommenter TBD: fix SQLCommenterTest TBD: add DB_DBM_INJECT_SERVICE_HASH_ENABLED
1 parent 9f5d390 commit c7a35b2

File tree

7 files changed

+71
-32
lines changed

7 files changed

+71
-32
lines changed

dd-java-agent/instrumentation/jdbc/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ addTestSuiteExtendingForDir('latestDepJava11Test', 'latestDepTest', 'test')
2222
dependencies {
2323
compileOnly group: 'com.zaxxer', name: 'HikariCP', version: '2.4.0'
2424
testImplementation(testFixtures(project(':dd-java-agent:agent-iast')))
25+
implementation project(':utils:container-utils')
2526

2627
// jdbc unit testing
2728
testImplementation group: 'com.h2database', name: 'h2', version: '[1.3.168,1.3.169]'// first jdk 1.6 compatible

dd-java-agent/instrumentation/jdbc/src/jmh/java/datadog/trace/instrumentation/jdbc/SQLCommenterBenchmark.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public class SQLCommenterBenchmark {
2121
private static final String parentService = "parent";
2222
private static final String env = "env";
2323
private static final String version = "version";
24+
private static final String serviceHash = "service-hash";
2425
private static final boolean injectTrace = true;
2526

2627
@Benchmark
@@ -36,6 +37,7 @@ public void testToComment() {
3637
null,
3738
env,
3839
version,
39-
traceParent);
40+
traceParent,
41+
serviceHash);
4042
}
4143
}

dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/DBMCompatibleConnectionInstrumentation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public static String onEnter(
125125
dbService =
126126
traceConfig(activeSpan()).getServiceMapping().getOrDefault(dbService, dbService);
127127
}
128-
if (dbInfo.getType().equals("sqlserver")) {
128+
if (dbInfo.getType().equals("sqlserver")) { // TODO why it's decided here?
129129
sql =
130130
SQLCommenter.append(
131131
sql, dbService, dbInfo.getType(), dbInfo.getHost(), dbInfo.getDb());

dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/SQLCommenter.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
44

5+
import datadog.common.container.ContainerInfo;
56
import datadog.trace.api.Config;
7+
import datadog.trace.api.ServiceHash;
68
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
79
import datadog.trace.bootstrap.instrumentation.api.Tags;
810
import java.io.UnsupportedEncodingException;
@@ -22,6 +24,7 @@ public class SQLCommenter {
2224
private static final String DD_PEER_SERVICE = "ddprs";
2325
private static final String DD_ENV = encode("dde");
2426
private static final String DD_VERSION = encode("ddpv");
27+
private static final String DD_SERVICE_HASH = encode("ddsh");
2528
private static final String TRACEPARENT = encode("traceparent");
2629
private static final char EQUALS = '=';
2730
private static final char COMMA = ',';
@@ -117,6 +120,10 @@ public static String inject(
117120
final String parentService = config.getServiceName();
118121
final String env = config.getEnv();
119122
final String version = config.getVersion();
123+
String containerTagsHash = ContainerInfo.get().getContainerTagsHash();
124+
final String serviceHash =
125+
Long.toString(ServiceHash.getBaseHash(parentService, env, containerTagsHash));
126+
// config.isDbDbmInjectServiceHash() ; // TODO && baseHash != null
120127
final int commentSize = capacity(traceParent, parentService, dbService, env, version);
121128
StringBuilder sb = new StringBuilder(sql.length() + commentSize);
122129
boolean commentAdded = false;
@@ -137,7 +144,8 @@ public static String inject(
137144
peerService,
138145
env,
139146
version,
140-
traceParent);
147+
traceParent,
148+
serviceHash);
141149
sb.append(CLOSE_COMMENT);
142150
} else {
143151
sb.append(OPEN_COMMENT);
@@ -152,7 +160,8 @@ public static String inject(
152160
peerService,
153161
env,
154162
version,
155-
traceParent);
163+
traceParent,
164+
serviceHash);
156165

157166
sb.append(CLOSE_COMMENT);
158167
sb.append(SPACE);
@@ -226,9 +235,9 @@ protected static boolean toComment(
226235
final String peerService,
227236
final String env,
228237
final String version,
229-
final String traceparent) {
238+
final String traceparent,
239+
final String serviceHash) {
230240
int emptySize = sb.length();
231-
232241
append(sb, PARENT_SERVICE, parentService, false);
233242
append(sb, DATABASE_SERVICE, dbService, sb.length() > emptySize);
234243
append(sb, DD_HOSTNAME, hostname, sb.length() > emptySize);
@@ -241,6 +250,8 @@ protected static boolean toComment(
241250
if (injectTrace) {
242251
append(sb, TRACEPARENT, traceparent, sb.length() > emptySize);
243252
}
253+
// TODO only if DB_DBM_INJECT_SERVICE_HASH_ENABLED
254+
append(sb, DD_SERVICE_HASH, serviceHash, sb.length() > emptySize);
244255
return sb.length() > emptySize;
245256
}
246257

dd-java-agent/instrumentation/jdbc/src/test/groovy/SQLCommenterTest.groovy

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ import datadog.trace.agent.test.AgentTestRunner
22
import datadog.trace.bootstrap.instrumentation.api.AgentSpan
33
import datadog.trace.bootstrap.instrumentation.api.AgentTracer
44
import datadog.trace.bootstrap.instrumentation.api.Tags
5-
65
import datadog.trace.instrumentation.jdbc.SQLCommenter
7-
86
import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace
97

108
class SQLCommenterTest extends AgentTestRunner {
@@ -30,25 +28,22 @@ class SQLCommenterTest extends AgentTestRunner {
3028
" " | ""
3129
}
3230

33-
3431
def "test encode Sql Comment"() {
3532
setup:
3633
injectSysConfig("dd.service", ddService)
3734
injectSysConfig("dd.env", ddEnv)
3835
injectSysConfig("dd.version", ddVersion)
3936

4037
when:
41-
String sqlWithComment = ""
38+
String sqlWithComment
4239
if (injectTrace) {
4340
sqlWithComment = SQLCommenter.inject(query, dbService, dbType, host, dbName, traceParent, true, appendComment)
4441
} else if (appendComment) {
4542
sqlWithComment = SQLCommenter.append(query, dbService, dbType, host, dbName)
46-
}
47-
else {
43+
} else {
4844
sqlWithComment = SQLCommenter.prepend(query, dbService, dbType, host, dbName)
4945
}
5046

51-
5247
then:
5348
sqlWithComment == expected
5449

dd-trace-core/src/main/java/datadog/trace/core/datastreams/DefaultPathwayContext.java

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
import com.datadoghq.sketch.ddsketch.encoding.VarEncodingHelper;
1010
import datadog.common.container.ContainerInfo;
1111
import datadog.context.propagation.CarrierVisitor;
12-
import datadog.trace.api.Config;
13-
import datadog.trace.api.ProcessTags;
12+
import datadog.trace.api.ServiceHash;
1413
import datadog.trace.api.WellKnownTags;
1514
import datadog.trace.api.datastreams.DataStreamsContext;
1615
import datadog.trace.api.datastreams.DataStreamsTags;
@@ -270,23 +269,7 @@ private static DefaultPathwayContext decode(
270269
}
271270

272271
public static long getBaseHash(WellKnownTags wellKnownTags) {
273-
StringBuilder builder = new StringBuilder();
274-
builder.append(wellKnownTags.getService());
275-
builder.append(wellKnownTags.getEnv());
276-
277-
String primaryTag = Config.get().getPrimaryTag();
278-
if (primaryTag != null) {
279-
builder.append(primaryTag);
280-
}
281-
CharSequence processTags = ProcessTags.getTagsForSerialization();
282-
if (processTags != null) {
283-
builder.append(processTags);
284-
String containerTagsHash = ContainerInfo.get().getContainerTagsHash();
285-
if (containerTagsHash != null && !containerTagsHash.isEmpty()) {
286-
builder.append(containerTagsHash);
287-
}
288-
}
289-
return FNV64Hash.generateHash(builder.toString(), FNV64Hash.Version.v1);
272+
return ServiceHash.getBaseHash(wellKnownTags, ContainerInfo.get().getContainerTagsHash());
290273
}
291274

292275
private long generatePathwayHash(long nodeHash, long parentHash) {
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package datadog.trace.api;
2+
3+
import datadog.trace.util.FNV64Hash;
4+
5+
public final class ServiceHash {
6+
7+
public static long getBaseHash(WellKnownTags wellKnownTags, String containerTagsHash) {
8+
return getBaseHash(
9+
wellKnownTags.getService(),
10+
wellKnownTags.getEnv(),
11+
Config.get().getPrimaryTag(),
12+
ProcessTags.getTagsForSerialization(),
13+
containerTagsHash);
14+
}
15+
16+
public static long getBaseHash(
17+
CharSequence serviceName, CharSequence env, String containerTagsHash) {
18+
return getBaseHash(
19+
serviceName,
20+
env,
21+
Config.get().getPrimaryTag(),
22+
ProcessTags.getTagsForSerialization(),
23+
containerTagsHash);
24+
}
25+
26+
private static long getBaseHash(
27+
CharSequence serviceName,
28+
CharSequence env,
29+
String primaryTag,
30+
CharSequence processTags,
31+
String containerTagsHash) {
32+
StringBuilder builder = new StringBuilder();
33+
builder.append(serviceName);
34+
builder.append(env);
35+
36+
if (primaryTag != null) {
37+
builder.append(primaryTag);
38+
}
39+
if (processTags != null) {
40+
builder.append(processTags);
41+
if (containerTagsHash != null && !containerTagsHash.isEmpty()) {
42+
builder.append(containerTagsHash);
43+
}
44+
}
45+
return FNV64Hash.generateHash(builder.toString(), FNV64Hash.Version.v1);
46+
}
47+
}

0 commit comments

Comments
 (0)