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; package io.opentelemetry.sdk.trace;
import io.opentelemetry.common.AttributeValue; import io.opentelemetry.common.AttributeValue;
import io.opentelemetry.common.AttributeValue.Type;
import io.opentelemetry.internal.StringUtils;
import io.opentelemetry.internal.Utils; import io.opentelemetry.internal.Utils;
import io.opentelemetry.sdk.common.Clock; import io.opentelemetry.sdk.common.Clock;
import io.opentelemetry.sdk.common.InstrumentationLibraryInfo; import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
@ -169,14 +167,29 @@ final class SpanBuilderSdk implements Span.Builder {
@Override @Override
public Span.Builder setAttribute(String key, AttributeValue value) { public Span.Builder setAttribute(String key, AttributeValue value) {
Utils.checkNotNull(key, "key"); Utils.checkNotNull(key, "key");
Utils.checkNotNull(value, "value"); if (isRemovedValue(value)) {
if (value.getType() == Type.STRING && StringUtils.isNullOrEmpty(value.getStringValue())) { attributes.remove(key);
return this; } else {
attributes.putAttribute(key, value);
} }
attributes.putAttribute(key, value);
return this; 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 @Override
public Span.Builder setStartTimestamp(long startTimestamp) { public Span.Builder setStartTimestamp(long startTimestamp) {
Utils.checkArgument(startTimestamp >= 0, "Negative startTimestamp"); Utils.checkArgument(startTimestamp >= 0, "Negative startTimestamp");

View File

@ -180,6 +180,29 @@ public class SpanBuilderSdkTest {
spanBuilder.setAttribute("nullStringAttributeValue", AttributeValue.stringAttributeValue(null)); spanBuilder.setAttribute("nullStringAttributeValue", AttributeValue.stringAttributeValue(null));
spanBuilder.setAttribute("emptyStringAttributeValue", AttributeValue.stringAttributeValue("")); spanBuilder.setAttribute("emptyStringAttributeValue", AttributeValue.stringAttributeValue(""));
RecordEventsReadableSpan span = (RecordEventsReadableSpan) spanBuilder.startSpan(); 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(); assertThat(span.toSpanData().getAttributes()).isEmpty();
} }