Revise null values for AttributeValue (#1026)
This commit is contained in:
parent
e4e648e435
commit
73e671d8f1
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue