fix(server): Fix bug in flushing in snapshot #654
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.
The bug was here:
We might block on the channel when pushing. If the snapshot continues serializing, it will write to the default serializer. And once the channel unblocked, the clear will remove everything - not only the part it has written, but also the new one.
The solution would be to make Clear consume only a fixed part - but instead I decided to revert some changes I made previously as well because of the changes in async streamer.
I initially abstracted flushing in snapshot to pushing just bytes taken from the rdb serializer. But since in the async streamer we're gonna make the streamer base to act as a sink as well, we can just use
FlushToSink
for everyhing, so I removedFlush
and make it justPrepareFlush
.