gcp-ingestion
gcp-ingestion copied to clipboard
Unrouteable message due to normalization of keys
/CC @akkomar
Here's a stripped down ping demonstrating the failure. Basically, it appears that this ping passes schema validation treating wr.framebuild_time
and wr_framebuild_time
as both acceptable but then chokes when reconciling the two at a later step. If you remove one or the other this ping gets routed correctly.
This should probably be treated as an error since a client should not be sending one or the other of these.
{
"ping_info": {
"seq": 0,
"start_time": "2024-06-20T11:50+03:00",
"end_time": "2024-06-21T10:41+03:00",
"reason": "overdue"
},
"client_info": {
"telemetry_sdk_build": "52.7.0",
"app_display_version": "115.12.0",
"app_channel": "esr",
"app_build": "20240603145132",
"architecture": "x86",
"os": "Windows",
"os_version": "6.1",
"first_run_date": "2024-06-18+03:00",
"build_date": "1970-01-01T00:00:00+00:00",
"client_id": "e7ee6fd7-ec98-451e-b75e-f8443b46297a",
"windows_build_number": 7600
},
"metrics": {
"timing_distribution": {
"wr.framebuild_time": {
"values": {
"0": 0
},
"sum": 0
},
"wr_framebuild_time": {
"values": {
"0": 0
},
"sum": 0
}
}
}
}
extendedStackTrace: "java.lang.ClassCastException: class com.fasterxml.jackson.databind.node.ArrayNode cannot be cast to class com.fasterxml.jackson.databind.node.ObjectNode (com.fasterxml.jackson.databind.node.ArrayNode and com.fasterxml.jackson.databind.node.ObjectNode are in unnamed module of loader 'app')
at com.mozilla.telemetry.ingestion.core.transform.PubsubMessageToObjectNode$Payload.processField(PubsubMessageToObjectNode.java:439) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at com.mozilla.telemetry.ingestion.core.transform.PubsubMessageToObjectNode$Payload.transformForBqSchema(PubsubMessageToObjectNode.java:398) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at com.mozilla.telemetry.ingestion.core.transform.PubsubMessageToObjectNode$Payload.processField(PubsubMessageToObjectNode.java:458) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at com.mozilla.telemetry.ingestion.core.transform.PubsubMessageToObjectNode$Payload.transformForBqSchema(PubsubMessageToObjectNode.java:398) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at com.mozilla.telemetry.ingestion.core.transform.PubsubMessageToObjectNode$Payload.processField(PubsubMessageToObjectNode.java:458) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at com.mozilla.telemetry.ingestion.core.transform.PubsubMessageToObjectNode$Payload.transformForBqSchema(PubsubMessageToObjectNode.java:398) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at com.mozilla.telemetry.ingestion.core.transform.PubsubMessageToObjectNode$Payload.processField(PubsubMessageToObjectNode.java:458) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at com.mozilla.telemetry.ingestion.core.transform.PubsubMessageToObjectNode$Payload.transformForBqSchema(PubsubMessageToObjectNode.java:398) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at com.mozilla.telemetry.ingestion.core.transform.PubsubMessageToObjectNode$Payload.apply(PubsubMessageToObjectNode.java:344) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at com.mozilla.telemetry.ingestion.sink.io.Gcs$Write$Ndjson$LazyEncodedInput.encode(Gcs.java:67) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at com.mozilla.telemetry.ingestion.sink.io.Gcs$Write$LazyEncodedInput.get(Gcs.java:116) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at com.mozilla.telemetry.ingestion.sink.io.Gcs$Write$Batch.getByteSize(Gcs.java:158) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at com.mozilla.telemetry.ingestion.sink.io.Gcs$Write$Batch.getByteSize(Gcs.java:122) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at com.mozilla.telemetry.ingestion.sink.util.BatchWrite$Batch.add(BatchWrite.java:210) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at com.mozilla.telemetry.ingestion.sink.util.BatchWrite.lambda$apply$3(BatchWrite.java:157) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1932) ~[?:?]
at com.mozilla.telemetry.ingestion.sink.util.BatchWrite.apply(BatchWrite.java:155) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at com.mozilla.telemetry.ingestion.sink.util.BatchWrite.apply(BatchWrite.java:26) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at com.mozilla.telemetry.ingestion.sink.config.SinkConfig$Output.apply(SinkConfig.java:162) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at com.mozilla.telemetry.ingestion.sink.config.SinkConfig$Output.apply(SinkConfig.java:136) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106) ~[?:?]
at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235) ~[?:?]
at com.mozilla.telemetry.ingestion.sink.io.Pubsub.lambda$getConsumer$2(Pubsub.java:37) ~[ingestion-sink-0.1-SNAPSHOT.jar:?]
at com.google.cloud.pubsub.v1.MessageDispatcher$3.run(MessageDispatcher.java:441) ~[google-cloud-pubsub-1.124.1.jar:1.124.1]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
at java.lang.Thread.run(Thread.java:829) ~[?:?]
"
localizedMessage: "class com.fasterxml.jackson.databind.node.ArrayNode cannot be cast to class com.fasterxml.jackson.databind.node.ObjectNode (com.fasterxml.jackson.databind.node.ArrayNode and com.fasterxml.jackson.databind.node.ObjectNode are in unnamed module of loader 'app')"