Reap takes maxTxs

This commit is contained in:
Jae Kwon
2016-03-06 15:08:32 -08:00
parent 03115cbf93
commit 2c1504f93c
4 changed files with 13 additions and 19 deletions

View File

@ -877,19 +877,8 @@ func (cs *ConsensusState) createProposalBlock() (block *types.Block, blockParts
return
}
maxBlockSize := config.GetInt("block_size")
// Mempool validated transactions
// if block_size < 0, no txs will be included
var txs []types.Tx
if maxBlockSize >= 0 {
txs = cs.mempool.Reap()
}
// Cap the number of txs in a block
if maxBlockSize > 0 && maxBlockSize < len(txs) {
txs = txs[:maxBlockSize]
}
txs := cs.mempool.Reap(config.GetInt("block_size"))
block = &types.Block{
Header: &types.Header{

View File

@ -183,7 +183,8 @@ func (mem *Mempool) resCbRecheck(req *tmsp.Request, res *tmsp.Response) {
}
// Get the valid transactions remaining
func (mem *Mempool) Reap() []types.Tx {
// If maxTxs is 0, there is no cap.
func (mem *Mempool) Reap(maxTxs int) []types.Tx {
mem.proxyMtx.Lock()
defer mem.proxyMtx.Unlock()
@ -192,13 +193,17 @@ func (mem *Mempool) Reap() []types.Tx {
time.Sleep(time.Millisecond * 10)
}
txs := mem.collectTxs()
txs := mem.collectTxs(maxTxs)
return txs
}
func (mem *Mempool) collectTxs() []types.Tx {
txs := make([]types.Tx, 0, mem.txs.Len())
for e := mem.txs.Front(); e != nil; e = e.Next() {
// maxTxs: 0 means uncapped
func (mem *Mempool) collectTxs(maxTxs int) []types.Tx {
if maxTxs == 0 {
maxTxs = mem.txs.Len()
}
txs := make([]types.Tx, 0, MinInt(mem.txs.Len(), maxTxs))
for e := mem.txs.Front(); e != nil && len(txs) < maxTxs; e = e.Next() {
memTx := e.Value.(*mempoolTx)
txs = append(txs, memTx.tx)
}

View File

@ -49,7 +49,7 @@ func TestSerialReap(t *testing.T) {
}
reapCheck := func(exp int) {
txs := mempool.Reap()
txs := mempool.Reap(0)
if len(txs) != exp {
t.Fatalf("Expected to reap %v txs but got %v", exp, len(txs))
}

View File

@ -36,6 +36,6 @@ func BroadcastTxSync(tx types.Tx) (*ctypes.ResultBroadcastTx, error) {
}
func UnconfirmedTxs() (*ctypes.ResultUnconfirmedTxs, error) {
txs := mempoolReactor.Mempool.Reap()
txs := mempoolReactor.Mempool.Reap(0)
return &ctypes.ResultUnconfirmedTxs{len(txs), txs}, nil
}