Skip to content

Commit d694852

Browse files
[release/v1.44.x] Fix regression in event attributes (#6866)
Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com>
1 parent 08349dc commit d694852

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

sdk/trace/src/main/java/io/opentelemetry/sdk/trace/SdkSpan.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -445,8 +445,7 @@ public ReadWriteSpan setStatus(StatusCode statusCode, @Nullable String descripti
445445

446446
@Override
447447
public ReadWriteSpan recordException(Throwable exception) {
448-
Attributes attributes = this.getAttributes();
449-
recordException(exception, attributes);
448+
recordException(exception, Attributes.empty());
450449
return this;
451450
}
452451

sdk/trace/src/test/java/io/opentelemetry/sdk/trace/SdkSpanTest.java

+23
Original file line numberDiff line numberDiff line change
@@ -878,6 +878,7 @@ void attributeLength() {
878878
assertThat(event.getAttributes().get(stringKey("exception.message"))).isEqualTo(strVal);
879879
assertThat(event.getAttributes().get(stringKey("exception.stacktrace")).length())
880880
.isLessThanOrEqualTo(maxLength);
881+
assertThat(event.getAttributes().size()).isEqualTo(3);
881882
} finally {
882883
span.end();
883884
}
@@ -1159,6 +1160,9 @@ void recordException() {
11591160
testClock.advance(Duration.ofNanos(1000));
11601161
long timestamp = testClock.now();
11611162

1163+
// make sure that span attributes don't leak down to the exception event
1164+
span.setAttribute("spankey", "val");
1165+
11621166
span.recordException(exception);
11631167

11641168
List<EventData> events = span.toSpanData().getEvents();
@@ -1171,6 +1175,7 @@ void recordException() {
11711175
assertThat(event.getAttributes().get(stringKey("exception.type")))
11721176
.isEqualTo(exception.getClass().getName());
11731177
assertThat(event.getAttributes().get(stringKey("exception.stacktrace"))).isEqualTo(stacktrace);
1178+
assertThat(event.getAttributes().size()).isEqualTo(3);
11741179
assertThat(event)
11751180
.isInstanceOfSatisfying(
11761181
ExceptionEventData.class,
@@ -1184,12 +1189,20 @@ void recordException_noMessage() {
11841189
IllegalStateException exception = new IllegalStateException();
11851190
SdkSpan span = createTestRootSpan();
11861191

1192+
StringWriter writer = new StringWriter();
1193+
exception.printStackTrace(new PrintWriter(writer));
1194+
String stacktrace = writer.toString();
1195+
11871196
span.recordException(exception);
11881197

11891198
List<EventData> events = span.toSpanData().getEvents();
11901199
assertThat(events).hasSize(1);
11911200
EventData event = events.get(0);
11921201
assertThat(event.getAttributes().get(stringKey("exception.message"))).isNull();
1202+
assertThat(event.getAttributes().get(stringKey("exception.type")))
1203+
.isEqualTo("java.lang.IllegalStateException");
1204+
assertThat(event.getAttributes().get(stringKey("exception.stacktrace"))).isEqualTo(stacktrace);
1205+
assertThat(event.getAttributes().size()).isEqualTo(2);
11931206
}
11941207

11951208
private static class InnerClassException extends Exception {}
@@ -1199,13 +1212,19 @@ void recordException_innerClassException() {
11991212
InnerClassException exception = new InnerClassException();
12001213
SdkSpan span = createTestRootSpan();
12011214

1215+
StringWriter writer = new StringWriter();
1216+
exception.printStackTrace(new PrintWriter(writer));
1217+
String stacktrace = writer.toString();
1218+
12021219
span.recordException(exception);
12031220

12041221
List<EventData> events = span.toSpanData().getEvents();
12051222
assertThat(events).hasSize(1);
12061223
EventData event = events.get(0);
12071224
assertThat(event.getAttributes().get(stringKey("exception.type")))
12081225
.isEqualTo("io.opentelemetry.sdk.trace.SdkSpanTest.InnerClassException");
1226+
assertThat(event.getAttributes().get(stringKey("exception.stacktrace"))).isEqualTo(stacktrace);
1227+
assertThat(event.getAttributes().size()).isEqualTo(2);
12091228
}
12101229

12111230
@Test
@@ -1220,6 +1239,9 @@ void recordException_additionalAttributes() {
12201239
testClock.advance(Duration.ofNanos(1000));
12211240
long timestamp = testClock.now();
12221241

1242+
// make sure that span attributes don't leak down to the exception event
1243+
span.setAttribute("spankey", "val");
1244+
12231245
span.recordException(
12241246
exception,
12251247
Attributes.of(
@@ -1240,6 +1262,7 @@ void recordException_additionalAttributes() {
12401262
assertThat(event.getAttributes().get(stringKey("exception.type")))
12411263
.isEqualTo("java.lang.IllegalStateException");
12421264
assertThat(event.getAttributes().get(stringKey("exception.stacktrace"))).isEqualTo(stacktrace);
1265+
assertThat(event.getAttributes().size()).isEqualTo(4);
12431266

12441267
assertThat(event)
12451268
.isInstanceOfSatisfying(

0 commit comments

Comments
 (0)