diff --git a/profiler/src/main/java/com/splunk/opentelemetry/profiler/snapshot/AccumulatingStagingArea.java b/profiler/src/main/java/com/splunk/opentelemetry/profiler/snapshot/AccumulatingStagingArea.java index 3af6f4778..9120c7c28 100644 --- a/profiler/src/main/java/com/splunk/opentelemetry/profiler/snapshot/AccumulatingStagingArea.java +++ b/profiler/src/main/java/com/splunk/opentelemetry/profiler/snapshot/AccumulatingStagingArea.java @@ -16,14 +16,14 @@ package com.splunk.opentelemetry.profiler.snapshot; -import java.util.ArrayList; -import java.util.List; +import java.util.Queue; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ConcurrentMap; import java.util.function.Supplier; class AccumulatingStagingArea implements StagingArea { - private final ConcurrentMap> stackTraces = new ConcurrentHashMap<>(); + private final ConcurrentMap> stackTraces = new ConcurrentHashMap<>(); private final Supplier exporter; AccumulatingStagingArea(Supplier exporter) { @@ -36,7 +36,7 @@ public void stage(String traceId, StackTrace stackTrace) { traceId, (id, stackTraces) -> { if (stackTraces == null) { - stackTraces = new ArrayList<>(); + stackTraces = new ConcurrentLinkedQueue<>(); } stackTraces.add(stackTrace); return stackTraces; @@ -45,7 +45,7 @@ public void stage(String traceId, StackTrace stackTrace) { @Override public void empty(String traceId) { - List stackTraces = this.stackTraces.remove(traceId); + Queue stackTraces = this.stackTraces.remove(traceId); if (stackTraces != null) { exporter.get().export(stackTraces); } diff --git a/profiler/src/main/java/com/splunk/opentelemetry/profiler/snapshot/AsyncStackTraceExporter.java b/profiler/src/main/java/com/splunk/opentelemetry/profiler/snapshot/AsyncStackTraceExporter.java index 25b75d497..6c5a885b4 100644 --- a/profiler/src/main/java/com/splunk/opentelemetry/profiler/snapshot/AsyncStackTraceExporter.java +++ b/profiler/src/main/java/com/splunk/opentelemetry/profiler/snapshot/AsyncStackTraceExporter.java @@ -21,7 +21,7 @@ import com.splunk.opentelemetry.profiler.exporter.PprofCpuEventExporter; import io.opentelemetry.api.logs.Logger; import java.time.Duration; -import java.util.List; +import java.util.Collection; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.logging.Level; @@ -42,11 +42,11 @@ class AsyncStackTraceExporter implements StackTraceExporter { } @Override - public void export(List stackTraces) { + public void export(Collection stackTraces) { executor.submit(pprofExporter(otelLogger, stackTraces)); } - private Runnable pprofExporter(Logger otelLogger, List stackTraces) { + private Runnable pprofExporter(Logger otelLogger, Collection stackTraces) { return () -> { try { CpuEventExporter cpuEventExporter = diff --git a/profiler/src/main/java/com/splunk/opentelemetry/profiler/snapshot/StackTraceExporter.java b/profiler/src/main/java/com/splunk/opentelemetry/profiler/snapshot/StackTraceExporter.java index e583ba3ad..6a4d6f028 100644 --- a/profiler/src/main/java/com/splunk/opentelemetry/profiler/snapshot/StackTraceExporter.java +++ b/profiler/src/main/java/com/splunk/opentelemetry/profiler/snapshot/StackTraceExporter.java @@ -16,11 +16,11 @@ package com.splunk.opentelemetry.profiler.snapshot; -import java.util.List; +import java.util.Collection; /** Works in concert with the {@link StagingArea} to export a batch of {@link StackTrace}s */ interface StackTraceExporter { StackTraceExporter NOOP = stackTraces -> {}; - void export(List stackTraces); + void export(Collection stackTraces); } diff --git a/profiler/src/test/java/com/splunk/opentelemetry/profiler/snapshot/InMemoryStackTraceExporter.java b/profiler/src/test/java/com/splunk/opentelemetry/profiler/snapshot/InMemoryStackTraceExporter.java index f05434697..05004c623 100644 --- a/profiler/src/test/java/com/splunk/opentelemetry/profiler/snapshot/InMemoryStackTraceExporter.java +++ b/profiler/src/test/java/com/splunk/opentelemetry/profiler/snapshot/InMemoryStackTraceExporter.java @@ -17,6 +17,7 @@ package com.splunk.opentelemetry.profiler.snapshot; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; @@ -28,7 +29,7 @@ class InMemoryStackTraceExporter implements StackTraceExporter { private final List stackTraces = new ArrayList<>(); @Override - public void export(List stackTraces) { + public void export(Collection stackTraces) { this.stackTraces.addAll(stackTraces); }