Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[release-v2.0] multi: Main module backports. #3392

Merged
merged 3 commits into from
Jun 19, 2024

Conversation

davecgh
Copy link
Member

@davecgh davecgh commented Jun 19, 2024

This adds a cache to house transactions that have recently been
advertised to other peers.  It makes use of the new container/lru module
to handle automatic expiration of entries and maximum entry limiting.

The rationale for this change is that it is considered misbehavior to
advertise a transaction and then claim it is not found when the
corresponding request arrives.  Maintaining a separate cache of
advertised transactions for a short period of time after they were
advertised significantly increases the probability they are available to
serve when a request for the advertisement arrives independent of the
current status of the unconfirmed transaction mempool.
Now that recently removed mix messages are independently cached for a
short period, this reverts the change that only removed spent pair
requests from previous block transactions to make it track the current
best tip again.

For reference, the change was originally made to avoid immediately
removing mixpool messages that are still propagating the network when a
block was quickly mined which includes transactions created from those
very same mix messages.

However, as noted when the change was made, while it was a quick way to
address the stated scenario, it doesn't deal with large reorgs nicely.

The new method is much more robust and works under all scenarios, so it
is preferable for the mixpool to track the current tip.
The current logic attempts to maintain at least one mix capable outbound
peer to ensure better connectivity among the mix capable peers.  It
works as intended, however, only having a single mix capable peer means
there will be delays if that peer goes offline until a replacement is
found.  A possible consequence is that any mix clients might potentially
get interrupted if that peer goes offline and a replacement isn't found
quickly enough.

Attempting to maintain a minimum of three mix capable outbound peers
will significantly reduce the likelihood of having periods without any
mix capable peers.

This updates the logic accordingly.
@davecgh davecgh added this to the 2.0.3 milestone Jun 19, 2024
@davecgh davecgh merged commit 75eb699 into decred:release-v2.0 Jun 19, 2024
2 checks passed
@davecgh davecgh deleted the rel20_main_backports branch June 19, 2024 21:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants