Skip to content

Commit a4ec186

Browse files
committed
add flag to disable metadata fetching in driver
1 parent 9ac990b commit a4ec186

File tree

6 files changed

+42
-105
lines changed

6 files changed

+42
-105
lines changed

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ public void methodAdvice(MethodTransformer transformer) {
6464
}
6565

6666
public static class DriverAdvice {
67+
6768
@Advice.OnMethodExit(suppress = Throwable.class)
6869
public static void addDBInfo(
6970
@Advice.Argument(0) final String url,
@@ -75,8 +76,10 @@ public static void addDBInfo(
7576
}
7677
String connectionUrl = url;
7778
Properties connectionProps = props;
78-
if (null == props
79-
|| !Boolean.parseBoolean(props.getProperty("oracle.jdbc.useShardingDriverConnection"))) {
79+
if (JDBCDecorator.FETCH_DB_METADATA_ON_CONNECT
80+
&& (null == props
81+
|| !Boolean.parseBoolean(
82+
props.getProperty("oracle.jdbc.useShardingDriverConnection")))) {
8083
try {
8184
DatabaseMetaData metaData = connection.getMetaData();
8285
connectionUrl = metaData.getURL();

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,10 @@ public class JDBCDecorator extends DatabaseClientDecorator<DBInfo> {
6060
DBM_PROPAGATION_MODE.equals(DBM_PROPAGATION_MODE_FULL);
6161
public static final boolean DBM_TRACE_PREPARED_STATEMENTS =
6262
Config.get().isDbmTracePreparedStatements();
63-
private static final boolean FETCH_DB_METADATA = Config.get().isDbMetadataFetchingEnabled();
64-
private static final boolean FETCH_DB_CLIENT_INFO = Config.get().isDbClientInfoFetchingEnabled();
63+
private static final boolean FETCH_DB_METADATA_ON_QUERY =
64+
Config.get().isDbMetadataFetchingOnQueryEnabled();
65+
public static final boolean FETCH_DB_METADATA_ON_CONNECT =
66+
Config.get().isDbMetadataFetchingOnConnectEnabled();
6567

6668
private volatile boolean warnedAboutDBMPropagationMode = false; // to log a warning only once
6769

@@ -203,7 +205,7 @@ public String getDbService(final DBInfo dbInfo) {
203205
}
204206

205207
public static DBInfo parseDBInfoFromConnection(final Connection connection) {
206-
if (connection == null || !FETCH_DB_METADATA) {
208+
if (connection == null || !FETCH_DB_METADATA_ON_QUERY) {
207209
// we can log here, but it risks to be too verbose
208210
return DBInfo.DEFAULT;
209211
}
@@ -213,13 +215,11 @@ public static DBInfo parseDBInfoFromConnection(final Connection connection) {
213215
final String url;
214216
if (metaData != null && (url = metaData.getURL()) != null) {
215217
Properties clientInfo = null;
216-
if (FETCH_DB_CLIENT_INFO) {
217-
try {
218-
clientInfo = connection.getClientInfo();
219-
} catch (final Throwable ex) {
220-
// getClientInfo is likely not allowed, we can still extract info from the url alone
221-
log.debug("Could not get client info from DB", ex);
222-
}
218+
try {
219+
clientInfo = connection.getClientInfo();
220+
} catch (final Throwable ex) {
221+
// getClientInfo is likely not allowed, we can still extract info from the url alone
222+
log.debug("Could not get client info from DB", ex);
223223
}
224224
dbInfo = JDBCConnectionUrlParser.extractDBInfo(url, clientInfo);
225225
} else {
Lines changed: 5 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import static datadog.trace.api.config.TraceInstrumentationConfig.DB_CLIENT_INFO_FETCHING_ENABLED
2-
import static datadog.trace.api.config.TraceInstrumentationConfig.DB_METADATA_FETCHING_ENABLED
1+
import static datadog.trace.api.config.TraceInstrumentationConfig.DB_METADATA_FETCHING_ON_QUERY
32

43
import datadog.trace.agent.test.InstrumentationSpecification
54
import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo
@@ -51,7 +50,6 @@ abstract class JDBCDecoratorParseDBInfoTestBase extends InstrumentationSpecifica
5150
clientInfo.setProperty("warehouse", "my-test-warehouse") // we'll check that property to know if clientInfo were used
5251
def connection = Mock(Connection) {
5352
getMetaData() >> (shouldFetchMetadata() ? metadata : { assert false })
54-
getClientInfo() >> (shouldFetchClientInfo() ? clientInfo : { assert false })
5553
}
5654

5755
when:
@@ -63,108 +61,44 @@ abstract class JDBCDecoratorParseDBInfoTestBase extends InstrumentationSpecifica
6361
result.host == "testhost"
6462
result.port == 5432
6563
result.db == "testdb"
66-
if (shouldFetchClientInfo()) { // only if we _also_ fetch metadata
67-
result.warehouse == "my-test-warehouse"
68-
}
69-
else {
70-
result.warehouse == null
71-
}
64+
result.warehouse == "my-test-warehouse"
7265
} else {
7366
result == DBInfo.DEFAULT
7467
}
7568
}
7669

7770
abstract boolean shouldFetchMetadata()
78-
79-
abstract boolean shouldFetchClientInfo()
8071
}
8172

8273
/**
8374
* Test with both flags enabled (default behavior)
8475
*/
85-
class JDBCDecoratorParseDBInfoWithMetadataAndClientInfoForkedTest extends JDBCDecoratorParseDBInfoTestBase {
76+
class JDBCDecoratorParseDBInfoWithMetadataForkedTest extends JDBCDecoratorParseDBInfoTestBase {
8677

8778
@Override
8879
void configurePreAgent() {
8980
super.configurePreAgent()
90-
injectSysConfig(DB_METADATA_FETCHING_ENABLED, "true")
91-
injectSysConfig(DB_CLIENT_INFO_FETCHING_ENABLED, "true")
81+
injectSysConfig(DB_METADATA_FETCHING_ON_QUERY, "true")
9282
}
9383

9484
@Override
9585
boolean shouldFetchMetadata() {
9686
return true
9787
}
98-
99-
@Override
100-
boolean shouldFetchClientInfo() {
101-
return true
102-
}
10388
}
10489

105-
/**
106-
* Test with both flags disabled
107-
*/
10890
class JDBCDecoratorParseDBInfoWithoutCallsForkedTest extends JDBCDecoratorParseDBInfoTestBase {
10991

11092
@Override
11193
void configurePreAgent() {
11294
super.configurePreAgent()
113-
injectSysConfig(DB_METADATA_FETCHING_ENABLED, "false")
114-
injectSysConfig(DB_CLIENT_INFO_FETCHING_ENABLED, "false")
115-
}
116-
117-
@Override
118-
boolean shouldFetchMetadata() {
119-
return false
120-
}
121-
122-
@Override
123-
boolean shouldFetchClientInfo() {
124-
return false
125-
}
126-
}
127-
128-
/**
129-
* Test with metadata enabled but client info disabled
130-
*/
131-
class JDBCDecoratorParseDBInfoWithMetadataOnlyForkedTest extends JDBCDecoratorParseDBInfoTestBase {
132-
133-
@Override
134-
void configurePreAgent() {
135-
super.configurePreAgent()
136-
injectSysConfig(DB_METADATA_FETCHING_ENABLED, "true")
137-
injectSysConfig(DB_CLIENT_INFO_FETCHING_ENABLED, "false")
95+
injectSysConfig(DB_METADATA_FETCHING_ON_QUERY, "false")
13896
}
13997

14098
@Override
14199
boolean shouldFetchMetadata() {
142-
return true
143-
}
144-
145-
@Override
146-
boolean shouldFetchClientInfo() {
147100
return false
148101
}
149102
}
150103

151-
class JDBCDecoratorParseDBInfoWithClientInfoOnlyForkedTest extends JDBCDecoratorParseDBInfoTestBase {
152-
153-
@Override
154-
void configurePreAgent() {
155-
super.configurePreAgent()
156-
injectSysConfig(DB_METADATA_FETCHING_ENABLED, "false")
157-
injectSysConfig(DB_CLIENT_INFO_FETCHING_ENABLED, "true")
158-
}
159-
160-
@Override
161-
boolean shouldFetchMetadata() {
162-
return false
163-
}
164-
165-
@Override
166-
boolean shouldFetchClientInfo() {
167-
return true
168-
}
169-
}
170104

dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@ public final class TraceInstrumentationConfig {
6363
"trace.db.client.split-by-instance.type.suffix";
6464
public static final String DB_CLIENT_HOST_SPLIT_BY_HOST = "trace.db.client.split-by-host";
6565

66-
public static final String DB_METADATA_FETCHING_ENABLED = "trace.db.metadata.fetching.enabled";
67-
public static final String DB_CLIENT_INFO_FETCHING_ENABLED =
68-
"trace.db.client.info.fetching.enabled";
66+
public static final String DB_METADATA_FETCHING_ON_QUERY = "trace.db.metadata.fetching.on.query";
67+
public static final String DB_METADATA_FETCHING_ON_CONNECT =
68+
"trace.db.metadata.fetching.on.connect";
6969

7070
public static final String JDBC_PREPARED_STATEMENT_CLASS_NAME =
7171
"trace.jdbc.prepared.statement.class.name";

internal-api/src/main/java/datadog/trace/api/Config.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -508,11 +508,11 @@
508508
import static datadog.trace.api.config.TraceInstrumentationConfig.DB_CLIENT_HOST_SPLIT_BY_HOST;
509509
import static datadog.trace.api.config.TraceInstrumentationConfig.DB_CLIENT_HOST_SPLIT_BY_INSTANCE;
510510
import static datadog.trace.api.config.TraceInstrumentationConfig.DB_CLIENT_HOST_SPLIT_BY_INSTANCE_TYPE_SUFFIX;
511-
import static datadog.trace.api.config.TraceInstrumentationConfig.DB_CLIENT_INFO_FETCHING_ENABLED;
512511
import static datadog.trace.api.config.TraceInstrumentationConfig.DB_DBM_INJECT_SQL_BASEHASH;
513512
import static datadog.trace.api.config.TraceInstrumentationConfig.DB_DBM_PROPAGATION_MODE_MODE;
514513
import static datadog.trace.api.config.TraceInstrumentationConfig.DB_DBM_TRACE_PREPARED_STATEMENTS;
515-
import static datadog.trace.api.config.TraceInstrumentationConfig.DB_METADATA_FETCHING_ENABLED;
514+
import static datadog.trace.api.config.TraceInstrumentationConfig.DB_METADATA_FETCHING_ON_CONNECT;
515+
import static datadog.trace.api.config.TraceInstrumentationConfig.DB_METADATA_FETCHING_ON_QUERY;
516516
import static datadog.trace.api.config.TraceInstrumentationConfig.ELASTICSEARCH_BODY_AND_PARAMS_ENABLED;
517517
import static datadog.trace.api.config.TraceInstrumentationConfig.ELASTICSEARCH_BODY_ENABLED;
518518
import static datadog.trace.api.config.TraceInstrumentationConfig.ELASTICSEARCH_PARAMS_ENABLED;
@@ -1078,8 +1078,8 @@ public static String getHostName() {
10781078
private final boolean dbmInjectSqlBaseHash;
10791079
private final String dbmPropagationMode;
10801080
private final boolean dbmTracePreparedStatements;
1081-
private final boolean dbMetadataFetchingEnabled;
1082-
private final boolean dbClientInfoFetchingEnabled;
1081+
private final boolean dbMetadataFetchingOnQuery;
1082+
private final boolean dbMetadataFetchingOnConnect;
10831083

10841084
private final boolean dynamicInstrumentationEnabled;
10851085
private final String dynamicInstrumentationSnapshotUrl;
@@ -1630,8 +1630,8 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins
16301630
DB_CLIENT_HOST_SPLIT_BY_INSTANCE_TYPE_SUFFIX,
16311631
DEFAULT_DB_CLIENT_HOST_SPLIT_BY_INSTANCE_TYPE_SUFFIX);
16321632

1633-
dbMetadataFetchingEnabled = configProvider.getBoolean(DB_METADATA_FETCHING_ENABLED, true);
1634-
dbClientInfoFetchingEnabled = configProvider.getBoolean(DB_CLIENT_INFO_FETCHING_ENABLED, true);
1633+
dbMetadataFetchingOnQuery = configProvider.getBoolean(DB_METADATA_FETCHING_ON_QUERY, true);
1634+
dbMetadataFetchingOnConnect = configProvider.getBoolean(DB_METADATA_FETCHING_ON_CONNECT, true);
16351635

16361636
dbClientSplitByHost =
16371637
configProvider.getBoolean(
@@ -3153,12 +3153,12 @@ public boolean isDbClientSplitByHost() {
31533153
return dbClientSplitByHost;
31543154
}
31553155

3156-
public boolean isDbMetadataFetchingEnabled() {
3157-
return dbMetadataFetchingEnabled;
3156+
public boolean isDbMetadataFetchingOnQueryEnabled() {
3157+
return dbMetadataFetchingOnQuery;
31583158
}
31593159

3160-
public boolean isDbClientInfoFetchingEnabled() {
3161-
return dbClientInfoFetchingEnabled;
3160+
public boolean isDbMetadataFetchingOnConnectEnabled() {
3161+
return dbMetadataFetchingOnConnect;
31623162
}
31633163

31643164
public Set<String> getSplitByTags() {
@@ -5567,9 +5567,9 @@ public String toString() {
55675567
+ ", dbClientSplitByHost="
55685568
+ dbClientSplitByHost
55695569
+ ", dbMetadataFetchingEnabled="
5570-
+ dbMetadataFetchingEnabled
5571-
+ ", dbClientInfoFetchingEnabled="
5572-
+ dbClientInfoFetchingEnabled
5570+
+ dbMetadataFetchingOnQuery
5571+
+ ", dbMetadataFetchingOnConnect="
5572+
+ dbMetadataFetchingOnConnect
55735573
+ ", dbmInjectSqlBaseHash="
55745574
+ dbmInjectSqlBaseHash
55755575
+ ", dbmPropagationMode="

internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2817,17 +2817,17 @@ class ConfigTest extends DDSpecification {
28172817
def "db metadata fetching enabled with sys = #sys env = #env"() {
28182818
setup:
28192819
if (sys != null) {
2820-
System.setProperty("dd.trace.db.metadata.fetching.enabled", sys)
2820+
System.setProperty("dd.trace.db.metadata.fetching.on.query", sys)
28212821
}
28222822
if (env != null) {
2823-
environmentVariables.set("DD_TRACE_DB_METADATA_FETCHING_ENABLED", env)
2823+
environmentVariables.set("DD_TRACE_DB_METADATA_FETCHING_ON_QUERY", env)
28242824
}
28252825

28262826
when:
28272827
def config = new Config()
28282828

28292829
then:
2830-
config.isDbMetadataFetchingEnabled() == expected
2830+
config.isDbMetadataFetchingOnQueryEnabled() == expected
28312831

28322832
where:
28332833
sys | env | expected
@@ -2843,17 +2843,17 @@ class ConfigTest extends DDSpecification {
28432843
def "db client info fetching enabled with sys = #sys env = #env"() {
28442844
setup:
28452845
if (sys != null) {
2846-
System.setProperty("dd.trace.db.client.info.fetching.enabled", sys)
2846+
System.setProperty("dd.trace.db.metadata.fetching.on.connect", sys)
28472847
}
28482848
if (env != null) {
2849-
environmentVariables.set("DD_TRACE_DB_CLIENT_INFO_FETCHING_ENABLED", env)
2849+
environmentVariables.set("DD_TRACE_DB_METADATA_FETCHING_ON_CONNECT", env)
28502850
}
28512851

28522852
when:
28532853
def config = new Config()
28542854

28552855
then:
2856-
config.isDbClientInfoFetchingEnabled() == expected
2856+
config.isDbMetadataFetchingOnConnectEnabled() == expected
28572857

28582858
where:
28592859
sys | env | expected

0 commit comments

Comments
 (0)