Skip to content

Conversation

@davecgh
Copy link
Member

@davecgh davecgh commented Jun 19, 2024

davecgh added 3 commits June 19, 2024 16:16
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
@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