Produce records with consistent timestamps #1455
Merged
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.
It is possible for the same record to have a different timestamp depending on where it appears in a produceSet, as the test case in this commit illustrates.
The problem is that the produceSet's FirstTimestamp and the record's TimestampDelta are each calculated with nanosecond precision, and then truncated to millisecond precision during encoding. This leads to accumulated rounding error when the original timestamp is later reconstructed.
Instead, truncate all timestamps to millisecond precision before calculating the FirstTimestamp and TimestampDelta, so that if the same record is produced multiple times, it will always have the same timestamp.
It might be better to call encode on each record instead of reproducing the logic of how to encode a timestamp in the test, but I can't see an easy way to get the result of encoding a record. I'm open to feedback on how to improve the test.