Skip to content

Commit fbd8943

Browse files
committed
Avoid performing blocking I/O operation on application thread
1 parent 88c493c commit fbd8943

File tree

2 files changed

+23
-17
lines changed

2 files changed

+23
-17
lines changed

communication/src/main/java/datadog/communication/ddagent/SharedCommunicationObjects.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package datadog.communication.ddagent;
22

33
import static datadog.communication.ddagent.TracerVersion.TRACER_VERSION;
4+
import static datadog.trace.util.AgentThreadFactory.AGENT_THREAD_GROUP;
45

56
import datadog.common.container.ContainerInfo;
67
import datadog.common.socket.SocketUtils;
@@ -9,6 +10,7 @@
910
import datadog.remoteconfig.ConfigurationPoller;
1011
import datadog.remoteconfig.DefaultConfigurationPoller;
1112
import datadog.trace.api.Config;
13+
import datadog.trace.util.AgentTaskScheduler;
1214
import java.util.concurrent.TimeUnit;
1315
import java.util.function.Supplier;
1416
import okhttp3.HttpUrl;
@@ -98,8 +100,11 @@ public DDAgentFeaturesDiscovery featuresDiscovery(Config config) {
98100
agentUrl,
99101
config.isTraceAgentV05Enabled(),
100102
config.isTracerMetricsEnabled());
101-
if (!"true".equalsIgnoreCase(System.getProperty("dd.test.no.early.discovery"))) {
102-
featuresDiscovery.discover();
103+
if (AGENT_THREAD_GROUP.equals(Thread.currentThread().getThreadGroup())) {
104+
featuresDiscovery.discover(); // safe to run on same thread
105+
} else {
106+
// avoid performing blocking I/O operation on application thread
107+
AgentTaskScheduler.INSTANCE.execute(featuresDiscovery::discover);
103108
}
104109
}
105110
return featuresDiscovery;

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

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -136,21 +136,6 @@ public DefaultDataStreamsMonitoring(
136136

137137
@Override
138138
public void start() {
139-
if (features.getDataStreamsEndpoint() == null) {
140-
features.discoverIfOutdated();
141-
}
142-
143-
agentSupportsDataStreams = features.supportsDataStreams();
144-
checkDynamicConfig();
145-
146-
if (!configSupportsDataStreams) {
147-
log.debug("Data streams is disabled");
148-
} else if (!agentSupportsDataStreams) {
149-
log.debug("Data streams is disabled or not supported by agent");
150-
}
151-
152-
nextFeatureCheck = timeSource.getCurrentTimeNanos() + FEATURE_CHECK_INTERVAL_NANOS;
153-
154139
cancellation =
155140
AgentTaskScheduler.INSTANCE.scheduleAtFixedRate(
156141
new ReportTask(), this, bucketDurationNanos, bucketDurationNanos, TimeUnit.NANOSECONDS);
@@ -341,6 +326,22 @@ private StatsBucket getStatsBucket(final long timestamp, final String serviceNam
341326

342327
@Override
343328
public void run() {
329+
330+
if (features.getDataStreamsEndpoint() == null) {
331+
features.discoverIfOutdated();
332+
}
333+
334+
agentSupportsDataStreams = features.supportsDataStreams();
335+
checkDynamicConfig();
336+
337+
if (!configSupportsDataStreams) {
338+
log.debug("Data streams is disabled");
339+
} else if (!agentSupportsDataStreams) {
340+
log.debug("Data streams is disabled or not supported by agent");
341+
}
342+
343+
nextFeatureCheck = timeSource.getCurrentTimeNanos() + FEATURE_CHECK_INTERVAL_NANOS;
344+
344345
Thread currentThread = Thread.currentThread();
345346
while (!currentThread.isInterrupted()) {
346347
try {

0 commit comments

Comments
 (0)