-
Notifications
You must be signed in to change notification settings - Fork 172
Open
Labels
Description
Component(s)
disk-buffering
What happened?
Description
LogRecord with a body equal to an empty string cannot be mapped to an SDK value. It happens in the background and causes the following unhandled exception.
java.lang.IllegalArgumentException: Unrecognized AnyValue type
at io.opentelemetry.contrib.disk.buffering.internal.serialization.mapping.logs.LogRecordDataMapper.anyValueToBody(LogRecordDataMapper.java:139)
at io.opentelemetry.contrib.disk.buffering.internal.serialization.mapping.logs.LogRecordDataMapper.mapToSdk(LogRecordDataMapper.java:81)
at io.opentelemetry.contrib.disk.buffering.internal.serialization.mapping.logs.ProtoLogsDataMapper.protoToSignalItem(ProtoLogsDataMapper.java:38)
at io.opentelemetry.contrib.disk.buffering.internal.serialization.mapping.logs.ProtoLogsDataMapper.protoToSignalItem(ProtoLogsDataMapper.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.LogRecordDataDeserializer.deserialize(LogRecordDataDeserializer.java:27)
at io.opentelemetry.contrib.disk.buffering.internal.storage.Storage.doReadNext(Storage.java:123)
at io.opentelemetry.contrib.disk.buffering.internal.storage.Storage.readNext(Storage.java:94)
at io.opentelemetry.contrib.disk.buffering.internal.storage.StorageIterator.findNext(StorageIterator.java:80)
at io.opentelemetry.contrib.disk.buffering.internal.storage.StorageIterator.hasNext(StorageIterator.java:41)
at io.opentelemetry.android.features.diskbuffering.SignalFromDiskExporter.export(SignalFromDiskExporter.kt:73)
at io.opentelemetry.android.features.diskbuffering.SignalFromDiskExporter.exportBatchOfLogs(SignalFromDiskExporter.kt:65)
at io.opentelemetry.android.features.diskbuffering.SignalFromDiskExporter.exportBatchOfEach(SignalFromDiskExporter.kt:96)
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:1167)
Steps to Reproduce
Our app emits log records using Kotlin code like:
openTelemetry.logsBridge.get("applicationName")
.logRecordBuilder()
.setSeverity(severity)
....
.setBody("") // Empty String
.emit()LogRecord is stored to the storage file.
Expected Result
On periodic background export, all log records are properly read from the storage file and submitted.
Actual Result
AnyValue deserialized using protobuf cannot be mapped to the SDK's Value. It causes the unhandled exception.
Component version
1.52.0
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.
JacekPietrasSpotOn and andrewp-SpotOn