tsdb wal always includes labels with chunks for replay consistency #9444
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
After debugging a WAL replay corruption, we found a situation where we were trying to replay chunks written but the labels wal record was missing. I haven't found out how this is possible, so in the meantime this adds a new record format which writes the labels alongside the chunks in the same record. This will result in some data duplication but should be more reliable since chunks can't be replayed into missing series. Given that chunk flushes are orders of magnitude less common than entry pushes, this shouldn't introduce a performance bottleneck in any meaningful way.
I've added a followup commit to be reverted later which continues to write the old multi-record format while being capable of reading both new and old formats. This means we can roll out the readonly version with this commit as a rollback target before we revert the commit and begin writing the new format.