@@ -26,51 +26,58 @@ class AirbyteExceptionHandler : Thread.UncaughtExceptionHandler {
26
26
// the sync."
27
27
// from the spec:
28
28
// https://docs.google.com/document/d/1ctrj3Yh_GjtQ93aND-WH3ocqGxsmxyC3jfiarrF6NY0/edit#
29
- LOGGER .error(logMessage, throwable)
30
- // Attempt to deinterpolate the error message before emitting a trace message
31
- val mangledMessage: String?
32
- // If any exception in the chain is of a deinterpolatable type, find it and deinterpolate
33
- // its
34
- // message.
35
- // This assumes that any wrapping exceptions are just noise (e.g. runtime exception).
36
- val deinterpolatableException =
37
- ExceptionUtils .getThrowableList(throwable)
38
- .stream()
39
- .filter { t: Throwable ->
40
- THROWABLES_TO_DEINTERPOLATE .stream().anyMatch {
41
- deinterpolatableClass: Class <out Throwable > ->
42
- deinterpolatableClass.isAssignableFrom(t.javaClass)
29
+ try {
30
+ LOGGER .error(logMessage, throwable)
31
+ // Attempt to deinterpolate the error message before emitting a trace message
32
+ val mangledMessage: String?
33
+ // If any exception in the chain is of a deinterpolatable type, find it and
34
+ // deinterpolate
35
+ // its
36
+ // message.
37
+ // This assumes that any wrapping exceptions are just noise (e.g. runtime exception).
38
+ val deinterpolatableException =
39
+ ExceptionUtils .getThrowableList(throwable)
40
+ .stream()
41
+ .filter { t: Throwable ->
42
+ THROWABLES_TO_DEINTERPOLATE .stream().anyMatch {
43
+ deinterpolatableClass: Class <out Throwable > ->
44
+ deinterpolatableClass.isAssignableFrom(t.javaClass)
45
+ }
43
46
}
44
- }
45
- .findFirst()
46
- val messageWasMangled : Boolean
47
- if ( deinterpolatableException.isPresent) {
48
- val originalMessage = deinterpolatableException.get().message
49
- mangledMessage =
50
- STRINGS_TO_DEINTERPOLATE
51
- .stream() // Sort the strings longest to shortest, in case any target string is
52
- // a substring of another
53
- // e.g. "airbyte_internal" should be swapped out before "airbyte"
54
- .sorted(Comparator .comparing { obj: String -> obj.length }.reversed())
55
- .reduce(originalMessage) { message: String? , targetString: String? ->
56
- deinterpolate(message, targetString)
57
- }
58
- messageWasMangled = mangledMessage != originalMessage
59
- } else {
60
- mangledMessage = throwable.message
61
- messageWasMangled = false
62
- }
47
+ .findFirst()
48
+ val messageWasMangled : Boolean
49
+ if (deinterpolatableException.isPresent) {
50
+ val originalMessage = deinterpolatableException.get().message
51
+ mangledMessage =
52
+ STRINGS_TO_DEINTERPOLATE
53
+ .stream() // Sort the strings longest to shortest, in case any target string
54
+ // is
55
+ // a substring of another
56
+ // e.g. "airbyte_internal" should be swapped out before "airbyte"
57
+ .sorted(Comparator .comparing { obj: String -> obj.length }.reversed())
58
+ .reduce(originalMessage) { message: String? , targetString: String? ->
59
+ deinterpolate(message, targetString)
60
+ }
61
+ messageWasMangled = mangledMessage != originalMessage
62
+ } else {
63
+ mangledMessage = throwable.message
64
+ messageWasMangled = false
65
+ }
63
66
64
- if (! messageWasMangled) {
65
- // If we did not modify the message (either not a deinterpolatable class, or we tried to
66
- // deinterpolate but made no changes) then emit our default trace message
67
- AirbyteTraceMessageUtility .emitSystemErrorTrace(throwable, logMessage)
68
- } else {
69
- // If we did modify the message, then emit a custom trace message
70
- AirbyteTraceMessageUtility .emitCustomErrorTrace(throwable.message, mangledMessage)
67
+ if (! messageWasMangled) {
68
+ // If we did not modify the message (either not a deinterpolatable class, or we
69
+ // tried to
70
+ // deinterpolate but made no changes) then emit our default trace message
71
+ AirbyteTraceMessageUtility .emitSystemErrorTrace(throwable, logMessage)
72
+ } else {
73
+ // If we did modify the message, then emit a custom trace message
74
+ AirbyteTraceMessageUtility .emitCustomErrorTrace(throwable.message, mangledMessage)
75
+ }
76
+ } catch (t: Throwable ) {
77
+ LOGGER .error(" exception in the exception handler" , t)
78
+ } finally {
79
+ terminate()
71
80
}
72
-
73
- terminate()
74
81
}
75
82
76
83
// by doing this in a separate method we can mock it to avoid closing the jvm and therefore test
0 commit comments