De-dupe fills and trades from WebSocket. #413
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.
We're seeing quite a few crashes from trying to render fills and trades with duplicate IDs. After discussing with James, it sounds like it is to be expected that duplicate messages are received over the websocket.
The main issue here is that for Processors that return a List of items, we are just appending items blindly. To limit the scope of this PR, we won't change the API signature from List to Map, but rather will use a set to ensure that only a single item with the same ID is returned.
Note:
mutableSetOf()
is backed by aLinkedHashSet
, so ordering is preserved.This PR addresses the two main offenders: Fills and Trades. There are other processors that have the same potential pitfall, but I will tackle these in a follow-up.