Skip to content

Commit

Permalink
fix: revise to call Begin/EndRecheck even though mem.Size() is 0 (#162
Browse files Browse the repository at this point in the history
)

* fix: revise to call Begin/EndRecheck even though `mem.Size()` is 0

* chore: call `Begin/EndRecheck` only when `config.Recheck` is `true`
  • Loading branch information
jinsan-line authored Jan 13, 2021
1 parent 2d720ad commit 8316c03
Showing 1 changed file with 33 additions and 22 deletions.
55 changes: 33 additions & 22 deletions mempool/clist_mempool.go
Original file line number Diff line number Diff line change
Expand Up @@ -577,7 +577,7 @@ func (mem *CListMempool) Update(
block *types.Block,
deliverTxResponses []*abci.ResponseDeliverTx,
preCheck PreCheckFunc,
) error {
) (err error) {
// Set height
mem.height = block.Height
mem.notifiedTxsAvailable = false
Expand Down Expand Up @@ -610,38 +610,49 @@ func (mem *CListMempool) Update(
}
}

// Either recheck non-committed txs to see if they became invalid
// or just notify there're some txs left.
recheckStartTime := time.Now().UnixNano()
if mem.Size() > 0 {
if mem.config.Recheck {
mem.logger.Info("Recheck txs", "numtxs", mem.Size(), "height", block.Height)
mem.proxyAppConn.BeginRecheckTxSync(abci.RequestBeginRecheckTx{
Header: types.TM2PB.Header(&block.Header),
})
mem.recheckTxs()
mem.proxyAppConn.EndRecheckTxSync(abci.RequestEndRecheckTx{Height: block.Height})
// At this point, mem.txs are being rechecked.
// mem.recheckCursor re-scans mem.txs and possibly removes some txs.
// Before mem.Reap(), we should wait for mem.recheckCursor to be nil.
} else {
if mem.config.Recheck {
// recheck non-committed txs to see if they became invalid
recheckStartTime := time.Now().UnixNano()

_, err = mem.proxyAppConn.BeginRecheckTxSync(abci.RequestBeginRecheckTx{
Header: types.TM2PB.Header(&block.Header),
})
if err != nil {
mem.logger.Error("Error in proxyAppConn.BeginRecheckTxSync", "err", err)
}

mem.logger.Info("Recheck txs", "numtxs", mem.Size(), "height", block.Height)
mem.recheckTxs()

_, err = mem.proxyAppConn.EndRecheckTxSync(abci.RequestEndRecheckTx{Height: block.Height})
if err != nil {
mem.logger.Error("Error in proxyAppConn.EndRecheckTxSync", "err", err)
}

recheckEndTime := time.Now().UnixNano()

recheckTimeMs := float64(recheckEndTime-recheckStartTime) / 1000000
mem.metrics.RecheckTime.Set(recheckTimeMs)

// At this point, mem.txs are being rechecked.
// mem.recheckCursor re-scans mem.txs and possibly removes some txs.
// Before mem.Reap(), we should wait for mem.recheckCursor to be nil.
} else {
// just notify there're some txs left.
if mem.Size() > 0 {
mem.notifyTxsAvailable()
}
}
recheckEndTime := time.Now().UnixNano()

recheckTimeMs := float64(recheckEndTime-recheckStartTime) / 1000000
mem.metrics.RecheckTime.Set(recheckTimeMs)

// Update metrics
mem.metrics.Size.Set(float64(mem.Size()))

return nil
return err
}

func (mem *CListMempool) recheckTxs() {
if mem.Size() == 0 {
panic("recheckTxs is called, but the mempool is empty")
return
}

mem.recheckCursor = mem.txs.Front()
Expand Down

0 comments on commit 8316c03

Please sign in to comment.