Skip to content

Commit a94f656

Browse files
authored
Merge pull request #86 from cisco-open/fix/master/add-uncaught-exception-handler
Add uncaught exception handler
2 parents 0479364 + 7717210 commit a94f656

File tree

4 files changed

+42
-3
lines changed

4 files changed

+42
-3
lines changed

src/main/java/io/opentelemetry/contrib/generator/telemetry/logs/LogsGenerator.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import io.opentelemetry.contrib.generator.telemetry.dto.GeneratorState;
2121
import io.opentelemetry.contrib.generator.telemetry.logs.dto.LogDefinition;
2222
import io.opentelemetry.contrib.generator.telemetry.logs.dto.Logs;
23+
import io.opentelemetry.contrib.generator.telemetry.misc.GeneratorExceptionHandler;
2324
import io.opentelemetry.contrib.generator.telemetry.transport.PayloadHandler;
2425
import io.opentelemetry.contrib.generator.telemetry.transport.TransportStorage;
2526
import lombok.extern.slf4j.Slf4j;
@@ -28,6 +29,7 @@
2829
import java.util.Map;
2930
import java.util.concurrent.ConcurrentHashMap;
3031
import java.util.concurrent.Executors;
32+
import java.util.concurrent.ScheduledExecutorService;
3133
import java.util.concurrent.TimeUnit;
3234

3335
/**
@@ -62,7 +64,14 @@ public void runGenerator() {
6264
}
6365

6466
private void initGeneratorState(int totalPayloadCount) {
65-
generatorState = new GeneratorState<>(Executors.newScheduledThreadPool(logs.getLogs().size()));
67+
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(
68+
logs.getLogs().size(),
69+
runnable -> {
70+
Thread t = Executors.defaultThreadFactory().newThread(runnable);
71+
t.setUncaughtExceptionHandler(new GeneratorExceptionHandler());
72+
return t;
73+
});
74+
generatorState = new GeneratorState<>(executorService);
6675
generatorState.setTotalPayloadCount(totalPayloadCount);
6776
generatorState.setThreadPayloadCounts(new ConcurrentHashMap<>());
6877
if (transportStorage != null) {

src/main/java/io/opentelemetry/contrib/generator/telemetry/metrics/MetricsGenerator.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import io.opentelemetry.contrib.generator.telemetry.GeneratorsStateProvider;
2020
import io.opentelemetry.contrib.generator.telemetry.dto.GeneratorState;
21+
import io.opentelemetry.contrib.generator.telemetry.misc.GeneratorExceptionHandler;
2122
import io.opentelemetry.contrib.generator.telemetry.transport.PayloadHandler;
2223
import io.opentelemetry.contrib.generator.telemetry.transport.TransportStorage;
2324
import io.opentelemetry.contrib.generator.telemetry.metrics.dto.MetricDefinition;
@@ -29,6 +30,7 @@
2930
import java.util.*;
3031
import java.util.concurrent.ConcurrentHashMap;
3132
import java.util.concurrent.Executors;
33+
import java.util.concurrent.ScheduledExecutorService;
3234
import java.util.concurrent.TimeUnit;
3335

3436
/**
@@ -70,7 +72,14 @@ public void runGenerator() {
7072
}
7173

7274
private void initGeneratorState() {
73-
generatorState = new GeneratorState<>(Executors.newScheduledThreadPool(metricThreadGroups.size()));
75+
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(
76+
metricThreadGroups.size(),
77+
runnable -> {
78+
Thread t = Executors.defaultThreadFactory().newThread(runnable);
79+
t.setUncaughtExceptionHandler(new GeneratorExceptionHandler());
80+
return t;
81+
});
82+
generatorState = new GeneratorState<>(executorService);
7483
generatorState.setThreadPayloadCounts(new ConcurrentHashMap<>());
7584
if (transportStorage != null) {
7685
transportStorage.initMetricResponseMaps();
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package io.opentelemetry.contrib.generator.telemetry.misc;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
5+
@Slf4j
6+
public class GeneratorExceptionHandler implements Thread.UncaughtExceptionHandler {
7+
8+
@Override
9+
public void uncaughtException(Thread t, Throwable e) {
10+
log.error("Error occurred in thread " + t.getName(), e);
11+
}
12+
}

src/main/java/io/opentelemetry/contrib/generator/telemetry/traces/TracesGenerator.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import io.opentelemetry.contrib.generator.telemetry.GeneratorsStateProvider;
2020
import io.opentelemetry.contrib.generator.telemetry.dto.GeneratorState;
21+
import io.opentelemetry.contrib.generator.telemetry.misc.GeneratorExceptionHandler;
2122
import io.opentelemetry.contrib.generator.telemetry.transport.PayloadHandler;
2223
import io.opentelemetry.contrib.generator.telemetry.transport.TransportStorage;
2324
import io.opentelemetry.contrib.generator.telemetry.traces.dto.RootSpanDefinition;
@@ -27,6 +28,7 @@
2728
import java.util.*;
2829
import java.util.concurrent.ConcurrentHashMap;
2930
import java.util.concurrent.Executors;
31+
import java.util.concurrent.ScheduledExecutorService;
3032
import java.util.concurrent.TimeUnit;
3133

3234
/**
@@ -66,7 +68,14 @@ public void runGenerator() {
6668
}
6769

6870
private void initGeneratorState() {
69-
generatorState = new GeneratorState<>(Executors.newScheduledThreadPool(traceGroups.size()));
71+
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(
72+
traceGroups.size(),
73+
runnable -> {
74+
Thread t = Executors.defaultThreadFactory().newThread(runnable);
75+
t.setUncaughtExceptionHandler(new GeneratorExceptionHandler());
76+
return t;
77+
});
78+
generatorState = new GeneratorState<>(executorService);
7079
generatorState.setThreadPayloadCounts(new ConcurrentHashMap<>());
7180
if (transportStorage != null) {
7281
transportStorage.initTraceResponseMaps();

0 commit comments

Comments
 (0)