Skip to content

Commit 2a97eae

Browse files
authored
Add synchronization to SimpleLogRecordProcessor and SimpleSpanProcessor to ensure thread-safe export of logs and spans respectively (#6885)
1 parent ec3c55f commit 2a97eae

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

sdk/logs/src/main/java/io/opentelemetry/sdk/logs/export/SimpleLogRecordProcessor.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ public final class SimpleLogRecordProcessor implements LogRecordProcessor {
4141
Collections.newSetFromMap(new ConcurrentHashMap<>());
4242
private final AtomicBoolean isShutdown = new AtomicBoolean(false);
4343

44+
private final Object exporterLock = new Object();
45+
4446
/**
4547
* Returns a new {@link SimpleLogRecordProcessor} which exports logs to the {@link
4648
* LogRecordExporter} synchronously.
@@ -64,7 +66,12 @@ private SimpleLogRecordProcessor(LogRecordExporter logRecordExporter) {
6466
public void onEmit(Context context, ReadWriteLogRecord logRecord) {
6567
try {
6668
List<LogRecordData> logs = Collections.singletonList(logRecord.toLogRecordData());
67-
CompletableResultCode result = logRecordExporter.export(logs);
69+
CompletableResultCode result;
70+
71+
synchronized (exporterLock) {
72+
result = logRecordExporter.export(logs);
73+
}
74+
6875
pendingExports.add(result);
6976
result.whenComplete(
7077
() -> {

sdk/trace/src/main/java/io/opentelemetry/sdk/trace/export/SimpleSpanProcessor.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ public final class SimpleSpanProcessor implements SpanProcessor {
4141
Collections.newSetFromMap(new ConcurrentHashMap<>());
4242
private final AtomicBoolean isShutdown = new AtomicBoolean(false);
4343

44+
private final Object exporterLock = new Object();
45+
4446
/**
4547
* Returns a new {@link SimpleSpanProcessor} which exports spans to the {@link SpanExporter}
4648
* synchronously.
@@ -86,7 +88,12 @@ public void onEnd(ReadableSpan span) {
8688
if (span != null && (exportUnsampledSpans || span.getSpanContext().isSampled())) {
8789
try {
8890
List<SpanData> spans = Collections.singletonList(span.toSpanData());
89-
CompletableResultCode result = spanExporter.export(spans);
91+
CompletableResultCode result;
92+
93+
synchronized (exporterLock) {
94+
result = spanExporter.export(spans);
95+
}
96+
9097
pendingExports.add(result);
9198
result.whenComplete(
9299
() -> {

0 commit comments

Comments
 (0)