core/txpool: remove a redundant heap.Init #28910 (#1706)

This commit is contained in:
Daniel Liu 2025-12-07 18:17:20 +08:00 committed by GitHub
parent 35c905a131
commit 93d453c4c4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 33 additions and 6 deletions

View file

@ -18,6 +18,7 @@ package txpool
import (
"container/heap"
"slices"
"sort"
"github.com/XinFinOrg/XDPoSChain/core/types"
@ -108,13 +109,14 @@ func (m *lendingtxSortedMap) Cap(threshold int) types.LendingTransactions {
// Otherwise gather and drop the highest nonce'd transactions
var drops types.LendingTransactions
sort.Sort(*m.index)
slices.Sort(*m.index)
for size := len(m.items); size > threshold; size-- {
drops = append(drops, m.items[(*m.index)[size-1]])
delete(m.items, (*m.index)[size-1])
}
*m.index = (*m.index)[:threshold]
heap.Init(m.index)
// The sorted m.index slice is still a valid heap, so there is no need to
// reheap after deleting tail items.
// If we had a cache, shift the back
if m.cache != nil {

View file

@ -20,6 +20,7 @@ import (
"container/heap"
"math"
"math/big"
"slices"
"sort"
"sync"
"sync/atomic"
@ -159,13 +160,14 @@ func (m *sortedMap) Cap(threshold int) types.Transactions {
// Otherwise gather and drop the highest nonce'd transactions
var drops types.Transactions
sort.Sort(*m.index)
slices.Sort(*m.index)
for size := len(m.items); size > threshold; size-- {
drops = append(drops, m.items[(*m.index)[size-1]])
delete(m.items, (*m.index)[size-1])
}
*m.index = (*m.index)[:threshold]
heap.Init(m.index)
// The sorted m.index slice is still a valid heap, so there is no need to
// reheap after deleting tail items.
// If we had a cache, shift the back
m.cacheMu.Lock()

View file

@ -68,3 +68,24 @@ func BenchmarkListAdd(t *testing.B) {
list.Filter(priceLimit, DefaultConfig.PriceBump, nil, nil)
}
}
func BenchmarkListCapOneTx(b *testing.B) {
// Generate a list of transactions to insert
key, _ := crypto.GenerateKey()
txs := make(types.Transactions, 32)
for i := 0; i < len(txs); i++ {
txs[i] = transaction(uint64(i), 0, key)
}
for b.Loop() {
list := newList(true)
// Insert the transactions in a random order
for _, v := range rand.Perm(len(txs)) {
list.Add(txs[v], DefaultConfig.PriceBump)
}
b.StartTimer()
list.Cap(list.Len() - 1)
b.StopTimer()
}
}

View file

@ -18,6 +18,7 @@ package txpool
import (
"container/heap"
"slices"
"sort"
"github.com/XinFinOrg/XDPoSChain/core/types"
@ -108,13 +109,14 @@ func (m *ordertxSortedMap) Cap(threshold int) types.OrderTransactions {
// Otherwise gather and drop the highest nonce'd transactions
var drops types.OrderTransactions
sort.Sort(*m.index)
slices.Sort(*m.index)
for size := len(m.items); size > threshold; size-- {
drops = append(drops, m.items[(*m.index)[size-1]])
delete(m.items, (*m.index)[size-1])
}
*m.index = (*m.index)[:threshold]
heap.Init(m.index)
// The sorted m.index slice is still a valid heap, so there is no need to
// reheap after deleting tail items.
// If we had a cache, shift the back
if m.cache != nil {