mempool: add txs from Update to cache

We should add txs that come in from mempool.Update to the mempool's
cache, so that they never hit a potentially expensive check tx.

Originally posted by @ValarDragon in #2846
https://github.com/tendermint/tendermint/issues/2846#issuecomment-439216656

Refs #2855
This commit is contained in:
Anton Kaliaev
2018-11-19 16:22:17 +04:00
parent e9efbfe267
commit 2d525bf2b8
3 changed files with 17 additions and 0 deletions

View File

@@ -26,5 +26,6 @@ program](https://hackerone.com/tendermint).
### IMPROVEMENTS:
- [config] \#2877 add blocktime_iota to the config.toml (@ackratos)
- [mempool] \#2855 add txs from Update to cache
### BUG FIXES:

View File

@@ -545,6 +545,11 @@ func (mem *Mempool) Update(
mem.postCheck = postCheck
}
// Add committed transactions to cache (if missing).
for _, tx := range txs {
_ = mem.cache.Push(tx)
}
// Remove committed transactions.
txsLeft := mem.removeTxs(txs)

View File

@@ -163,6 +163,17 @@ func TestMempoolFilters(t *testing.T) {
}
}
func TestMempoolUpdateAddsTxsToCache(t *testing.T) {
app := kvstore.NewKVStoreApplication()
cc := proxy.NewLocalClientCreator(app)
mempool := newMempoolWithApp(cc)
mempool.Update(1, []types.Tx{[]byte{0x01}}, nil, nil)
err := mempool.CheckTx([]byte{0x01}, nil)
if assert.Error(t, err) {
assert.Equal(t, ErrTxInCache, err)
}
}
func TestTxsAvailable(t *testing.T) {
app := kvstore.NewKVStoreApplication()
cc := proxy.NewLocalClientCreator(app)