From 720f97491a47493d55a53ca59d488dae493afebd Mon Sep 17 00:00:00 2001 From: jack-berg Date: Thu, 14 Oct 2021 10:49:51 -0500 Subject: [PATCH 1/2] Add failing test for toProtoLogRecord with minimal fields --- .../logs/LogsRequestMarshalerTest.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/exporters/otlp/common/src/test/java/io/opentelemetry/exporter/otlp/internal/logs/LogsRequestMarshalerTest.java b/exporters/otlp/common/src/test/java/io/opentelemetry/exporter/otlp/internal/logs/LogsRequestMarshalerTest.java index f72611e117f..1e9f224106f 100644 --- a/exporters/otlp/common/src/test/java/io/opentelemetry/exporter/otlp/internal/logs/LogsRequestMarshalerTest.java +++ b/exporters/otlp/common/src/test/java/io/opentelemetry/exporter/otlp/internal/logs/LogsRequestMarshalerTest.java @@ -108,6 +108,34 @@ void toProtoLogRecord() { assertThat(logRecord.getTimeUnixNano()).isEqualTo(12345); } + @Test + void toProtoLogRecord_MinimalFields() { + LogRecord logRecord = + parse( + LogRecord.getDefaultInstance(), + LogMarshaler.create( + io.opentelemetry.sdk.logs.data.LogRecord.builder( + Resource.create(Attributes.builder().put("testKey", "testValue").build()), + InstrumentationLibraryInfo.create("instrumentation", "1")) + .setBody(BODY) + .setSeverity(Severity.INFO) + .setAttributes(Attributes.of(AttributeKey.booleanKey("key"), true)) + .setEpochNanos(12345) + .build())); + + assertThat(logRecord.getTraceId().toByteArray()).isEqualTo(TRACE_ID_BYTES); + assertThat(logRecord.getSpanId().toByteArray()).isEqualTo(SPAN_ID_BYTES); + assertThat(logRecord.getName()).isEqualTo(NAME); + assertThat(logRecord.getBody()).isEqualTo(AnyValue.newBuilder().setStringValue(BODY).build()); + assertThat(logRecord.getAttributesList()) + .containsExactly( + KeyValue.newBuilder() + .setKey("key") + .setValue(AnyValue.newBuilder().setBoolValue(true).build()) + .build()); + assertThat(logRecord.getTimeUnixNano()).isEqualTo(12345); + } + @SuppressWarnings("unchecked") private static T parse(T prototype, Marshaler marshaler) { byte[] serialized = toByteArray(marshaler); From c2259ed3d1c6c11976db5a95541eed8705d0e54d Mon Sep 17 00:00:00 2001 From: jack-berg Date: Thu, 14 Oct 2021 10:53:26 -0500 Subject: [PATCH 2/2] Make LogData spanId and traceId nullable --- .../exporter/otlp/internal/logs/LogMarshaler.java | 13 +++++++------ .../internal/logs/LogsRequestMarshalerTest.java | 12 +++++++----- .../opentelemetry/sdk/logs/LogSinkSdkProvider.java | 2 +- .../io/opentelemetry/sdk/logs/data/LogData.java | 2 ++ .../io/opentelemetry/sdk/logs/data/LogRecord.java | 4 ++-- .../sdk/logs/data/LogRecordBuilder.java | 4 ++-- 6 files changed, 21 insertions(+), 16 deletions(-) diff --git a/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/logs/LogMarshaler.java b/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/logs/LogMarshaler.java index 327a9adaa3b..16dfaf1ba98 100644 --- a/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/logs/LogMarshaler.java +++ b/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/logs/LogMarshaler.java @@ -15,6 +15,7 @@ import io.opentelemetry.proto.logs.v1.internal.SeverityNumber; import io.opentelemetry.sdk.logs.data.Severity; import java.io.IOException; +import javax.annotation.Nullable; final class LogMarshaler extends MarshalerWithSize { private final long timeUnixNano; @@ -25,8 +26,8 @@ final class LogMarshaler extends MarshalerWithSize { private final KeyValueMarshaler[] attributeMarshalers; private final int droppedAttributesCount; private final int flags; - private final String traceId; - private final String spanId; + @Nullable private final String traceId; + @Nullable private final String spanId; static LogMarshaler create(io.opentelemetry.sdk.logs.data.LogData logData) { KeyValueMarshaler[] attributeMarshalers = @@ -59,8 +60,8 @@ private LogMarshaler( KeyValueMarshaler[] attributeMarshalers, int droppedAttributesCount, int flags, - String traceId, - String spanId) { + @Nullable String traceId, + @Nullable String spanId) { super( calculateSize( timeUnixNano, @@ -114,8 +115,8 @@ private static int calculateSize( KeyValueMarshaler[] attributeMarshalers, int droppedAttributesCount, int flags, - String traceId, - String spanId) { + @Nullable String traceId, + @Nullable String spanId) { int size = 0; size += MarshalerUtil.sizeFixed64(LogRecord.TIME_UNIX_NANO, timeUnixNano); diff --git a/exporters/otlp/common/src/test/java/io/opentelemetry/exporter/otlp/internal/logs/LogsRequestMarshalerTest.java b/exporters/otlp/common/src/test/java/io/opentelemetry/exporter/otlp/internal/logs/LogsRequestMarshalerTest.java index 1e9f224106f..810c45efd71 100644 --- a/exporters/otlp/common/src/test/java/io/opentelemetry/exporter/otlp/internal/logs/LogsRequestMarshalerTest.java +++ b/exporters/otlp/common/src/test/java/io/opentelemetry/exporter/otlp/internal/logs/LogsRequestMarshalerTest.java @@ -98,6 +98,7 @@ void toProtoLogRecord() { assertThat(logRecord.getTraceId().toByteArray()).isEqualTo(TRACE_ID_BYTES); assertThat(logRecord.getSpanId().toByteArray()).isEqualTo(SPAN_ID_BYTES); assertThat(logRecord.getName()).isEqualTo(NAME); + assertThat(logRecord.getSeverityText()).isEqualTo("INFO"); assertThat(logRecord.getBody()).isEqualTo(AnyValue.newBuilder().setStringValue(BODY).build()); assertThat(logRecord.getAttributesList()) .containsExactly( @@ -115,17 +116,18 @@ void toProtoLogRecord_MinimalFields() { LogRecord.getDefaultInstance(), LogMarshaler.create( io.opentelemetry.sdk.logs.data.LogRecord.builder( - Resource.create(Attributes.builder().put("testKey", "testValue").build()), - InstrumentationLibraryInfo.create("instrumentation", "1")) + Resource.create(Attributes.builder().put("testKey", "testValue").build()), + InstrumentationLibraryInfo.create("instrumentation", "1")) .setBody(BODY) .setSeverity(Severity.INFO) .setAttributes(Attributes.of(AttributeKey.booleanKey("key"), true)) .setEpochNanos(12345) .build())); - assertThat(logRecord.getTraceId().toByteArray()).isEqualTo(TRACE_ID_BYTES); - assertThat(logRecord.getSpanId().toByteArray()).isEqualTo(SPAN_ID_BYTES); - assertThat(logRecord.getName()).isEqualTo(NAME); + assertThat(logRecord.getTraceId().toByteArray()).isEmpty(); + assertThat(logRecord.getSpanId().toByteArray()).isEmpty(); + assertThat(logRecord.getName()).isBlank(); + assertThat(logRecord.getSeverityText()).isBlank(); assertThat(logRecord.getBody()).isEqualTo(AnyValue.newBuilder().setStringValue(BODY).build()); assertThat(logRecord.getAttributesList()) .containsExactly( diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/LogSinkSdkProvider.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/LogSinkSdkProvider.java index c6fa8df5c67..7aaa81cd31e 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/LogSinkSdkProvider.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/LogSinkSdkProvider.java @@ -21,7 +21,7 @@ public final class LogSinkSdkProvider { * * @return a new {@link LogSinkSdkProviderBuilder} for this class. */ - static LogSinkSdkProviderBuilder builder() { + public static LogSinkSdkProviderBuilder builder() { return new LogSinkSdkProviderBuilder(); } diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogData.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogData.java index 8f64aca9bc1..4b5dd5a07f2 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogData.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogData.java @@ -45,6 +45,7 @@ public interface LogData { * * @return the trace id. */ + @Nullable String getTraceId(); /** @@ -52,6 +53,7 @@ public interface LogData { * * @return the span id. */ + @Nullable String getSpanId(); /** diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecord.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecord.java index b427d8779c5..c24bd4cf991 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecord.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecord.java @@ -27,8 +27,8 @@ static LogRecord create( Resource resource, InstrumentationLibraryInfo instrumentationLibraryInfo, long epochNanos, - String traceId, - String spanId, + @Nullable String traceId, + @Nullable String spanId, int flags, Severity severity, @Nullable String severityText, diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecordBuilder.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecordBuilder.java index 8aefdaac4ec..310cd76e328 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecordBuilder.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogRecordBuilder.java @@ -18,8 +18,8 @@ public final class LogRecordBuilder { private final InstrumentationLibraryInfo instrumentationLibraryInfo; private long epochNanos; - private String traceId = ""; - private String spanId = ""; + @Nullable private String traceId; + @Nullable private String spanId; private int flags; private Severity severity = Severity.UNDEFINED_SEVERITY_NUMBER; @Nullable private String severityText;