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..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,16 +18,14 @@ 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); }