{"record":{"id":"eceb9651cd4b6db2","repo":"dotnet/orleans","slug":"azure-table-journal-row-entity-rowkey-property","errorCode":null,"errorMessage":"Azure Table journal row \"{entity.RowKey}\" property \"{propertyName}\" is not a binary value.","messagePattern":"Azure Table journal row \"(.+?)\" property \"(.+?)\" is not a binary value\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Azure/Orleans.Journaling.AzureStorage/AzureTableJournalStorage.cs","lineNumber":919,"sourceCode":"        foreach (var propertyName in ChunkPropertyNames)\n        {\n            if (!entity.TryGetValue(propertyName, out var value))\n            {\n                foundGap = true;\n                continue;\n            }\n\n            if (foundGap)\n            {\n                throw new InvalidOperationException(\n                    $\"Azure Table journal row \\\"{entity.RowKey}\\\" contains a non-contiguous binary property \\\"{propertyName}\\\".\");\n            }\n\n            ReadOnlyMemory<byte> chunk = value switch\n            {\n                byte[] bytes => bytes,\n                BinaryData binaryData => binaryData.ToMemory(),\n                _ => throw new InvalidOperationException(\n                    $\"Azure Table journal row \\\"{entity.RowKey}\\\" property \\\"{propertyName}\\\" is not a binary value.\"),\n            };\n\n            if (chunk.IsEmpty)\n            {\n                throw new InvalidOperationException(\n                    $\"Azure Table journal row \\\"{entity.RowKey}\\\" property \\\"{propertyName}\\\" is empty.\");\n            }\n\n            foundChunk = true;\n            buffer.Write(chunk.Span);\n            length += chunk.Length;\n            consumer.Read(new JournalBufferReader(buffer.Reader, isCompleted: false), metadata);\n        }\n\n        if (!foundChunk)\n        {\n            throw new InvalidOperationException($\"Azure Table journal row \\\"{entity.RowKey}\\\" does not contain journal data.\");","sourceCodeStart":901,"sourceCodeEnd":937,"githubUrl":"https://github.com/dotnet/orleans/blob/fca799fa70ecb6ad975224271703ca43221f58de/src/Azure/Orleans.Journaling.AzureStorage/AzureTableJournalStorage.cs#L901-L937","documentation":"A DataNN chunk property on a journal row held a value that is neither byte[] nor BinaryData. ReadChunks (AzureTableJournalStorage.cs:915) only accepts binary-typed properties because journal data is opaque bytes; any other CLR type means the schema contract was violated. The provider always writes byte[], so a non-binary value indicates tampering or an incompatible writer.","triggerScenarios":"The switch expression in ReadChunks falls to its default arm because entity[DataNN] resolved to a string, int, DateTime, or other TableEntity supported type instead of binary data.","commonSituations":"An external tool or a different application stored a typed scalar into a DataNN slot; a serialization change elsewhere reused the same property names; manual row edits via Storage Explorer inserted a string value.","solutions":["Locate the offending row (RowKey is in the message) and delete or replace it so the journal can republish clean binary chunks.","Audit all writers to the table to confirm none write non-binary values into DataNN properties.","Use a dedicated table per writer schema to avoid name collisions with other code."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { await journalStorage.ReadAsync(...); }\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"is not a binary value\"))\n{\n    // Quarantine row and Replace the journal generation.\n}","preventionTips":["Keep the journal table exclusive to this provider.","Audit external writers for type correctness on DataNN columns.","Run schema-validation queries periodically."],"tags":["azure-table","data-corruption","journal","type-mismatch"],"backgroundTag":null,"analyzedSha":"fca799fa70ecb6ad975224271703ca43221f58de","analyzedAt":"2026-08-13T19:55:57.938Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}