8000 Send initial telemetry in separate thread to reduce start-up latency. by AlexeyKuznetsov-DD · Pull Request #8818 · DataDog/dd-trace-java · GitHub
[go: up one dir, main page]

Skip to content

Send initial telemetry in separate thread to reduce start-up latency. #8818

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Changes from 1 commit
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
14d6ea5
Send initial telemetry in separate thread to reduce start-up latency.
AlexeyKuznetsov-DD May 13, 2025
ed8e136
Merge branch 'master' into alexeyk/do-not-wait-on-telemetry-fowarder-…
AlexeyKuznetsov-DD May 13, 2025
bf64a9a
Added missing annotation and fixed typo.
AlexeyKuznetsov-DD May 13, 2025
256e138
Merge branch 'master' into alexeyk/do-not-wait-on-telemetry-fowarder-…
AlexeyKuznetsov-DD May 14, 2025
ad558a2
Added support for emulating some work in main() function.
AlexeyKuznetsov-DD May 14, 2025
1c91268
Merge branch 'master' into alexeyk/do-not-wait-on-telemetry-fowarder-…
AlexeyKuznetsov-DD May 16, 2025
851721a
Merge branch 'master' into alexeyk/do-not-wait-on-telemetry-fowarder-…
AlexeyKuznetsov-DD May 16, 2025
9dd2394
Merge branch 'master' into alexeyk/do-not-wait-on-telemetry-fowarder-…
AlexeyKuznetsov-DD May 19, 2025
b52031c
Minor cleanup.
AlexeyKuznetsov-DD May 19, 2025
a64bd08
Merge branch 'master' into alexeyk/do-not-wait-on-telemetry-fowarder-…
AlexeyKuznetsov-DD May 19, 2025
5e8be4c
Merge branch 'master' into alexeyk/do-not-wait-on-telemetry-fowarder-…
AlexeyKuznetsov-DD May 20, 2025
5d13771
Merge branch 'master' into alexeyk/do-not-wait-on-telemetry-fowarder-…
AlexeyKuznetsov-DD May 20, 2025
74f6236
Fixed test.
AlexeyKuznetsov-DD May 20, 2025
92e3778
Merge branch 'master' into alexeyk/do-not-wait-on-telemetry-fowarder-…
AlexeyKuznetsov-DD May 20, 2025
528ee68
Merge branch 'master' into alexeyk/do-not-wait-on-telemetry-fowarder-…
AlexeyKuznetsov-DD May 21, 2025
6f3ccce
Merge branch 'master' into alexeyk/do-not-wait-on-telemetry-fowarder-…
AlexeyKuznetsov-DD May 23, 2025
6af9b95
Merge branch 'master' into alexeyk/do-not-wait-on-telemetry-fowarder-…
AlexeyKuznetsov-DD May 23, 2025
f55e93b
Merge branch 'master' into alexeyk/do-not-wait-on-telemetry-fowarder-…
AlexeyKuznetsov-DD May 23, 2025
6ceb1cb
Merge branch 'master' into alexeyk/do-not-wait-on-telemetry-fowarder-…
AlexeyKuznetsov-DD May 24, 2025
3dc654b
Merge branch 'master' into alexeyk/do-not-wait-on-telemetry-fowarder-…
AlexeyKuznetsov-DD May 27, 2025
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
Next Next commit
Send initial telemetry in separate thread to reduce start-up latency.
  • Loading branch information
AlexeyKuznetsov-DD committed May 13, 2025
commit 14d6ea5908ddbbec4d613b18229b77ebc5752440
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package datadog.trace.bootstrap;

import datadog.json.JsonWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

/** Thread safe telemetry class used to relay information about tracer activation. */
public abstract class BootstrapInitializationTelemetry {
Expand Down Expand Up @@ -179,7 +177,7 @@ public void finish() {
}

public interface JsonSender {
void send(byte[] payload) throws IOException;
void send(byte[] payload);
}

public static final class ForwarderJsonSender implements JsonSender {
Expand All @@ -190,19 +188,34 @@ public static final class ForwarderJsonSender implements JsonSender {
}

@Override
public void send(byte[] payload) throws IOException {
ProcessBuilder builder = new ProcessBuilder(forwarderPath, "library_entrypoint");
public void send(byte[] payload) {
ForwarderJsonSenderThread t = new ForwarderJsonSenderThread(forwarderPath, payload);
t.start();
}
}

Process process = builder.start();
try (OutputStream out = process.getOutputStream()) {
out.write(payload);
}
public static final class ForwarderJsonSenderThread extends Thread {
private final String forwarderPath;
private final byte[] payload;

public ForwarderJsonSenderThread(String forwarderPath, byte[] payload) {
super("dd-forwarder-json-sender");
this.forwarderPath = forwarderPath;
this.payload = payload;
}

@Override
public void run() {
ProcessBuilder builder = new ProcessBuilder(forwarderPath, "library_entrypoint");

try {
process.waitFor(1, TimeUnit.SECONDS);
} catch (InterruptedException e) {
// just for hygiene, reset the interrupt status
Thread.currentThread().interrupt();
Process process = builder.start();
try (OutputStream out = process.getOutputStream()) {
out.write(payload);
}
} catch (Throwable e) {
// We don't have a log manager here, so just print.
System.err.println("Failed to send telemetry: " + e.getMessage());
}
}
}
Expand Down
Loading
0