From 3aea13c6feed6f17376c688a0a94ba81b93b29ed Mon Sep 17 00:00:00 2001 From: Jean-Philippe Bempel Date: Fri, 5 Jul 2024 17:40:49 +0200 Subject: [PATCH] Move snapshot UUID generation at serialization (#7280) UUID generation is not cheap, and therefore should be performed only when the snapshot is about to be sent. Moving UUID generation at serialization time makes it out of the critical path. --- .gitlab/benchmarks.yml | 3 +++ .../src/main/java/com/datadog/debugger/sink/Snapshot.java | 5 ++++- .../main/java/com/datadog/debugger/sink/SnapshotSink.java | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.gitlab/benchmarks.yml b/.gitlab/benchmarks.yml index 9b8b58a5aac..d3bfde4785a 100644 --- a/.gitlab/benchmarks.yml +++ b/.gitlab/benchmarks.yml @@ -8,6 +8,7 @@ variables: timeout: 1h tags: ["runner:apm-k8s-tweaked-metal"] image: $BASE_CI_IMAGE + needs: [ "build" ] script: - export ARTIFACTS_DIR="$(pwd)/reports" && mkdir -p "${ARTIFACTS_DIR}" - export CIRCLE_CI_TOKEN=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.circleci_token --with-decryption --query "Parameter.Value" --out text) @@ -80,6 +81,7 @@ benchmarks-post-results: interruptible: true timeout: 1h image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/benchmarking-platform:java-dsm-kafka + needs: [ "build" ] script: - git clone --branch java/kafka-dsm-overhead https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.ddbuild.io/DataDog/benchmarking-platform.git platform && cd platform - ./steps/run-benchmarks.sh @@ -117,6 +119,7 @@ debugger-benchmarks: interruptible: true timeout: 1h image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/benchmarking-platform:java-debugger + needs: ["build"] script: - export ARTIFACTS_DIR="$(pwd)/reports" && mkdir -p "${ARTIFACTS_DIR}" - git clone --branch java/debugger-benchmarks https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.ddbuild.io/DataDog/benchmarking-platform.git /platform && cd /platform diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/sink/Snapshot.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/sink/Snapshot.java index f4ec01a63a9..6ef4f91638c 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/sink/Snapshot.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/sink/Snapshot.java @@ -34,7 +34,6 @@ public class Snapshot { private String exceptionId; public Snapshot(java.lang.Thread thread, ProbeImplementation probeImplementation, int maxDepth) { - this.id = UUID.randomUUID().toString(); this.version = VERSION; this.timestamp = System.currentTimeMillis(); this.captures = new Captures(); @@ -105,6 +104,10 @@ public void addCaughtExceptions(List throwabl } public String getId() { + // lazily generates snapshot id + if (id == null) { + id = UUID.randomUUID().toString(); + } return id; } diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/sink/SnapshotSink.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/sink/SnapshotSink.java index 4ceca7b547e..5610a16530f 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/sink/SnapshotSink.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/sink/SnapshotSink.java @@ -63,6 +63,7 @@ public boolean offer(Snapshot snapshot) { } String serializeSnapshot(String serviceName, Snapshot snapshot) { + snapshot.getId(); // Ensure id is generated String str = DebuggerAgent.getSnapshotSerializer().serializeSnapshot(serviceName, snapshot); String prunedStr = SnapshotPruner.prune(str, MAX_SNAPSHOT_SIZE, 4); if (prunedStr.length() != str.length()) {