{"record":{"id":"f927448b7961f133","repo":"windmill-labs/windmill","slug":"unknown-replica-identity-byte","errorCode":null,"errorMessage":"unknown replica identity byte `{}`","messagePattern":"unknown replica identity byte `(.+?)`","errorType":"exception","errorClass":"ConversionError::Io (InvalidInput)","httpStatus":null,"severity":"error","filePath":"backend/windmill-trigger-postgres/src/replication_message.rs","lineNumber":327,"sourceCode":"                buf.read_i64::<BigEndian>()?;\n                LogicalReplicationMessage::Commit\n            }\n            RELATION_BYTE => {\n                let transaction_id = match logical_replication_settings.streaming {\n                    true => Some(buf.read_i32::<BigEndian>()?),\n                    false => None,\n                };\n\n                let o_id = buf.read_u32::<BigEndian>()?;\n                let namespace = buf.read_cstr()?;\n                let name = buf.read_cstr()?;\n                let replica_identity = match buf.read_i8()? {\n                    REPLICA_IDENTITY_DEFAULT_BYTE => ReplicaIdentity::Default,\n                    REPLICA_IDENTITY_NOTHING_BYTE => ReplicaIdentity::Nothing,\n                    REPLICA_IDENTITY_FULL_BYTE => ReplicaIdentity::Full,\n                    REPLICA_IDENTITY_INDEX_BYTE => ReplicaIdentity::Index,\n                    byte => {\n                        return Err(ConversionError::Io(io::Error::new(\n                            io::ErrorKind::InvalidInput,\n                            format!(\"unknown replica identity byte `{}`\", byte),\n                        )));\n                    }\n                };\n\n                let num_of_column = buf.read_i16::<BigEndian>()?;\n\n                let mut columns = Vec::with_capacity(num_of_column as usize);\n                for _ in 0..num_of_column {\n                    let flags = buf.read_i8()?;\n                    let name = buf.read_cstr()?;\n                    let o_id = buf.read_u32::<BigEndian>()?;\n                    let type_modifier = buf.read_i32::<BigEndian>()?;\n                    let type_o_id = Type::from_oid(o_id);\n                    let column = Column::new(flags, name, type_o_id, type_modifier);\n\n                    columns.push(column);","sourceCodeStart":309,"sourceCodeEnd":345,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/backend/windmill-trigger-postgres/src/replication_message.rs#L309-L345","documentation":"When parsing a Postgres logical replication Relation message, the replica identity setting is encoded as a single signed byte (d/n/f/i). An unrecognized value raises InvalidInput 'unknown replica identity byte `{}`'. Valid values correspond to DEFAULT, NOTHING, FULL, and INDEX replica identities.","triggerScenarios":"A Relation (table mapping) replication message carries a replica-identity byte outside {d, n, f, i} — due to protocol/version mismatch, stream misalignment from an earlier bad parse, or corruption.","commonSituations":"Streams parsed after a desynchronization; custom/newer Postgres encodings; binary corruption in transport; hand-crafted or proxied replication streams.","solutions":["Log/inspect the offending byte to confirm whether it's a misalignment artifact (often an ASCII letter from shifted data).","Drop and recreate the replication slot to restart the stream aligned.","Upgrade Windmill's replication parser if a new Postgres version introduced a new replica identity mode.","Check for intermediaries (proxies, TLS termination) corrupting the replication connection."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"match parse(msg_bytes) {\n    Err(ConversionError::Io(e)) if e.to_string().contains(\"unknown replica identity byte\") => {\n        tracing::warn!(\"bad replica identity byte in relation message: {e}; resyncing slot\");\n    }\n    Ok(msg) => handle(msg),\n    Err(e) => return Err(e.into()),\n}","preventionTips":["Recreate the slot on stream desync rather than tolerating repeated errors","Upgrade the parser when upgrading Postgres server versions","Verify table REPLICA IDENTITY settings are standard (DEFAULT/FULL/NOTHING/INDEX)","Monitor for repeated byte errors as a sign of transport corruption"],"tags":["postgres","replication","protocol","replica-identity"],"backgroundTag":"unknown-protocol-message-type","analyzedSha":"e474e8803ce2ff5c2df09a58dab51d45f5c922ca","analyzedAt":"2026-09-03T12:38:19.024Z","contentChangedAt":"2026-09-03T12:38:19.024Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}