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

core/txpool: improve Add() logic, handle edge case #2754

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from

Conversation

emailtovamos
Copy link
Contributor

@emailtovamos emailtovamos commented Nov 13, 2024

Description

This PR simplifies the logic by doing the checks regarding availability of slots in the Add() function of the OverflowPool rather than before where this logic was outside.

This also addressed an edge case where if the OverflowPool is full, we simply take out one transaction and put the new one in. But this might result in the pool size exceeding its limit because the new transaction might have more slots than the older transaction.

Also fix the bug: we were comparing number of transactions with number of slots here:
if uint64(len(tp.txHeap)) >= tp.maxSize
Slots should be compared with slots.

Added TestTxOverflowPoolSlotCalculation() to capture the bug in the previous code.

The current change ensures we never exceed the set total size of the overflow pool.

@emailtovamos emailtovamos changed the title core: handle edge case of tx size mismatch core/txpool: improve Add() logic, handle edge case Nov 14, 2024
@emailtovamos emailtovamos marked this pull request as ready for review November 14, 2024 07:42
txSlots := numSlots(tx)

// If the transaction is too big to ever fit (and the pool isn't empty right now), reject it
if (uint64(txSlots) > tp.maxSize) || (uint64(txSlots) == tp.maxSize && tp.totalSize != 0) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why need this extra check?

(uint64(txSlots) == tp.maxSize && tp.totalSize != 0)

initialTotalSize := pool.totalSize
pool.Add(tx3)

// The total size should not change since tx3 is already in the pool
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

According to the logic, tx3 failed to be added in to overflowpool, right?

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