From 7d2db6b8e7afd2b8cf0fafb564f058f5e0202146 Mon Sep 17 00:00:00 2001 From: Jaroslav Bachorik Date: Mon, 28 Jul 2025 20:38:30 +0200 Subject: [PATCH 1/2] Do not rely on timeout when testing smap entry cache --- .../controller/openjdk/events/SmapEntryCache.java | 9 +++++++-- .../controller/openjdk/events/SmapEntryCacheTest.java | 7 ++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/main/java/com/datadog/profiling/controller/openjdk/events/SmapEntryCache.java b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/main/java/com/datadog/profiling/controller/openjdk/events/SmapEntryCache.java index 73b0a3591d4..411ed11cd53 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/main/java/com/datadog/profiling/controller/openjdk/events/SmapEntryCache.java +++ b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/main/java/com/datadog/profiling/controller/openjdk/events/SmapEntryCache.java @@ -62,6 +62,11 @@ static class AnnotatedRegion { this.smapsPath = smapsPath; } + // @VisibleForTesting + void invalidate() { + UPDATER.getAndSet(this, System.nanoTime() - (2 * ttl)); + } + @SuppressWarnings("unchecked") public List getEvents() { long prevTimestamp = lastTimestamp; @@ -296,9 +301,9 @@ private static Map getAnnotatedRegions() { return Collections.emptyMap(); } - private static void collectEvents(List events) { + private void collectEvents(List events) { try (BufferedReader br = - new BufferedReader(new InputStreamReader(Files.newInputStream(SMAPS_PATH)), 64 * 1024)) { + new BufferedReader(new InputStreamReader(Files.newInputStream(smapsPath)), 64 * 1024)) { readEvents(br, events); Map regions = getAnnotatedRegions(); for (SmapEntryEvent e : events) { diff --git a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/events/SmapEntryCacheTest.java b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/events/SmapEntryCacheTest.java index 6da936d4223..519e8f7e52d 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/events/SmapEntryCacheTest.java +++ b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/events/SmapEntryCacheTest.java @@ -18,16 +18,13 @@ void getEvents() throws Exception { assumeTrue(OperatingSystem.isLinux()); // We need at least Java 22 for the annotated regions assumeTrue(JavaVirtualMachine.isJavaVersionAtLeast(22)); - SmapEntryCache smapEntryCache = new SmapEntryCache(Duration.ofMillis(100)); + SmapEntryCache smapEntryCache = new SmapEntryCache(Duration.ofHours(1)); // set up a really long expiration duration List events1 = smapEntryCache.getEvents(); List events2 = smapEntryCache.getEvents(); // the cache is using double buffered event list so we can use identity comparison assertSame(events1, events2); - long ts = System.nanoTime(); - while (System.nanoTime() - ts < 150_000_000L) { // make sure the cache is expired - Thread.sleep(200); - } + smapEntryCache.invalidate(); // pretend expiring the cache events1 = smapEntryCache.getEvents(); assertNotSame(events1, events2); } From a88d630ff4a340ee471a24a04586214c4d761286 Mon Sep 17 00:00:00 2001 From: Jaroslav Bachorik Date: Mon, 28 Jul 2025 21:32:16 +0200 Subject: [PATCH 2/2] Spotless! --- .../controller/openjdk/events/SmapEntryCacheTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/events/SmapEntryCacheTest.java b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/events/SmapEntryCacheTest.java index 519e8f7e52d..512a3c49cf0 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/events/SmapEntryCacheTest.java +++ b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/events/SmapEntryCacheTest.java @@ -18,7 +18,8 @@ void getEvents() throws Exception { assumeTrue(OperatingSystem.isLinux()); // We need at least Java 22 for the annotated regions assumeTrue(JavaVirtualMachine.isJavaVersionAtLeast(22)); - SmapEntryCache smapEntryCache = new SmapEntryCache(Duration.ofHours(1)); // set up a really long expiration duration + SmapEntryCache smapEntryCache = + new SmapEntryCache(Duration.ofHours(1)); // set up a really long expiration duration List events1 = smapEntryCache.getEvents(); List events2 = smapEntryCache.getEvents(); // the cache is using double buffered event list so we can use identity comparison