Skip to content

Commit 9261996

Browse files
initial changes to integrate trace propagation
1 parent 808407a commit 9261996

File tree

6 files changed

+54
-2
lines changed

6 files changed

+54
-2
lines changed

pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,16 @@
2828
</properties>
2929

3030
<dependencies>
31+
<dependency>
32+
<groupId>io.opentelemetry</groupId>
33+
<artifactId>opentelemetry-api</artifactId>
34+
<version>1.42.1</version>
35+
</dependency>
36+
<dependency>
37+
<groupId>io.opentelemetry</groupId>
38+
<artifactId>opentelemetry-context</artifactId>
39+
<version>1.42.1</version>
40+
</dependency>
3141
<dependency>
3242
<groupId>org.bouncycastle</groupId>
3343
<artifactId>bcpkix-jdk18on</artifactId>

public_pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
<groupId>net.snowflake</groupId>
66
<artifactId>snowflake-jdbc</artifactId>
7-
<version>1.0-SNAPSHOT</version>
7+
<version>1.0-SNAPSHOT-CUSTOM</version>
88
<packaging>jar</packaging>
99
<name>Snowflake JDBC Driver</name>
1010
<description>Snowflake JDBC Driver</description>

src/main/java/net/snowflake/client/core/HttpUtil.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@
1212
import com.google.common.annotations.VisibleForTesting;
1313
import com.google.common.base.Strings;
1414
import com.microsoft.azure.storage.OperationContext;
15+
16+
import io.opentelemetry.api.trace.Span;
17+
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
18+
import io.opentelemetry.context.Context;
19+
1520
import java.io.File;
1621
import java.io.IOException;
1722
import java.io.InputStream;
@@ -794,13 +799,24 @@ private static String executeRequestInternal(
794799
StringWriter writer = null;
795800
CloseableHttpResponse response = null;
796801
Stopwatch stopwatch = null;
802+
W3CTraceContextPropagator tracePropagator = W3CTraceContextPropagator.getInstance();
797803

798804
if (logger.isDebugEnabled()) {
799805
stopwatch = new Stopwatch();
800806
stopwatch.start();
801807
}
802808

803809
try {
810+
// Propagate trace context
811+
tracePropagator.inject(
812+
Context.current(),
813+
httpRequest,
814+
(request, name, value) -> request.setHeader(name, value));
815+
816+
// logger.info("Attempting to inject trace context into request: {}", httpRequest.toString());
817+
logger.info("executeRequestInternal HttpUtil context: TraceID: {}, SpanID: {}",
818+
Span.current().getSpanContext().getTraceId(), Span.current().getSpanContext().getSpanId());
819+
logger.info("executeRequestInternal HttpUtil thread id: {}", String.valueOf(Thread.currentThread().getId()));
804820
response =
805821
RestRequest.execute(
806822
httpClient,

src/main/java/net/snowflake/client/core/SFStatement.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@
1111
import static net.snowflake.client.jdbc.SnowflakeUtil.systemGetProperty;
1212

1313
import com.fasterxml.jackson.databind.JsonNode;
14+
15+
import io.opentelemetry.api.trace.Span;
16+
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
17+
import io.opentelemetry.context.Context;
18+
1419
import java.sql.SQLException;
1520
import java.sql.Statement;
1621
import java.util.ArrayList;
@@ -22,6 +27,8 @@
2227
import java.util.concurrent.ScheduledExecutorService;
2328
import java.util.concurrent.TimeUnit;
2429
import java.util.concurrent.atomic.AtomicBoolean;
30+
31+
import net.minidev.json.JSONObject;
2532
import net.snowflake.client.core.BasicEvent.QueryState;
2633
import net.snowflake.client.core.bind.BindException;
2734
import net.snowflake.client.core.bind.BindUploader;
@@ -127,6 +134,14 @@ private SFBaseResultSet executeQuery(
127134
ExecTimeTelemetryData execTimeData)
128135
throws SQLException, SFException {
129136
sanityCheckQuery(sql);
137+
138+
// Check if the TelemetryService is holding the current context. If NOT, then update the
139+
// TelemteryService context by calling updateContext.
140+
// Use this code: TelemetryService.getInstance().updateContext(session.getSnowflakeConnectionString());
141+
logger.info("executeQuery(with params) SFStatement thread id: {}", String.valueOf(Thread.currentThread().getId()));
142+
logger.info("executeQuery(with params) SFStatement context: TraceID = {}, SpanID = {}",
143+
Span.current().getSpanContext().getTraceId(),
144+
Span.current().getSpanContext().getSpanId());
130145

131146
String trimmedSql = sql.trim();
132147

src/main/java/net/snowflake/client/jdbc/SnowflakeConnectionV1.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
import static net.snowflake.client.jdbc.ErrorCode.INVALID_CONNECT_STRING;
99

1010
import com.google.common.base.Strings;
11+
12+
import io.opentelemetry.api.trace.Span;
13+
import io.opentelemetry.context.Context;
14+
1115
import java.io.IOException;
1216
import java.io.InputStream;
1317
import java.sql.Array;
@@ -196,6 +200,9 @@ private void executeImmediate(String stmtText) throws SQLException {
196200
@Override
197201
public Statement createStatement() throws SQLException {
198202
raiseSQLExceptionIfConnectionIsClosed();
203+
logger.info("createStatement SnowflakeConnectionV1 thread id: {}", String.valueOf(Thread.currentThread().getId()));
204+
logger.info("createStatement SnowflakeStatementV1 context: TraceID: {}, SpanID: {}",
205+
Span.current().getSpanContext().getTraceId(), Span.current().getSpanContext().getSpanId());
199206
Statement stmt = createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
200207
openStatements.add(stmt);
201208
return stmt;

src/main/java/net/snowflake/client/jdbc/SnowflakeStatementV1.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import java.util.Map;
2121
import java.util.Set;
2222
import java.util.concurrent.ConcurrentHashMap;
23+
24+
import io.opentelemetry.api.trace.Span;
2325
import net.snowflake.client.core.CancellationReason;
2426
import net.snowflake.client.core.ExecTimeTelemetryData;
2527
import net.snowflake.client.core.ParameterBindingDTO;
@@ -146,9 +148,11 @@ protected void raiseSQLExceptionIfStatementIsClosed() throws SQLException {
146148
*/
147149
@Override
148150
public ResultSet executeQuery(String sql) throws SQLException {
151+
logger.info("executeQuery SnowflakeStatementV1 thread id: {}", String.valueOf(Thread.currentThread().getId()));
152+
logger.info("executeQuery SnowflakeStatementV1 context: TraceID: {}, SpanID: {}",
153+
Span.current().getSpanContext().getTraceId(), Span.current().getSpanContext().getSpanId());
149154
ExecTimeTelemetryData execTimeData =
150155
new ExecTimeTelemetryData("ResultSet Statement.executeQuery(String)", this.batchID);
151-
152156
raiseSQLExceptionIfStatementIsClosed();
153157
ResultSet rs = executeQueryInternal(sql, false, null, execTimeData);
154158
execTimeData.setQueryEnd();

0 commit comments

Comments
 (0)