dotnet/orleans · error · InvalidOperationException
Azure Table journal row "{entity.RowKey}" does not contain j
Error message
Azure Table journal row "{entity.RowKey}" does not contain journal data. What it means
A journal data row contained none of the expected DataNN chunk properties, so there is no journal payload to replay. ReadChunks sets foundChunk only when at least one chunk is read; if the loop completes with foundChunk still false (AzureTableJournalStorage.cs:935), the row is treated as invalid. Such orphan rows are not produced by the writer and indicate stray or corrupted entities.
Source
Thrown at src/Azure/Orleans.Journaling.AzureStorage/AzureTableJournalStorage.cs:937
_ => throw new InvalidOperationException(
$"Azure Table journal row \"{entity.RowKey}\" property \"{propertyName}\" is not a binary value."),
};
if (chunk.IsEmpty)
{
throw new InvalidOperationException(
$"Azure Table journal row \"{entity.RowKey}\" property \"{propertyName}\" is empty.");
}
foundChunk = true;
buffer.Write(chunk.Span);
length += chunk.Length;
consumer.Read(new JournalBufferReader(buffer.Reader, isCompleted: false), metadata);
}
if (!foundChunk)
{
throw new InvalidOperationException($"Azure Table journal row \"{entity.RowKey}\" does not contain journal data.");
}
return length;
}
private TableEntity CreateHeaderCountsPatch(HeaderProviderState providerState)
=> new(_partitionKey, HeaderRowKey)
{
[JournalIdPropertyName] = _journalId.Value,
[RowCountPropertyName] = providerState.RowCount,
[LengthPropertyName] = providerState.Length,
[AppendRowCountPropertyName] = providerState.AppendRowCount,
[AppendLengthPropertyName] = providerState.AppendLength,
};
private TableEntity CreateHeaderFlipPatch(string generation, long rowCount, long length)
=> new(_partitionKey, HeaderRowKey)
{View on GitHub (pinned to fca799fa70)
Solutions
- Delete the orphan row (RowKey in the message) from the partition.
- Verify no code path creates rows in the journal table without populating at least Data00.
- Run a Replace on the journal to republish a clean generation and let old-row cleanup remove strays.
Defensive patterns
Strategy: try-catch
Try / catch
try { await journalStorage.ReadAsync(...); }
catch (InvalidOperationException ex) when (ex.Message.Contains("does not contain journal data"))
{
// Treat row as orphan; delete and rebuild.
} Prevention
- Do not create rows in the journal table without Data00.
- Clean up aborted-write leftovers.
- Use the provider's cleanup path instead of manual deletes.
When it happens
Trigger: ReadChunks iterates all of ChunkPropertyNames and entity.TryGetValue returns false for every one, leaving foundChunk false, then throws at line 937.
Common situations: A placeholder/empty row was inserted by an external process; a previous failed write left a row skeleton with only header-like fields; the row was partially cleaned up leaving no data keys.
Related errors
- Azure Table journal row "{entity.RowKey}" contains a non-con
- Azure Table journal row "{entity.RowKey}" property "{propert
- Azure Table journal row "{entity.RowKey}" property "{propert
- Azure Table journal header is missing its generation propert
- Azure Table journal header count or length properties are in
AI-assisted analysis of dotnet/orleans@fca799fa70 (2026-08-13).
Data as JSON: /api/errors/ee693c07dc2b874a.
Report an issue: GitHub.