-
Notifications
You must be signed in to change notification settings - Fork 76
Description
Hello,
I am running into an issue which crashes the application when open-telemetry tries to send data it had stored previously on the disk.
I am getting the following exception:
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)
at io.opentelemetry.android.features.diskbuffering.SignalFromDiskExporter.exportBatchOfSpans(SignalFromDiskExporter.kt:37)
at io.opentelemetry.android.features.diskbuffering.SignalFromDiskExporter.exportBatchOfEach(SignalFromDiskExporter.kt:83)
at io.opentelemetry.android.features.diskbuffering.scheduler.DefaultExportScheduler.onRun(DefaultExportScheduler.kt:31)
at io.opentelemetry.android.internal.services.periodicwork.PeriodicRunnable.run(PeriodicRunnable.kt:24)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
at java.lang.Thread.run(Thread.java:1119)
I have debugged it a bit and it seems that one (or more, I am not sure) spans are stored with traceId set to AnyValue {} which crashes the application.

I am not sure how that happened, but it is here. I would suggest at least as a quick and dirty fix to either remove such attributes, set it to "missing" or ignore such spans as it is better to lose data then to have application not functioning.
I will keep the application in such state for a couple of days so that I can reproduce this and provide more info if needed, but I will need to clear out the data soon.
Thank you for your help!