{"record":{"id":"9f763c1963f589d5","repo":"microsoft/garnet","slug":"unsupported-header-type-headertype","errorCode":null,"errorMessage":"Unsupported header type: {headerType}","messagePattern":"Unsupported header type: (.+?)","errorType":"exception","errorClass":"GarnetException","httpStatus":null,"severity":"critical","filePath":"libs/server/AOF/AofProcessor.cs","lineNumber":219,"sourceCode":"                case AofHeaderType.SingleLogTransactionHeader:\n                    sequenceNumber = entryAddress;\n                    participantCount = (*(AofSingleLogTransactionHeader*)ptr).participantCount;\n                    break;\n                case AofHeaderType.ShardedLogTransactionHeader:\n                    var txnHeader = *(AofShardedLogTransactionHeader*)ptr;\n                    sequenceNumber = txnHeader.shardedHeader.sequenceNumber;\n                    participantCount = txnHeader.participantCount;\n                    break;\n                case AofHeaderType.BasicHeader:\n                    sequenceNumber = entryAddress;\n                    participantCount = (short)storeWrapper.serverOptions.AofReplayTaskCount;\n                    break;\n                case AofHeaderType.ShardedHeader:\n                    sequenceNumber = (*(AofShardedHeader*)ptr).sequenceNumber;\n                    participantCount = (short)storeWrapper.serverOptions.AofReplayTaskCount;\n                    break;\n                default:\n                    throw new GarnetException($\"Unsupported header type: {headerType}\");\n            }\n        }\n\n        /// <summary>\n        /// Process AOF record internal\n        /// NOTE: This method is shared between recover replay and replication replay\n        /// </summary>\n        /// <param name=\"virtualSublogIdx\"></param>\n        /// <param name=\"ptr\"></param>\n        /// <param name=\"length\"></param>\n        /// <param name=\"asReplica\"></param>\n        /// <param name=\"isCheckpointStart\"></param>\n        /// <param name=\"logAddressSequenceNumber\"></param>\n        public void ProcessAofRecordInternal(int virtualSublogIdx, byte* ptr, int length, bool asReplica, out bool isCheckpointStart, long logAddressSequenceNumber = 0)\n        {\n            var header = *(AofHeader*)ptr;\n\n            // Reject entries written by a newer Garnet version (higher AOF header version) rather than","sourceCodeStart":201,"sourceCodeEnd":237,"githubUrl":"https://github.com/microsoft/garnet/blob/951b0fc6838721f89d102c2bbe1b914e8d39d700/libs/server/AOF/AofProcessor.cs#L201-L237","documentation":"Thrown by AofProcessor.GetSynchronizedOperationParams when extracting sequence number and participant count from a transaction header whose AofHeaderType is not one of the four known values (BasicHeader, ShardedHeader, SingleLogTransactionHeader, ShardedLogTransactionHeader). The method dispatches on headerType to determine how ordering (sequence number vs. log address) and participant count are read.","triggerScenarios":"During AOF replay or replication replay, GetSynchronizedOperationParams receives a pointer to a header whose type field is outside the valid 0-3 range. This indicates a corrupt entry or a pointer that is not aligned to a real AOF header.","commonSituations":"Corrupted AOF segments; replaying data across an incompatible Garnet version that changed header semantics; a memory-alignment or pointer-advancement bug in the replay loop feeding a wrong offset.","solutions":["Confirm the AOF/checkpoint was created by the same or a compatible Garnet version.","Restore the data store from a known-good checkpoint+AOF backup.","Check for disk corruption on the volume hosting the AOF.","Report as a Garnet bug if the data is known-good and reproducible, including the headerType value."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { GetSynchronizedOperationParams(ptr, entryAddress, out var seq, out var count); }\ncatch (GarnetException ex)\n{\n    logger.LogCritical(ex, \"Unrecognized header type during replay\");\n    throw;\n}","preventionTips":["Run all cluster nodes on the same Garnet version.","Validate data-directory compatibility before pointing a build at existing data.","Keep backups of checkpoint+AOF for recovery."],"tags":["aof","data-corruption","replay","internal"],"backgroundTag":null,"analyzedSha":"951b0fc6838721f89d102c2bbe1b914e8d39d700","analyzedAt":"2026-08-13T19:01:32.939Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}