[Merged by Bors] - Change malfeasance streaming guarantees #6777
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.
Motivation
The malfeasance stream (v2alpha1 and v2beta1) right now guarantees that every malfeasance event is streamed at most once, this changes the guarantee to at least once.
Description
When streaming proofs we read them from the DB and from the event bus. Without caching we can only guarantee that we stream every proof at most once or at least once. At the moment we have occasional systest fails because the proof we are looking for has not been streamed, due to the event being missed while reading from the DB.
To ensure the systests are not failing because of a missed event, I change the behavior to possibly stream the same proof twice. For the systest this doesn't matter, since we only check if we received the proof at all.
De-duplicating on the server side is costly: requires caching and deduplicating of proofs already sent for every connected client. So instead I think the best way is to put the de-duplication effort on the client.
Test Plan
n/a
TODO