Skip to content

DiskBuffering crashes with empty string attributes #2257

@LeadAssimilator

Description

@LeadAssimilator

Component(s)

disk-buffering

What happened?

Description

When using disk-buffering, if you have a span or log record with a string attribute set to an empty string, AttributesMapper.addValue throws UnsupportedOperationException().

Steps to Reproduce

  1. configure and enable disk buffering
  2. create a span/logrecord with a string attribute key of "test" with value "" and end/emit it
  3. wait sufficiently long enough for the workers to write the span/logrecord to disk and read it back
  4. observe uncaught UnsupportedOperationException
java.lang.UnsupportedOperationException
 at io.opentelemetry.contrib.disk.buffering.internal.serialization.mapping.common.AttributesMapper.addValue(AttributesMapper.java:88)
 at io.opentelemetry.contrib.disk.buffering.internal.serialization.mapping.common.AttributesMapper.protoToAttributes(AttributesMapper.java:35)
 at io.opentelemetry.contrib.disk.buffering.internal.serialization.mapping.spans.SpanDataMapper.protoToAttributes(SpanDataMapper.java:289)
 at io.opentelemetry.contrib.disk.buffering.internal.serialization.mapping.spans.SpanDataMapper.addSpanDataExtras(SpanDataMapper.java:104)
 at io.opentelemetry.contrib.disk.buffering.internal.serialization.mapping.spans.SpanDataMapper.mapToSdk(SpanDataMapper.java:94)
 at io.opentelemetry.contrib.disk.buffering.internal.serialization.mapping.spans.ProtoSpansDataMapper.protoToSignalItem(ProtoSpansDataMapper.java:43)
 at io.opentelemetry.contrib.disk.buffering.internal.serialization.mapping.spans.ProtoSpansDataMapper.protoToSignalItem(ProtoSpansDataMapper.java:20)
 at io.opentelemetry.contrib.disk.buffering.internal.serialization.mapping.common.BaseProtoSignalsDataMapper.fromProto(BaseProtoSignalsDataMapper.java:59)
 at io.opentelemetry.contrib.disk.buffering.internal.serialization.deserializers.SpanDataDeserializer.deserialize(SpanDataDeserializer.java:28)
 at io.opentelemetry.contrib.disk.buffering.internal.exporter.FromDiskExporterImpl.lambda$exportStoredBatch$0$io-opentelemetry-contrib-disk-buffering-internal-exporter-FromDiskExporterImpl(FromDiskExporterImpl.java:70)
 at io.opentelemetry.contrib.disk.buffering.internal.exporter.FromDiskExporterImpl$$ExternalSyntheticLambda0.apply(D8$$SyntheticClass:0)
 at io.opentelemetry.contrib.disk.buffering.internal.storage.files.ReadableFile.readAndProcess(ReadableFile.java:90)
 at io.opentelemetry.contrib.disk.buffering.internal.storage.Storage.readAndProcess(Storage.java:120)
 at io.opentelemetry.contrib.disk.buffering.internal.storage.Storage.readAndProcess(Storage.java:98)
 at io.opentelemetry.contrib.disk.buffering.internal.exporter.FromDiskExporterImpl.exportStoredBatch(FromDiskExporterImpl.java:61)
 at io.opentelemetry.contrib.disk.buffering.SpanFromDiskExporter.exportStoredBatch(SpanFromDiskExporter.java:37)

Expected Result

no crash

Actual Result

crash

Everything worked fine in 1.48.0-alpha.

Component version

1.49.0-alpha

Log output

No response

Additional context

No response

Tip

React with 👍 to help prioritize this issue. Please use comments to provide useful context, avoiding +1 or me too, to help us triage it. Learn more here.

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions