{"record":{"id":"601cde6f856da548","repo":"aeron-io/aeron","slug":"expected-schemaid-messageheaderdecoder-schema-id-actual-601cde","errorCode":null,"errorMessage":"expected schemaId=<MessageHeaderDecoder.SCHEMA_ID>, actual=<schemaId>","messagePattern":"expected schemaId=<MessageHeaderDecoder\\.SCHEMA_ID>, actual=<schemaId>","errorType":"exception","errorClass":"ClusterException","httpStatus":null,"severity":"error","filePath":"aeron-cluster/src/main/java/io/aeron/cluster/service/BoundedLogAdapter.java","lineNumber":143,"sourceCode":"    Image image()\n    {\n        return image;\n    }\n\n    int poll(final long limit)\n    {\n        return image.boundedControlledPoll(this, limit, fragmentLimit);\n    }\n\n    @SuppressWarnings(\"MethodLength\")\n    private Action onMessage(final DirectBuffer buffer, final int offset, final int length, final Header header)\n    {\n        messageHeaderDecoder.wrap(buffer, offset);\n\n        final int schemaId = messageHeaderDecoder.schemaId();\n        if (schemaId != MessageHeaderDecoder.SCHEMA_ID)\n        {\n            throw new ClusterException(\"expected schemaId=\" + MessageHeaderDecoder.SCHEMA_ID + \", actual=\" + schemaId);\n        }\n\n        final int templateId = messageHeaderDecoder.templateId();\n        if (templateId == SessionMessageHeaderDecoder.TEMPLATE_ID)\n        {\n            sessionHeaderDecoder.wrap(\n                buffer,\n                offset + MessageHeaderDecoder.ENCODED_LENGTH,\n                messageHeaderDecoder.blockLength(),\n                messageHeaderDecoder.version());\n\n            agent.onSessionMessage(\n                header.position(),\n                sessionHeaderDecoder.clusterSessionId(),\n                sessionHeaderDecoder.timestamp(),\n                buffer,\n                offset + AeronCluster.SESSION_HEADER_LENGTH,\n                length - AeronCluster.SESSION_HEADER_LENGTH,","sourceCodeStart":125,"sourceCodeEnd":161,"githubUrl":"https://github.com/aeron-io/aeron/blob/6d60124e15e35c11b49ba2e3c2c2858a09a18803/aeron-cluster/src/main/java/io/aeron/cluster/service/BoundedLogAdapter.java#L125-L161","documentation":"BoundedLogAdapter.onMessage wraps the SBE MessageHeader of a replay/log fragment and checks schemaId against MessageHeaderDecoder.SCHEMA_ID; a mismatch means the fragment is not from the cluster's log schema, so ClusterException is thrown (from onFragment). Decoding with mismatched codecs would corrupt state.","triggerScenarios":"Recording/replay adapters attached to an image whose stream uses a different SBE schema; cluster components built with mismatched aeron-cluster versions sharing a log/archive channel.","commonSituations":"Mixed Aeron versions between nodes in a cluster; custom services publishing onto the log channel; replaying a log from an incompatible version.","solutions":["Ensure all cluster nodes and services use the same aeron-cluster version","Verify the adapter subscription targets the cluster log stream only","Regenerate codecs from the correct schema version if customized","Confirm replay logs come from a compatible Aeron release"],"exampleFix":"// before\n// node on aeron-cluster 1.40 joining cluster of 1.44 nodes\n// after\n// upgrade node to 1.44 so log schemaIds match","handlingStrategy":"try-catch","validationCode":"MessageHeaderDecoder h = new MessageHeaderDecoder().wrap(buffer, offset);\nif (h.schemaId() != MessageHeaderDecoder.SCHEMA_ID) {\n    throw new IllegalStateException(\"incompatible log schema: \" + h.schemaId());\n}","typeGuard":null,"tryCatchPattern":"try {\n    adapter.onFragment(buffer, offset, length, header);\n} catch (ClusterException ex) {\n    // abort replay; check version skew\n}","preventionTips":["Run homogeneous aeron-cluster versions across all nodes","Never share log/archive channels with other schemas","Verify replayed logs match the running release"],"tags":["aeron","sbe","schema","replay-log"],"backgroundTag":"schema-validation-failed","analyzedSha":"6d60124e15e35c11b49ba2e3c2c2858a09a18803","analyzedAt":"2026-09-12T11:17:07.683Z","contentChangedAt":"2026-09-12T11:17:07.683Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}