diag(qconnect): add decode-layer logging to find envelope unwrap issue
Log whether QCloudInnerEnvelope decode succeeds/fails, message byte count, and whether queue/renderer decoders succeed or error.
This commit is contained in:
2 files changed
+35
-4
No files matched your search
@@ -14,3 +14,4 @@ thiserror = { workspace = true }
|
|||||||
futures-util = { workspace = true }
|
futures-util = { workspace = true }
|
||||||
tokio-tungstenite = { version = "0.24", features = ["rustls-tls-webpki-roots"] }
|
tokio-tungstenite = { version = "0.24", features = ["rustls-tls-webpki-roots"] }
|
||||||
prost = "0.13"
|
prost = "0.13"
|
||||||
|
log = "0.4"
|
||||||
@@ -600,17 +600,43 @@ fn handle_incoming_binary(
|
|||||||
// field 3 (bytes): the actual QConnectMessage protobuf
|
// field 3 (bytes): the actual QConnectMessage protobuf
|
||||||
// We must unwrap field 3 before passing to the decoders.
|
// We must unwrap field 3 before passing to the decoders.
|
||||||
let qconnect_bytes = match QCloudInnerEnvelope::decode(inner_payload.as_slice()) {
|
let qconnect_bytes = match QCloudInnerEnvelope::decode(inner_payload.as_slice()) {
|
||||||
Ok(envelope) => envelope.message.unwrap_or_default(),
|
Ok(envelope) => {
|
||||||
Err(_) => inner_payload,
|
let msg = envelope.message.unwrap_or_default();
|
||||||
|
log::info!(
|
||||||
|
"[QConnect/Decode] Envelope unwrapped: corr={:?} seq={:?} message_len={}",
|
||||||
|
envelope.correlation_id,
|
||||||
|
envelope.sequence,
|
||||||
|
msg.len()
|
||||||
|
);
|
||||||
|
msg
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
log::warn!(
|
||||||
|
"[QConnect/Decode] Envelope decode failed ({}), using raw {} bytes",
|
||||||
|
err,
|
||||||
|
inner_payload.len()
|
||||||
|
);
|
||||||
|
inner_payload
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Ok(events) = decode_queue_server_events(&qconnect_bytes) {
|
match decode_queue_server_events(&qconnect_bytes) {
|
||||||
|
Ok(events) => {
|
||||||
|
log::info!("[QConnect/Decode] Queue events decoded: {}", events.len());
|
||||||
for event in events {
|
for event in events {
|
||||||
emit(events_tx, TransportEvent::InboundQueueServerEvent(event));
|
emit(events_tx, TransportEvent::InboundQueueServerEvent(event));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Err(err) => {
|
||||||
|
log::warn!("[QConnect/Decode] Queue events decode error: {}", err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if let Ok(commands) = decode_renderer_server_commands(&qconnect_bytes) {
|
match decode_renderer_server_commands(&qconnect_bytes) {
|
||||||
|
Ok(commands) => {
|
||||||
|
if !commands.is_empty() {
|
||||||
|
log::info!("[QConnect/Decode] Renderer commands decoded: {}", commands.len());
|
||||||
|
}
|
||||||
for command in commands {
|
for command in commands {
|
||||||
emit(
|
emit(
|
||||||
events_tx,
|
events_tx,
|
||||||
@@ -618,6 +644,10 @@ fn handle_incoming_binary(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Err(err) => {
|
||||||
|
log::debug!("[QConnect/Decode] Renderer commands decode error: {}", err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if let Ok(inbound) = decode_inbound_json(&qconnect_bytes) {
|
if let Ok(inbound) = decode_inbound_json(&qconnect_bytes) {
|
||||||
emit(events_tx, TransportEvent::InboundReceived(inbound));
|
emit(events_tx, TransportEvent::InboundReceived(inbound));
|
||||||
|
|||||||
Reference in new issue
Block a user