Revise null values for AttributeValue (#1026)

This commit is contained in:
Giovanni Liva 2020-03-20 18:08:31 +01:00 committed by GitHub
parent e4e648e435
commit 73e671d8f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 6 deletions

View File

@ -17,8 +17,6 @@
package io.opentelemetry.sdk.trace;
import io.opentelemetry.common.AttributeValue;
import io.opentelemetry.common.AttributeValue.Type;
import io.opentelemetry.internal.StringUtils;
import io.opentelemetry.internal.Utils;
import io.opentelemetry.sdk.common.Clock;
import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
@ -169,12 +167,27 @@ final class SpanBuilderSdk implements Span.Builder {
@Override
public Span.Builder setAttribute(String key, AttributeValue value) {
Utils.checkNotNull(key, "key");
Utils.checkNotNull(value, "value");
if (value.getType() == Type.STRING && StringUtils.isNullOrEmpty(value.getStringValue())) {
if (isRemovedValue(value)) {
attributes.remove(key);
} else {
attributes.putAttribute(key, value);
}
return this;
}
attributes.putAttribute(key, value);
return this;
private static boolean isRemovedValue(AttributeValue value) {
if (value == null) {
return true;
}
switch (value.getType()) {
case STRING:
return value.getStringValue() == null;
case BOOLEAN:
case LONG:
case DOUBLE:
return false;
}
return false;
}
@Override

View File

@ -180,6 +180,29 @@ public class SpanBuilderSdkTest {
spanBuilder.setAttribute("nullStringAttributeValue", AttributeValue.stringAttributeValue(null));
spanBuilder.setAttribute("emptyStringAttributeValue", AttributeValue.stringAttributeValue(""));
RecordEventsReadableSpan span = (RecordEventsReadableSpan) spanBuilder.startSpan();
assertThat(span.toSpanData().getAttributes().size()).isEqualTo(2);
spanBuilder.setAttribute("emptyString", (String) null);
spanBuilder.setAttribute("emptyStringAttributeValue", (String) null);
assertThat(span.toSpanData().getAttributes()).isEmpty();
}
@Test
public void setAttribute_nullAttributeValue() throws Exception {
Span.Builder spanBuilder = tracerSdk.spanBuilder(SPAN_NAME);
spanBuilder.setAttribute("emptyString", "");
spanBuilder.setAttribute("nullString", (AttributeValue) null);
spanBuilder.setAttribute("nullStringAttributeValue", AttributeValue.stringAttributeValue(null));
spanBuilder.setAttribute("emptyStringAttributeValue", AttributeValue.stringAttributeValue(""));
spanBuilder.setAttribute("longAttribute", 0L);
spanBuilder.setAttribute("boolAttribute", false);
spanBuilder.setAttribute("doubleAttribute", 0.12345f);
RecordEventsReadableSpan span = (RecordEventsReadableSpan) spanBuilder.startSpan();
assertThat(span.toSpanData().getAttributes().size()).isEqualTo(5);
spanBuilder.setAttribute("emptyString", (AttributeValue) null);
spanBuilder.setAttribute("emptyStringAttributeValue", (AttributeValue) null);
spanBuilder.setAttribute("longAttribute", (AttributeValue) null);
spanBuilder.setAttribute("boolAttribute", (AttributeValue) null);
spanBuilder.setAttribute("doubleAttribute", (AttributeValue) null);
assertThat(span.toSpanData().getAttributes()).isEmpty();
}